var re_mail = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z])+$/;
var re_amt= /^[\d]*[\.]*[\d]{0,1}[\d]{1,2}$/;
var re_numberwithspc= /^[0-9( )]*$/;
var re_exp =/^[0-9]*$/;     
var xmlHttp;
var ie=document.all?1:0;
var DATE_FORMAT_TYPE=1
//1- MM/DD/YYYY   2-DD/MM/YYYY

function isnull(txtid,errid,err)
{
   if(trimString(get(txtid).value)=='')
   {
     var serr="fnSetError"+err+'(get(txtid),errid)';
     eval(serr);
     return false;
   }
   return true;
}
function isEmailValid(email,err)
{
   if (!re_mail.test(get(email).value)) 
    {    
        var serr="fnSetError"+err+'(get(email),"E0002")';
        eval(serr);
        return false;
    }
    return true;
}
function isamt(txtid,err)
{
    if(get(txtid).value!="")
    {
        if (!re_amt.test(get(txtid).value)) 
        {    
            var serr="fnSetError"+err+'(get(txtid),"E0018")';
            eval(serr);
            return false;
        }
    }
    return true;
}
function isdtvalid(txtid,err)
{
    if(get(txtid).value!="")
    {
        if (!isValidDate(get(txtid).value)) 
        {    
            var serr="fnSetError"+err+'(get(txtid),"E0047")';
            eval(serr);
            return false;
        }
    }
    return true;
}

function dtCompare(txtid1,txtid2,errid,err)
{
    if(!isdtvalid(txtid1,err)){return false ;}
    if(!isdtvalid(txtid2,err)){return false ;}
    if (!dateCompare(get(txtid1).value,get(txtid2).value,'<')) 
    {    
        var serr="fnSetError"+err+'(get(txtid2),errid)';
        eval(serr);
        return false;
    }
    return true;
}
function isnumberwithspc(txtid,err)
{
    if (!re_numberwithspc.test(get(txtid).value)) 
    {    
        var serr="fnSetError"+err+'(get(txtid),"E0018")';
        eval(serr);
        return false;
    }
    return true;
}
function isnumberwithoutspc(txtid,err)
{
    if (!re_exp.test(get(txtid).value)) 
    {    
        var serr="fnSetError"+err+'(get(txtid),"E0018")';
        eval(serr);
        return false;
    }
    return true;
}

function chklen(txtid,err,TA)
{
    len=get(txtid).value.length;
    if(TA='tfn')
    {
        if((len<8) || (len >11))
        {
            var serr="fnSetError"+err+'(get(txtid),"E0027")';
            eval(serr);
            return false;
        }
    }
    else
    {
        if((len<11) || (len >14))
        {
            var serr="fnSetError"+err+'(get(txtid),"E0027")';
            eval(serr);
            return false;
        }
    }   
    return true;
}


/*****************************TFN VALIDATION************************************/
function tfnvalid(txtid,err,TA)
{
    if(!isnumberwithspc(txtid,err)) { return false;}
    if(!chklen(txtid,err,'abn')) { return false;}
    xmlHttp=GetXmlHttpObject()
    if (xmlHttp==null)
    {
    alert ("Browser does not support HTTP Request")
    return
    }
    var url="tfnabn.aspx?str="+ get(txtid).value;
    xmlHttp.open("GET",url,false)
    xmlHttp.send(null)
    var res;
    res=xmlHttp.responseText
    if (res=="INVALID")
    {
    var serr="fnSetError"+err+'(get(txtid),"E0027")';
    eval(serr);
    return false;
    }
    return true;
}	
/**********************ABN  *****************/
function isnullrow(txtid,errid,err)
{
   if(trimString(txtid.value)=='')
   {
     var serr="fnSetError"+err+'(txtid,errid)';
     eval(serr);
     return false;
   }
   return true;
}
function isnumberwithspcrow(txtid,err)
{
    if (!re_numberwithspc.test(txtid.value)) 
    {    
        var serr="fnSetError"+err+'(txtid,"E0018")';
        eval(serr);
        return false;
    }
    return true;
}

function chklenabn(txtid,err,typ)
{
   if(typ=="1")
            { len=txtid.value.length;}
   else{      
   len=get(txtid).value.length;
   }
        if((len<11) || (len >14))
        {
            if(typ=="1")
            {
            var serr="fnSetError"+err+'(txtid,"E0027")';
            }
            else
            {var serr="fnSetError"+err+'(get(txtid),"E0027")';}
            eval(serr);
            return false;
        }
    return true;
}

function isamtrow(txtid,errid,err,isnul)
{
    if(isnul=='1'){ if(!isnullrow(txtid,errid,err)) { return false;} }
    if(txtid.value!=""){
    if (!re_amt.test(txtid.value)) 
    {    
        var serr="fnSetError"+err+'(txtid,"E0018")';
        eval(serr);
        return false;
    }
    }
    return true;
}

