function LTrim(str){if(str==null){return null;}for(var i=0;str.charAt(i)==" ";i++);return str.substring(i,str.length);}
function RTrim(str){if(str==null){return null;}for(var i=str.length-1;str.charAt(i)==" ";i--);return str.substring(0,i+1);}
function Trim(str){return LTrim(RTrim(str));}
function LTrimAll(str){if(str==null){return str;}for(var i=0;str.charAt(i)==" " || str.charAt(i)=="\n" || str.charAt(i)=="\t";i++);return str.substring(i,str.length);}
function RTrimAll(str){if(str==null){return str;}for(var i=str.length-1;str.charAt(i)==" " || str.charAt(i)=="\n" || str.charAt(i)=="\t";i--);return str.substring(0,i+1);}
function TrimAll(str){return LTrimAll(RTrimAll(str));}
function isNull(val){return(val==null);}
function isBlank(val){if(val==null){return true;}for(var i=0;i<val.length;i++){if((val.charAt(i)!=' ')&&(val.charAt(i)!="\t")&&(val.charAt(i)!="\n")&&(val.charAt(i)!="\r")){return false;}}return true;}
function isInteger(val){if(isBlank(val)){return false;}	if(val.length==0){return false;}for(var i=0;i<val.length;i++){if(!isDigit(val.charAt(i))){return false;}}return true;}
function isIntegerPositive(val){if(isBlank(val)){return false;}	return _isInteger(val);}
function isNumeric(val){if(isBlank(val))return false; return(parseFloat(val,10)==(val*1));}
function isNumericPositive(inputValue){
	var varNumericText = "1234567890."
	var varInputValue = inputValue;
	var varInputLength=varInputValue.length;
	if (isBlank(varInputValue)){	return false;	}
	else{
		for(var i=0;i<varInputLength;i++)
		{	
			if(varNumericText.indexOf(varInputValue.charAt(i)) == -1){ return false;}
		}
	}
	if(isNumeric(varInputValue)){if(varInputValue>=0)return true; else return false;	} else	return false; 
	}
