// JavaScript Document

function isNumeric(pccharinput) {  // 1) this allows the numbers 0-9
	return(pccharinput>="0" && pccharinput<="9")
}

function isAlphabetic(pccharinput) { // 2) this allows the letters A-Z & a-z
	return((pccharinput>="A" && pccharinput<="Z") || 
		(pccharinput>="a" && pccharinput<="z"))
}

function isAlphaNumeric(pccharinput) { //  3) this allows 1) & 2) from above to be put together
	return (isAlphabetic(pccharinput) || isNumeric(pccharinput))
}

function isEmpty(pccharinput) { // checks for any empty fields in the HTML form
	if (pccharinput=="" || pccharinput==" ")
	return true
	else return false
	}


//////////////////////////////////////////////////////////////////////////


function isNameChar(pccharinput) {  // this is all the alphabet and the special characters for the name
	return (isAlphabetic(pccharinput) || isNameSpecialChar(pccharinput))
}

//alert(isNameChar("michelle'hgf"))
function isNameSpecialChar(pccharinput) {  // these are the special characters allowed for the name
	return (pccharinput=="'" || pccharinput=="-" || pccharinput==" ")
}


function isNameString(pcstrInput) {  

	var w, lvintapostrophepos, lvintdashpos, lvintspacepos
	
	lvintapostrophepos=pcstrInput.indexOf("'")
	lvintdashpos=pcstrInput.indexOf("-")
	lvintspacepos=pcstrInput.indexOf(" ")
	
	for (w=0; w<pcstrInput.length; w++) {
	
		if (!isNameChar (pcstrInput.charAt(w)))
		{ 
			return false
		}
	}
	
	if (lvintapostrophepos==0)  // if ' is at postion 0 it's false
		return false
	if (lvintdashpos==0) // if - is at postion 0 it's false
		return false
	if (lvintspacepos==0) // if there is a space at 0 it's wrong
		return false
	if (isEmpty(pcstrInput))  // if the text field is empty it will return false
		return false
	return true
} 

///////////////////////////////////////////////////////////

function isEmailSpecialChar(pccharinput) {
	return (pccharinput=="@" || pccharinput=="-" || pccharinput=="_" || pccharinput==".")
}

function isEmailChar(pccharinput) {  // allows numbers, alphabets and the special email characters from above.
	return (isAlphaNumeric(pccharinput) || isEmailSpecialChar(pccharinput))
}

function isEmailString (pcstrInput) { 

	var w, lvintlength, lvintlastpos, lvintatpos, lvintatlastpos, lvintfirstpos

	lvintlength=pcstrInput.length
	lvintlastpos=pcstrInput.lastIndexOf(".")
	lvintatpos=pcstrInput.indexOf("@")
	lvintfirstpos=pcstrInput.indexOf(".")
	lvintatlastpos=pcstrInput.lastIndexOf("@")
	
	
	for (w=0; w<pcstrInput.length; w++) 
	{ 
		if (!isEmailChar (pcstrInput.charAt(w)))
		{ 
			return false
		} 
	} 	

	if(lvintatpos==0) // if @ is = 0 it's false.
		return false

	if (lvintlastpos==0) // if last . is = 0 it's wrong
		return false

	if (lvintfirstpos==0) // if . is = to 0 it's wrong
		return false

	if (lvintatlastpos==-1) // there is no @ in the email address
		return false

	if (lvintfirstpos==-1) // there is no . in the email address
		return false

	if (pcstrInput.indexOf("@.")!=-1) // this means the @. are not = to -1 (basically if there is @ and. together it returns false.)
		return false
		
	if (pcstrInput.indexOf(".@")!=-1) //there are .@ together
		return false
		
	if (pcstrInput.indexOf("@@")!=-1) // two @@ together
		return false
		
	if (pcstrInput.indexOf("..")!=-1) // this means the two .. are not = to -1 (basically if there are 2 .. it returns false.)
		return false

	if(lvintlength-lvintlastpos<2) // there are not two letters after the last .
		return false
	 
	return true
} 

//////////////////////////////////////////////////////////////////////////////////
function isCurrencyChar(pccharInput) {  // allows numbers and dots in the currency
	return (isNumeric(pccharInput) || pccharInput==".")
}

function isCurrencyString(pcstrInput) { 

	var i
	for (i=0; i<pcstrInput.length; i++) 
	{  
		if (!isCurrencyChar (pcstrInput.charAt(i)))  
		{  
			return false
		}  
	} 
	return true
}  

