/*******************************************************************************************
 * 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,labelobj,error) 
{
	//error="x";
    
	var y =  findPosY(obj)-10; 

	if(y>0 && y<firstError){
		firstError= y;
	}
	// make sure we're not doubling up error messages
	if(obj && labelobj && obj.className != "error")
	{
	   
		//obj.appendChild(temp);
		labelobj.className="left errorDisplay";
		obj.innerHTML = error;
		obj.className = "error";	 
	} 
}  

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("p");
	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 one_month=1000*60*60*24*30;
		var years=diff/one_year
		var months=diff/one_month
		
		if (years == 0) {
		    if (months < 6) {
		        return -1;
		    } else {
		        if (months == 6){
		            var now = new Date();
		            if (day > now.getDate()) {
		                return -1;
		            } else {
		                return years;
		            }
		        } else {
		            return years;
		        }
		    }
		} else{
		    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

	}
	
}  
//---------------
// ChilddateCheck
function ChilddateCheck(day,month,year,lowLimit,highLimit)
{
  if(isValidDate(day,month,year)){
        var inputDate = new Date(year, month, day);
	    var Nowdate = new Date()
		var diff= Nowdate.getFullYear()-year;
		var NowMonth = Nowdate.getMonth()+1;
		var NowDay =Nowdate.getDate();
		if(diff == 0){
			
				if(month >= NowMonth ){return -1}
				if (NowMonth - month == 6)
					{
					 if(day > NowDay  ){return -1;}
					}
				}					
		else if(diff == 1){
		         if(month - NowMonth > 6){return -1;}
				 if (month - NowMonth == 6)
						{
						 if(day > NowDay  ){return -1;}
						}
					}			
	   else if(diff == highLimit){
	   					if (NowMonth > month){return -1;}
							else if(NowMonth == month)
							{
							if(NowDay > day ){return -1;}
							}
	   }
        
	} else{

		return -2;   // not a valid date

	}
	
}  

// 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;
	}
);
