// form validation function //
var siteURL  = "http://www.reversedelta.com/";

function RemoteRequestObject(){
	var A = false;

 	try{
 		A = new ActiveXObject("Msxml2.XMLHTTP");
 	}catch(e){
 		try{
 			A = new ActiveXObject("Microsoft.XMLHTTP");
 		}catch(err){
 			A = false;
 		}
 	}

 	if(!A && typeof(XMLHttpRequest) != 'undefined'){
 		A = new XMLHttpRequest();
	}
 		
 	return A;
}

function isURL(s){
	var regexp = /http:\/\/[A-Za-z0-9\.-]{3,}\.[A-Za-z]{3}/;
	if(regexp.test(s)){
		return true;
	}else{
		return false;
	}
}
function fnChkURL(obj,msg){
	exp = (/^(http|https)\:\/\/\w+([\.\-]\w+)*\.\w{2,4}(\:\d+)*([\/\.\-\?\&\%\#\=]\w+)*\/?$/i);
	if (!exp.test(obj.value)){
		inlineMsg('txtURL','<strong>Error</strong><br />Please enter valid URL.',2);
		obj.value="http://";
		obj.focus();
		return true;
	}else{
		return false;
	}
}

function textCounter(field,cntfield,maxlimit){
	if (field.value.length > maxlimit){ // if too long...trim it!
		field.value = field.value.substring(0, maxlimit);
		// otherwise, update 'characters left' counter
	}else{
		cntfield.value = maxlimit - field.value.length;
	}
}
function fnSendFriend(form){
	var x = RemoteRequestObject();
	form.onsubmit = function(){
		var firstname = Trim(form.firstname.value);
		var lastname = Trim(form.lastname.value);
		var email = Trim(form.email.value);
		var friend_email = Trim(form.friend_email.value);
		var emailexp=/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;
		if(firstname == "") {
			inlineMsg('firstname','Please enter your First Name',2);
			return false;
		}
		if(lastname == "") {
			inlineMsg('lastname','Please enter your Last Name',2);
			return false;
		}
		if(email == ""){
			inlineMsg('email','Please enter your Email Address',2);
			return false;
		}
		if(email != ""){
			if(!email.match(emailexp)) {
				inlineMsg('email','Please enter a valid email address',2);
				return false;
			}
		}
		if(friend_email == ""){
			inlineMsg('friend_email','Please enter your friend\'s Email Address',2);
			return false;
		}
		if(friend_email != ""){
			if(!friend_email.match(emailexp)) {
				inlineMsg('friend_email','Please enter a valid email address',2);
				return false;
			}
		}
	}
}
function fnValidate(form){
	var x = RemoteRequestObject();
	form.onsubmit = function(){
		var first_name = Trim(form.first_name.value);
		var last_name = Trim(form.last_name.value);
		var email_address = Trim(form.email_address.value);
		var address1 = Trim(form.address1.value);
		var address2 = Trim(form.address2.value);
		var town = Trim(form.town.value);
		var county = Trim(form.county.value);
		var postcode = Trim(form.postcode.value);
		var telephone = Trim(form.telephone.value);
		var mobile = Trim(form.mobile.value);
		var resume = Trim(form.resume.value);
		var qualifications = Trim(document.ApplyForm["qualifications[]"].value);
		var graduation_year = Trim(form.graduation_year.value);
		var web_skill = Trim(document.ApplyForm["web_skill[]"].value);
		var example_sites = Trim(form.example_sites.value);
		var driving_license = Trim(form.driving_license.value);
		var clean = Trim(form.clean.value);
		var number_of_years_held = Trim(form.number_of_years_held.value);
		var no_of_years_in_it = Trim(form.no_of_years_in_it.value);
		var no_of_years_web_tech = Trim(form.no_of_years_web_tech.value);
		var no_of_years_pro_mana = Trim(form.no_of_years_pro_mana.value);
		var willing_to_work_from_home = Trim(form.willing_to_work_from_home.value);
		var willing_to_travel = Trim(form.willing_to_travel.value);
		var curr_last_jobtitle = Trim(form.curr_last_jobtitle.value);
		var curr_last_employer = Trim(form.curr_last_employer.value);
		var curr_last_salary = Trim(form.curr_last_salary.value);
		var previous_position = Trim(form.previous_position.value);
		var previous_employers = Trim(form.previous_employers.value);
		var uk_resident = Trim(form.uk_resident.value);
		var no_of_years_resident = Trim(form.no_of_years_resident.value);
		var uk_work_permit = Trim(form.uk_work_permit.value);
		var type_of_computer = Trim(form.type_of_computer.value);
		var broadband = Trim(form.broadband.value);
		//var telephone_line = Trim(form.telephone_line.value);
		var captcha = form.captcha.value;
		
		var resumeexp = /^.+\.(doc|docx|pdf|DOC|DOCX|PDF)$/;  
		var emailexp=/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;
		
		if(first_name == "") {
			inlineMsg('first_name','Please enter First Name',2);
			return false;
		}
		if(last_name == "") {
			inlineMsg('last_name','Please enter Last Name',2);
			return false;
		}
		if(email_address == ""){
			inlineMsg('email_address','Please enter Email Address',2);
			return false;
		}
		if(email_address != ""){
			if(!email_address.match(emailexp)) {
				inlineMsg('email_address','You have entered invalid Email Address',2);
				return false;
			}
		}
		if(address1 == "") {
			inlineMsg('address1','Please enter Address Line 1',2);
			return false;
		}
		if(town == "") {
			inlineMsg('town','Please enter Town',2);
			return false;
		}
		if(county == "") {
			inlineMsg('county','Please enter County',2);
			return false;
		}
		if(postcode == ""){
			inlineMsg('postcode','Please enter the PostCode',2);
			return false;
		}
		if(postcode != ""){
			var msg = valid_uk_format(form.postcode);
			if(msg!=''){
				inlineMsg('postcode',msg,2);
				return false;
			}
		}
		if(telephone == ""){
			inlineMsg('telephone','Please enter the Telephone number',2);
			return false;
		}
		if(telephone != ""){
			var msg = '';
			if(!checkUKTelephone(telephone)) {
				msg = (telNumberErrors[telNumberErrorNo]);
			}
			if(msg!=''){
				inlineMsg('telephone',msg,2);
				return false;
			}
		}
		if(mobile == ""){
			inlineMsg('mobile','Please enter the Mobile number',2);
			return false;
		}
		if(mobile != ""){
			var msg = '';
			if(!checkUKMobile(mobile)) {
				msg = (mobileNumberErrors[mobileNumberErrorNo]);
			}
			if(msg!=''){
				inlineMsg('mobile',msg,2);
				return false;
			}
		}
		if(resume == "") {
			inlineMsg('resume','Please upload your CV',2);
			return false;
		}
		if(resume != "") {
			if(!resume.match(resumeexp)) {
				inlineMsg('resume','Please upload valid file format as PDF,DOC,DOCX',2);
				return false;
			}
		}
		if(qualifications == ""){
			inlineMsg('qualifications','Please select the Qualifications',2);
			return false;
		}
		/*if(graduation_year == ""){
			inlineMsg('graduation_year','Please select the Graduation Year',2);
			return false;
		}*/
		if(web_skill == ""){
			inlineMsg('web_skill','Please select the Web Skills',2);
			return false;
		}
		if(example_sites == ""){
			inlineMsg('example_sites','Please enter Example Sites',2);
			return false;
		}
		if(driving_license == ""){
			inlineMsg('driving_license','Please select are you having Driving License?',2);
			return false;
		}
		if(clean == ""){
			inlineMsg('clean','Please select are you having Clean?',2);
			return false;
		}
		if(number_of_years_held == ""){
			inlineMsg('number_of_years_held','Please enter Number of Years held',2);
			return false;
		}
		if(number_of_years_held != ""){
			var msg = fnChkNum(number_of_years_held,"Number of Years held");
			if(msg!=''){
				inlineMsg('number_of_years_held',msg,2);
				return false;
			}
		}
		if(no_of_years_in_it == ""){
			inlineMsg('no_of_years_in_it','Please enter Number of Years in IT',2);
			return false;
		}
		if(no_of_years_in_it != ""){
			var msg = fnChkNum(no_of_years_in_it,"Number of Years in IT");
			if(msg!=''){
				inlineMsg('no_of_years_in_it',msg,2);
				return false;
			}
		}
		if(no_of_years_web_tech == ""){
			inlineMsg('no_of_years_web_tech','Please enter Number of Years in Web Technologies',2);
			return false;
		}
		if(no_of_years_web_tech != ""){
			var msg = fnChkNum(no_of_years_web_tech,"Number of Years in Web Technologies");
			if(msg!=''){
				inlineMsg('no_of_years_web_tech',msg,2);
				return false;
			}
		}
		if(no_of_years_pro_mana == ""){
			inlineMsg('no_of_years_pro_mana','Please enter Number of years Project Management Experience',2);
			return false;
		}
		if(no_of_years_pro_mana != ""){
			var msg = fnChkNum(no_of_years_pro_mana,"Number of years Project Management Experience");
			if(msg!=''){
				inlineMsg('no_of_years_pro_mana',msg,2);
				return false;
			}
		}
		if(willing_to_work_from_home == ""){
			inlineMsg('willing_to_work_from_home','Please select Willing to Work from Home',2);
			return false;
		}
		if(willing_to_travel == ""){
			inlineMsg('willing_to_travel','Please select Willing to Travel',2);
			return false;
		}
		if(curr_last_jobtitle == ""){
			inlineMsg('curr_last_jobtitle','Please enter Current/Last Job Title',2);
			return false;
		}
		if(curr_last_employer == ""){
			inlineMsg('curr_last_employer','Please enter Current/Last Employer',2);
			return false;
		}
		if(curr_last_salary == ""){
			inlineMsg('curr_last_salary','Please enter Current/Last Salary',2);
			return false;
		}
		/*if(curr_last_salary != ""){
			var msg = fnChkNum(curr_last_salary,"Current/Last Salary");
			if(msg!=''){
				inlineMsg('curr_last_salary',msg,2);
				return false;
			}
		}*/
		if(previous_position == ""){
			inlineMsg('previous_position','Please enter Previous Position',2);
			return false;
		}
		if(previous_employers == ""){
			inlineMsg('previous_employers','Please enter Previous Employer',2);
			return false;
		}
		if(uk_resident == ""){
			inlineMsg('uk_resident','Please select are you a UK Resident?',2);
			return false;
		}
		if(no_of_years_resident == ""){
			inlineMsg('no_of_years_resident','Please enter Number of Years Resident',2);
			return false;
		}
		/*if(no_of_years_resident != ""){
			var msg = fnChkNum(no_of_years_resident,"Number of Years Resident");
			if(msg!=''){
				inlineMsg('no_of_years_resident',msg,2);
				return false;
			}
		}*/
		if(uk_work_permit == ""){
			inlineMsg('uk_work_permit','Please enter UK Work Permit',2);
			return false;
		}
		if(type_of_computer == ""){
			inlineMsg('type_of_computer','Please enter what Type of Computer owned?',2);
			return false;
		}
		if(broadband == ""){
			inlineMsg('broadband','Please select are you having Broadband',2);
			return false;
		}
		/*if(telephone_line == ""){
			inlineMsg('telephone_line','Please select are you having Telephone Line',2);
			return false;
		}*/
		if(form.captcha.value==""){
			inlineMsg('captcha','Please enter the Spam Protection Code',2);
			return false;
		}
		var url = siteURL+"includes/chkCaptcha.php?captcha="+captcha;
		x.open("GET",url,true);	
		x.onreadystatechange=function(){
			if(x.readyState == 4 && x.status == 200){
				var r = x.responseText;
				if(r.indexOf("+OK")==0){
					form.action=siteURL+"apply.php";
					form.submit();
				}else{
					inlineMsg('captcha','Please check the Spam Protection Code',2);
				}
			}
		};
		x.send(null);
		return false;
	}
  //return true;
}
function Trim(nStr){return nStr.replace(/(^\s*)|(\s*$)/g, "");}

// START OF MESSAGE SCRIPT //

var MSGTIMER = 20;
var MSGSPEED = 5;
var MSGOFFSET = 3;
var MSGHIDE = 10;

// build out the divs, set attributes and call the fade function //
function inlineMsg(target,string,autohide) {
  var msg;
  var msgcontent;
  if(!document.getElementById('msg')) {
    msg = document.createElement('div');
    msg.id = 'msg';
    msgcontent = document.createElement('div');
    msgcontent.id = 'msgcontent';
    document.body.appendChild(msg);
    msg.appendChild(msgcontent);
    msg.style.filter = 'alpha(opacity=0)';
    msg.style.opacity = 0;
    msg.alpha = 0;
  } else {
    msg = document.getElementById('msg');
    msgcontent = document.getElementById('msgcontent');
  }
  msgcontent.innerHTML = string;
  msg.style.display = 'block';
  var msgheight = msg.offsetHeight;
  var targetdiv = document.getElementById(target);
  targetdiv.focus();
  var targetheight = targetdiv.offsetHeight;
  var targetwidth = targetdiv.offsetWidth;
  var topposition = topPosition(targetdiv) - ((msgheight - targetheight) / 2);
  var leftposition = leftPosition(targetdiv) + targetwidth + MSGOFFSET;
  msg.style.top = topposition + 'px';
  msg.style.left = 18 + leftposition + 'px'; 
  
  clearInterval(msg.timer);
  msg.timer = setInterval("fadeMsg(1)", MSGTIMER);
  if(!autohide) {
    autohide = MSGHIDE;  
  }
  hideMsg();
  //window.setTimeout("hideMsg()", (autohide * 1000));
}

// hide the form alert //
function hideMsg(msg) {
  var msg = document.getElementById('msg');
  if(!msg.timer) {
    msg.timer = setInterval("fadeMsg(0)", MSGTIMER);
  }
}

// face the message box //
function fadeMsg(flag) {
  if(flag == null) {
    flag = 1;
  }
  var msg = document.getElementById('msg');
  var value;
  if(flag == 1) {
    value = msg.alpha + MSGSPEED;
  } else {
    value = msg.alpha - MSGSPEED;
  }
  msg.alpha = value;
  msg.style.opacity = (value / 100);
  msg.style.filter = 'alpha(opacity=' + value + ')';
  if(value >= 99) {
    clearInterval(msg.timer);
    msg.timer = null;
  } else if(value <= 1) {
    msg.style.display = "none";
    clearInterval(msg.timer);
  }
}

// calculate the position of the element in relation to the left of the browser //
function leftPosition(target) {
  var left = 0;
  if(target.offsetParent) {
    while(1) {
      left += target.offsetLeft;
      if(!target.offsetParent) {
        break;
      }
      target = target.offsetParent;
    }
  } else if(target.x) {
    left += target.x;
  }
  return left;
}

// calculate the position of the element in relation to the top of the browser window //
function topPosition(target) {
  var top = 0;
  if(target.offsetParent) {
    while(1) {
      top += target.offsetTop;
      if(!target.offsetParent) {
        break;
      }
      target = target.offsetParent;
    }
  } else if(target.y) {
    top += target.y;
  }
  return top;
}

// preload the arrow //
if(document.images) {
  arrow = new Image(7,80); 
  arrow.src = "images/msg_arrow.gif"; 
}

/* Valid Formats starts here */
function checkUKTelephone (telephoneNumber) {

  // Convert into a string and check that we were provided with something
  var telnum = telephoneNumber + " ";
  if (telnum.length == 1)  {
     telNumberErrorNo = 1;
     return false
  }
  telnum.length = telnum.length - 1;
  
  // Don't allow country codes to be included (assumes a leading "+")
  var exp = /^(\+)[\s]*(.*)$/;
  if (exp.test(telnum) == true) {
     telNumberErrorNo = 2;
     return false;
  }
  
  // Remove spaces from the telephone number to help validation
  while (telnum.indexOf(" ")!= -1)  {
    telnum = telnum.slice (0,telnum.indexOf(" ")) + telnum.slice (telnum.indexOf(" ")+1)
  }
  
  // Remove hyphens from the telephone number to help validation
  while (telnum.indexOf("-")!= -1)  {
    telnum = telnum.slice (0,telnum.indexOf("-")) + telnum.slice (telnum.indexOf("-")+1)
  }  
  
  // Now check that all the characters are digits
  exp = /^[0-9]{10,11}$/;
  if (exp.test(telnum) != true) {
     telNumberErrorNo = 3;
     return false;
  }
  
  // Now check that the first digit is 0
  exp = /^0[0-9]{9,10}$/;
  if (exp.test(telnum) != true) {
     telNumberErrorNo = 4;
     return false;
  }
	
	// Disallow numbers allocated for dramas.
	 
  // Array holds the regular expressions for the drama telephone numbers
  var tnexp = new Array ();
	tnexp.push (/^(0113|0114|0115|0116|0117|0118|0121|0131|0141|0151|0161)(4960)[0-9]{3}$/);
	tnexp.push (/^02079460[0-9]{3}$/);
	tnexp.push (/^01914980[0-9]{3}$/);
	tnexp.push (/^02890180[0-9]{3}$/);
	tnexp.push (/^02920180[0-9]{3}$/);
	tnexp.push (/^01632960[0-9]{3}$/);
	tnexp.push (/^07700900[0-9]{3}$/);
	tnexp.push (/^08081570[0-9]{3}$/);
	tnexp.push (/^09098790[0-9]{3}$/);
	tnexp.push (/^03069990[0-9]{3}$/);
	
	for (var i=0; i<tnexp.length; i++) {
		if ( tnexp[i].test(telnum) ) {
		  telNumberErrorNo = 5;
		  return false;
		}
	}
  
  // Finally check that the telephone number is appropriate.
  exp = (/^(01|02|03|04|05|06|070|071|072|073|074|075|07624|077|078|079|08|09)[0-9]+$/);
	if (exp.test(telnum) != true) {
     telNumberErrorNo = 5;
     return false;
  }
  
  // Telephone number seems to be valid - return the stripped telehone number  
  return telnum;
}
var telNumberErrorNo = 0;
var telNumberErrors = new Array ();
telNumberErrors[0] = "Valid UK telephone number";
telNumberErrors[1] = "Telephone number not provided";
telNumberErrors[2] = "UK telephone number without the country code, please";
telNumberErrors[3] = "UK telephone numbers should contain 10 or 11 digits";
telNumberErrors[4] = "The telephone number should start with a 0";
telNumberErrors[5] = "The telephone number is either invalid or inappropriate";

function checkUKMobile(mobileNumber) {
	// Convert into a string and check that we were provided with something
	var telnum = mobileNumber + " ";
	if (telnum.length == 1)  {
		mobileNumberErrorNo = 1;
		return false
	}
	telnum.length = telnum.length - 1;

	// Don't allow country codes to be included (assumes a leading "+")
	var exp = /^(\+)[\s]*(.*)$/;
	if (exp.test(telnum) == true) {
		mobileNumberErrorNo = 2;
		return false;
	}

	// Remove spaces from the telephone number to help validation
	while (telnum.indexOf(" ")!= -1)  {
		telnum = telnum.slice (0,telnum.indexOf(" ")) + telnum.slice (telnum.indexOf(" ")+1)
	}

	// Remove hyphens from the telephone number to help validation
	while (telnum.indexOf("-")!= -1)  {
		telnum = telnum.slice (0,telnum.indexOf("-")) + telnum.slice (telnum.indexOf("-")+1)
	}

	// Now check that all the characters are digits
	//exp = /^[0-9]{10}$/;
	exp = /^[0-9]{10,11}$/;
	if (exp.test(telnum) != true) {
		mobileNumberErrorNo = 3;
		return false;
	}

	// Now check that the first digit is 0
	exp = /^0[0-9]{9,10}$/;
	if (exp.test(telnum) != true) {
		mobileNumberErrorNo = 4;
		return false;
	}

	// Disallow numbers allocated for dramas.

	// Array holds the regular expressions for the drama telephone numbers
	var tnexp = new Array ();
	tnexp.push (/^(0113|0114|0115|0116|0117|0118|0121|0131|0141|0151|0161)(4960)[0-9]{3}$/);
	tnexp.push (/^02079460[0-9]{3}$/);
	tnexp.push (/^01914980[0-9]{3}$/);
	tnexp.push (/^02890180[0-9]{3}$/);
	tnexp.push (/^02920180[0-9]{3}$/);
	tnexp.push (/^01632960[0-9]{3}$/);
	tnexp.push (/^07700900[0-9]{3}$/);
	tnexp.push (/^08081570[0-9]{3}$/);
	tnexp.push (/^09098790[0-9]{3}$/);
	tnexp.push (/^03069990[0-9]{3}$/);

	for (var i=0; i<tnexp.length; i++) {
		if ( tnexp[i].test(telnum) ) {
			mobileNumberErrorNo = 5;
			return false;
		}
	}

	// Finally check that the telephone number is appropriate.
	exp = (/^(01|02|03|04|05|06|070|071|072|073|074|075|07624|077|078|079|08|09)[0-9]+$/);
	if (exp.test(telnum) != true) {
		mobileNumberErrorNo = 5;
		return false;
	}

	// Telephone number seems to be valid - return the stripped telehone number  
	return telnum;
}
var mobileNumberErrorNo = 0;
var mobileNumberErrors = new Array ();
mobileNumberErrors[0] = "Valid UK mobile number";
mobileNumberErrors[1] = "Mobile number not provided";
mobileNumberErrors[2] = "UK mobile number without the country code, please";
mobileNumberErrors[3] = "UK mobile numbers should contain 10 or 11 digits";
mobileNumberErrors[4] = "The mobile number should start with a 0";
mobileNumberErrors[5] = "The mobile number is either invalid or inappropriate";

function valid_uk_format(obj){ //check postcode format is valid
	test = obj.value; size = test.length
	var msg; msg = '';
	test = test.toUpperCase(); //Change to uppercase
	while (test.slice(0,1) == " "){ //Strip leading spaces
		test = test.substr(1,size-1);size = test.length
	}
	while(test.slice(size-1,size)== " "){ //Strip trailing spaces
		test = test.substr(0,size-1);size = test.length
	}
	obj.value = test; //write back to form field
	if(size < 6 || size > 8){ //Code length rule
		msg = (test + " is not a valid postcode - wrong length");
		//obj.focus();
		return msg;
	}
	if (!(isNaN(test.charAt(0)))){ //leftmost character must be alpha character rule
		msg = (test + " is not a valid postcode - cannot start with a number");
		//obj.focus();
		return msg;
	}
	if (isNaN(test.charAt(size-3))){ //first character of inward code must be numeric rule
		msg = (test + " is not a valid postcode - alpha character in wrong position");
		//obj.focus();
		return msg;
	}
	if (!(isNaN(test.charAt(size-2)))){ //second character of inward code must be alpha rule
		msg = (test + " is not a valid postcode - number in wrong position");
		//obj.focus();
		return msg;
	}
	if (!(isNaN(test.charAt(size-1)))){ //third character of inward code must be alpha rule
		msg = (test + " is not a valid postcode - number in wrong position");
		//obj.focus();
		return msg;
	}
	if (!(test.charAt(size-4) == " ")){//space in position length-3 rule
		msg = (test + " is not a valid postcode - no space or space in wrong position");
		//obj.focus();
		return msg;
	}
	count1 = test.indexOf(" ");count2 = test.lastIndexOf(" ");
	if (count1 != count2){//only one space rule
		msg = (test + " is not a valid postcode - only one space allowed");
		//obj.focus();
		return msg;
	}
	//alert("Postcode Format OK");
	return msg;
}
function fnChkNum(obj,msg){
	exp = /^[\d]/;
	var rMsg = '';
	if(!exp.test(obj)){
		rMsg = "Please enter only numeric values in "+msg;
	}
	return rMsg;
}
function fnClear(){
	if(confirm("This will reset all your form entries. Are you sure you want to reset?")){
		document.ApplyForm.reset();
	}
}
function fnLicense(lic){
	if(lic=="2"){
		document.getElementById('clean').style.display="none";
		document.getElementById('years_held').style.display="none";
	}else{
		if(navigator.appName=="Microsoft Internet Explorer"){
			document.getElementById('clean').style.display="block";
			document.getElementById('years_held').style.display="block";
		}else{
			document.getElementById('clean').style.display="table-row";
			document.getElementById('years_held').style.display="table-row";
		}
	}
}
/* Valid Formats ends here */