/*******************************************************************************************
 * general error checking
 *******************************************************************************************/    
function notTelephoneNum(str) {
	str = str.replace(/[^0-9]/g, '');
	return (str.length < 6);
}
function notSortCode(str) {
	str = str.replace(/[^0-9]/g, '');
	return (str.length != 6);
}

function notAccountNumber(str) {
	str = str.replace(/[^0-9]/g, '');
	return (str.length < 8);
}

function validatePostCode (edPostCode)
{

	var bOK = true
	var sPostCode = edPostCode.value.replace (/ /g, '');
	if (sPostCode == '') {
	    bOK = false;
	} else if (sPostCode.length < 5){
	    bOK = false;
	}
	if (!bOK)
	{
		return false;	
	}
	return true;
}

//showing errors in context

var firstError;
function appendError(obj,error) 
{
	var y =  findPosY(obj)-10; 

	if(y>0 && y<firstError){
		firstError= y;
	}
	var temp=document.createElement("div");
	var txt=document.createTextNode(error); 
	temp.className="error";
	temp.title="error";
	temp.appendChild(txt);
	// make sure we're not doubling up error messages
	if(obj && (!obj.lastChild || !obj.lastChild.className || obj.lastChild.className != "error"))
	{
		obj.appendChild(temp); 
	} 
}  

function noError(obj,labelobj,error) 
{

	// make sure we're not doubling up error messages
	if(obj && labelobj)
	{
		//obj.appendChild(temp);
		labelobj.className="left";
		obj.innerHTML = "";
		obj.className = "";
	} 
}

function appendQuoteError(obj,error) 
{

	var y =  findPosY(obj)-10; 

	if(y>0 && y<firstError){
		firstError= y;
	}
	var temp=document.createElement("div");
	var txt=document.createTextNode(error); 
	temp.className="error";
	temp.title="error";
	temp.appendChild(txt);
	// make sure we're not doubling up error messages
	if(obj && (!obj.lastChild || !obj.lastChild.className || obj.lastChild.className != "error"))
	{
		obj.appendChild(temp); 
	} 
}  
//get rid of errors
function removeError()
{ 

	var par=this.parentNode; 
	
	var parpar=par.parentNode;
	var parparpar=parpar.parentNode;
	var parparparpar=parparpar.parentNode; 

	if(parparparpar && parparparpar.lastChild && parparparpar.lastChild.className && parparparpar.lastChild.className=="error")
	{
		parparparpar.removeChild(parparparpar.lastChild)
	}
	if(parparpar && parparpar.lastChild && parparpar.lastChild.className && parparpar.lastChild.className=="error")
	{
		parparpar.removeChild(parparpar.lastChild)
	}

	if(parpar && parpar.lastChild && parpar.lastChild.className && parpar.lastChild.className=="error")
	{
		parpar.removeChild(parpar.lastChild);
	}
	if(par && par.lastChild && par.lastChild.className && par.lastChild.className=="error")
	{
		par.removeChild(par.lastChild)
	}

	return true;
}  

function daysInMonth(month,year) {
    var m = [31,28,31,30,31,30,31,31,30,31,30,31];
    if (month != 2) return m[month - 1];
    if (year%4 != 0) return m[1];
    if (year%100 == 0 && year%400 != 0) return m[1];
    return m[1] + 1;
} 
  
// check a date is well-formed and lies between limits
function dateCheck(day,month,year,lowLimit,highLimit){

	if(isValidDate(day,month,year)){
        //isVaildDate is in scripts.js
		var entered=new Date(year,(month - 1),day); // (month - 1) as January is month 0
		var today=new Date();
		var diff=today.getTime()-entered.getTime();
		var one_year=1000*60*60*24*365.242199;
		var years=Math.floor(diff/one_year);
		
		
		if(years<=highLimit   && years>=lowLimit) 
		{
			return years;  //this'll be the age if the given date was a DOB
		}
		else
		{    
			return -1;  //out of range
		}
	} else{

		return -2;   // not a valid date

	}

}  
//Single Alphabet
function isSingleAlphabet(val){
    if(val==null){return false;}
    //if (val.length==0 || val.length>1){return false;}
    inputStr = val.toString()
    for (var i = 0; i < inputStr.length; i++) 
    {
        var oneChar = inputStr.charAt(i)

       if (((oneChar < "a") || (oneChar > "z")) && ((oneChar < "A") || (oneChar > "Z"))) {return false;}
    }
    return true;
}

