// JavaScript Document
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 marked *'; //TEXT TO APPEAR WHEN FORM FAILS VALIDATION


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

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


//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('req') > -1) {
			
			switch(elementType) { //CHECK THE TYPE OF INPUT
			
				case 'text':
				if(inputs[x].value == '') {
					
					thisFail++; //INCREMENT FAIL VALS
					fail++;
					
				}
				case 'password':
				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;

}

function matchPass(form) {

	var success = false;
	
	if(!document.getElementById('password_1')) return false;
	
	var pass1 = document.getElementById('password_1');
	var pass2 = document.getElementById('password_2');
	
	if(pass1.value == pass2.value) {
	
		success = true;
	
	} else {
	
		alert('Please make sure your passwords match.');
	
	}
	
	return success;

}

//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;
					
				}
				
				var isEmail = lookForEmail(this);
				
				if(isEmail == false) {
				
					return false;
				
				}
				
				if(document.getElementById('password_1')) {
				
					var matchPassword = matchPass(this);
					
					if(matchPassword == false) {
					
						return false;
					
					}
				
				}
				
				return true;
			
			}
		
		}
		
	}

}

//AJAX REQUIREMENTS
var req;
var url;
function Initialize() {
    try {
    	req=new ActiveXObject("Msxml2.XMLHTTP");
	}

    catch(e) {
    	try {
        	req=new ActiveXObject("Microsoft.XMLHTTP");
		}
        catch(oc) {
            req=null;
		}
    }

    if(!req&&typeof XMLHttpRequest!="undefined") {
        req= new XMLHttpRequest();
	}	
}

function updateModels(keyword) {
	Initialize();
	var url="ajax_includes/lamp_mans_models.php?manufacturer="+keyword;
	if(req!=null) {
		req.onreadystatechange = function () {
			if (req.readyState == 4) {
				// only if "OK"
				if (req.status == 200) {
					document.getElementById("lamps_search").innerHTML =req.responseText;
				}else{
					document.getElementById("lamps_search").innerHTML=
					"There was a problem retrieving data:<br />"+req.statusText;
				}
			}
		}
		req.open("GET", url, true);
		req.send(null);
    }
}

//DISPLAYS CONFIRM BOX
function confirmAction() {
	
	var confirmed = confirm('Are you sure you wish to perform this action?');
	
	return confirmed;
	
}

function startList() {
if (document.all&&document.getElementById) {
navRoot = document.getElementById("nav");
for (i=0; i<navRoot.childNodes.length; i++) {
node = navRoot.childNodes[i];
if (node.nodeName=="LI") {
node.onmouseover=function() {
this.className+=" over";
  }
  node.onmouseout=function() {
  this.className=this.className.replace(" over", "");
   }
   }
  }
 }
}

function deliveryAddress() {
	
	if(!document.getElementById('same_as_billing')) return false;
	
	var li = document.getElementById('same_as_billing');
	
	li.className = '';
	
	var check = document.getElementById('del_address');
	
	check.onclick = copyBilling;
	
}

function copyBilling() {
	
	var firstname = document.getElementById('firstname');
	var surname = document.getElementById('surname');
	var address_1 = document.getElementById('address_1');
	var address_2 = document.getElementById('address_2');
	var address_3 = document.getElementById('address_3');
	var town = document.getElementById('town');
	var county = document.getElementById('county');
	var postcode = document.getElementById('postcode');
	
	var delivery_firstname = document.getElementById('delivery_firstname');
	var delivery_surname = document.getElementById('delivery_surname');
	var delivery_address_1 = document.getElementById('delivery_address_1');
	var delivery_address_2 = document.getElementById('delivery_address_2');
	var delivery_address_3 = document.getElementById('delivery_address_3');
	var delivery_town = document.getElementById('delivery_town');
	var delivery_county = document.getElementById('delivery_county');
	var delivery_postcode = document.getElementById('delivery_postcode');
	
	if(this.checked == true) {
	
		delivery_firstname.value = firstname.value;
		delivery_surname.value = surname.value;
		delivery_address_1.value = address_1.value;
		delivery_address_2.value = address_2.value;
		delivery_address_3.value = address_3.value;
		delivery_town.value = town.value;
		delivery_county.value = county.value;
		delivery_postcode.value = postcode.value;
	
	}else{
		
		delivery_firstname.value = '';
		delivery_surname.value = '';
		delivery_address_1.value = '';
		delivery_address_2.value = '';
		delivery_address_3.value = '';
		delivery_town.value = '';
		delivery_county.value = '';
		delivery_postcode.value = '';
		
	}
	
}

function delivery_info() {

	

}

//EXECUTES ONLOAD FUNCTIONS
function loadfunctions() {
	externalLinks();
	startList();
	deliveryAddress();
	formValidator();
	delivery_info();
}
//LOADS IN MULTIPLE FUNCTIONS ONLOAD
window.onload=loadfunctions;

function rollmenuIn(){
	document.getElementById("bluebarmenu").style.display = "block";
}

function rollmenuOut(){
	document.getElementById("bluebarmenu").style.display = "none";
}