function isGoodAmount(inputValue){
if (!isNumericPositive(inputValue))return false;
if (parseFloat(inputValue,10) == 0) return false;
return true;
}
function isGoodAmountWithAllowedDecimal(amount, allowedDecimals){
	if(isGoodAmount(amount)){
	try{
		var splitAmount = amount.split(".");
			if(splitAmount.length > 2)return false;
			if(splitAmount[1].length > allowedDecimals)return false;
	}catch(jsErr){	return true;}
	return true;
	}
	else return false;
}
function isArray(obj){return(typeof(obj.length)=="undefined")?false:true;}
function isDigit(num){if(num.length>1){return false;}var string="1234567890";if(string.indexOf(num)!=-1){return true;}return false;}
function setNullIfBlank(obj){if(isBlank(obj.value)){obj.value="";}}
function setFieldsToUpperCase(){for(var i=0;i<arguments.length;i++){arguments[i].value = arguments[i].value.toUpperCase();}}
function disallowBlank(obj){var msg=(arguments.length>1)?arguments[1]:"";var dofocus=(arguments.length>2)?arguments[2]:false;if(isBlank(getInputValue(obj))){if(!isBlank(msg)){alert(msg);}if(dofocus){if(isArray(obj) &&(typeof(obj.type)=="undefined")){obj=obj[0];}if(obj.type=="text"||obj.type=="textarea"||obj.type=="password"){obj.select();}obj.focus();}return true;}return false;}
function disallowModify(obj){var msg=(arguments.length>1)?arguments[1]:"";var dofocus=(arguments.length>2)?arguments[2]:false;if(getInputValue(obj)!=getInputDefaultValue(obj)){if(!isBlank(msg)){alert(msg);}if(dofocus){if(isArray(obj) &&(typeof(obj.type)=="undefined")){obj=obj[0];}if(obj.type=="text"||obj.type=="textarea"||obj.type=="password"){obj.select();}obj.focus();}setInputValue(obj,getInputDefaultValue(obj));return true;}return false;}
function commifyArray(obj,delimiter){if(typeof(delimiter)=="undefined" || delimiter==null){delimiter = ",";}var s="";if(obj==null||obj.length<=0){return s;}for(var i=0;i<obj.length;i++){s=s+((s=="")?"":delimiter)+obj[i].toString();}return s;}
function getSingleInputValue(obj,use_default,delimiter){switch(obj.type){case 'radio': case 'checkbox': return(((use_default)?obj.defaultChecked:obj.checked)?obj.value:null);case 'text': case 'hidden': case 'textarea': return(use_default)?obj.defaultValue:obj.value;case 'password': return((use_default)?null:obj.value);case 'select-one':
if(obj.options==null){return null;}if(use_default){var o=obj.options;for(var i=0;i<o.length;i++){if(o[i].defaultSelected){return o[i].value;}}return o[0].value;}if(obj.selectedIndex<0){return null;}return(obj.options.length>0)?obj.options[obj.selectedIndex].value:null;case 'select-multiple':
if(obj.options==null){return null;}var values=new Array();for(var i=0;i<obj.options.length;i++){if((use_default&&obj.options[i].defaultSelected)||(!use_default&&obj.options[i].selected)){values[values.length]=obj.options[i].value;}}return(values.length==0)?null:commifyArray(values,delimiter);}alert("FATAL ERROR: Field type "+obj.type+" is not supported for this function");return null;}
function getSingleInputText(obj,use_default,delimiter){switch(obj.type){case 'radio': case 'checkbox': 	return "";case 'text': case 'hidden': case 'textarea': return(use_default)?obj.defaultValue:obj.value;case 'password': return((use_default)?null:obj.value);case 'select-one':
if(obj.options==null){return null;}if(use_default){var o=obj.options;for(var i=0;i<o.length;i++){if(o[i].defaultSelected){return o[i].text;}}return o[0].text;}if(obj.selectedIndex<0){return null;}return(obj.options.length>0)?obj.options[obj.selectedIndex].text:null;case 'select-multiple':
if(obj.options==null){return null;}var values=new Array();for(var i=0;i<obj.options.length;i++){if((use_default&&obj.options[i].defaultSelected)||(!use_default&&obj.options[i].selected)){values[values.length]=obj.options[i].text;}}return(values.length==0)?null:commifyArray(values,delimiter);}alert("FATAL ERROR: Field type "+obj.type+" is not supported for this function");return null;}
function setSingleInputValue(obj,value){switch(obj.type){case 'radio': case 'checkbox': if(obj.value==value){obj.checked=true;return true;}else{obj.checked=false;return false;}case 'text': case 'hidden': case 'textarea': case 'password': obj.value=value;return true;case 'select-one': case 'select-multiple':
var o=obj.options;for(var i=0;i<o.length;i++){if(o[i].value==value){o[i].selected=true;}else{o[i].selected=false;}}return true;}alert("FATAL ERROR: Field type "+obj.type+" is not supported for this function");return false;}
function getInputValue(obj,delimiter){var use_default=(arguments.length>2)?arguments[2]:false;if(isArray(obj) &&(typeof(obj.type)=="undefined")){var values=new Array();for(var i=0;i<obj.length;i++){var v=getSingleInputValue(obj[i],use_default,delimiter);if(v!=null){values[values.length]=v;}}return commifyArray(values,delimiter);}return getSingleInputValue(obj,use_default,delimiter);}
function getInputText(obj,delimiter){var use_default=(arguments.length>2)?arguments[2]:false;if(isArray(obj) &&(typeof(obj.type)=="undefined")){var values=new Array();for(var i=0;i<obj.length;i++){var v=getSingleInputText(obj[i],use_default,delimiter);if(v!=null){values[values.length]=v;}}return commifyArray(values,delimiter);}return getSingleInputText(obj,use_default,delimiter);}
function getInputDefaultValue(obj,delimiter){return getInputValue(obj,delimiter,true);}
function isChanged(obj){return(getInputValue(obj)!=getInputDefaultValue(obj));}
function setInputValue(obj,value){var use_default=(arguments.length>1)?arguments[1]:false;if(isArray(obj)&&(typeof(obj.type)=="undefined")){for(var i=0;i<obj.length;i++){setSingleInputValue(obj[i],value);}}else{setSingleInputValue(obj,value);}}
function isFormModified(theform,hidden_fields,ignore_fields){if(hidden_fields==null){hidden_fields="";}if(ignore_fields==null){ignore_fields="";}var hiddenFields=new Object();var ignoreFields=new Object();var i,field;var hidden_fields_array=hidden_fields.split(',');for(i=0;i<hidden_fields_array.length;i++){hiddenFields[Trim(hidden_fields_array[i])]=true;}var ignore_fields_array=ignore_fields.split(',');for(i=0;i<ignore_fields_array.length;i++){ignoreFields[Trim(ignore_fields_array[i])]=true;}for(i=0;i<theform.elements.length;i++){var changed=false;var name=theform.elements[i].name;if(!isBlank(name)){var type=theform[name].type;if(!ignoreFields[name]){if(type=="hidden"&&hiddenFields[name]){changed=isChanged(theform[name]);}else if(type=="hidden"){changed=false;}else{changed=isChanged(theform[name]);}}}if(changed){return true;}}return false;}
function isRadioButtonCheck(radioButtons){
 for (var i=0; i < radioButtons.length; i++) {
  if (radioButtons[i].checked) { return true; }
 }
 return false;
}
function getRadioButtonCheckValue(radioButtons){
 for (var i=0; i < radioButtons.length; i++) {
  if (radioButtons[i].checked) { return radioButtons[i].value; }
 }
 return false;
}
function isValidName(inputValue){
	if (isBlank(inputValue)) return false;
	var varAlphabetText = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz .-"
	var varInputValue = inputValue;
	var varInputLength=varInputValue.length;
	var varFlag	= true;
	for(var i=0;i<varInputLength;i++)
	{	
		if(varAlphabetText.indexOf(varInputValue.charAt(i)) == -1){ varFlag	= false;}
	}
	return varFlag;
}
function isValidPortName(inputValue){
	if (isBlank(inputValue)) return false;
	var varAlphabetText = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890 .-"
	var varInputValue = inputValue;
	var varInputLength=varInputValue.length;
	var varFlag	= true;
	for(var i=0;i<varInputLength;i++)
	{	
		if(varAlphabetText.indexOf(varInputValue.charAt(i)) == -1){ varFlag	= false;}
	}
	return varFlag;
}
function isPercentage(inputValue)
{
	if (isBlank(inputValue)) return false;
	else if (!isNumericPositive(inputValue)) return false;
	else if (parseFloat("100.00")<parseFloat(inputValue))
	{
		return false;
	}
	else
	{
		return true;
	}
}
function isPercentageMax(inputValue,maxValue)
{
	if (!isPercentage(inputValue)) return false;
	if(parseFloat(maxValue)<parseFloat(inputValue))
	{
		return false;
	}
	else
	{
		return true;
	}
}