function isCurrencyFormat(pcstrInput) {   
 	var lvintlength, lvintdotpos
 
 	lvintlength=pcstrInput.length
	lvintdotpos=pcstrInput.lastIndexOf(".")
	
	//if(lvintdotpos!=-1 && lvintlength-lvintdotpos>5) // there can only be 4 numbers after the last dot.
	if (lvintlength-lvintdotpos>3) // there can only be 2 digits after the last decimal place
		//alert("There can only be two digits after the last decimal number")
		return false
	return true
}

function currency(pcstrInput) {  // if it is not isCurrencyString, isCurrencyFormat & isEmpty make this false
 	if (isCurrencyString(pcstrInput) && isCurrencyFormat(pcstrInput) && (!isEmpty(pcstrInput)))
		return true
	else return false
}

//////////////////////////////////////////////////////////////////////////
	
function isSelect(pcobjElem){  // if the dropdown box is at selected index 0 then it returns false (this is only used for the country)
	if(pcobjElem.selectedIndex == 0)
		return false
	else
		return true
}

///////////////////////////////////////////////////////////////////////////////////

function isDateChar(pccharinput) { // checks that only numbers and the - can be used
	return (isNumeric(pccharinput) || pccharinput=="-")
}


function isDateString(pcstrInput) {  

	var i, lvintlength, lvintdashpos, lvintlastdashpos, lvintSpacepos
	
	lvintlength=pcstrInput.length
	lvintdashpos=pcstrInput.indexOf("-")
	lvintlastdashpos=pcstrInput.lastIndexOf("-")
	lvintSpacepos=pcstrInput.indexOf(" ")
	
	for (i=0; i<pcstrInput.length; i++) 
	{  
		if (!isDateChar (pcstrInput.charAt(i)))
		{  
			return false
			
	if(lvintdashpos==-1) {  //there is no - in the text field
		//alert("There is no dash in the feild. Please enter again.")
		return false
		}
	else if (lvintSpacepos!=-1) {  // no spaces are allowed
		//alert("No spaces are allowed. Please try again")
		return false
		}
	
	else if(lvintlastdashpos!=5) {  //There's no - in No. 5 of the date
		return false
		}
		
	else if(lvintdashpos!=2) {  //There's no - in No. 2 of the date
		return false
		}
	}  
} 
	return true
}  				



function isLeapYear(yyyy) {  
	return (yyyy%100!=0 && yyyy%4==0 || yyyy%400==0)
}
	
function isValidDate(pcstrDate) {  
	
	var dd=pcstrDate.substr(0, 2)
	var mm=pcstrDate.substr(3, 2)
	var yyyy=pcstrDate.substr(6, 4)
	var monthAmountArray=new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
	var monthArray=new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December")
	//var monthNoArray=new Array("01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12") 
	
if (!((mm>=1) && (mm<=12))){  
		alert("There are only 12 months in a year.")						
		return false
		}
else if ((mm==04 || mm==06 || mm==09 || mm==11) && !(dd>=1 && dd<=30)) { 
		alert("There are only 30 days in " + monthArray[mm-1])
		return false
		}
else if ((mm==01 || mm==03 || mm==05 || mm==07 || mm==08 || mm==10 || mm==12) && !(dd>=1 && dd<=31)) {
		alert("There are only 31 days in " + monthArray[mm-1])
		return false
		}
else if (mm==02){
		if (isLeapYear(yyyy)) {
			if(!(dd>=1 && dd<=29)) {
				alert("Feburary has 29 days in the year " + yyyy)
				return false
				}
		}
		else if(!(dd>=1 && dd<=28)) {
			alert("Feburary has 28 days in the year " + yyyy)
			return false
		}
	}
 return true
} 
	
function isDate(pcstrDate) {   // if the text field is empty, is not the datestring and is not the vaild date it's wrong
	
	if (isEmpty(pcstrDate)) {
		return false
	}
	
	else if (!isDateString(pcstrDate)) {
		return false
		}
			
	else if (!isValidDate(pcstrDate)) {
		return false
		}	
	
	else return true
}



function isContactForm() {
	if (document.enquiry.Name.value=="") {
		alert("Your name is required");
		document.enquiry.Name.focus();
		return false;
	}
	
	if (!isEmailString(document.enquiry.Email.value)) {
		alert("Your email address is required.");
		document.enquiry.Email.focus();
		document.enquiry.Email.select();
		return false;
	}
}

function isSubscribe() {
	if (document.subscribe.Email.value=="") {
		alert("Your Email is required");
		document.subscribe.Email.focus();
		return false;
	}
	
	if (!isEmailString(document.subscribe.Email.value)) {
		alert("A valid email address is required.");
		document.subscribe.Email.focus();
		document.subscribe.Email.select();
		return false;
	}
}