function ABNvalid(txtid,errid,err,typ)
{
    if(typ=="1")
    {
    if(!isnullrow(txtid,'E0022',err)) { return false;}
    if(!isnumberwithspcrow(txtid,err)) { return false;}
    if(!chklenabn(txtid,err,'1')) { return false;}
    }
    else
    {
    if(!isnull(txtid,'E0022',err)) { return false;}
    if(!isnumberwithspc(txtid,err)) { return false;}
    if(!chklenabn(txtid,err,'')) { return false;}
    }
    
    xmlHttp=GetXmlHttpObject()
    if (xmlHttp==null)
    {
    alert ("Browser does not support HTTP Request")
    return
    }
    if(typ=="1")
    {
     url="tfnabn.aspx?str="+ txtid.value;
    }
    else
    {
     url="tfnabn.aspx?str="+ get(txtid).value;
    }
    xmlHttp.open("GET",url,false)
    xmlHttp.send(null)
    var res;
    res=xmlHttp.responseText
    if (res=="INVALID")
    {
    if(typ=="1")
    {
    var serr="fnSetError"+err+'(txtid,"E0027")';
    }
    else
    {
    var serr="fnSetError"+err+'(get(txtid),"E0027")';
    }
    
    eval(serr);
    return false;
    }
    return true;
}	
function chkemail(txtid,err)
{
    if(!isEmailValid(txtid,err)){return false;};
    xmlHttp=GetXmlHttpObject()
    if (xmlHttp==null)
    {
    alert ("Browser does not support HTTP Request")
    return
    }
    var url="emailcheck.aspx?str="+document.getElementById("Txtemail").value;

    xmlHttp.open("GET",url,false)
    xmlHttp.send(null)
    var res;
    res=xmlHttp.responseText

    if (res=="InValid")
    {
    var serr="fnSetError"+err+'(get(txtid),"E0042")';
    document.getElementById("diveidexist").style.display="block";
    eval(serr);
    return false;
    }
    return true;   
}


 function GetXmlHttpObject()
{ 
	var objXMLHttp=null
	if (window.XMLHttpRequest)
	{
	objXMLHttp=new XMLHttpRequest()
	}
	else if (window.ActiveXObject)
	{
	objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP")
	}
	return objXMLHttp
}  

function validdob(txtid,err,chk)
{
    if(chk=='1')
    {
      if(!isnull(txtid,'E0064',err)){return false ;}
    } 
    if(get(txtid).value!="")
    {
    if(!isdtvalid(txtid,err)){return false ;}
    var dob=get(txtid).value;
    var db=dob.split("/");
    var myDate=new Date()
    var eig= (myDate.getFullYear()-db[2]);
    var eigmon= (myDate.getMonth()-db[1]);
    var eigdate= (myDate.getDate()-db[0]);
    if(eig<1){if(eigmon<1){if(eigdate<1){ var serr="fnSetError"+err+'(get(txtid),"E0068")'; eval(serr); return false; } }}
    }
     return true;   
}
 		    
/*******************************************************************
 Function : isValidDate
 Purpose  : Check whether the date is a valid date
 Input    : a string containing the date separated by / eg: 1/1/2000
 Output   : true/false
*******************************************************************/

