//GLOBALS
/*
*
* LEAVE THESES ALONE
*
*/
//FOR CONFIRM FUNCTION
var confirmed = false;
var elementClass = '';
var titleText = '';


// confirmAction()
/*
* Builds arrays where confirmation can take place
*
* @return bool
*/
function confirmAction() {

	//IS DOM SUPPORTED
	if(!document.getElementsByTagName('a')) return false;

	//GET ELEMENTS ON PAGE TO WORK WITH
	var confirmLinks   = document.getElementsByTagName('a');
	var buttons = document.getElementsByTagName('input');
	
	//PROCESS ELEMENTS
	loopElements(confirmLinks);
	loopElements(buttons);
	
	return false;

}

// loopElements()
/*
* Processes passed elements, gets text for confirm box and sends for confirmation
* @return bool @param array of elements
*/
function loopElements(elements) {
	
	for(var i=0; i<elements.length; i++) { //LOOP THROUGH ELEMENTS
	
		elementClass = elements[i].className; //ASSIGN CLASSNAME
		
		if(elementClass != '' && elementClass.indexOf('confirm') > -1) { //DOES CONFIRM CLASSNAME EXIST ON ELEMENT
		
			elements[i].onclick = function() { //ELEMENT CLICKED
			
				titleText = '';
			
				if(this.getAttribute('alt')) {
					
					titleText = this.getAttribute('alt'); //GET TEXT FROM ALT ATTRIBUTE ON BUTTONS
					
				}else if(this.getAttribute('title')) {
					
					titleText = this.getAttribute('title');	//GET TEXT FROM TITLE ON LINKS
					
				}
				
				if(titleText.length > 0) alertText = titleText; //APPLY TEXT TO VARIABLE
				
				confirmed = getConfirmation(alertText); //PASS TEXT TO FUNCTION
				
				return confirmed; //RETURN RESULT
			
			}
		
		}
	
	}
	
}

// getConfirmation()
/*
* Displays confirmation box returns result
* @return bool @param String of text to display
*/
function getConfirmation(text) {

	var result = confirm(text); //SHOW CONFIRMATION BOX

	return result; //RETURN RESULT

}

// externalLinks()
/*
* Allows external links to be opened in a new window without the use of target attribute
* @return bool
*/
function externalLinks() {
	
	//SETS DOMAIN OF SITE
	var domainName=document.domain;
	
	var externalLinks=document.getElementsByTagName("a"); //FIND ALL LINKS ON THE CURRENT PAGE
	
	for(var i=0; i<externalLinks.length; i++) { //LOOP THROUGH LINKS ARRAY
	
		var attribute=externalLinks[i].getAttribute("href"); //GETS CONTENT OF 'HREF' ATTRIBUTE ON CLICKED LINK
		
		var elementClass = externalLinks[i].className; //STORES CLASS NAME OF ELEMENT
		
		var contains_http=attribute.indexOf("http"); //GET VALUE http IN 'HREF' **FOR MOZILLA&&
		
		var contains_domain=attribute.indexOf(domainName); //GET VALUE domainName **FOR IE**
		
		if(newWindowLink == true) {
		
			if(contains_http>-1 && contains_domain==-1) { //DOES CONTAIN AN 'http' OR DOES NOT CONTAIN domainName
			
				setElementAttribute(externalLinks[i], 'target', '_blank');	
				
			}
		
		}
		
		if(elementClass.indexOf('new_window') > -1 ) { //FORCE LINK TO OPEN IN NEW WINDOW
			
			setElementAttribute(externalLinks[i], 'target', '_blank');
			
		}
		
	}
	
}

// setElementAttribute()
/*
* Sets elements attribute
* @return bool; @param element: Element to attach attr to, attr: The attribute to be added, val: value of attribute
*/
function setElementAttribute(element, attr, val) {

	element.setAttribute(attr, val); //SET ATTRIBUTE ON ELEMENT

	return true;

}

// popUpWindows()
/*
* Creates a popup window
* @return bool;
*/
function popUpWindows() {
	
	var links = document.getElementsByTagName('a'); //MAKE ARRAY OF LINKS
	var url = '';
	
	for(var i=0; i<links.length; i++) { //LOOP LINKS
		
		links[i].onclick = function() { //LINK CLICKED
	
			var classes = this.className; //GET CLASS NAMES
			
			if(classes != '') {
			
				var splitClasses = classes.split(' '); //EXPLODE CLASSES ON SPACE ' '
				
				for(var x=0; x<splitClasses.length; x++) { //LOOP THROUGH MULTIPLE CLASSNAMES
				
					if(splitClasses[x].indexOf('popup_window') > -1) { //IS LINK A POPUP WINDOW
				
						url = this.getAttribute('href'); //FINDS WHAT PAGE WINDOW IS TO SHOW
						
						var dimentions = getDimentions(splitClasses[x]); //GET DIMENTIONS
						
						var newWindow = window.open(url, '', 'width='+dimentions['width']+', height='+dimentions['height']+', scrollbars=yes, resize=yes'); //SET NEW WINDOW
						
						newWindow; //LAUNCH
						
						return false; //STOP LINK
					
					}
				
				}
			
			}
		
		}
	
	}
	
}

// getDimentions()
/*
* Gets dimentions of popup window
* @return array; @param thisClass: Classname of link clicked
*/
function getDimentions(thisClass) {

	var parts = thisClass.split('_'); //EXPLODE CLASSNAME ON UNDERSCORE _
	var winWidth = parts[parts.length-2]; //WIDTH IS SECOND LAST ELEMENT
	var winHeight = parts[parts.length-1]; //HEIGHT IS LAST ELEMENT
	
	var dimentions = new Array();
	
	dimentions['width']  = winWidth;
	dimentions['height'] = winHeight;
	
	return dimentions; //RETURN

}

//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;

}

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

}