/* used for all forms within career magnifier */

///////////////////////////////////////////////////////////////////////////
function checkEmailAddress(field) {
	// Note: The next expression must be all on one line...
	//       allow no spaces, linefeeds, or carriage returns!
	// doesn't allow for .co.uk etc 2TLD
	var validEmail = field.value.match(/\b(^(\S+@).+((\.com)|(\.net)|(\.edu)|(\.mil)|(\.gov)|(\.org)|(\..{2,2}))$)\b/gi);
	
	if (validEmail){
	   return true;
	} else {
	   alert('Please enter a valid e-mail address.')
	   field.focus()
	   field.select()
	   return false
   }
}

function eMailCheck(str) {

		var at="@"
		var dot="."
		var lat=str.indexOf(at)
		var lstr=str.length
		var ldot=str.indexOf(dot)
		if (str.indexOf(at)==-1){
		   return false
		}

		if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
		   return false
		}

		if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
		    return false
		}

		 if (str.indexOf(at,(lat+1))!=-1){
		    return false
		 }

		 if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
		    return false
		 }

		 if (str.indexOf(dot,(lat+2))==-1){
		    return false
		 }
		
		 if (str.indexOf(" ")!=-1){
		    return false
		 }

 		 return true					
	}

///////////////////////////////////////////////////////////////////////////
function checkContactForm(frm){
	var email = frm.elements['emailTxt'];
	
	return checkEmailAddress(email);
}

///////////////////////////////////////////////////////////////////////////
function checkCCFrom(frm){
	var str = '';
	
	var custName = frm.elements['custNameTxt'].value;
	var cardNum = frm.elements['ccField'].value;
	var ccv = frm.elements['ccv'].value;
	var expMonthTM = frm.elements['expMonthTM'].value;
	var expYearTM = frm.elements['expYearTM'].value;
	
	if(custName == ''){
		str += "There is no name on the card\n";
	}
	if(cardNum == ''){
		str += 'There is no card number\n';
	}
	if(ccv=='' || isNaN(ccv)){
		str += 'CCV value not valid. Please check the last 3 digits on the back of your card\n';
	}
	
	if(expMonthTM=='' || isNaN(expMonthTM)){
		str += 'Please enter a valid Expiry Month\n';
	} else {
		if(expMonthTM > 12 || expMonthTM < 1){
			str += "Please enter a vaild month of the year (1-12)\n";
		}
	}	
	if(expYearTM=='' || isNaN(expYearTM)){
		str += "Please enter a valid Expiry Year\n";
	} else {
		if(expYearTM < 2005 || expYearTM > 2050){
			str += "Please enter a year greater than 2005\n";
		}
	}
	//Uncomment for request string of form. Note that checkboxes and bullet-buttons don't work with this at all.
	//for(i=0; i<frm.elements.length; i++) {
	//	str += frm.elements[i].name + "=" + frm.elements[i].value + "&";
	//}

	return str;
}

///////////////////////////////////////////////////////////////////////////
// Checks the validity of the assessDetails
// Requires a FirstName, Surname and either a valid email address or selection NONE.
function checkDetails(frm){
	var rtn = true;
	var alertStr = '';
	var fname = frm.elements['fNameTxt'].value;
	var sname = frm.elements['sNameTxt'].value;
	
	var email1 = frm.elements['emailTxt1'].value;
	var email2 = frm.elements['emailTxt2'].value;
	
	var referer = frm.elements['refererTxt'];
	
	var gender = frm.elements['genderTxt'];
	var ageTxt = frm.elements['ageTxt'].value;
	
	genderYN = false;
	for(var i=0;i<gender.length;i++){
		if(gender[i].checked){
			genderYN = true;
		}
	}
	
	var refererTxt = frm.elements['refererTxt'].value;
	/*
	refererYN = false;
	for(var i=0;i<referer.length;i++){
		if(referer[i].checked){
			refererYN = true;
		}
	}
	*/
	
	/////////////////////////////////////////////////////////////
	if(fname == '') {
		alertStr += 'Please enter a first name\n';
	}
	if(sname == '') {
	 alertStr += 'Please enter a surname\n';
	}
	
	if(email1 == ''){
	 alertStr += 'First email field is empty\n';
	}
	if(email2 == '') {
		alertStr += 'Confirmation email field is empty\n';
	}
	if(!genderYN) {
		alertStr += 'You must select a gender. (male or female)\n';
	}
	if(ageTxt == '') {
		alertStr += 'An age range must be selected\n';
	}
	//if(!refererYN) {
	//	alertStr += 'Please select where you heard about us\n';
	//}
	if(refererTxt == '') {
		alertStr += 'Please select where you heard about us\n';
	}	
	
	if(frm.elements['acceptEULA'].checked==false){
		alertStr += 'You must accept the terms and conditions to continue';
	}
	
	
	//////////////////////////////////////////////////////////////
	if(alertStr == ''){
		if(email1==email2){
				return eMailCheck(email1);	
				//return checkEmailAddress(frm.elements['emailTxt1']);
		} else {
			alert('Email fields do not match.');
			return false;
		}
	} else {
		alert(alertStr);
		return false;
	}
	
}
///////////////////////////////////////////////////////////////////////////
// This function checks that all Radio buttons are selected
// 5 options are available per selection with INPUT type radio fields labelled xxxxID[ID]
// Used on Activities, Areas, Values and Occupations
function allChecked(frm){
	var rtn = false;
	
	// Catch Exit Button
	var exit = frm.elements['exitForm'].value;
	var accessCD = frm.elements['access'].value;
	
	if(exit==1){
		alert('Thank you. We have saved your assessment and emailed you an Access Code : '+accessCD+'.\nPlease enter this access code when you return to complete your assessment');
		window.close();
		return true;
	}
	
	var alertStr = '';
	var checkRowColor = 'rgb(255,0,0)';
	var alertCheck = 'There are items which are not selected.\nPlease complete the entire form.';
	
	var formElem = document.getElementsByTagName('input');

	// Loop through the NODE LIST
	for(var i=0;i < formElem.length; i++){
		if(formElem[i].type == 'radio'){
			//alertStr = "\n"+formElem.item(i).name+formElem.item(i).value+formElem.item(i).checked;
			
			e = document.getElementsByName(formElem[i].name);
			
			// Initialise the selection checker to false
			var eChecked = false;
			for(var j=0;j < e.length; j++){
				if(e[j].checked){
					eChecked = true;
				}
			}
			if(!eChecked) {
				//var nameID = formElem.item(i).name;
				//nameID = nameID.toString();
				// Change the color of the offending row and display error message
				//document.getElementById(formElem.item(i).name).style.color = checkRowColor;
				fadeShade(formElem[i].name.replace('[','_').replace(']',''), 255, 0, 0);
			
				alertStr = alertCheck;
				//break;
			}
		}
	}
	if(alertStr==''){
		return true;
	} else {
		alert(alertStr);
		return false;
	}
}