function isValidMailText(val)
{
	var specialchar = "!#$%^&()+=-[]\\\';/{}|\":<>?1234567890";
	var name=val;
	var check=val.length;
	var bolnFlag	=	"blnTrue";
	for(var i=0;i<check;i++)
	{	
		if(specialchar.indexOf(name.charAt(i)) != -1)
		{
			var spch=specialchar.indexOf(name.charAt(i));
			var spchar=specialchar.charAt(spch);
			bolnFlag	= "blnFalse";	
		}
	}
	return bolnFlag;
}
//------------------- Email ID Text, text befor @. Return 'True' If valid ------------------
function isValidEmailText(inputValue){
	var varAlphabetText = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz._-1234567890"
	var varInputValue = inputValue;
	var varInputLength=varInputValue.length;
	if (isBlank(varInputValue)){	return false;	}
	else if(isNumeric(varInputValue)){	return false;	}
	else{
		for(var i=0;i<varInputLength;i++)
		{	
			if(varAlphabetText.indexOf(varInputValue.charAt(i)) == -1){ return false;}
		}
	}
	return true;
}
function isValidEmailDomainText(inputValue){
	var varAlphabetText = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz."
	var varInputValue = inputValue;
	var varInputLength=varInputValue.length;
	if (isBlank(varInputValue)){	return false;	}
	else{
		for(var i=0;i<varInputLength;i++)
		{	
			if(varAlphabetText.indexOf(varInputValue.charAt(i)) == -1){ return false;}
		}
	}
	return true;
}
function isAlphaNumeric(inputValue){
	var varAlphabetText = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"
	var varInputValue = inputValue;
	var varInputLength=varInputValue.length;
	if (isBlank(varInputValue)){	return false;	}
	else if(isNumeric(varInputValue)){	return false;	}
	else{
		for(var i=0;i<varInputLength;i++)
		{	
			if(varAlphabetText.indexOf(varInputValue.charAt(i)) == -1){ return false;}
		}
	}
	return true;
}
function isAlphaNumericOnly(inputValue){
	var varAlphabetText = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"
	var varInputValue = inputValue;
	var varInputLength=varInputValue.length;
	if (isBlank(varInputValue)){	return false;	}
	else{
		for(var i=0;i<varInputLength;i++)
		{	
			if(varAlphabetText.indexOf(varInputValue.charAt(i)) == -1){ return false;}
		}
	}
	return true;
}
function isAddressText(inputValue){
	var varAlphabetText = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890/ :.,'\"()&-#;";
	var varInputValue = inputValue;
	var varInputLength=varInputValue.length;
	if (isBlank(varInputValue)){	return false;	}
	else if(isNumeric(varInputValue)){	return false;	}
	else{
		for(var i=0;i<varInputLength;i++)
		{	
			if(varAlphabetText.indexOf(varInputValue.charAt(i)) == -1){ return false;}
		}
	}
	return true;
}
/*
Email validation as follow 
i)EmailId text (ie., before @) :
	"Alpha Numeric - _ ." are allowed.
	Not Strict to Case sensitive. [A-Z, a-z]
	Maximun 2 dots(.) will be allowed, that too non-continues.
	No other Special Characters allowed.
	
ii)One at(@) will be allowed.

iii)Domail text (ie., after @) :
	"Alphabets ." are allowed.
	Strict to Case sensitive, only lower case.
	Maximun 2 dots(.) will be allowed, that too non-continues.
	No Numeric are allowed.
*//*
function validateEmail(strEmail)
{
      var at="@"
      var dot="."

		if (isBlank(strEmail)){return false}
		else{
			  var emailSplit	=	strEmail.split(at);
			  if (emailSplit.length <= 1){	return false;	}
			  else if (emailSplit.length > 2){	return false;	}
			  else {
			  var domainText		=	emailSplit[1];
			  var emailText		=	emailSplit[0];
			  var emailTextDotSplit = emailText.split(dot);
			  var domainTextDotSplit = domainText.split(dot);
			  if (!isValidEmailText(emailText)){	return false;	}
			  if (isNumeric(emailText)){	return false;	}
			  if (!isValidEmailDomainText(domainText)){	return false;	}
			  if (emailTextDotSplit.length > 3 || domainTextDotSplit.length > 3 || domainTextDotSplit.length < 2){	return false	}
			  if (emailText.length == (emailTextDotSplit.length-1)){return false}
			  if (domainText.length == (domainTextDotSplit.length-1)){return false}
			  if (emailTextDotSplit.length > 1 && emailTextDotSplit.length <= 3){
			  	for (var i=0; i<emailTextDotSplit.length; i++){
					if (isBlank(emailTextDotSplit[i])){	return false;	}
				}
			   }
			  if (domainTextDotSplit.length > 1 && domainTextDotSplit.length <= 3){
			  	for (var i=0; i<domainTextDotSplit.length; i++){
					if (isBlank(domainTextDotSplit[i])){	return false;	}
				}			
			  }
					}
			}

       return true
 } */
/* SOURCE FILE: date.js */

// HISTORY
// ------------------------------------------------------------------
// May 17, 2003: Fixed bug in parseDate() for dates <1970
// March 11, 2003: Added parseDate() function
// March 11, 2003: Added "NNN" formatting option. Doesn't match up
//                 perfectly with SimpleDateFormat formats, but 
//                 backwards-compatability was required.

// ------------------------------------------------------------------
// These functions use the same 'format' strings as the 
// java.text.SimpleDateFormat class, with minor exceptions.
// The format string consists of the following abbreviations:
// 
// Field        | Full Form          | Short Form
// -------------+--------------------+-----------------------
// Year         | yyyy (4 digits)    | yy (2 digits), y (2 or 4 digits)
// Month        | MMM (name or abbr.)| MM (2 digits), M (1 or 2 digits)
//              | NNN (abbr.)        |
// Day of Month | dd (2 digits)      | d (1 or 2 digits)
// Day of Week  | EE (name)          | E (abbr)
// Hour (1-12)  | hh (2 digits)      | h (1 or 2 digits)
// Hour (0-23)  | HH (2 digits)      | H (1 or 2 digits)
// Hour (0-11)  | KK (2 digits)      | K (1 or 2 digits)
// Hour (1-24)  | kk (2 digits)      | k (1 or 2 digits)
// Minute       | mm (2 digits)      | m (1 or 2 digits)
// Second       | ss (2 digits)      | s (1 or 2 digits)
// AM/PM        | a                  |
//
// NOTE THE DIFFERENCE BETWEEN MM and mm! Month=MM, not mm!
// Examples:
//  "MMM d, y" matches: January 01, 2000
//                      Dec 1, 1900
//                      Nov 20, 00
//  "M/d/yy"   matches: 01/20/00
//                      9/2/00
//  "MMM dd, yyyy hh:mm:ssa" matches: "January 01, 2000 12:30:45AM"
// ------------------------------------------------------------------

