/**
 *	Use:: Function to trim data
 *	@param  field's data
 *	@return	boolean
 */
function trim(s)
{
	var l=0; var r=s.length -1;
	while(l < s.length && s[l] == ' ')
	{	l++; }
	while(r > l && s[r] == ' ')
	{	r-=1;	}
	return s.substring(l, r+1);
}

/**
 *	Use:: Check a composite date/time field
 *        assume date is everything up to first space
 *        and time is everything after first space
 *	@param  field's data
 *	@return	boolean
 */
function isValidDate123(d,convert)
{

	//var strDatestyle = "US"; //United States date style
	var strDatestyle = "EU";  //European date style
	var strDate;
	var strDateArray;
	var strDay;
	var strMonth;
	var strYear;
	var intDay;
	var intMonth;
	var intYear;
	var booFound = false;
	var strSeparatorArray = new Array("-"," ","/",".");
	var intElementNr;
	var err = 0;
	var strMonthArray = new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
	strDate = d;
	if (strDate.length < 1) {
		return false;
	}
	if (strDate.toLowerCase()=="today" || strDate.toLowerCase()=="now"){return true;}

	for (intElementNr = 0; intElementNr < strSeparatorArray.length; intElementNr++) {
		if (strDate.indexOf(strSeparatorArray[intElementNr]) != -1) {
			strDateArray = strDate.split(strSeparatorArray[intElementNr]);
			if (strDateArray.length != 3) 
			{
				err = 1;
				return false;
			}
			else 
			{
				strDay = strDateArray[0];
				strMonth = strDateArray[1];
				strYear = strDateArray[2];
			}
			booFound = true;
		}
	}

	if (booFound == false) {
		if (strDate.length>5) {
			strDay = strDate.substr(0, 2);
			strMonth = strDate.substr(2, 2);
			strYear = strDate.substr(4);
		}
		else
			return false;
	}
	
	// verify year part	2 or 4 digits
	if (strYear.length != 2 && strYear.length != 4) {return false;}
	if (isNaN(strYear)){return false;}
	// US style (swap month and day)
	if (strDatestyle == "US") {
		strTemp = strDay;
		strDay = strMonth;
		strMonth = strTemp;
	}

	// verify 1 or 2 digit integer day
	if (strDay.length<1 || strDay.length>2) {return false;}
	if (isNaN(strDay)){return false;}
	
	// month may be digits of characters, hence following check
	intMonth = parseInt(strMonth, 10);
	if (isNaN(intMonth)) {
		for (i = 0;i<12;i++) {
			if (strMonth.toUpperCase() == strMonthArray[i].toUpperCase()) {
				intMonth = i+1;
				strMonth = strMonthArray[i];
				i = 12;
			}
		}
		if (isNaN(intMonth)) {
			err = 3;
			return false;
		}
	}

	intDay=parseInt(strDay,10);
	intYear = parseInt(strYear, 10);
	
	if (intMonth>12 || intMonth<1) {
		err = 5;
		return false;
	}
	
	// day in month check
	if (intDay < 1 || intDay > 31){return false;}
		
	if ((intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11) && (intDay > 30)) {
		return false;
	}
	
	if (intMonth == 2) {
		if (LeapYear(intYear)) {
			if (intDay > 29) {return false;}
		}
		else 
		{
			if (intDay > 28) {return false;}
		}
	}
	
	if (!convert)
		return true;
	else
	{
		if (intYear<=99){intYear=intYear+2000;}
		return intDay+"/"+intMonth+"/"+intYear;
	}
}

/**
 *	Use:: Check start date is earlier than end date
 *	@param  field's data(startdate),field's data(enddate)
 *	@return	boolean
 */
function isEarlierOrEqual123(start,end)
{
	//convert dates to dd/mm/yyyy
	var myStart = isValidDate(start,true);
	var myEnd = isValidDate(end,true);
	if (myStart=="" || myEnd=="") return false;
	
	var startparts= myStart.split("/");
	var endparts=myEnd.split("/");

	
	
	if (Date.UTC(startparts[2],startparts[1],startparts[0]) <= Date.UTC(endparts[2],endparts[1],endparts[0]))
		return true;
	else
		return false;
}

/**
 *	Use:: Checks whether a field is empty
 *	@param  field's data
 *	@return	boolean
 */
