var validateForm  = 'validate'; //CLASS NAME FOR FORM THAT REQUIRES VALIDATION
var errorClass    = 'error'; //CLASS NAME FOR LABELS TO SHOW ERRORS
var formMessage   = 'Please complete all fields'; //TEXT TO APPEAR WHEN FORM FAILS VALIDATION

$(document).ready(function() {
	// initiate news ticker
	if ($('#news').length>0) {
		promos.init();
	}
	
	// login form selector
	if ($('#username').length>0) {
		$('#username').click(function () {
			if ($('#username').val()=='Username') { $('#username').val(''); }				   
		});
		$('#username').blur(function () {
			if ($('#username').val()=='') { $('#username').val('Username'); }				   
		});		
		$('#password').click(function () {
			if ($('#password').val()=='password') { $('#password').val(''); }				   
		});
		$('#password').blur(function () {
			if ($('#password').val()=='') { $('#password').val('password'); }				   
		});			
	}
	
	// add captionator into form fields
	var field_captions = Array();
	$.each($('input.formcaption'), function() { 
		$(this).click(function() {
			id = $(this).attr('id');
			if (!field_captions[id]) { field_captions[id] = $(this).val(); }	
			if ($(this).val()==field_captions[id]) { $(this).val(''); }
		});
		$(this).blur(function() {
			if ($(this).val()=='') { $(this).val(field_captions[id]); }		   
		});		
	});	
});

var promos = {
	interval: 3000,	// ms
	fadeTime: 500, //ms
	scrolling: true,
	current: 1,
	total: 0,
	t:0,
	
	init: function() {		
		promos.total = $('#news ul li').length;
		promos.t = setTimeout('promos.next();', promos.interval);
	},
	
	jumpto:function(i) {
		clearTimeout(promos.t);
		$('#news ul li:nth-child('+i+')').css('display', 'block');
		$('#news ul li:nth-child('+promos.current+')').slideUp(promos.fadeTime, function() {
				$('#news ul li:nth-child('+promos.current+')').css('display', 'none');
				promos.current = i;
				if (promos.scrolling) { promos.t = setTimeout('promos.next();', promos.interval); }
			});
		
	},
	
	next:function() {
		n = promos.current+1;
		if (n>promos.total) { n=1; }
		
		promos.jumpto(n);
	}
}

// left nav show/hide
function show_archive(mode) {
	if (mode=='current') {
		$('#archived_resources').slideUp();
		$('#current_resources').slideDown();
	}
	
	if (mode=='archive') {
		$('#archived_resources').slideDown();
		$('#current_resources').slideUp();	
	}
}


//ALLOWS EXTERNAL LINKS TO BE OPENED IN A NEW WINDOW WITHOUT THE USE OF TARGET ATTRIBUTE
//LOOPS THROUGH LINKS ON PAGE FINDS EXTERNAL LINKS AND ADDS TARGET//
function externalLinks() {
	//SETS DOMAIN OF SITE
	var domainName=document.domain;
	
	//FIND ALL LINKS ON THE CURRENT PAGE
	var externalLinks=document.getElementsByTagName("a");
	//LOOP THROUGH LINKS ARRAY
	for(var i=0; i<externalLinks.length; i++) {
		//GETS CONTENT OF 'HREF' ATTRIBUTE ON CLICKED LINK
		var attribute=externalLinks[i].getAttribute("href");
		
		//GET VALUE http IN 'HREF' **FOR MOZILLA&&
		var contains_http=attribute.indexOf("http");
		
		//GET VALUE domainName **FOR IE**
		var contains_domain=attribute.indexOf(domainName);
		
		//DOES CONTAIN AN 'http' OR DOES NOT CONTAIN domainName
		if(contains_http>-1 && contains_domain==-1) {
			//SET NEW ATTRIBUTE ON LINK
			externalLinks[i].setAttribute("target", "_blank");
		}
		
	}
	
}

//DOES MENU DROP/UP STYLES
function openthis(id){
	if(id == 'current_resources'){
		//current_resources
		if(document.getElementById('resource_menu_toggle').value == 'archived_resources'){
			document.getElementById('resource_menu_toggle').value = 'current_resources';
			new Effect.SlideUp(id);
			new Effect.SlideDown('archived_resources');
		}
	}
	else if(id == 'archived_resources'){
		//current_resources
		if(document.getElementById('resource_menu_toggle').value == 'current_resources'){
			document.getElementById('resource_menu_toggle').value = 'archived_resources';
		new Effect.SlideUp(id);
		new Effect.SlideDown('current_resources');
		}
	}
	
	//window.blur(); // take focus off button so it doesn't look rubbish
	
}

function switchonmenu(id){
	document.getElementById(id).style.display = "block";
}

function gotopage(id){
	window.location = document.getElementById(id).options[document.getElementById(id).selectedIndex].value;
}