var MONTH_NAMES=new Array('January','February','March','April','May','June','July','August','September','October','November','December','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
var DAY_NAMES=new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sun','Mon','Tue','Wed','Thu','Fri','Sat');
function LZ(x) {return(x<0||x>9?"":"0")+x}

// ------------------------------------------------------------------
// isDate ( date_string, format_string )
// Returns true if date string matches format of format string and
// is a valid date. Else returns false.
// It is recommended that you trim whitespace around the value before
// passing it to this function, as whitespace is NOT ignored!
// ------------------------------------------------------------------
function isDate(val,format) 
{
	if (!isDate(val)) 
	{ 
		return false; 
	}
	return true;
}

// -------------------------------------------------------------------
// compareDates(date1,date1format,date2,date2format)
//   Compare two date strings to see which is greater.
//   Returns:
//   1 if date1 is greater than date2
//   0 if date2 is greater than date1 of if they are the same
//  -1 if either of the dates is in an invalid format
// -------------------------------------------------------------------
function compareDates(date1,dateformat1,date2,dateformat2) {
	var d1=getDateFromFormat(date1,dateformat1);
	var d2=getDateFromFormat(date2,dateformat2);
	if (d1==0 || d2==0) {
		return -1;
		}
	else if (d1 > d2) {
		return 1;
		}
	return 0;
	}

// ------------------------------------------------------------------
// formatDate (date_object, format)
// Returns a date in the output format specified.
// The format string uses the same abbreviations as in getDateFromFormat()
// ------------------------------------------------------------------
function formatDate(date,format) {
	format=format+"";
	var result="";
	var i_format=0;
	var c="";
	var token="";
	var y=date.getYear()+"";
	var M=date.getMonth()+1;
	var d=date.getDate();
	var E=date.getDay();
	var H=date.getHours();
	var m=date.getMinutes();
	var s=date.getSeconds();
	var yyyy,yy,MMM,MM,dd,hh,h,mm,ss,ampm,HH,H,KK,K,kk,k;
	// Convert real date parts into formatted versions
	var value=new Object();
	if (y.length < 4) {y=""+(y-0+1900);}
	value["y"]=""+y;
	value["yyyy"]=y;
	value["yy"]=y.substring(2,4);
	value["M"]=M;
	value["MM"]=LZ(M);
	value["MMM"]=MONTH_NAMES[M-1];
	value["NNN"]=MONTH_NAMES[M+11];
	value["d"]=d;
	value["dd"]=LZ(d);
	value["E"]=DAY_NAMES[E+7];
	value["EE"]=DAY_NAMES[E];
	value["H"]=H;
	value["HH"]=LZ(H);
	if (H==0){value["h"]=12;}
	else if (H>12){value["h"]=H-12;}
	else {value["h"]=H;}
	value["hh"]=LZ(value["h"]);
	if (H>11){value["K"]=H-12;} else {value["K"]=H;}
	value["k"]=H+1;
	value["KK"]=LZ(value["K"]);
	value["kk"]=LZ(value["k"]);
	if (H > 11) { value["a"]="PM"; }
	else { value["a"]="AM"; }
	value["m"]=m;
	value["mm"]=LZ(m);
	value["s"]=s;
	value["ss"]=LZ(s);
	while (i_format < format.length) {
		c=format.charAt(i_format);
		token="";
		while ((format.charAt(i_format)==c) && (i_format < format.length)) {
			token += format.charAt(i_format++);
			}
		if (value[token] != null) { result=result + value[token]; }
		else { result=result + token; }
		}
	return result;
	}
	
// ------------------------------------------------------------------
// Utility functions for parsing in getDateFromFormat()
// ------------------------------------------------------------------
function _isInteger(val) {
	var digits="1234567890";
	for (var i=0; i < val.length; i++) {
		if (digits.indexOf(val.charAt(i))==-1) { return false; }
		}
	return true;
	}
function _getInt(str,i,minlength,maxlength) {
	for (var x=maxlength; x>=minlength; x--) {
		var token=str.substring(i,i+x);
		if (token.length < minlength) { return null; }
		if (_isInteger(token)) { return token; }
		}
	return null;
	}
	
// ------------------------------------------------------------------
// getDateFromFormat( date_string , format_string )
//
// This function takes a date string and a format string. It matches
// If the date string matches the format string, it returns the 
// getTime() of the date. If it does not match, it returns 0.
// ------------------------------------------------------------------
function getDateFromFormat(val,format) {
	val=val+"";
	format=format+"";
	var i_val=0;
	var i_format=0;
	var c="";
	var token="";
	var token2="";
	var x,y;
	
	var now=new Date();
	var year=now.getYear();
	var month=now.getMonth()+1;
	
	var date=1;
	var hh=now.getHours();
	var mm=now.getMinutes();
	var ss=now.getSeconds();
	var ampm="";
	
	
	 
//	 	var pickerDate = new Date(convetDate);
//		month = pickerDate.getMonth()+1;
//		alert(month);
	
	while (i_format < format.length) {
		// Get next token from format string
		c=format.charAt(i_format);
		token="";
		while ((format.charAt(i_format)==c) && (i_format < format.length)) {
			token += format.charAt(i_format++);
			}
		// Extract contents of value based on format token
		if (token=="yyyy" || token=="yy" || token=="y") {
			if (token=="yyyy") { x=4;y=4; }
			if (token=="yy")   { x=2;y=2; }
			if (token=="y")    { x=2;y=4; }
			year=_getInt(val,i_val,x,y);
			if (year==null) { return 0; }
			i_val += year.length;
			if (year.length==2) {
				if (year > 70) { year=1900+(year-0); }
				else { year=2000+(year-0); }
				}
			}
		else if (token=="MMM"||token=="NNN"){
			month=0;
			for (var i=0; i<MONTH_NAMES.length; i++) {
				var month_name=MONTH_NAMES[i];
				if (val.substring(i_val,i_val+month_name.length).toLowerCase()==month_name.toLowerCase()) {
					if (token=="MMM"||(token=="NNN"&&i>11)) {
						month=i+1;
						if (month>12) { month -= 12; }
						i_val += month_name.length;
						break;
						}
					}
				}
			if ((month < 1)||(month>12)){return 0;}
			}
		else if (token=="EE"||token=="E"){
			for (var i=0; i<DAY_NAMES.length; i++) {
				var day_name=DAY_NAMES[i];
				if (val.substring(i_val,i_val+day_name.length).toLowerCase()==day_name.toLowerCase()) {
					i_val += day_name.length;
					break;
					}
				}
			}
		else if (token=="MM"||token=="M") {
			month=_getInt(val,i_val,token.length,2);
			if(month==null||(month<1)||(month>12))
			{
				return 0;
				}
			i_val+=month.length;}
		else if (token=="dd"||token=="d") {
			date=_getInt(val,i_val,token.length,2);
			if(date==null||(date<1)||(date>31))
			{
				
				return 0;
			}
			i_val+=date.length;}
		else if (token=="hh"||token=="h") {
			hh=_getInt(val,i_val,token.length,2);
			if(hh==null||(hh<1)||(hh>12)){
				
				return 0;}
			i_val+=hh.length;}
		else if (token=="HH"||token=="H") {
			hh=_getInt(val,i_val,token.length,2);
			if(hh==null||(hh<0)||(hh>23)){
				
				return 0;
				}
			i_val+=hh.length;}
		else if (token=="KK"||token=="K") {
			hh=_getInt(val,i_val,token.length,2);
			if(hh==null||(hh<0)||(hh>11)){
				
				return 0;}
			i_val+=hh.length;}
		else if (token=="kk"||token=="k") {
			hh=_getInt(val,i_val,token.length,2);
			if(hh==null||(hh<1)||(hh>24)){
				
				return 0;}
			i_val+=hh.length;hh--;}
		else if (token=="mm"||token=="m") {
			mm=_getInt(val,i_val,token.length,2);
			if(mm==null||(mm<0)||(mm>59)){
				return 0;}
			i_val+=mm.length;}
		else if (token=="ss"||token=="s") {
			ss=_getInt(val,i_val,token.length,2);
			if(ss==null||(ss<0)||(ss>59)){
				return 0;}
			i_val+=ss.length;}
		else if (token=="a") {
			if (val.substring(i_val,i_val+2).toLowerCase()=="am") {ampm="AM";}
			else if (val.substring(i_val,i_val+2).toLowerCase()=="pm") {ampm="PM";}
			else {return 0;}
			i_val+=2;}
		else {
			if (val.substring(i_val,i_val+token.length)!=token) {return 0;}
			else {i_val+=token.length;}
			}
		}
	// If there are any trailing characters left in the value, it doesn't match
	if (i_val != val.length) { return 0; }
	// Is date valid for month?
	if (month==2) {
		// Check for leap year
		if ( ( (year%4==0)&&(year%100 != 0) ) || (year%400==0) ) { // leap year
			if (date > 29){ return 0; }
			}
		else { if (date > 28) { return 0; } }
		}
		
		
	if ((month==4)||(month==6)||(month==9)||(month==11)) 
	{
		if (date > 30) { return 0; }
	}
	// Correct hours value
	if (hh<12 && ampm=="PM") { hh=hh-0+12; }
	else if (hh>11 && ampm=="AM") { hh-=12; }
	var newdate=new Date(year,month-1,date,hh,mm,ss);
	return newdate.getTime();
	}

// ------------------------------------------------------------------
// parseDate( date_string [, prefer_euro_format] )
//
// This function takes a date string and tries to match it to a
// number of possible date formats to get the value. It will try to
// match against the following international formats, in this order:
// y-M-d   MMM d, y   MMM d,y   y-MMM-d   d-MMM-y  MMM d
// M/d/y   M-d-y      M.d.y     MMM-d     M/d      M-d
// d/M/y   d-M-y      d.M.y     d-MMM     d/M      d-M
// A second argument may be passed to instruct the method to search
// for formats like d/M/y (european format) before M/d/y (American).
// Returns a Date object or null if no patterns match.
// ------------------------------------------------------------------
function parseDate(val) {
	var preferEuro=(arguments.length==2)?arguments[1]:false;
	generalFormats=new Array('y-M-d','MMM d, y','MMM d,y','y-MMM-d','d-MMM-y','MMM d');
	monthFirst=new Array('M/d/y','M-d-y','M.d.y','MMM-d','M/d','M-d');
	dateFirst =new Array('d/M/y','d-M-y','d.M.y','d-MMM','d/M','d-M');
	var checkList=new Array('generalFormats',preferEuro?'dateFirst':'monthFirst',preferEuro?'monthFirst':'dateFirst');
	var d=null;
	for (var i=0; i<checkList.length; i++) {
		var l=window[checkList[i]];
		for (var j=0; j<l.length; j++) {
			d=getDateFromFormat(val,l[j]);
			if (d!=0) { return new Date(d); }
			}
		}
	return null;
}
//=====================	===================== =====================	===================== =====================	
//TIME DIFFERENT BETWEEN TWO TIME. TIME & MINUTE SHOULD BE GIVEN SEPERATELY IN 24 HH 59 MIN FORMAT
//AUTHOR : SAY SARVA
function sayTimeValidate(T1, M1, T2, M2){var Vrst;if (!isInteger(T1) || T1<0 || T1>23){Vrst = "Enter Correct Time-1 value"}else if (!isInteger(M1) || M1<0 || M1>59){Vrst = "Enter Correct Minute-1 value"}else if (!isInteger(T2) || T2<0 || T2>23){Vrst = "Enter Correct Time-2 value"}else if (!isInteger(M2) || M2<0 || M2>59){Vrst = "Enter Correct Minute-2 value"}else {var Vhr=0, Vmins=0;	T1=parseInt(T1,10);T2=parseInt(T2,10);M1=parseInt(M1,10);M2=parseInt(M2,10);if (T2 >= T1 && M2 >= M1){Vhr=T2-T1;Vmins=M2-M1;}else if (T2 > T1 && M1 > M2){Vhr=(T2-1)-T1;Vmins=(M2+60)-M1;}else if (T1 >= T2){Vhr=(23-T1)+T2; Vmins=(60-M1)+M2;if (Vmins >= 60){Vhr=Vhr+1;Vmins=Vmins-60;}}Vrst = "Hours : "+Vhr+" Minutes : "+Vmins;}return (Vrst)}
//=====================	===================== =====================	===================== =====================

// ======= Date Validation ====================================================================================

/**
 * DHTML date validation script. Courtesy of SmartWebby.com (http://www.smartwebby.com/dhtml/)
 */
// Declaring valid date character, minimum year and maximum year
var dtCh= "/";
var minYear=1900;
var maxYear=2100;

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
}