function isValidDate2(sDate)
{
	if(sDate=='') {return ;}//SetStatus('PLEASE ENTER VALID DATE!'); 
	var sMM,sDD,sYY;
	var iLen;
	var iDays = 0;
	var iMnInd,iDtInd;
	iLen = sDate.length;
	//alert(iLen); //Total Length of the Date string
	if( iLen<6 && iLen>10 )
		return false;
	iMnInd = sDate.indexOf("/");
	//alert(iMnInd); // Length of the date alone
	if ( iMnInd== -1) 
		return false;
	
	sDD = sDate.substring(0,iMnInd); // get data upto first /
	//alert(sDD); // The exact date typed
	if(sDD.length>2)
		return false;
    if(!isDigit(sDD))
		return false;
	iDtInd = sDate.indexOf("/",iMnInd+1);
	if ( iDtInd == -1)
		return false;
	
	sMM = sDate.substring(iMnInd+1,iDtInd); // get data upto second /
	//alert(sMM);
	if(sMM.length>2)
		return false;
	if( ! isDigit(sMM))
		return false;
	
	
	sYY = sDate.substring(iDtInd+1,iLen); // get data after second /
	if(sYY.length>4)
		return false;
	if(!isDigit(sYY))
		return false;
		
	if(DATE_FORMAT_TYPE==1) 
	{
		var t=sDD;
		sDD=sMM;
		sMM=t;
	}
	
	if ( sMM <1 || sMM > 12 )
		return false;
	if ( sYY < 1900 || sYY  > 2050)
		return false;
	switch (parseInt(sMM,10))
	{
		case 2:
		    iDays = isLeap(sYY)?29:28;
            break;
		case 1: case 3: case 5: case 7: case 8: case 10: case 12:
			iDays=31;
            break;
		case 4: case 6: case 9: case 11:
            iDays =30;
            break;
    }
    if ( sDD < 1 || sDD > iDays ) return false;
		return true;
	return true;
}
function isValidDate(sDate)
{
	if(sDate=='') {return ;}//SetStatus('PLEASE ENTER VALID DATE!'); 
	var sMM,sDD,sYY;
	var iLen;
	var iDays = 0;
	var iMnInd,iDtInd;
	iLen = sDate.length;
	//alert(iLen); //Total Length of the Date string
	if( iLen<6 && iLen>10 )
		return false;
	iMnInd = sDate.indexOf("/");
	//alert(iMnInd); // Length of the date alone
	if ( iMnInd== -1) 
		return false;
	
	sDD = sDate.substring(0,iMnInd); // get data upto first /
	//alert(sDD); // The exact date typed
	if(sDD.length>2)
		return false;
    if(!isDigit(sDD))
		return false;
	iDtInd = sDate.indexOf("/",iMnInd+1);
	if ( iDtInd == -1)
		return false;
	
	sMM = sDate.substring(iMnInd+1,iDtInd); // get data upto second /
	//alert(sMM);
	if(sMM.length>2)
		return false;
	if( ! isDigit(sMM))
		return false;
	
	
	sYY = sDate.substring(iDtInd+1,iLen); // get data after second /
	if(sYY.length>4)
		return false;
	if(!isDigit(sYY))
		return false;
		
	if(DATE_FORMAT_TYPE==1) 
	{
		var t=sDD;
		sDD=sMM;
		sMM=t;
	}
	
	if ( sDD <1 || sDD > 12 )
		return false;
	if ( sYY < 1900 || sYY  > 2050)
		return false;
	switch (parseInt(sDD,10))
	{
		case 2:
		    iDays = isLeap(sYY)?29:28;
            break;
		case 1: case 3: case 5: case 7: case 8: case 10: case 12:
			iDays=31;
            break;
		case 4: case 6: case 9: case 11:
            iDays =30;
            break;
    }
    if ( sMM < 1 || sMM > iDays ) return false;
		return true;
	return true;
}




/*****************************************************************************
 Function: dateCompare
 Purpose : to Compare two valid Dates
 Input   : two strings containing date1 and date2 and the operator sOp
		   Valid values for Operator sOp are : =, > , >= , < , <= ,  !=
 Output  : true/false
*****************************************************************************/
function dateCompare(sSrc,sDes,sOp)
{
   if(!isValidDate(sSrc)) { return ;}//SetStatus('DATE1 IS NOT A VALID DATE !'); 
   if(!isValidDate(sDes)) { return ;}//SetStatus('DATE2 IS NOT A VALID DATE !'); 
	
   var oSrcDt,oDesDt;
   var aStrTok;

   var iDt1,iDt2;

   aStrTok=sSrc.split("/");
   if(aStrTok.length !=3 ) return false;

   if(DATE_FORMAT_TYPE==1)
   	oSrcDt=new Date(aStrTok[2],aStrTok[0]-1,aStrTok[1]);
   else
   	oSrcDt=new Date(aStrTok[2],aStrTok[1]-1,aStrTok[0]);

   iDt1 = Date.parse(oSrcDt);

   if ( isNaN(iDt1)) iDt1=0;

   aStrTok=sDes.split("/");
   if(aStrTok.length !=3 ) return false;

   if(DATE_FORMAT_TYPE==1)
   	oDesDt=new Date(aStrTok[2],aStrTok[0]-1,aStrTok[1]);
   else
   	oDesDt=new Date(aStrTok[2],aStrTok[1]-1,aStrTok[0]);

   iDt2 = Date.parse(oDesDt);

   if (isNaN(iDt2)) iDt2=0;

   if(sOp!='>' && sOp!='<' && sOp!='==' && sOp!='<=' && sOp!='>=' && sOp!='<>' && sOp!='!='){SetStatus('OPERATOR IS NOT VALID !'); return ;}
  
  switch (sOp)
   {
     case ">":
			return (iDt1 > iDt2);
     case "<":
			return (iDt1 < iDt2);
     case "=": case "==":
            return (iDt1 == iDt2);
     case "<=":
			return (iDt1 <= iDt2);
     case ">=":
           return (iDt1 >= iDt2);
     case "!=" : case "<>":
           return (iDt1 != iDt2);
     default:
		   return false;
   }
 }
 




