/**
* Name        : fnAlphaNumericKeyCheck
* Description : Field allow AlphaNumeric only
* called by   : onKeyPress Event
* @param      : Window.event
* @return     : boolean
*/
function fnAlphaNumericKeyCheck(obj)
{
	var key=obj.keyCode;
	if(((key>64)&&(key<91))||((key>96)&&(key<123))||((key>47)&&(key<58)))
		return true;
	else
		return false;	
}

// This function validates alphanumeric field values
function fnValidAlphaNumeric(textObj,msg) 
{
    var inputval=textObj.value;
    var inputstr=inputval.toString();
    if(inputstr.length>150)
    {
      alert('Too Long');
      textObj.select();
      return false;
    }
     /** if (inputval=="***")
	{
		return true;
	} */
	
	if (inputval=="")
		{
			return true;
	}
	for(var i=0;i<inputstr.length;i+=1)
     {
      var onechar=inputstr.charAt(i);
       if((onechar < "A" || onechar > "Z") && (onechar < "a" || onechar > "z") 
       		&& (onechar < "0" || onechar > "9")&& onechar!=" ")
       {
          alert(msg);
          textObj.select();
          return false;
       }
       if((i==0) && (onechar==" "))
       {
         alert("Avoid using spaces");
         textObj.select();
         return false;
       }      
     } 
     return true;
 
}

/**
* Name        : fnAlphabetsWithDotKeyCheck
* Description : Field allow Alphabets only
* called by   : onKeyPress Event
* @param      : Window.event
* @return     : boolean
*/
function fnAlphabetsWithDotKeyCheck(obj)
{
	var key=obj.keyCode;
	if(((key>64)&&(key<91))||((key>96)&&(key<123))||(key==46))
		return true;
	else
		return false;	
}

/**
* Name        : fnAlphabetsWithDotKeyCheck
* Description : Field allow Alphabets only
* called by   : onKeyPress Event
* @param      : Window.event
* @return     : boolean
*/
function fnAlphabetsWithDotSpaceKeyCheck(obj)
{
	var key=obj.keyCode;
	if(((key>64)&&(key<91))||((key>96)&&(key<123))||(key==46) ||(key==32))
		return true;
	else
		return false;	
}


/**
* Name        : fnAlphabetsKeyCheck
* Description : Field allow Alphabets only
* called by   : onKeyPress Event
* @param      : Window.event
* @return     : boolean
*/
function fnAlphabetsKeyCheck(obj)
{

	var key=obj.keyCode;
	
	if((key>64)&&(key<91) || (key>96)&&(key<123))
		return true;
	else
		return false;	
}

// This function validates alphabetic field values
function fnValidAlphabets(textObj,msg)
{
	var inputval=textObj.value;
	var inputstr=inputval.toString(); 

	if(inputstr.length > 50)
	{
		alert('Too Long');
		textObj.select();
		return false;
	} 
	if(inputstr.length<2 && inputstr.charAt(0)!="")
	{
		alert('Single Character Not allowed');
		textObj.select(); 
		return false;
	} 

	/** if (inputval=="***")
	{
		return true;
	} */

	for(var i=1;i<inputstr.length;i+=1)
	{

		var onechar=inputstr.charAt(i); 
		var one_char=inputstr.charAt(0); 

		if(one_char==" ")
		{
			alert("Avoid using spaces");
			textObj.select();
			return false;
		} 

		if((onechar < "A" || onechar > "Z") 
		&& (onechar < "a" || onechar >"z") && onechar!=" ")
		{
			alert(msg);
			textObj.select();
			return false;
		}

		if(one_char < "A" || one_char > "Z")
		{
			alert("First letter must be in upper case");
			textObj.select();
			return false;
		} 
		else 
		return true; 
	} 
	return true; 

} 

/**
* Name        : fnNumericKeyCheck
* Description : Field allow Numeric only
* called by   : onKeyPress Event
* @param      : Window.event
* @return     : boolean
*/
function fnNumericKeyCheck(obj)
{
	var key=obj.keyCode;
	if((key>47)&&(key<58))
		return true;
	else
		return false;	
}

/**
* Name        : fnNumericNotFirstZeroKeyCheck
* Description : Field allow Numeric only(first letter not zero)
* called by   : onKeyPress Event
* @param      : Window.event
* @param      : textbox
* @return     : boolean
*/
function fnNumericNotFirstZeroKeyCheck(obj,txt)
{
	var curpos=fnFindCurPosition(txt);
	var len=txt.value.length;
	var key=obj.keyCode;
	if((curpos==0)&&(key==48))
		return false;
	else if((key>47)&&(key<58))
		return true;
	else
		return false;
}
/**
* Name        : fnNumericWithDotKeyCheck
* Description : Field allow Numeric and dot only
* called by   : onKeyPress Event
* @param      : Window.event
* @return     : boolean
*/
function fnNumericWithDotKeyCheck(obj)
{
	var key=obj.keyCode;
	if(((key>47)&&(key<58))||(key==46))
		return true;
	else
		return false;	
}

// This function validates numeric field values
function fnValidNumeric(textObj,msg)  
{
   var inputval=textObj.value;
   var check=inputval.substring(0,3);
	//alert(check);
	/** if ((inputval=="***") || (inputval==""))
	{
		return true;
	} */
	
	if(inputval=="")
	{
		return true;
	} 
	
	if((inputval=="0") || (inputval=="00"))
	{
		alert('Enter Valid Number');
      	textObj.select();
     	return false;
	}

	if(check=="000")
	{
	alert('Enter Valid Number');
      	textObj.select();
     	return false;
	}
	var inputstr=inputval.toString();
  if(inputstr.length>20)
   {
      alert('Maximum length is 20');
      //textObj.value="";
      textObj.select();
      return false;
   }
   for(var i=0;i<inputstr.length;i+=1)
   {
       var onechar=inputstr.charAt(i);
       if(onechar < "0" || onechar > "9")
       {
          alert(msg);
          //textObj.value="";
      	  textObj.select();
          return false;
       }
    }
    return true;

}