//isAlphabetAndSpace
function isAlphabetAndSpace(val){
    if(val==null){return false;}
    //if (val.length==0 || val.length>1){return false;}
    inputStr = val.toString()
    for (var i = 0; i < inputStr.length; i++) 
    {
        var oneChar = inputStr.charAt(i)

       if (((oneChar < "a") || (oneChar > "z")) && ((oneChar < "A") || (oneChar > "Z"))&& (oneChar != " ")) {return false;}
    }
    return true;
}
//isAlphabetSpaceNumber for post code
function isAlphabetSpaceNumber(val){
    if(val==null){return false;}
    //if (val.length==0 || val.length>1){return false;}
    inputStr = val.toString()
    for (var i = 0; i < inputStr.length; i++) 
    {
        var oneChar = inputStr.charAt(i)

       if (((oneChar < "a") || (oneChar > "z")) && ((oneChar < "A") || (oneChar > "Z"))&& (oneChar != " ") && (oneChar < "0" || oneChar > "9")) {return false;}
    }
    if ((val.length)<6)
    {
    return false;
    }
    return true;
}
//---------------------------
function isEmailAddr(str) {
		var re = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,})+$/;
		return re.test(str);
	}
	

//isAlphabetAndNumber
function isAlphabetAndNumber(val){
    if(val==null){return false;}
    //if (val.length==0 || val.length>1){return false;}
    inputStr = val.toString()
    for (var i = 0; i < inputStr.length; i++) 
    {
        var oneChar = inputStr.charAt(i)

       if (((oneChar < "a") || (oneChar > "z")) && ((oneChar < "A") || (oneChar > "Z")) && (oneChar < "0" || oneChar > "9")) {return false;}
    }
    
    return true;
}

//Address 
function isAddress(val){
    if(val==null){return false;}
    //if (val.length==0 || val.length>1){return false;}
    inputStr = val.toString()
    for (var i = 0; i < inputStr.length; i++) 
    {
        var oneChar = inputStr.charAt(i)
        var dblQut = '"';
       if (((oneChar < "a") || (oneChar > "z")) && ((oneChar < "A") || (oneChar > "Z")) && (oneChar != " ") && (oneChar < "0" || oneChar > "9") && (oneChar != "/") && (oneChar != "-") && (oneChar != ".") && (oneChar != ",") && (oneChar != "'") && (oneChar != dblQut) && (oneChar != "(") && (oneChar != ")") && (oneChar != "#") ) {return false;}
    }
    return true;
}



//---------------------------
//Town
function isTown(val){
    if(val==null){return false;}
    //if (val.length==0 || val.length>1){return false;}
    inputStr = val.toString()
    for (var i = 0; i < inputStr.length; i++) 
    {
        var oneChar = inputStr.charAt(i)
        var dblQut = '"';
       if (((oneChar < "a") || (oneChar > "z")) && ((oneChar < "A") || (oneChar > "Z")) && (oneChar != " ") && (oneChar != ",") && (oneChar != "'") && (oneChar != "_") && (oneChar != "-")) {return false;}
    }
    return true;
}
//---------
//County 
function isCounty(val){
    if(val==null){return false;}
    //if (val.length==0 || val.length>1){return false;}
    inputStr = val.toString()
    for (var i = 0; i < inputStr.length; i++) 
    {
        var oneChar = inputStr.charAt(i)
        var dblQut = '"';
       if (((oneChar < "a") || (oneChar > "z")) && ((oneChar < "A") || (oneChar > "Z")) && (oneChar != " ") && (oneChar != "&")  ) {return false;}
    }
    return true;
}

//---------
function removeErrorGivenId(DivId)
{ 
	var sHiddenerror = document.getElementById(DivId)
	var par=sHiddenerror.parentNode; 
	
	var parpar=par.parentNode;
	var parparpar=parpar.parentNode;
	var parparparpar=parparpar.parentNode; 

	if(parparparpar && parparparpar.lastChild && parparparpar.lastChild.className && parparparpar.lastChild.className=="error")
	{
		parparparpar.removeChild(parparparpar.lastChild)
	}
	if(parparpar && parparpar.lastChild && parparpar.lastChild.className && parparpar.lastChild.className=="error")
	{
		parparpar.removeChild(parparpar.lastChild)
	}

	if(parpar && parpar.lastChild && parpar.lastChild.className && parpar.lastChild.className=="error")
	{
		parpar.removeChild(parpar.lastChild);
	}
	if(par && par.lastChild && par.lastChild.className && par.lastChild.className=="error")
	{
		par.removeChild(par.lastChild)
	}

	return true;
}  
// add the removeError function to all fields
addLoadEvent (
	function() 
	{
		if (document.getElementsByTagName) 
		{

			var selects = document.getElementsByTagName('select');  
			var selectsLength = selects.length; 
			// Loop through all selects, and add error remover
			for (var i=0; i<selectsLength; i++) 
			{

				selects[i].onfocus=removeError;  
			}
			// Loop through all inputs, and add error remover  
			var inputs = document.getElementsByTagName('input'); 
			var inputsLength = inputs.length;
			for (var i=0; i<inputsLength; i++) 
			{

				inputs[i].onfocus=removeError;  


			}
			return true;
		}
		else
		{
			return false;
		}
		return false;
	}
);