function isValidDate(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 (pos1==-1 || pos2==-1){
		alert("The date format should be : mm/dd/yyyy")
		return false
	}
	if (strMonth.length<1 || month<1 || month>12){
		alert("Please enter a valid month")
		return false
	}
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
		alert("Please enter a valid day")
		return false
	}
	if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
		alert("Please enter a valid 4 digit year between "+minYear+" and "+maxYear)
		return false
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
		alert("Please enter a valid date")
		return false
	}
return true
}

function ValidateForm(){
	var dt=document.frmSample.txtDate
	if (isDate(dt.value)==false){
		dt.focus()
		return false
	}
    return true
 }
//=============================================================================================================	
function isProper(string) {

   if (!string) return false;
   var iChars = "\\+*|,:<>[]{}`';()@&$#%_!~^";

   for (var i = 0; i < string.length; i++) {
      if (iChars.indexOf(string.charAt(i)) != -1)
         return false;
   }
   return true;
} 
function isDatesEqual(date1,dateformat1,date2,dateformat2) {
	var d1=getDateFromFormat(date1,dateformat1);
	var d2=getDateFromFormat(date2,dateformat2);
	if (d1 != d2) {	return 1;}
	return 0;
	}
function isSelected(selectbox){
//alert("selected value:"+selectbox.value);

if(selectbox.value=="" || selectbox.value==0)
return false;
else
return true;
}
//both the dates date should be in dd/MM/yyyy
function isGreaterDate(toDayDate,date1)
{
	ld = new Date(toDayDate.split('/')[2],toDayDate.split('/')[1]-1,toDayDate.split('/')[0]);
	dd = new Date(date1.split('/')[2],date1.split('/')[1]-1,date1.split('/')[0]);

	if (ld>dd) 
	{  
		 return false;
	}
	return true;
}
function isGreaterThanEqualDate(toDayDate,date1)
{
	ld = new Date(toDayDate.split('/')[2],toDayDate.split('/')[1]-1,toDayDate.split('/')[0]);
	dd = new Date(date1.split('/')[2],date1.split('/')[1]-1,date1.split('/')[0]);

	if (ld>=dd) 
	{  
		 return false;
	}
	return true;
}