// This function validates decimal number field values
function fnValidDecimalNumber(textObj,msg)  
{
	var inputval=textObj.value;
	oneDecimal=false;
	var inputstr=inputval.toString();
	if(inputstr.length>20)
	{
		alert('Too Long');
		textObj.select();
		return false;
	}
	for(var i=0;i<inputstr.length;i+=1)
	{
		var onechar=inputstr.charAt(i);
		if(onechar =="." && !oneDecimal)
		{
			oneDecimal=true;
			continue;
		} 
		if(onechar =="." && oneDecimal)
		{
			alert("Please check your value");
			textObj.select();
			return false;
		}
		if(onechar < "0" || onechar > "9")
		{
			alert(msg);
			textObj.select();
			return false;
		}
	}
	return true;
}

/**
* Name        : fnDiscountKeyCheck
* Description : Field allow Numeric and dot only(for discount fields)
* called by   : onKeyPress Event
* @param      : Window.event
* @param      : textbox
* @return     : boolean
*/
function fnDiscountKeyCheck(obj,txt)
{
	var val=txt.value;
	var len=val.length;
	var key=obj.keyCode;
	//alert(key);
	if(len==1)
	{
		if(key==46)
		   return true;
	}
	if(len==0)
	{
		if(key==46)
		{
		txt.value="0"+txt.value;
		return true;
		}
	} 
	if((key>47)&&(key<58))
	{
		if((len==1)&&(key==46))
		{
			val=val+'.';
			txt.value=val;
		}
		if((len==1)&&(val.substring(1,2)=='.'))
		{
			alert(val.substring(1,2));
			return false;
		}
		if((len==2)&&(val.substring(1,2)!='.'))
		{
			val=val+".";
			txt.value=val;
		}

	}
	else
	  return false;
}

/* Function used to convert string to Double Discount format
*/
function fnStringToDiscount(obj)
{

var str=obj.value;
var booln=false;
if(str!="")
{
	for(var i=0;i<str.length;i+=1)
	{
		var onechar=str.charCodeAt(i)
		if((onechar<58 && onechar>47) ||(onechar==46))
		{
			booln=true;
		}
		else
		{
		obj.focus();
		alert("Invalid Discount");
		obj.select();
		return false;
		}
	}
	if(booln==true)
	{
		//alert("right");
		var pos1=str.indexOf(".");
		if(pos1!=-1)
		{
			var substr=str.substring(pos1+1,str.length);
			var length=substr.length;
			if(length==0)
				str=str+"00";
			else if (length==1)
				str=str+"0";
			else if(length==2)
				str=str;
			else if(length>2)
				{
					str=str.substring(0,pos1+3);
				}
		}
		else
		{
		str=str+".00";
		}
	obj.value=str;
	}
	if(obj.value<1)
	{
		var pos1=str.indexOf(".");
		var substr=str.substring(pos1,str.length);
		obj.value="0"+substr;
	}
	else
	{
		var str=obj.value;
		var substr=str.substring(0,1);
		if(substr==0)
			obj.value=str.substring(1,str.length);
	}
}
}



/**
* Name        : fnEmailKeyCheck
* Description : Field allow AlphaNumeric with .,-,@ only(for email fields)
* called by   : onKeyPress Event
* @param      : Window.event
* @param      : textbox
* @return     : boolean
*/
function fnEmailKeyCheck(obj,txt)
{	
	var key=obj.keyCode;
	if((txt.value.length==0)&&((key==64)||(key==46)))
	{
		return false;
	}
	else if(((key>63)&&(key<91))||((key>96)&&(key<123))||((key>47)&&(key<58))||(key==46)||(key==95))
		return true;
	else
		return false;
}

//Validation For Email
function fnValidEmailAddress(mailval)
{
	var mail=mailval.value;	
	if (mail=="" || mail==null)
	{
		return true;
	}
	else
	{
		var email=/^.+@.+\..{2,3}$/;
		if(!(email.test(mail)))
		{
		alert("Enter valid Email ID");
		mailval.focus();
		mailval.select();
		return false;
		}
		else
			return true;
	}	
}
	
	
//Validation for WebSite
function fnValidWebsiteAddress(websiteval)
{
	var no=websiteval.value;
	var websitelength=no.length;
	var lat=no.lastIndexOf("/")
	var ldot=no.indexOf(".")
	var lwdot=no.lastIndexOf(".")
	
	var total=no.substring(lwdot+1,websitelength);
	var tolen=total.length;
	
	if (no=="")
	{
		return true;
	}
	
	if((tolen<=1) && (no!=""))
	{
		alert("Invalid Website Address");
		websiteval.select();
		return false;
	} 
	if(ldot!=-1)
	{
	var checkvalue=no.substring(lat+1,ldot);
	//alert("Length value: "+checkvalue)
	var check=checkvalue.length;
	//alert("Length : "+check)
	}
	else
	{
	 	alert("Invalid Website Address");
		websiteval.select();
		return false;
	}
	var wcheckvalue=no.substring(ldot,lwdot);
	//alert("Length wvalue: "+wcheckvalue)
	var wcheck=wcheckvalue.length;
	//alert("Length w: "+wcheck)
	
	var ff=no.substring(0,4);
	var ll=no.substring(4,websitelength);
	
	if (no=="")
	{
		return true;
	}
	if(no.length>40)
   	{
      	alert('Maximum length is 40');
      	//websiteval.value="";
      	websiteval.select();
      	return false;
   	}
   	   	
   	if((ff=="www.") || (ff=="WWW.") || (ff==""))
	{
	 	for(i=0;i<=ll.length;i++)
	 	{
	 		var ch=ll.charAt(i);
	    	
	    	
	    	if((ch>="a" && ch<="z") || (ch>="A" && ch<="Z") || (ch>="0" && ch<="9") || (ch=="."))
			{
				if(i==ll.length-1)
					{
						return true;
					}
							
	       	}
	       	      	
	       	else
			{
				alert("Special Characters are Not Allowed");
				//websiteval.value="";
				websiteval.select();
				return false;
			}
	    	if (wcheck<=0)
			{
		    	alert("Invalid Website Address");
		    	websiteval.select();
				return false;
		 	}
	 	}
	 	
	}
	else if((ff=="http") || (ff=="HTTP") || (ff==""))
	{
	 	for(i=0;i<=ll.length;i++)
	 	{
	 		var ch=ll.charAt(i);
	    	
	    	
	    	if((ch>="a" && ch<="z") || (ch>="A" && ch<="Z") || (ch>="0" && ch<="9") || (ch=="." || ch=="/") || (ch==":"))
			{
				if(i==ll.length-1)
					{
						return true;
					}
							
	       	}
	       	      	
	       	else
			{
				alert("Special Characters are Not Allowed");
				//websiteval.value="";
				websiteval.select();
				return false;
			}
			if (check<=0)
			{
		    	alert("Invalid Website Address");
		    	return false;
		 	}
		
	    	
	 	}
	 	
	}
	else
	{
		alert("Enter Valid Website");
		//websiteval.value="";
		websiteval.select();
		return false;
	}
	return true; 

}