//allChecked for CPP
function areNulls(form) {
	var misses = 0;
	var formElem = document.getElementsByTagName('input');
	for(var i=0;i < formElem.length; i++){
		if (formElem[i].name.substr(0,8) == 'question') {
			e = document.getElementsByName(formElem[i].name);
			var eChecked = false;
			for(var j=0;j < e.length; j++){
				if(e[j].checked){
					eChecked = true;
				}
			}
			if(!eChecked) {
				fadeShade(formElem[i].name.replace('[','_').replace(']',''), 255, 0, 0);
				misses++;					
			}
		}
	}
	if (misses > 0) {
		alert ('There are items which are not selected.\nPlease complete the entire form.');
		return false;
	} else {
		return true;
	}
}

///////////////////////////////////////////////////////////////////////////
function markRow(e){
	//alert(e.name);
	//document.getElementById(e.name).style.color = '#333333';
}
///////////////////////////////////////////////////////////////////////////
function mouseRow(type,rowID){
	e = document.getElementsByName(rowID);
			
	// Initialise the selection checker to false
	var eChecked = false;
	for(var j=0;j < e.length; j++){
		if(e[j].checked){
			eChecked = true;
		}
	}
	if(type=="out"){
		document.getElementById(rowID).style.color = '#2C38A9';
	} else {
		document.getElementById(rowID).style.color = '#3D93FF';
	}
	if(eChecked) {
		//var nameID = formElem.item(i).name;
		//nameID = nameID.toString();
		// Change the color of the offending row and display error message
		document.getElementById(rowID).style.color = '#333333';

	}
}
///////////////////////////////////////////////////////////////////////////


// This function turns an object from one colour into another in a logarithmic fashion.
// Which looks kinda nice.
function fadeShade(id, tR, tG, tB) {
	var color = document.getElementById(id).style.color;
	//Everything except Opera.
	var re = /^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/;
	//Opera.
	var re2 = /^#(([a-f]|[A-F]|[0-9]){2})(([a-f]|[A-F]|[0-9]){2})(([a-f]|[A-F]|[0-9]){2})$/;
	var components = re.exec(color);
	if (components == null) {
		// Fix for Opera.
		components = re2.exec(color);
		var cR = parseInt(components[1],16);
		var cG = parseInt(components[3],16);
		var cB = parseInt(components[5],16);
	} else {
		var cR = components[1];
		var cG = components[2];
		var cB = components[3];
	}

	if ((Math.abs(cR - tR)<=10) && (Math.abs(cG - tG)<=10) && (Math.abs(cB - tB)<=10)) {
		document.getElementById(id).style.color = 'rgb('+tR+','+tG+','+tB+')';
		return true;
	} else {

		nR = Math.round(cR - ((cR - tR)/10));
		nG = Math.round(cG - ((cG - tG)/10));
		nB = Math.round(cB - ((cB - tB)/10));
		document.getElementById(id).style.color = 'rgb('+nR+','+nG+','+nB+')';
		setTimeout("fadeShade('"+id+"', '"+tR+"', '"+tG+"', '"+tB+"')",100);
	}
}