// JavaScript Document

//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");
		}
		
	}
	
}

function clearinput(id){
	document.getElementById(id).value = "";
}

function checkfilledquantitynum(id){
	var error_pop = "";

	if(document.getElementById(id).value == "" || isNaN(document.getElementById(id).value) == true){
		error_pop += "Sorry, but you need to enter a valid quantity";
	}
	
	if(error_pop != ""){
		alert(error_pop);
		return false;
	}
	else{return true;}
}

function enlargeWindow() {
	
	var location = this.getAttribute('href');
	
}

function productEnlarge() {

	if(!document.getElementsByTagName('a')) return false;
	
	var links = document.getElementsByTagName('a');
	
	for(var i=0; i<links.length; i++) {
	
		if(links[i].className == 'enlarge') {
		
			links[i].onclick = enlargeWindow;
		
		}
	
	}

}

function deliveryAddress() {

	//BROWSER COMPATIBLE
	if(!document.getElementById('use_as_delivery')) return false;
	
	var checkbox = document.getElementById('use_as_delivery');
	
	//SHOW CHECKBOX TO COMPATIBLE BROWSERS
	checkbox.parentNode.className = '';
	
	checkbox.onclick = function() {
	
		//ARRAY OF BILLING FIELDS
		var varNames = Array('firstname', 'surname', 'address_1', 'address_2', 'address_3', 'town', 'county', 'postcode');
	
		//CHECKBOX IS TICKED
		if(this.checked == true) {
			
			//LOOP THROUGH VARIABLE NAMES
			for(var i=0; i<varNames.length; i++) {
			
				//CREATE DELIVERY ELEMENT VARIABLE NAMES
				var delivery_varName = '';
				delivery_varName = 'delivery_' + varNames[i];
				
				//BILLING ELEMENTS
				var billingElement = document.getElementById(varNames[i]);
				
				//SET DELIVERY ELEMENT TO VALUE OF BILLING
				document.getElementById(delivery_varName).value = document.getElementById(varNames[i]).value;
				
				//BILLING ELEMENT CHANGES
				billingElement.onkeyup = function() {
				
					//IS CHECKBOX STILL TICKED
					if(checkbox.checked == true) {
				
						//RESET DELIVERY ELEMENT NAME
						delivery_varName = '';
						delivery_varName = 'delivery_' + this.getAttribute('id');
						
						//UPDATE DELIVERY ELEMENT VALUE
						document.getElementById(delivery_varName).value = this.value;
					
					}
				
				}
			
			}
		
		}else{
		
			for(var i=0; i<varNames.length; i++) {
			
				//CREATE DELIVERY ELEMENT
				var delivery_varName = '';
				delivery_varName = 'delivery_' + varNames[i];
				
				//CLEAR DELIVERY VALUES
				document.getElementById(delivery_varName).value = '';
			
			}
		
		}

	
	}

}

//FORM VALIDATION
//LOOPS THROUGH THE ELEMENTS IN A SUBMITTED FORM, CHECKS IF THEY ARE MARKED AS MANDATORY (class='mand') AND HIGHTLIGHTS LABELS

//HIGHLIGHT LABEL IF ELEMENT IS BLANK OR NORMALISE IF COMPLETED
function highlightLabel(form, id, color, weight) {
	var forAttribute="";
	//FIND LABELS ON FORM
	var labels=form.getElementsByTagName("label");
	for(var z=0; z<labels.length; z++) {
		//GET FOR ATTRIBUTE
		//forAttribute=labels[z].getAttribute('for')?labels[z].getAttribute('for'):labels[z].getAttribute('htmlFor');
		if(navigator.appName=="Microsoft Internet Explorer") {
			forAttribute=labels[z].getAttribute('htmlFor');
		}else{
			forAttribute=labels[z].getAttribute('for');
		}
		
		//MATCH FOR WITH ELEMENT ID
		if(forAttribute==id) {
			//APPLY STYLES AS APPROPRIATE
			labels[z].style.color='#'+color;
			labels[z].style.fontWeight=weight;
		}
	}
}