function formatDateMonth(date)
{
		dateobj = new Date(date);
		dd = dateobj.getDate();
		
		mm = dateobj.getMonth()+1;
		
		yy = dateobj.getFullYear();
		
		if(dd != "" && dd < 10)
			dd = "0"+dd;
		if(mm != "" && mm < 10)
			mm = "0"+mm;
		//	alert(dd+"/"+mm+"/"+yy);
		return dd+"/"+mm+"/"+yy;
		
}

function isDate(ddat)
{	
	
	ddat =formatDateintoMMDDYYY(ddat);
	if(ddat==0)
	{
		return false;
	}
	
	var MAX_YEAR = 3100
	var MIN_YEAR = 1700
	

	var ifirstslash = ddat.indexOf("/");
	var isecslash = ddat.lastIndexOf("/");
	var serrmessage = ""
	var mm = 0;
	var dd = 0;
	var yy = 0;
	var yflag = 0;
	var leapflag  = 0;
	var mflag = 0;
	var dflag= 0;
	mindate = MIN_YEAR;
	maxdate = MAX_YEAR;
	if((ifirstslash > 2 || ifirstslash < 1) || (isecslash > 5 || isecslash < 3) || (ddat.length < 8) || (ddat.length > 10) || ((ddat.length == 9) && (isecslash == 3))    || ((ddat.length == 10) && (isecslash == 3)) || ((ddat.length == 10) && (isecslash == 4))) 
	{
		return false
	}
	else
	{
		//Format is correct
		//Identify the Month
		if(ifirstslash == 2)//2 digits in the month
			mm = ddat.substring(0,2);
		else
		{
			if(ifirstslash == 1)//1 digit in the month
				mm = ddat.substring(0,1);
		}
		// Identify the Date
		if(isecslash == 5)// 2 digits in the date
			dd = ddat.substring(3,5);
		else if(isecslash == 4) 
		{
			if(ifirstslash == 1)        // 1 digit in the month and 2 in the date
				dd = ddat.substring(2,4);
			else if (ifirstslash == 2)     // 2 digits in the month and 1 in the date
				dd = ddat.substring(3,4);
		}
		else
		{
			if(isecslash == 3)// 1 digit in the date
			   dd = ddat.substring(2,3);
		}
		// Identify the Year   
		if(isecslash == 5)// 2 digits in the date
			yy = ddat.substring(6,10);
		else if(isecslash == 4) 
		{
			// Whether 2 digits in the month and 1 in the date  OR 1 digit in the month and 2 in the date
			yy = ddat.substring(5,9);
		}
		else
		{
			if(isecslash == 3 )   // 1 digit in the date
				yy = ddat.substring(4,8);
		}
		if(isNaN(mm) || isNaN(dd) || isNaN(yy))//Check for characters other than digits
		{  
			//serrmessage = "Please Enter only digits "
			return false
		}
		else           
		{  
			if(((yy % 4 == 0) && (yy % 100 != 0)) || (yy % 400 == 0))  //Leap year checking
			{
				leapflag = 1;
			}
			if (mm < 1 || mm > 12)  // Month validation
			{ 
				mflag = 1; //Wrong month
				//serrmessage = "Invalid month"
				return false
			} 
			if(mflag == 0)  // if valid month       
			{      
				if(mm == 1 || mm == 3 || mm == 5 || mm == 7 || mm == 8 || mm == 10 || mm == 12)
				{
					//Months having 31 days
					if(dd < 1 ||dd > 31)
						dflag=1;//Invalid date
				} 
				else
				{
					if (dd < 1 || dd > 30)  //Months having 30 days
						dflag=1;     //Invalid date
					if(mm == 2)    // February month
					{
						if(leapflag == 1)   // If Leap year allow 29 days
						{ 
							if(dd < 1 || dd > 29)        
							dflag=1;  //Invalid date
						}
						else         // If not a Leap year allow 28 days
						{ 
							if(dd < 1 || dd > 28)
								dflag=1;     //Invalid date
						} 
					}
				}
				if(dflag == 1)//Invalid date
				{ 
					//serrmessage = "Invalid date"
					return false
				}
				else      
				{
				   //Check for Year
					if(yy < mindate || yy > maxdate)     //Valid address range
					{
						yflag = 1;      // Invalid year
					} 
					if(yflag == 1)
					{
						//serrmessage = "Invalid year"
						return false
					}	
				}
				//It is a valid date 
				//serrmessage = ddat
				return true
			}
			//End of - if valid month           
		}
	}
	//End of Main else - Format is correct
}