//Validation for  Address

function fnValidAddress(addressval)
{	
	var inputval=addressval.value;
   	if(inputval.length>150)
   	{
      alert('Maximum length is 150');
      //addressval.value="";
      addressval.select();
      return false;
   	}	
	/** if (inputval=="***")
	{

	} */
	
	else
	{
		for(var i=0;i<inputval.length;i++)
    	{
    		var ch=inputval.charAt(i);
       		if(i==0 && (ch==" "))
		    {
		    	alert("First character should Not be Space");
		        //addressval.value="";
		        addressval.select();
		        return false;
		    }
		    
      	}
   	}
   	return true; 
}
	
//validation For Phone Number
function fnValidPhoneNumber(numberval)
{
	var no=numberval.value;
	var check=no.substring(0,3);
	//alert(check);
	if(check=="000")
	{
		alert('Enter Valid Number');
      	numberval.select();
     	return false;
	}
	
	if(no.length>20)
   {
      alert('Maximum length is 20');
      //numberval.value="";
      numberval.select();
      return false;
   }	
   
	/** if ((no=="***"))
	{
		return true;
	} */
	
	else
	{
		for(var i=0;i<no.length;i++)
		{
			var ch=no.charAt(i);
			if(ch==" " && i==0)
			{
				alert("First Letter Should not Be Space");
				//numberval.value="";
				numberval.select();
				return false;
			}
			if((ch>=0 && ch<=9) || (ch=="-"))
			{
				if(no.length>5)
				{
		
				}
				else
				{
					alert("Number Should Be Atleast 6 Digit");
					//numberval.value="";
					numberval.select();
					return false;
				}
			}
			else if (ch=="+" && i==0) 
			{
				if(no.length>5)
				{
			
				}
				else
				{
				alert("Number Should Be Atleast 6 Digit");
				//numberval.value="";
				numberval.select();
				return false;
				}
			}
			else
			{
				alert("Enter Valid Phone Number");
				//numberval.value="";
				numberval.select();
				return false;
			}
			
			
		}
	}
	return true; 
}			

//validation For Phone Number
function fnValidMobileNumber(numberval)
{
	var no=numberval.value;
	var check=no.substring(0,3);
	//alert(check);
	if(check=="000")
	{
		alert('Enter Valid Number');
      	numberval.select();
     	return false;
	}
	if(no.length>20)
   	{
      alert('Maximum legth is 20');
      //numberval.value="";
      numberval.select();
      return false;
   	}	
	/** if ((no=="***"))
	{
		return true;
	} */
	
	else
	{
		for(var i=0;i<no.length;i++)
		{
			var ch=no.charAt(i);
			if(ch==" " && i==0)
			{
				alert("First Letter Should not Be Space");
				//numberval.value="";
				numberval.select();
				return false;
			}
			if((ch>=0 && ch<=9) || (ch=="-")) 
			{
				if(no.length>9)
				{
		
				}
				else
				{
					alert("Number Should Be Atleast 10 Digit");
					//numberval.value="";
					numberval.select();
					return false;
				}
			}
			else if (ch=="+" && i==0) 
			{
				if(no.length>5)
				{
			
				}
				else
				{
				alert("Number Should Be Atleast 6 Digit");
				//numberval.value="";
				numberval.select();
				return false;
				}
			}
			else
			{
				alert("Enter Valid Mobile Number");
				//numberval.value="";
				numberval.select();
				return false;
			}
		}
	}
	return true; 

}			

//Validation For Name	
function fnValidName(nameval,msg)
{
	var inputval=nameval.value;
  	if(inputval.length>50)
   {
      alert('Maximum length is 50');
      //nameval.value="";
      nameval.select();
      return false;
   }
   if (inputval=="") 
	{
		return true;
	}
	else
	{
		for(var i=0;i<inputval.length;i++)
     	{
       		var ch=inputval.charAt(i);
            if(i==0 && ((ch < "A" || ch > "Z") && (ch < "a" || ch >"z")))
      		{
        	 	alert("First character should be Alphabet");
         		//nameval.value="";
         		nameval.select();
         		return false;
       		}
       		else if((ch>="a" && ch<="z") || (ch>="A" && ch<="Z") || (ch=="." || ch==" ") || (ch=="&"))
            {
            	
            }
       		else
       		{
        		alert(msg);
        		//nameval.value="";
        		nameval.select();
        		return false;
       		}
       	}
	}
	return true; 
	
}

// Submit the form for Onchange Actions
function fnSubmitForm(buttonid,val) 
{
	document.getElementById(buttonid).value=val;
    document.forms[0].submit();
}