//VALIDATES INPUT FIELDS
function checkInputs(form, fail) {
	//GET INPUTS
	var inputs=form.getElementsByTagName("input");
	for(var x=0; x<inputs.length; x++) {
		//DEFINE ELEMENT ID
		var elementId=inputs[x].getAttribute("id");
		//IS FIELD MANDATORY AND NOT COMPLETED
		if(inputs[x].className=="mand" && inputs[x].value=="") {
			//CHANGE LABEL
			highlightLabel(form, elementId, 'cb0000', 'bold');
			//INCREMENT FAIL VAL
			fail++;
		//THIS COVERS CHECKBOXES
		}else if(inputs[x].className=="auto_width mand checkbox" && inputs[x].checked==false) {
			//CHANGE LABEL
			highlightLabel(form, elementId, 'cb0000', 'bold');
			//INCREMENT FAIL VAL
			fail++;
		}else if(inputs[x].className=="auto_width mand checkbox" && inputs[x].checked==true) {
			//CHANGE LABEL
			highlightLabel(form, elementId, '000', 'normal');
		}else if(inputs[x].className=="mand" && inputs[x].value!="") {
			//CHANGE LABEL
			highlightLabel(form, elementId, '000', 'normal');
		}
		
	}
	//SEND FAIL BACK TO FUNCTION
	return fail;
}

//VALIDATES TEXTAREAS FIELDS
function checkTextArea(form, fail) {
	//GET TEXTAREAS
	var textareas=form.getElementsByTagName("textarea");
	for(var n=0; n<textareas.length; n++) {
		//DEFINE ELEMENT ID
		var elementId=textareas[n].getAttribute("id");
		//IS FIELD MANDATORY AND NOT COMPLETED
		if(textareas[n].className=="mand" && textareas[n].value=="") {
			//CHANGE LABEL
			highlightLabel(form, elementId, 'cb0000', 'bold');
			//INCREMENT FAIL VAL
			fail++;
		}else if(textareas[n].className=="mand" && textareas[n].value!="") {
			//CHANGE LABEL
			highlightLabel(form, elementId, '000', 'normal');
		}
		
	}
	//SEND FAIL BACK TO FUNCTION
	return fail;
}

//VALIDATES SELECTS FIELDS
function checkSelects(form, fail) {
	//GET SELECTS
	var selects=form.getElementsByTagName("select");
	for(var b=0; b<selects.length; b++) {
		//DEFINE ELEMENT ID
		var elementId=selects[b].getAttribute("id");
		//IS FIELD MANDATORY AND NOT COMPLETED
		if(selects[b].className=="mand" && (selects[b].value=="0" || selects[b].value=="")) {
			//CHANGE LABEL
			highlightLabel(form, elementId, 'cb0000', 'bold');
			//INCREMENT FAIL VAL
			fail++;
		}else if(selects[b].className=="mand" && (selects[b].value!="0" && selects[b].value!="")) {
			//CHANGE LABEL
			highlightLabel(form, elementId, '000', 'normal');
		}
	}
	//SEND FAIL BACK TO FUNCTION
	return fail;
}