function formatAmount(elem)
{  
	var tmp;
	if(elem.value.indexOf('.') >= 0)
	{  
		tmp = elem.value.split('.');		
		if(tmp.length > 1) elem.value = tmp[0] + '.' + tmp[1].charAt(0) + tmp[1].charAt(1);  
	}  
}

/***************************************************************
 Function : isNumeric
 Purpose  : Test the string for Numeric
 Input	  : a string to be tested
 Output	  : true/false
***************************************************************/
function isNumeric(sData)
{
	if (!sData.length) return false;
 	if(sData.substring(0,1)==" ")return false;	
	var sVal= trimString(sData.toString());
    if(sVal<0)
	return false;
	return (!isNaN(sVal))
}

/***************************************************************
 Function : isDigit
 Purpose  : Test the character for a number
 Input	  : a character to be tested
 Output	  : true/false
***************************************************************/
function isDigit(sData)
{
	if (!sData.length)
	return false;
    var sVal= sData;
	var re=/\D/;
	return (!re.test(sVal));
}

/****************************************************************
 Function : trimString
 Purpose  : To Remove leading and trailing Spaces
 Input	  : a string for which the white spaces are to be removed
 Output	  : a string with the white spaces removed
 ****************************************************************/
function trimString(sStr)
{
   var s;
   sStr = sStr.toString();
   s = sStr.replace(/(^\s*)|(\s*$)/g,"");
   return(s);
}

function isValidYear(sval)
{
   if(sval=='') {fnSetError('','E0026'); return ;}
   var len,ncount;
   var sYear;
   sYear = trimString(sval.toString());
   len = sYear.length;
   if(len != 4){
     return false;
   }
   if(len == 4){
     if(!isNumeric(sval))
      return false;
     if(sval < 1900 || sval > 9999)
      return false;
   }
   return true;
}

function isAlphaNumeric(strVal)
{
	if(strVal=='') {fnSetError('','E0028'); return ;}
	if(strVal.substring(0,1)==" ")return false;
	if(!isNotAlphaNumeric(strVal))
	return true;
	else
	return false;
 }
 
 function isNotAlphaNumeric(strVal) 
 {
	if(strVal=='') {fnSetError('','E0029'); return ;}
 	if(strVal.substring(0,1)==" ")return false;
	var s= trimString(strVal.toString());
    if(s.length<1) return false;
    //var re=/[^A-Za-z0-9&\-\+\/,".()\s]/g;
	var re=/[^A-Za-z0-9&.s]/g;
    return (re.test(s));
 }

function isNotAlphabet(strVal) 
{
	if(strVal=='') {fnSetError('','E0029'); return ;}
	if(strVal.substring(0,1)==" ")return false;
	var s= trimString(strVal.toString());
    if(s.length<1) return false;
    var re=/[^A-Za-z\s]/g;
    return (re.test(s));
}
 

/********************************************************************
   Function : FormatTextArea
   Purpose  : To Avoid the user typing more than the mentioned length in the TextArea.
   Input    : Event, Target Control and Maxlength
   Output   : none
********************************************************************/

function FormatTextArea(e,sTarget,iMax)
{
	fnClearError(sTarget.id);
	try{//Try catch added to solve problem in XP.
		var iLen = parseInt(sTarget.value.length);
		var strEntry= sTarget.value.substring(iLen-1,iLen);
		var strFirst= sTarget.value.substring(0,1);
		if(strFirst==' ') sTarget.value=trimString(sTarget.value);
		if (iLen==0 && e.keyCode==32) e.keyCode=0;
		var strEntry= sTarget.value.substring(iLen-1,iLen);
		if (strEntry=='>' ||strEntry=='<' ||strEntry=='&')
			sTarget.value=sTarget.value.substring(0,iLen-1);
		iLen = parseInt(sTarget.value.length);
		if(iLen > iMax) sTarget.value=sTarget.value.substring(0,parseInt(iMax));
		if((strVal.indexOf('>') >= 0) ||(strVal.indexOf('<') >= 0)||(strVal.indexOf('&') >= 0))
			sTarget.value='';
	}catch(e){}
}


function isAlphaNumSpace(strVal)
{
	strVal=strVal.toString();
	if(strVal.substring(0,1)==" ")return false;
	var s = trimString(strVal);
	if(s.length<1) return false;
	var re=/[^A-Za-z0-9&.s ]/g;
	return !(re.test(s));
}

function isLeap(sYear)
{
    if(sYear=='') {fnSetError('','E0026'); return ;}
	var iLen;
	isValidYear(sYear);
    iLen = sYear.length;
    if ( iLen == 4 && isNumeric(sYear) )
    {
       if ((sYear%4 == 0 && sYear%100 != 0) || (sYear%400 == 0))
	       return(true);
    }
    return(false);
}