// This function is used to round-off decimal values
function fnDigitConverter(n) 
{
  var ans = (Math.round(n * 100))/100 + ""
  var dot = ans.indexOf(".",0)
  if (dot == -1)
   {
   	ans = ans + ".00"
   }
  else if (dot == ans.length - 2)
   {
   	ans = ans + "0"
   }
  return ans
} 

/** 
* This function used to get cursor position in textbox.
* return integer value.
*/
function fnFindCurPosition(el)
{
	var sel, rng, r2, i=-1;
	if(typeof el.selectionStart=="number") 
	{
		i=el.selectionStart;
	} 
	else if(document.selection && el.createTextRange) 
	{
		sel=document.selection;
		if(sel)
		{
			r2=sel.createRange();
			rng=el.createTextRange();
			rng.setEndPoint("EndToStart", r2);
			i=rng.text.length;
		}
	}
	return i;
}


// This function is used to round-off upto 2 digits
function fnRoundupto2Digits(n) 
{ 
	var inputstr=n.toString();
	var index=inputstr.lastIndexOf(".");
	var ans=inputstr.substring(0,index+3);	 
	if (index == -1)
	{
		ans = inputstr + ".00"
	}
	else if (index == ans.length - 2)
	{
		ans = ans + "0"
	}
return ans 
} 

//**********************************DATE validation*****************************/

var init=true;
var change=false;
/**
* Name        : fnDateKeyCheck
* Description : Field allow Numeric with / only(for email fields)
* called by   : onKeyPress Event
* @param      : Window.event
* @param      : textbox
* @return     : boolean
*/

function fnDateKeyCheck(obj,txt)
{

	var dat=txt.value;
	var len=dat.length;
	var key=obj.keyCode;
	if(len==0)
		init=true;
	if(len==9)
		init=false;
	
	if(init)
	{
		if((key>47)&&(key<58))
			return true;
		else
			return false;
	}
	else
	{
		if((key>46)&&(key<58))
			return true;
		else
			return false;
	}
}



/**
This function called by onKeyUp Event
* @param   Window.event
* @param   DateTextBox
* @return  boolean
*/

function fnAddSlash(obj,txt)
{
	var dat=txt.value;
	var len=dat.length;
	var key=obj.keyCode;
	if(len==10)
		change=true;
	if(len==1)
		change=false;
	if(!change)
	{
		if(((key>47)&&(key<58))||((key>95)&&(key<106)))
			{
				if(len==2)
					dat=dat+"/";
				if(len==5)
					dat=dat+"/";
			txt.value=dat;
			}
		if((len==1)&&((key==191)||(key==111)))
		{
			dat="0"+dat+"/";
			txt.value=dat;
		}
		if((len==4)&&((key==191)||(key==111)))
		{
			var day=dat.substring(0,3);
			var mon=dat.substring(3,4);
			dat=day+"0"+mon+"/";
			txt.value=dat;
		}
		else
		{
			return false;
		}
	}
}

/**
This function called by onBlur Event
Description: set date format (dd/mm/yyyyy)
* @param  DateTextBox
*/


function fnDate(textObj)
{
	if(textObj.value!="")
	{
		if(textObj.value.length!=10)
		{
		var datestr=textObj.value;
		var pos1=datestr.indexOf("/")
		var pos2=datestr.indexOf("/",pos1+1)
		if(pos1==1)
		  textObj.value="0"+datestr;
		if((pos1==2)&&(pos2==4))
		{
		var first=datestr.substring(0,pos1+1)
		var last=datestr.substring(pos1+1)
		textObj.value=first+"0"+last;
		datestr=textObj.value;
		}
		}
		var datestr=textObj.value;
		var pos1=datestr.indexOf("/")
		var pos2=datestr.indexOf("/",pos1+1)
		var pos3=datestr.indexOf("/",pos2+1)

		if((textObj.value.length!=10)||(pos3!=-1))
				{
				alert("Invalid date format");
				 textObj.focus();
				 textObj.select();
				 }
				 else
				 {
				 fnIsDate(textObj);
		 }
	}
}


/**
This function called by onBlur Event
Description: check date is valid or not
* @param  DateTextBox
*/


function fnIsDate(textObj)
{
	// Declaring valid date character, minimum year and maximum year
	//alert("date");
	var dtCh= "/";
	var minYear=1900;
	var maxYear=2100;

	var dtStr = textObj.value;
	//alert(dtStr);
	var daysInMonth = DaysArray(12)
	var pos1=dtStr.indexOf(dtCh)
	var pos2=dtStr.indexOf(dtCh,pos1+1)
	var strDay=dtStr.substring(0,pos1)
	var strMonth=dtStr.substring(pos1+1,pos2)
	var strYear=dtStr.substring(pos2+1)
	strYr=strYear
	if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
	if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
	}
	month=parseInt(strMonth)
	day=parseInt(strDay)
	year=parseInt(strYr)
	/** if(dtStr=="***")
	{
		

	} */

	if(dtStr=="00/00/0000")
	{
		alert("Enter Valid Date");
		textObj.value="";
		textObj.focus();
		textObj.select();
		return false;

	}
	if(dtStr!="")
	{
		if (pos1==-1 || pos2==-1){
		alert("The date format should be : dd/mm/yyyy");
		textObj.value="";
		textObj.focus();
		textObj.select();
		return false;
	}
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month])
	{
		alert("Please enter a valid day");
		textObj.focus();
		if (textObj.createTextRange)
		{
	        var oRange = textObj.createTextRange();
	        oRange.moveStart("character", 0);
	        oRange.moveEnd("character", 2 - textObj.value.length);
	        oRange.select();
	    } else if (textObj.setSelectionRange)
	    	 {
	       		textObj.setSelectionRange(1, 2);
	    	}
		return false;
	}
	if (strMonth.length<1 || month<1 || month>12){
		alert("Please enter a valid month");
		textObj.focus();
		if (textObj.createTextRange)
		{
	        var oRange = textObj.createTextRange();
	        oRange.moveStart("character", 3);
	        oRange.moveEnd("character", 5 - textObj.value.length);
	        oRange.select();
	    } else if (textObj.setSelectionRange)
	    	 {
	       		textObj.setSelectionRange(3, 5);
	    	}
		return false;
	}

	if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
		alert("Please enter a valid 4 digit year between "+minYear+" and "+maxYear);
		textObj.focus();
		if (textObj.createTextRange)
		{
	        var oRange = textObj.createTextRange();
	        oRange.moveStart("character", 6);
	        oRange.moveEnd("character", textObj.value.length- textObj.value.length);
	        oRange.select();
	    } else if (textObj.setSelectionRange)
	    	 {
	       		textObj.setSelectionRange(6, textObj.value.length);
	    	}
		return false;
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
		alert("Please enter a valid date");
		textObj.focus();
		textObj.select();
		return false;
	}
	return true;
	}
}