function formatDateintoMMDDYYY(date)
{
	yy =date.split('/')[2];
	mm =date.split('/')[1];
	dd =date.split('/')[0];
	if(isNaN(mm) || isNaN(dd) || isNaN(yy))//Check for characters other than digits
		{  
			//serrmessage = "Please Enter only digits "
			return 0;
		}
		
		if(mm<0 || mm>12)
		{
			return 0;
		}
		if(dd<0 || dd>31)
		{
			return 0;
		}
		if(yy <1900 || yy >9999)
		{
			return 0;
		}
	
	return mm+"/"+dd+"/"+yy;
}






//----------------------- R n D VALIDATIONS -------------------------------

// function to check whether the given double/float consist only one dot(.)
function isValidDouble(value)
	{
        len=value.length;
	dotfps = value.indexOf(".");
	dotlps =value.lastIndexOf(".");

	if(dotfps == -1)
	{
		return true;
	}
	else
	{
	  if(dotlps == dotfps && len != 1)
	  {
	    if(dotfps == 0)
		{
			return false;
		}
		if(dotfps == (len-1))
		{
		return false;
		}
			return true;
		}
		else
		    {
                        return false;
                    }
          }
     	}
 // Trim whitespace from left and right sides of s.
    function trim(s) {
		return s.replace( /^\s*/, '' ).replace( /\s*$/, '' );  
    }
    String.prototype.startsWith = function(str)
	{
		return (this.match("^"+str)==str)
	}
	String.prototype.endsWith = function(str)
	{
		return (this.match(str+"$")==str)
	}

var iChars = "!@#$%^&*()+=-[]\\\';,/{}|\":<>?";
var iNumber = "0123456789.";
function checkValidFloat(value)
{
      for (var i = 0; i < value.length; i++) {
      if (iChars.indexOf(value.charAt(i)) != -1) {
      return false;
      }
    }


      for (var i = 0; i < value.length; i++) {
      if (iNumber.indexOf(value.charAt(i)) == -1) {
      return false;
      }
      }

      if(isNaN(parseFloat(value))) {

      return false;
      }
      if(!isValidDouble(trim(value)))
      {
      return false;
      }
      return true;
}

//End -->

function IsValidTime(timeStr) {
	// Checks if time is in HH:MM:SS AM/PM format.
	// The seconds and AM/PM are optional.
	var timePat = /^(\d{1,2}):(\d{2})(:(\d{2}))?(\s?(AM|am|PM|pm))?$/;
	
	var matchArray = timeStr.match(timePat);
	if (matchArray == null) {
		alert("Time is not in a valid format.");
		return false;
	}
	hour = matchArray[1];
	minute = matchArray[2];
	second = matchArray[4];
	ampm = matchArray[6];
	
	if (second=="") { second = null; }
	if (ampm=="") { ampm = null }
	
	if (hour < 0  || hour > 23) {
		alert("Hour must be between 1 and 12. (or 0 and 23 for military time)");
		return false;
	}
	if (hour <= 12 && ampm == null) {
		if (confirm("Please indicate which time format you are using.  OK = Standard Time, CANCEL = Military Time")) {
			alert("You must specify AM or PM.");
			return false;
	   }
	}
	if  (hour > 12 && ampm != null) {
		alert("You can't specify AM or PM for military time.");
		return false;
	}
	if (minute < 0 || minute > 59) {
		alert ("Minute must be between 0 and 59.");
		return false;
	}
	if (second != null && (second < 0 || second > 59)) {
		alert ("Second must be between 0 and 59.");
		return false;
	}
	return true;
}
function validateEmail(emailStr) {		
       if (trim(emailStr).length == 0) {
           return false;
       }
       var emailPat=/^(.+)@(.+)$/;
      // var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
       var specialChars="\\(\\)<>@,;:#$~!~^&*%?\\\\\\\"\\.\\[\\]";
       var validChars="\[^\\s" + specialChars + "\]";
       var quotedUser="(\"[^\"]*\")";
       var ipDomainPat=/^(\d{1,3})[.](\d{1,3})[.](\d{1,3})[.](\d{1,3})$/;
       var atom=validChars + '+';
       var word="(" + atom + "|" + quotedUser + ")";
       var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
       var domainPat=new RegExp("^" + atom + "(\\." + atom + ")*$");
       var matchArray=emailStr.match(emailPat);
       if (matchArray == null) {
           return false;
       }
       var user=matchArray[1];
       var domain=matchArray[2];
       if (user.match(userPat) == null) {
           return false;
       }
       var IPArray = domain.match(ipDomainPat);
       if (IPArray != null) {
           for (var i = 1; i <= 4; i++) {
              if (IPArray[i] > 255) {
                 return false;
              }
           }
           return true;
       }
       var domainArray=domain.match(domainPat);
       if (domainArray == null) {
           return false;
       }
       var atomPat=new RegExp(atom,"g");
       var domArr=domain.match(atomPat);
       var len=domArr.length;
       if ((domArr[domArr.length-1].length < 2) ||
           (domArr[domArr.length-1].length > 3)) {
           return false;
       }
       if (len < 2) {
           return false;
       }
       return true;
    }
