// JavaScript Document

var dtCh= "/";
var minYear=1900;
var maxYear=2500;

function isInteger(s){
	var i;
    for (i = 0; i < s.length; i++){   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}

function stripCharsInBag(s, bag){
	var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++){   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function daysInFebruary (year){
	// February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}
function DaysArray(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 31
		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
		if (i==2) {this[i] = 29}
   } 
   return this
}

function isDate(dtStr){
	var daysInMonth = DaysArray(12)
	var pos1=dtStr.indexOf(dtCh)
	var pos2=dtStr.indexOf(dtCh,pos1+1)
	var strDay=dtStr.substring(0,pos1)
	var strMonth=dtStr.substring(pos1+1,pos2)
	var strYear=dtStr.substring(pos2+1)
	strYr=strYear
	if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
	if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
	}
	month=parseInt(strMonth)
	day=parseInt(strDay)
	year=parseInt(strYr)
	
	var d = new Date();
	var currYear = d.getFullYear();
	
	if (pos1==-1 || pos2==-1){
		alert("The Date of Birth format is incorrect.")
		return false
	}
	if (strMonth.length<1 || month<1 || month>12){
		alert("The Date of Birth format is incorrect.")
		return false
	}
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
		alert("The Date of Birth format is incorrect.")
		return false
	}
	if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
		alert("The Date of Birth format is incorrect.")
		return false
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
		alert("The Date of Birth format is incorrect.")
		return false
	}
	if (year >= currYear){
		alert("The Date of Birth must be less than the current year.")
		return false
	}
return true
}



function formValidator(){
	// Make quick references to our fields
	var firstname = document.getElementById('FirstName');
	var lastname = document.getElementById('LastName');
	var email = document.getElementById('E-Mail');
	var telmobile = document.getElementById('Mobile');
	var telhome = document.getElementById('Phone');
	var possought = document.getElementById('PositionSought');
	var dob = document.getElementById('DateofBirth');
	var street = document.getElementById('Street');
	var city = document.getElementById('City');
	var county = document.getElementById('County');
	var postcode = document.getElementById('PostCode');
	var country = document.getElementById('Country');
	var preflocation = document.getElementById('Location');
	var cv = document.getElementById('CV');
	
	// Check each input in the order that it appears in the form!
	if(isEmpty(firstname, "The 'First Name' field is required.")){
	if(isEmpty(lastname, "The 'Last Name' field is required.")){
	if(emailValidator(email, "The e-mail address is not in a valid format.")){
	if(isEmpty(telmobile, "The 'Tel (Mobile)' field is required.")){
	if(isEmpty(telhome, "The 'Tel (Home)' field is required.")){
	if(isEmpty(possought, "The 'Position Sought' field is required.")){
	//if(isEmpty(dob, \"The 'Date of Birth' field is required.\")){
	if(dateValidator(dob, "The 'Date of Birth' format is incorrect.")){
	if(isEmpty(street, "The 'Street' field is required.")){
	if(isEmpty(city, "The 'City' field is required.")){
	if(isEmpty(county, "The 'County' field is required.")){
	if(isEmpty(postcode, "The 'Post Code' field is required.")){
	if(isEmpty(country, "The 'Country' field is required.")){
	if(isEmpty(preflocation, "The 'Prefered Location(s)' field is required.")){
	if(isEmpty(cv, "The 'CV' field is required.")){
	return true;
	}
	}
	}
	}
	}
	}
	}
	}
	}
	//}
	}
	}
	}
	}
	}
	
	return false;
	
}

function isEmpty(elem, helperMsg){
	if(elem.value.length == 0){
		alert(helperMsg);
		elem.focus(); // set the focus to this input
		return false;
	}
	return true;
}

function emailValidator(elem, helperMsg){
	var emailExp = /^[\w\-\.\+]+\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,4}$/;
	if(elem.value.match(emailExp)){
		return true;
	}else{
		alert(helperMsg);
		elem.focus();
		return false;
	}
}

function dateValidator(elem, helperMsg){
	if(elem.value.length != 0){
		if (isDate(elem.value)==false){
			elem.focus()
			return false
		}
		return true
		}
    	return true
}