//FINDS THE SUBMITTED FORM
function formValidation() {
	var forms=document.getElementsByTagName("form");
	//LOOP THROUGH FORMS
	for(var i=0; i<forms.length; i++) {
		//FORM HAS BEEN SUBMITTED
		forms[i].onsubmit=function() {
			
			//SET FAIL VAL
			var fail=0;
			//ASSIGN CURRENT FAIL VAL TO CHECKING FUNCTIONS
			fail += checkInputs(this, fail);
			fail += checkTextArea(this, fail);
			fail += checkSelects(this, fail);
			
			//CHECK PASSWORDS MATCH
			if(document.getElementById('password_1') && document.getElementById('password_2')) {
				
				var password = document.getElementById('password_1');
				var repassword = document.getElementById('password_2');
				
				var passwordFail = 0;
				
				if(password.value != repassword.value) {
					
					passwordFail++;
					
				}
				
			}
			
			var emailVars = Array('email', 'email_address', 'Email', 'Email_Address');
			
			for(var n=0; n<emailVars.length; n++) {
				
				if(document.getElementById(emailVars[n]) && document.getElementById(emailVars[n]).value!='') {
					
					if(document.getElementById(emailVars[n]).getAttribute('type')!='checkbox') {
					
						var isEmail = validateEmail(emailVars[n]);
						
						if(isEmail == false) {
							alert('Please enter a valid email address');
							return false;
						}
					
					}
					
				}
				
			}
			
			//RETURN RESULT OF CHECKING
			if(fail>0) {
				
				if(document.getElementById('error')) {
					var errorText = document.getElementById('error');
					errorText.style.display='block';
					//NEED TO PUT A LINK OR INPUT IN THE ERROR PARA TO GET FOCUS - OPTIONAL
					if(document.getElementById('error_input')) {
						var errorInput = document.getElementById('error_input');
						errorInput.focus();
					}
				}else{
					alert('Please make sure you have completed all required fields\n\n');
				}
				
				return false;
				
			}else{
				
				//CHECK IF PASSWORDS MATCH
				if(passwordFail>0) {
					if(document.getElementById('passwordError')) {
					
						var passwordError = document.getElementById('passwordError');
						passwordError.style.display='block';
						var errorInput = document.getElementById('error_password');
						errorInput.focus();
					
					}else{
						alert('Please make sure your passwords match\n\n');
					}
					
					return false;
					
				}else{
				
					return true;
				
				}
			}
		}
	}
}

function passwordValidation() {
	
	if(!document.getElementById('password_1')) return false;
	
	var pass1 = document.getElementById('password_1');
	var pass2 = document.getElementById('password_2');
	
	pass2.onblur = function () {
		
		if(pass1.value!=pass2.value) {
			alert('Please make sure your passwords match\n\n');
			return false;
		}
		
	}
	
}

function validateEmail(varname) {
	
	var valid = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/;
	var emailAddress = document.getElementById(varname);
	
	if(valid.test(emailAddress.value)) return true;
	
	return false;
	
}

function tradeApplication() {

	if(!document.getElementById('limited_company')) return false; //IS BUSINESS TYPE OPTION AVAILABLE
	
	var limited_business = document.getElementById('limited_company');
	var sole_trader      = document.getElementById('sole');
	var form             = document.getElementById('register');
	var classname        = '';
	
	if(limited_business.checked == true) {
	
		classname = 'limited'
			
		show_hide('limited', 'sole');
	
	} else if(sole_trader.checked == true) {
		
		classname = 'sole';
			
		show_hide('sole', 'limited');
		
	}
	
	limited_business.onclick = function() {
	
		if(this.checked == true) {
		
			classname = 'limited'
			
			show_hide('limited', 'sole');
		
		}
	
	}
	
	sole_trader.onclick = function() {
	
		if(this.checked == true) {
		
			classname = 'sole';
			
			show_hide('sole', 'limited');
		
		}
	
	}

}

function tradeEdit() {

	if(!document.getElementById('ltd_co')) return false; //IS BUSINESS TYPE OPTION AVAILABLE

	var limited_business = document.getElementById('ltd_co');
	var sole_trader      = document.getElementById('sole');
	var form             = document.getElementById('my_account');
	var classname        = '';

}

function show_hide(show, hide) {

	var h3 = document.getElementsByTagName('h3');
	var h4 = document.getElementsByTagName('h4');
	var ul = document.getElementsByTagName('ul');
	var li = document.getElementsByTagName('li');
	
	var elements = new Array(h3, h4, ul, li);
	
	for(var i=0; i<elements.length; i++) {
	
		for(var x=0; x<elements[i].length; x++) {
		
			if(elements[i][x].className.indexOf(show) > -1) {
			
				elements[i][x].style.display = 'block';
			
			}
			
			if(elements[i][x].className.indexOf(hide) > -1) {
			
				elements[i][x].style.display = 'none';
			
			}
		
		}
	
	}

}

//EXECUTES ONLOAD FUNCTIONS
function loadfunctions() {
	
	externalLinks();
	productEnlarge();
	deliveryAddress();
	formValidation();
	tradeApplication();
	
}

//LOADS IN MULTIPLE FUNCTIONS ONLOAD
window.onload=loadfunctions;