function gotopagesearch(id, wheretogo, season){
	var selectednumber = document.getElementById(id).options[document.getElementById(id).selectedIndex].value;
	//alert(wheretogo+selectednumber);
	window.location = wheretogo+'0/'+selectednumber+'/'+season;
}

function gotothispagenow(pathtofile, listofpages, numberperpage){

	var pagerequests=listofpages.split("|");

	var requestedpage = document.getElementById("pagenumbertogoto").value;
	
	requestedpage = requestedpage-1;

	if(requestedpage < pagerequests.length && requestedpage >= 0){
		window.location = pathtofile+pagerequests[requestedpage]+'/'+numberperpage+'/-';
	}else{
		window.location = pathtofile+pagerequests[pagerequests.length-1]+'/'+numberperpage+'/-';
	}

}

function gotothispagenow2(pathtofile, listofpages, numberperpage){

	var pagerequests=listofpages.split("|");

	var requestedpage = document.getElementById("pagenumbertogoto2").value;
	
	requestedpage = requestedpage-1;

	if(requestedpage < pagerequests.length && requestedpage >= 0){
		window.location = pathtofile+pagerequests[requestedpage]+'/'+numberperpage+'/-';
	}else{
		window.location = pathtofile+pagerequests[pagerequests.length-1]+'/'+numberperpage+'/-';
	}

}

//VALIDATE FORMS
function validateForm(formName) {
	var emptyFields=0;

	//CHECK FORM FOR REQUIRED INPUTS
	var inputs = document.forms[formName].getElementsByTagName("input");
	var texareas = document.forms[formName].getElementsByTagName("textarea");
	var selects = document.forms[formName].getElementsByTagName("select");
	
	//LOOP THROUGH INPUTS
	for(var i=0; i<inputs.length; i++) {
			//FIND THE CLASS NAME
			if(inputs[i].className=="mand") {
				//IS THE MANDATORY FIELD EMPTY
				if((inputs[i].value=="")||(inputs[i].value=='0.00')) {
					//ADD EMPTY FIELD NAME TO VAR
					emptyFields++;
					inputs[i].style.border="1px solid #cb0000";
					inputs[i].style.backgroundColor="#f5d4d4";
				}
			}
	}
	
	//LOOP THROUGH TEXTAREAS
	for(var i=0; i<texareas.length; i++) {
			//FIND THE CLASS NAME
			if(texareas[i].className=="mand") {
				//IS THE MANDATORY FIELD EMPTY
				if(texareas[i].value=="") {
					//ADD EMPTY FIELD NAME TO VAR
					emptyFields++;
					texareas[i].style.border="1px solid #cb0000";
					texareas[i].style.backgroundColor="#f5d4d4";
				}
			}
	}
	
	//LOOP THROUGH SELECTS
	for(var i=0; i<selects.length; i++) {
			//FIND THE CLASS NAME
			if(selects[i].className=="mand") {
				//IS THE MANDATORY FIELD EMPTY
				if(selects[i].value=="0" || selects[i].value=="") {
					//ADD EMPTY FIELD NAME TO VAR
					emptyFields++;
					selects[i].style.border="1px solid #cb0000";
					selects[i].style.backgroundColor="#f5d4d4";
				}
			}
	}
	
	errors="";
	
	
	//ALERT EMPTY FIELDS
	if(emptyFields || errors) {
		alert("please ensure all mandatory fields are filled in\n\n"+errors);
		return false;
	}else{
		return true;
	}
	
}




//HIGHLIGHT LABEL IF ELEMENT IS BLANK OR NORMALISE IF COMPLETED
function highlightLabel(form, id, newClass) {	
	if(id != "submit" && id != "other"){
	
		document.getElementById(id).style.border="1px solid #cb0000";
		document.getElementById(id).style.backgroundColor="#f5d4d4";
	
	}
	
}


//VALIDATES INPUT FIELDS
function checkInputs(form, fail) {
	
	var inputs   = form.getElementsByTagName("input"); //GET INPUTS
	
	
	for(var x=0; x<inputs.length; x++) {
		var thisFail = 0;
		var elementId   = inputs[x].getAttribute("id"); //DEFINE ELEMENT ID
		var elementType = inputs[x].getAttribute("type"); //DEFINE ELEMENT TYPE
		var elementName = inputs[x].getAttribute("name"); //DEFINE NAME ELEMENT
		
		if(inputs[x].className.indexOf('mand') >-1) {
			switch(elementType) { //CHECK THE TYPE OF INPUT
			
				case 'text':
				if(inputs[x].value == '') {
					
					thisFail++; //INCREMENT FAIL VALS
					fail++;
					
				}
				break;
				case 'checkbox':
				if(inputs[x].checked == false) {
				
					thisFail++; //INCREMENT FAIL VALS
					fail++;
				
				}
				break;
				default:
			
			}
			
		}
		
		if(thisFail > 0) { 
		
			highlightLabel(form, elementId, 'error'); //ERROR
		
		}else{
		
			highlightLabel(form, elementId, ''); //CLEAR
			
		}
		
	}
	
	//SEND FAIL BACK TO FUNCTION
	return fail;
	
}