function isBlank(field)
{
	var data=trim(field)
    for(var i = 0; i < data.length; i++)
	{
        var c = field.charAt(i);
        if ((c != ' ') && (c != '\n') && (c != '\t')) return false;
    }
    return true;
}

/**
 *	Use:: Checks length of control
 *	@param  string(relation),int(size),field's data
 *	@return	boolean
 */
function checkLength(rel,size,field)
{
	var data=trim(field);
    if(rel=="same")
	{
		if(data.length == size)
		{
			return true;
		}
	}
	if(rel=="greater")
	{
		if(data.length > size)
		{
			return true;
		}
	}
	if(rel=="lesser")
	{
		if(data.length < size)
		{
			return true;
		}
	}
    return false;
}

/**
 *	Use:: Checks wheater control's data is same
 *	@param  field 1 data,field 2 data
 *	@return	boolean
 */
function isSame(field1,field2)
{
	var data1=trim(field1);
	var data2=trim(field2); 

    if(data1==data2)
	{
		return true;
	}
	return false;
}

/**
 *	Use:: Checks valid email address
 *	@param  field's data
 *	@return	boolean
 */
function isValidEmail(field)
{
	// assume an email address cannot start with an @ or white space, but it
	// must contain the @ character followed by groups of alphanumerics and '-'
	// followed by the dot character '.'
	// It must end with 2 or 3 alphanumerics.
	
	var data=trim(field);
	var alnum="a-zA-Z0-9";
	exp="^[^@\\s]+@(["+alnum+"+\\-]+\\.)+["+alnum+"]["+alnum+"]["+alnum+"]?$";
	emailregexp = new RegExp(exp);

	result = data.match(emailregexp);
	if (result != null)
	{
		return true;
	}
	else
	{
		return false;
	}
}


function fn_form_validation(entered) {

	with(entered)
	{
		if(isBlank(txtArtTitle.value))
		{
			alert("You must enter First Name ");
			txtArtTitle.focus();
			return false;
		}

		if(isBlank(txtSurName.value))
		{
			alert("You must enter Surname");
			txtSurName.focus();
			return false;
		}

		if(isBlank(txtHouseNumber.value))
		{
			alert("You must enter House Number");
			txtHouseNumber.focus();
			return false;
		}
		if(isBlank(txtPcode.value))
		{
			alert("You must enter Post Code ");
			txtPcode.focus();
			return false;
		}
		if(isBlank(txtNumber.value))
		{
			alert("You must enter Contact Telephone Number");
			txtNumber.focus();
			return false;
		}else {
			goodChar = "+-0123456789() ";
			good = false;

			if(txtNumber.value.lastIndexOf("+")>txtNumber.value.indexOf("+") || txtNumber.value.indexOf("+")>0) {
				alert("Please Input Valid Contact Telephone Number");
				txtNumber.focus();
				return false;
			}

			for(i=0; i<txtNumber.value.length; i++)
			{
				for(j=0; j<goodChar.length; j++)
				{
					if(txtNumber.value.charAt(i) == goodChar.charAt(j))
					{
						good=true;
						break;
					}
				}

				if(good == false)
				{
					alert("'" + txtNumber.value.charAt(i)+"' is not a valid Telephone character.\n");
					txtNumber.focus();
					return false;
				}
			
				if(i == txtNumber.value.length-1 && good == true)
				{
					break;
				}

				good=false;
			}
		}

		if(isBlank(txtAuthority.value))
		{
			alert("You must enter licensing authority");
			txtAuthority.focus();
			return false;
		}
		if(isBlank(txtRenewaldate.value))
		{
			alert("You must enter rrenewal date");
			txtRenewaldate.focus();
			return false;
		}

		if(isBlank(txtEmail.value))
		{
			alert("You must enter Email ID ");
			txtEmail.focus();
			return false;
		}else
		{
			var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
		    var address = txtEmail.value;
		    if(reg.test(address) == false) {
			  alert('Invalid Email Address');
			  return false;
		    }

		}


		return true;
	}
}


function LeapYear(datea)
{
	datea = parseInt(datea, 10);

	if(datea%4 == 0)
	{
		if(datea%100 != 0)
		{
			return true;
		}
		else
		{
			if(datea%400 == 0)
				return true;
			else
				return false;
		}
	}
	return false;
}