/**
This function called by onBlur Event
Description: compare two dates and returns valid or invalid
* @param  DateTextBox
*/

function fnCompareTwoDatesdatepicker(fromdate,todate,msg)
{
	var error = null;
	var str1 = fromdate
	var str2 = todate
	var dt1 = parseInt(str1.substring(0,2),10);
	var mon1 = parseInt(str1.substring(3,5),10);
	var yr1 = parseInt(str1.substring(6,10),10);
	var dt2 = parseInt(str2.substring(0,2),10);
	var mon2 = parseInt(str2.substring(3,5),10);
	var yr2 = parseInt(str2.substring(6,10),10);
	var date1 = new Date(yr1, mon1-1, dt1);
	var date2 = new Date(yr2, mon2-1, dt2);
	if(str1=="00/00/0000" || str2=="00/00/0000")
	{
		alert("Enter Valid Dates");
		error ="invalid";
		return false;	 
	}
	 
	if(date2.getTime()<date1.getTime())
	{
		alert(msg);	
		error ="invalid";
		//todate.select();	 
	}
	else
	{	
		error ="valid";
	}
	return error;
} 
function fnCompareTwoDates(fromdate,todate,msg)
{
	var error = null;
	var str1 = fromdate.value;
	var str2 = todate.value;
	var dt1 = parseInt(str1.substring(0,2),10);
	var mon1 = parseInt(str1.substring(3,5),10);
	var yr1 = parseInt(str1.substring(6,10),10);
	var dt2 = parseInt(str2.substring(0,2),10);
	var mon2 = parseInt(str2.substring(3,5),10);
	var yr2 = parseInt(str2.substring(6,10),10);
	var date1 = new Date(yr1, mon1-1, dt1);
	var date2 = new Date(yr2, mon2-1, dt2);
	if(str1=="00/00/0000" || str2=="00/00/0000")
	{
		alert("Enter Valid Dates");
		error ="invalid";
		return false;	 
	}
	 
	if(date2.getTime()<date1.getTime())
	{
		alert(msg);	
		error ="invalid";
		//todate.select();	 
	}
	else
	{	
		error ="valid";
	}
	return error;
}