function validateEmail(varname) {
	
	var valid = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/; //PATTERN TO MATCH
	var emailAddress = document.getElementById(varname);
	
	if(valid.test(emailAddress.value)) return true; //TEST FIELD
	
	return false;
	
}

function lookForEmail(form) {

	var emailVars = Array('email', 'email_address', 'Email', 'Email_Address', 'emailaddress', 'EmailAddress'); //POSSIBLE NAMES FOR EMAIL FIELD
			
	for(var n=0; n<emailVars.length; n++) { //LOOP THROUGH ARRAY
		
		if(document.getElementById(emailVars[n]) && document.getElementById(emailVars[n]).value!='') { //CHECK FOR FIELD AND NEED TO VALIDATE
			
			if(document.getElementById(emailVars[n]).getAttribute('type')!='checkbox') { //MAKE SURE ITS NOT A CHECKBOX
			
				var isEmail = validateEmail(emailVars[n]); //VALIDATE EMAIL FIELD
				
				if(isEmail == false) {
					
					highlightLabel(form, emailVars[n], 'error'); //ERROR
					alert('Please enter a valid email address');
					
					return false;
					
				}else{
				
					highlightLabel(form, emailVars[n], ''); //CLEAR
				
				}
			
			}
			
		}
		
	}
	
	return true;

}

//VALIDATES TEXTAREAS FIELDS
function checkTextArea(form, fail) {
	
	var thisFail  = 0;
	var textareas = form.getElementsByTagName('textarea'); //GET TEXTAREAS
	
	for(var n=0; n<textareas.length; n++) {
		
		var elementId=textareas[n].getAttribute('id'); //DEFINE ELEMENT ID
		
		if(textareas[n].className.indexOf('req') > -1 && textareas[n].value == '') { //IS FIELD MANDATORY AND NOT COMPLETED
			
			highlightLabel(form, elementId, 'error'); //ERROR
			thisFail++; //INCREMENT FAIL VAL
			fail++;
			
		}
		
		if(thisFail > 0) { 
		
			highlightLabel(form, elementId, 'error'); //ERROR
		
		}else{
		
			highlightLabel(form, elementId, ''); //CLEAR
			
		}
		
	}
	
	//SEND FAIL BACK TO FUNCTION
	return fail;
	
}

//VALIDATES SELECTS FIELDS
function checkSelects(form, fail) {
	
	var selects  = form.getElementsByTagName('select'); //GET SELECTS
	var thisFail = 0;
	
	for(var b=0; b<selects.length; b++) {
		
		var elementId=selects[b].getAttribute('id'); //DEFINE ELEMENT ID
		
		if(selects[b].className.indexOf('req') > -1 && (selects[b].value == '0' || selects[b].value == '')) { //IS FIELD MANDATORY AND NOT COMPLETED
			
			fail++; //INCREMENT FAIL VAL
			thisFail++;
			
		}
		
	}
	
	if(thisFail > 0) { 
		
		highlightLabel(form, elementId, 'error'); //ERROR
	
	}else{
	
		highlightLabel(form, elementId, ''); //CLEAR
		
	}
	
	return fail; //SEND FAIL BACK TO FUNCTION
}

function formValidator() {

	if(!document.getElementsByTagName('form')) return false;
	
	var forms = document.getElementsByTagName('form');
	
	for(var i=0; i<forms.length; i++) {
		
		if(forms[i].className.indexOf(validateForm) > -1) { //CHECK IF FORM NEEDS TO BE VALIDATED
		
			forms[i].onsubmit = function() { //FORM SUBMITTED
			
				var fail = 0; //SET FAIL STATUS
				
				//ASSIGN CURRENT FAIL VAL TO CHECKING FUNCTIONS
				fail += checkInputs(this, fail);
				fail += checkTextArea(this, fail);
				fail += checkSelects(this, fail);
				
				if(fail > 0) {
				
					alert(formMessage);
					return false;
					
				}
				
				isEmail = lookForEmail(this);
				
				if(isEmail == false) {
				
					return false;
				
				}
				
				return true;
			
			}
		
		}
		
	}

}

function select_delivery_method(mode) {
	document.getElementById('delivery_method').value=mode;
	document.getElementById('order_cd').submit();
}


//EXECUTES ONLOAD FUNCTIONS
function loadfunctions() {
	externalLinks();
	formValidator();
}
//LOADS IN MULTIPLE FUNCTIONS ONLOAD
window.onload=loadfunctions;