function isValidPAN_JS(PANNumber){
	if (isBlank(PANNumber)) return false;
	if (PANNumber.length != 10) return false;
	PANNumber.toUpperCase();
	var firstText = PANNumber.substring(0,5);
	var midText = PANNumber.substring(5,9);
	var endText = PANNumber.substring(9,10);
	
	var varCapsAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	var varNumber = "0123456789"; 
	
	for(var i=0; i<5; i++)
	{	
		if(varCapsAlphabet.indexOf(firstText.charAt(i)) == -1){ return false; }
	}
	for(var i=0; i<4; i++)
	{	
		if(varNumber.indexOf(midText.charAt(i)) == -1){ return false;}
	}
	if(varCapsAlphabet.indexOf(endText.charAt(0)) == -1){ return false;}
return true;
}
function isValidPRAN_JS(PRANNumber){
	if (isBlank(PRANNumber)) return false;
	if (PRANNumber.length != 12) return false;
	return true;
}
//## Date Format should be in 'dd/mm/yyyy'
function isMinor_JS(currentDate, dateOfBirth, minorAgeLevel)
{
	try{
	if(!isDate(currentDate,'dd/mm/yyyy') || !isDate(dateOfBirth,'dd/mm/yyyy')){alert("Check Date Format('dd/mm/yyyy')"); return true;}
	var changedDOBDate=dateOfBirth.split('/');
	var dd=parseInt(changedDOBDate[0])-1;
	var dm=changedDOBDate[1];
	var dy=parseInt(changedDOBDate[2],10)+minorAgeLevel;
	var dateOfBirthChanged=dd+'/'+dm+'/'+dy; //new Date(dy,dm,dd);
	if(isGreaterDate(currentDate,dateOfBirthChanged)){
		return true;	}
	return false;
	}catch(err){return true;}
}
//## Date Format should be in 'dd/mm/yyyy'
//## Compare date by adding Months Variation + Current Date with the Compare Date. 
function compareDateInMonths(currentDate, compareDate, monthsVariation)
{
	try{
	if(monthsVariation > 12)return false;
	if(!isDate(currentDate,'dd/mm/yyyy') || !isDate(compareDate,'dd/mm/yyyy')){alert("Check Date Format('dd/mm/yyyy')"); return true;}
	var changedCDate=currentDate.split('/');
	var dd=parseInt(changedCDate[0])-1;
	var dm=parseInt(changedCDate[1],10)+monthsVariation;
	var dy=changedCDate[2];
	if(dm > 12){dm = dm-12; dy = parseInt(dy,10)+1;}
	var currentDateChanged=dd+'/'+dm+'/'+dy; //new Date(dy,dm,dd);
	//alert("CHNGD DATE : "+currentDateChanged)
	if(isGreaterDate(compareDate,currentDateChanged)){
		return true;	}
	return false;
	}catch(err){return true;}
}

function DomCheck(){
	return(document.createElement && document.getElementById)
	}

	function DomCorners(id,bk,h,tries){
	var el=document.getElementById(id);
	if(el==null){
	    if(tries==null) tries=200;
	    if(tries>0)
	        setTimeout("DomCorners('"+id+"','"+bk+"',"+h+","+(--tries)+")",50);
	    return;
	    }
	var c=new Array(4);
	for(var i=0;i<4;i++){
	    c[i]=document.createElement("b");
	    c[i].style.display="block";
	    c[i].style.height=h+"px";
	    c[i].style.fontSize="1px";
	    if(i%2==0)
	        c[i].style.background="url("+bk+") no-repeat 0 -"+ i*h + "px";
	    else
	        c[i].style.background="url("+bk+") no-repeat 100% -"+ i*h + "px";
	    }
	c[0].appendChild(c[1]);
	c[2].appendChild(c[3]);
	el.style.padding="0";
	el.insertBefore(c[0],el.firstChild);
	el.appendChild(c[2]);
	}
	
function checkDecimals(fieldValue) {
	decallowed = 4;
	if (isNaN(fieldValue) || fieldValue == "") {
		return false;
		//alert("Oops!  That does not appear to be a valid number.  Please try again.");
	}
	else {
	if (fieldValue.indexOf('.') == -1) fieldValue += ".";
		dectext = fieldValue.substring(fieldValue.indexOf('.')+1, fieldValue.length);

	if (dectext.length > decallowed)
	{
		return false;
		//alert ("Oops! Please enter Avg Cost Price with up to " + decallowed + " decimal places only.");		
    }
	else {
		return true;
		//alert ("That number validated successfully.");
    }
   }
}