// This function validates date field
function isInteger(s){
	var i;
    for (i = 0; i < s.length; i++){
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}

function stripCharsInBag(s, bag){
	var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++){
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function daysInFebruary (year){
	// February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}
function DaysArray(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 31
		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
		if (i==2) {this[i] = 29}
   }
   return this
}

//****************************************************************************/
var xmlHttpObject = false;
//  description: get XmlHttpObject reference
function fnCreateXmlHttpObject()
{
	url=encodeURI(url);	
	if (window.ActiveXObject)  //IE
	{
		try {
			xmlHttpObject = new ActiveXObject("Msxml2.XMLHTTP");
			}
			catch (e) 
			{
				try 
				{
					xmlHttpObject = new ActiveXObject("Microsoft.XMLHTTP");
				} 
				catch (e2) 
				{
					xmlHttpObject = false;
				}
			}
	} 
	else if (window.XMLHttpRequest)  // Mozilla, Netscape, Safari, etc
	{
		xmlHttpObject = new XMLHttpRequest();
		//if (xmlHttpObject.overrideMimeType) 
		//xmlHttpObject.overrideMimeType('text/xml');
	}	
	return xmlHttpObject;
}

/**
* Name        : fnSubmitCheck
* Description : check action parameter is null or not
* @param      : action param name(hodden name)
* @return     : boolean
*/	
function fnSubmitCheck(hiddenname)
{
	if(document.getElementById(hiddenname).value=="")
	{
		return false;
	}
}

/**
* Name        : fnSuggestionKeyPress
* Description : Field allow AlphaNumeric only
* called by   : onKeyDown Event
* @param      : Window.event
* @param      : own function name to be called from comman validation
* @param      : own function's arguments with in square brackets
* example     :onkeydown="fnSuggestionKeyPress(window.event,fnTIDClearList,['generateTendorNO'])"
*/	
function fnSuggestionKeyPress(e,callingfunc,args)
{	
	if((e.keyCode!=13)&&(e.keyCode!=9)&&(e.keyCode!=16)&&(e.keyCode!=18)&&
	(e.keyCode!=17)&&(e.keyCode!=91)&&(e.keyCode!=20)&&(e.keyCode!=27)&&
	(e.keyCode!=40)&&(e.keyCode!=37)&&(e.keyCode!=38)&&(e.keyCode!=39)&&
	(e.keyCode!=35)&&(e.keyCode!=36))
	{
	callingfunc.apply(args);
	}
}


/**
* Name        : trim
* Description : Remove left and right spaces 
* @param      : string with spaces(left,right) or not
* @return     : String without spaces(left and right)
*/
function trim(stringToTrim)
{
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}

/**
* Name        : ltrim
* Description : Remove left spaces
* @param      : string with spaces(left,right) or not
* @return     : String without spaces left only
*/
function ltrim(stringToTrim) 
{
	return stringToTrim.replace(/^\s+/,"");
}

/**
* Name        : rtrim
* Description : Remove right spaces
* @param      : string with spaces(left,right) or not
* @return     : String without spaces right right only
*/
function rtrim(stringToTrim) 
{
	return stringToTrim.replace(/\s+$/,"");
}

/**
* Name : fnSpaceValidaion
* Description : First Letter Should not Be Space
* called by : onKeyDown Event
* @param : this
* example :onblur="fnspacevalidaion(this)"
*/ 
function fnSpaceValidaion(sval)
{
var no=sval.value;
var ch=no.charAt(0);
if(ch==" ")
{
alert("First Letter Should not Be Space");
//numberval.value="";
sval.select();
return false;
}
}






/////unitprice validation///////////////////////
/**
* Name        : fnAmtKeyCheck(99999999.99 format)
* Description : Field allow Numeric and dot only(for amount fields)
* called by   : onKeyPress Event
* @param      : Window.event
* @param      : textbox
* @return     : boolean
*/
function fnAmtKeyCheck(event,obj)
{
	var amt=obj.value;
		var keycode=event.keyCode;
		var pos1=amt.indexOf(".");
		var amtlen=0;
		if(pos1!=-1)
		{
		pais=amt.substring(pos1+1,amt.length);
		amtlen=pais.length;
		}
		var curpos=fnFindCurPosition(obj);
		if((curpos==0)&&(keycode==48))
			return false;
		var selectedText = document.selection;

		len=amt.length;
		var val=amt
		/*if((len==1)&&(keycode==46))
		{
			val=val+'.';
			obj.value=val;
			return false;
		}*/
		if((len==8)&&(val.indexOf(".")==-1))
		{
			val=val+".";
			obj.value=val;
			if((keycode==46)||(keycode>57 )||( keycode<49))
				return false;
			else
				return true;
		}

		if((amtlen<2)||(selectedText.type == 'Text')|| (curpos<=pos1))
		{
			if((keycode<58 && keycode>48))
			{
				return true;
			}
			else if(keycode==48)
				{
					if(amt.length==0)
						return false;
					else if(amt==0)
						return false
					else
						return true;
				}
				else if(keycode==46)
					{
						if(amt.length==0)
							obj.value=0;
						if((amt.indexOf(".")==-1)||(selectedText.type == 'Text'))
							return true;
						else
							return false;
					}
					else
					{
						return false;
					}
			}
			else
			return false;

}

/* Function used to convert string to Amount (99999999.99) format
*/
function fnStringToAmount(obj)
{

var str=obj.value;
var booln=false;
if(str!="")
{
	for(var i=0;i<str.length;i+=1)
	{
		var onechar=str.charCodeAt(i)
		if((onechar<58 && onechar>47) ||(onechar==46))
		{
			booln=true;
		}
		else
		{
		obj.focus();
		alert("Invalid Amount");
		obj.select();
		return false;
		}
	}
	if(booln==true)
	{
		//alert("right");
		var pos1=str.indexOf(".");
		if(pos1!=-1)
		{
			var substr=str.substring(pos1+1,str.length);
			var length=substr.length;
			if(length==0)
				str=str+"00";
			else if (length==1)
				str=str+"0";
			else if(length==2)
				str=str;
			else if(length>2)
				{
					str=str.substring(0,pos1+4);
				}
		}
		else
		{
		str=str+".00";
		}
	obj.value=str;
	}
	if(obj.value<1)
	{
		var pos1=str.indexOf(".");
		var substr=str.substring(pos1,str.length);
		obj.value="0"+substr;
	}
	else
	{
		var str=obj.value;
		var substr=str.substring(0,1);
		if(substr==0)
			obj.value=str.substring(1,str.length);
	}
}
}



/**
* Name        : fnQuantityKeyCheck(99999999.99 format)
* Description : Field allow Numeric and dot only(for quantity fields)
* called by   : onKeyPress Event
* @param      : Window.event
* @param      : textbox
* @return     : boolean
*/
function fnQuantityKeyCheck(event,obj)
{
	var amt=obj.value;
		var keycode=event.keyCode;
		var pos1=amt.indexOf(".");
		var amtlen=0;
		if(pos1!=-1)
		{
		pais=amt.substring(pos1+1,amt.length);
		amtlen=pais.length;
		}
		var curpos=fnFindCurPosition(obj);
		if((curpos==0)&&(keycode==48))
			return false;
		var selectedText = document.selection;

		len=amt.length;
		var val=amt
		/*if((len==1)&&(keycode==46))
		{
			val=val+'.';
			obj.value=val;
			return false;
		}*/
		if((len==8)&&(val.indexOf(".")==-1))
		{
			val=val+".";
			obj.value=val;
			if((keycode==46)||(keycode>57 )||( keycode<49))
				return false;
			else
				return true;
		}

		if((amtlen<3)||(selectedText.type == 'Text')|| (curpos<=pos1))
		{
			if((keycode<58 && keycode>48))
			{
				return true;
			}
			else if(keycode==48)
				{
					if(amt.length==0)
						return false;
					else if(amt==0)
						return false
					else
						return true;
				}
				else if(keycode==46)
					{
						if(amt.length==0)
							obj.value=0;
						if((amt.indexOf(".")==-1)||(selectedText.type == 'Text'))
							return true;
						else
							return false;
					}
					else
					{
						return false;
					}
			}
			else
			return false;

}

/* Function used to convert string to Quantity (99999999.99) format
*/
function fnStringToQuantity(obj)
{
var str=obj.value;
var booln=false;
if(str!="")
{
	for(var i=0;i<str.length;i+=1)
	{
		var onechar=str.charCodeAt(i)
		if((onechar<58 && onechar>47) ||(onechar==46))
		{
			booln=true;
		}
		else
		{		
		alert("Invalid Quantity");
		//obj.select();
		obj.focus();
		return false;
		}
	}
	if(booln==true)
	{
		//alert("right");
		var pos1=str.indexOf(".");
		if(pos1!=-1)
		{
			var substr=str.substring(pos1+1,str.length);
			var length=substr.length;
			if (length==0)
				str=str+"00";
			else if(length==1)
				str=str+"0";
			else if(length==2)
				str=str;
			else if(length>2)
				{
					str=str.substring(0,pos1+3);
				}
		}
		else
		{
		str=str+".00";
		}
	obj.value=str;
	}
	if(obj.value<1)
	{
		var pos1=str.indexOf(".");
		var substr=str.substring(pos1,str.length);
		obj.value="0"+substr;
	}
	else
	{
		var str=obj.value;
		var substr=str.substring(0,1);
		if(substr==0)
			obj.value=str.substring(1,str.length);
	}
}
}

/**
* Name        : AJAXrequest
* Description : Creates request object , send to corresponding url and get back response
* called by   : inside java script
* @param      : String (XML or TEXT)
* @param      : address
* @param      : index (addrow only)
* @param      : callingfunc
* @param      : calling functions argument
* @return     : after get response call to another function
*/

function AJAXrequest(type,address,index,callingfunc,args)
{

	
	var returnvalue="";
	url=encodeURI(address);
	if (window.ActiveXObject) {
		req = new ActiveXObject("Microsoft.XMLHTTP");//For IE Browser
	} 
	else if (window.XMLHttpRequest) //For Non IE Browser
	{
			req = new XMLHttpRequest();
	}
	req.onreadystatechange = function() { 
	if (req.readyState == 4) 
 	{
		if (req.status == 200)
		{
			var result1=new ActiveXObject("Microsoft.XMLDOM");			
			/**convert response text to xml object*/
			result1.loadXML(req.responseText);
			
			if(type=="XML")
				callingfunc(result1,index,args);	
			else
				callingfunc(req.responseText,index,args);			
		}
		 else
		{
		alert(req.statusText);
		return false;
		}
	}
	 }
	
	req.open("POST", url, false);
	req.send(null);
}
function AJAXrequest1(type,address,index,callingfunc,args)
{

	
	var returnvalue="";
	url=encodeURI(address);
	
	if (window.ActiveXObject) {
		req = new ActiveXObject("Microsoft.XMLHTTP");//For IE Browser
	} 
	else if (window.XMLHttpRequest) //For Non IE Browser
	{
			req = new XMLHttpRequest();
	}
	
	req.onreadystatechange = function() { 
	if (req.readyState == 4) 
 	{
 	
		if (req.status == 200)
		{
			//var result1=new ActiveXObject("Microsoft.XMLDOM");			
			/**convert response text to xml object*/
			//result1.loadXML(req.responseText);
			
			if (window.ActiveXObject)
			{
			var result1=new ActiveXObject("Microsoft.XMLDOM");
			result1.loadXML(req.responseText);
			}
			else
			{
			parser=new DOMParser();
  			result1=parser.parseFromString(req.responseText,"text/xml");
			}	
			
			if(type=="XML")
				callingfunc(result1,index,args);	
			else
				callingfunc(req.responseText,index,args);			
		}
		 else
		{
		alert(req.statusText);
		return false;
		}
	}
	 }
	
	req.open("POST", url, true);
	req.send(null);
}
/**
* Name        : fnAlphaNumericWithSpaceKeyCheck
* Description : Field allow AlphaNumeric only
* called by   : onKeyPress Event
* @param      : Window.event
* @return     : boolean
*/
function fnAlphaNumericWithSpaceKeyCheck(obj)
{
	var key=obj.keyCode;
	if(((key>64)&&(key<91))||((key>96)&&(key<123))||((key>47)&&(key<58))||(key==32))
		return true;
	else
		return false;	
}

/**
* Name        : fnAlphabetsWithDotSpaceKeyCheck
* Description : Field allow Alphabets with dot and space
* called by   : onKeyPress Event
* @param      : Window.event
* @return     : boolean
*/
function fnAlphabetsWithDotSpaceKeyCheck(obj)
{
	var key=obj.keyCode;
	if(((key>64)&&(key<91))||((key>96)&&(key<123))||(key==46)||(key==32))
		return true;
	else
		return false;	
}

/**
* Name        : fnAlphabetsWithSpaceKeyCheck
* Description : Field allow Alphabets with space
* called by   : onKeyPress Event
* @param      : Window.event
* @return     : boolean
*/
function fnAlphabetsWithSpaceKeyCheck(obj)
{
	var key=obj.keyCode;
	if(((key>64)&&(key<91))||((key>96)&&(key<123))||(key==32))
		return true;
	else
		return false;	
}

/**
* Name        : fnAlphabetsWithoutquotesKeyCheck
* Description : Field allow Alphabets with space
* called by   : onKeyPress Event
* @param      : Window.event
* @return     : boolean
*/

function fnAlphabetsWithoutquotesKeyCheck(obj)
{
	var key=obj.keyCode;
	if(((key>64)&&(key<91))||((key>96)&&(key<123))||(key==32)||(key==45) || (key!=39) && (key!=34))
		return true;
	else
		return false;	
}


/**
* Name        : fnQuantityWithFirstZeroKeyCheck(99999999.99 format)
* Description : Field allow Numeric, dot and first zero only(for quantity fields)
* called by   : onKeyPress Event
* @param      : Window.event
* @param      : textbox
* @return     : boolean
*/
function fnQuantityWithFirstZeroKeyCheck(event,obj)
{
	var amt=obj.value;
		var keycode=event.keyCode;
		var pos1=amt.indexOf(".");
		var amtlen=0;
		if(pos1!=-1)
		{
		pais=amt.substring(pos1+1,amt.length);
		amtlen=pais.length;
		}
		var curpos=fnFindCurPosition(obj);
		if((curpos==0)&&(keycode==48))
			return true;
		var selectedText = document.selection;

		len=amt.length;
		var val=amt
		/*if((len==1)&&(keycode==46))
		{
			val=val+'.';
			obj.value=val;
			return false;
		}*/
		if((len==8)&&(val.indexOf(".")==-1))
		{
			val=val+".";
			obj.value=val;
			if((keycode==46)||(keycode>57 )||( keycode<49))
				return false;
			else
				return true;
		}

		if((amtlen<2)||(selectedText.type == 'Text')|| (curpos<=pos1))
		{
			if((keycode<58 && keycode>48))
			{
				return true;
			}
			else if(keycode==48)
				{
					if(amt.length==0)
						return false;
					else if(amt==0)
						return false
					else
						return true;
				}
				else if(keycode==46)
					{
						if(amt.length==0)
							obj.value=0;
						if((amt.indexOf(".")==-1)||(selectedText.type == 'Text'))
							return true;
						else
							return false;
					}
					else
					{
						return false;
					}
			}
			else
			return false;

}

/**
* Name        : fnClearSelectItems
* Description : Clear the selected items for passing list box
* called by   : onClick Event
* @param      : List box
*/

function fnClearSelectItems(obj)
{
	for (i=0;i<obj.options.length;i++ ) 
	{ 
		obj.options[i].selected=false;
	}	
	
}

/**
* Name        : fnMoveItems
* Description : Selected items are moved from listbox1 to another list box
* called by   : onClick Event
* @param      : List box (From list box)
* @param      : List box (To list box)
*/

function fnMoveItems(lstbxFrom,lstbxTo)
{
	var varFromBox = lstbxFrom;//document.all(lstbxFrom);
	var varToBox = lstbxTo;//document.all(lstbxTo); 
	if ((varFromBox != null) && (varToBox != null)) 
	{ 
		if(varFromBox.length < 1) 
		{
			alert('There are no items in the source ListBox');
			fnTidListSelect(lstbxTo)
			lstbxFrom.focus();
			return false;
		}
		if(varFromBox.options.selectedIndex == -1)//When no Item is selected the index will be -1
		{
			alert('Select an Item to move');
			fnTidListSelect(lstbxTo);
			lstbxFrom.focus();
			return false;
		}
		while ( varFromBox.options.selectedIndex >= 0 ) 
		{ 
			var newOption = new Option(); // Create a new instance of ListItem 
			newOption.text = varFromBox.options[varFromBox.options.selectedIndex].text; 
			newOption.value = varFromBox.options[varFromBox.options.selectedIndex].value; 
			varToBox.options[varToBox.length] = newOption; //Append the item in Target Listbox
			varFromBox.remove(varFromBox.options.selectedIndex); //Remove the item from Source Listbox 
		} 
	}
}

/**
* Name        : fnMoveAllItems
* Description : All items are moved from listbox1 to another list box
* called by   : onClick Event
* @param      : List box (From list box)
* @param      : List box (To list box)
*/

function fnMoveAllItems(varFromBox,varToBox)
{	
	if(varFromBox.length < 1) 
		{
			alert('There are no items in the source ListBox');
			fnTidListSelect(varToBox);
			varFromBox.focus();
			return false;
		}
	for (i=0;i<varFromBox.options.length;i++ ) 
	{ 
		var newOption = new Option(); // Create a new instance of ListItem 
		newOption.text = varFromBox.options[i].text; 
		newOption.value = varFromBox.options[i].value; 
		varToBox.options[varToBox.length] = newOption; //Append the item in Target Listbox
	} 
	varFromBox.options.length=0;
}

/**
* Name        : fnCompareTwoDatesTime
* Description : compare dates with time
* called by   : onBlur Event or inside script
* @param      : from date
* @param      : from hour
* @param      : from minutes
* @param      : to date
* @param      : to hour
* @param      : to minutes
*/

function fnCompareTwoDatesTime(fromdate,fhour,fmin,todate,thour,tmin,msg)
{
	var str1 = fromdate.value;
	var str2 = todate.value;

	var dt1 =str1.substring(0,2);
	var mon1 = str1.substring(3,5);
	var yr1 =str1.substring(6,10);
	var dt2 = str2.substring(0,2);
	var mon2 =str2.substring(3,5);
	var yr2 =str2.substring(6,10);
	var f_hour=fhour.value;
	var f_min=fmin.value;
	var t_hour=thour.value;
	var t_min=tmin.value;
	
	if(str1=="00/00/0000" || str2=="00/00/0000")
	{
		alert("Enter Valid Dates");
		error ="invalid";
		return false;	 
	}
	var from=yr1+mon1+dt1+f_hour+f_min;
	var to=yr2+mon2+dt2+t_hour+t_min;
		
	if(parseInt(to)<=parseInt(from))
	{
		alert(msg);	
		todate.select();
		return false;
	}
	else
	{
	return true;
	}		
}

/**
* Name        : fnCheckLength
* Description : Check length
* called by   : onBlur Event 
* @param      : this
* @param      : length
*/
function fnCheckLength(obj,lenth)
{	
	var inputval=obj.value;
   	if(inputval.length>lenth)
   	{
      alert('Maximum length must be less than or equal to '+lenth);
      obj.select();
      return false;
   	}	
   	else
   	{
   	return true;
   	}	
}


function fnavoidquotesaddress(textObj,msg)
{
var inputval=textObj.value;
var inputstr=inputval.toString(); 
var flag=false,flag1=false;

for(var i=0;i<inputstr.length;i++)
{
var onechar=inputstr.charAt(i); 
if(onechar == "'"  ) 
{flag=true;}
if(onechar == "\""  ) 
{flag1=true;}

if(flag==true || flag1==true) 
{
alert(msg);
textObj.select();
return false;
}
} 
return true; 
 
} 

