var phoneno_flag=0;
var arr_phone = new Array (3);
arr_phone[0]=0;
String.prototype.trim = function()
{
	return this.replace( /(^\s*)|(\s*$)/g, '' ) ;
}
function validateCompleteForm(objForm,strErrorClass){
	return _validateInternal(objForm,strErrorClass,0);
};
function validateStandard(objForm,strErrorClass){ 
 	return _validateInternal(objForm,strErrorClass,0);
};
function _validateInternal(form,strErrorClass,nErrorThrowType){
	var strErrorMessage="";var objFirstError=null;
	if(nErrorThrowType==0){
		strErrorMessage=(form.err)?form.err:_getLanguageText("err_form");
	};
	var fields=_GenerateFormFields(form);
	for(var i=0;i<fields.length;++i){
		var field=fields[i];
		if(!field.IsValid(field,form)){
			
			field.SetClass(strErrorClass);
			if(nErrorThrowType==1){
				_throwError(field);
				return false;
			}else{
				if(objFirstError==null){
					objFirstError=field;
				}
				strErrorMessage=_handleError(field,strErrorMessage);
				bError=true;
			}
		}else{
			field.ResetClass();
		}
	};
	if(objFirstError!=null){
		//alert(strErrorMessage.indexOf("Phone3\n"))
		/*var index;
		if(strErrorMessage.indexOf("Phone1\n")!= -1){
			index=strErrorMessage.indexOf("Phone1\n");
			strErrorMessage=strErrorMessage.replace("Phone1\n","");
			if(phoneno_flag==0){
				strErrorMessage[index]="PhoneNo\n";
			}
			phoneno_flag=1;
		}
		if(strErrorMessage.indexOf("Phone2\n")!= -1){
			index=strErrorMessage.indexOf("Phone1\n");
			strErrorMessage=strErrorMessage.replace("Phone2\n","");
			if(phoneno_flag==0)
				strErrorMessage[index]="Phone No.\n";
			phoneno_flag=1;
		}
		if(strErrorMessage.indexOf("Phone3\n")!= -1){
			index=strErrorMessage.indexOf("Phone1\n");
			strErrorMessage=strErrorMessage.replace("Phone3\n","");
			if(phoneno_flag==0)
				strErrorMessage[index]="Phone No.\n";
			phoneno_flag=1;
		}
		if(phoneno_flag==1){
			phoneno_flag=0;
		}*/
		
		
		
		alert(strErrorMessage);
		if(objFirstError.element.type!='hidden')
			objFirstError.element.focus();
		return false;
	};
	return true;
};
function _getLanguageText(id){
	objTextsInternal=new _jsVal_Language();
	objTexts=null;
	try{
		objTexts=new jsVal_Language();
	}catch(ignored){};
	switch(id){
		case "err_form":strResult=(!objTexts||!objTexts.err_form)?objTextsInternal.err_form:objTexts.err_form;break;
		case "err_enter":strResult=(!objTexts||!objTexts.err_enter)?objTextsInternal.err_enter:objTexts.err_enter;break;
		case "err_select":strResult=(!objTexts||!objTexts.err_select)?objTextsInternal.err_select:objTexts.err_select;break;
	};
	return strResult;
};
function _GenerateFormFields(form){
	var arr=new Array();
	for(var i=0;i<form.length;++i){
		var element=form.elements[i];
		var index=_getElementIndex(arr,element);
		if(index==-1){
		arr[arr.length]=new Field(element,form);
		}else{
		arr[index].Merge(element)
		};
	};
	return arr;
};
function _getElementIndex(arr,element){
	if(element.name){
		var elementName=element.name.toLowerCase();
		for(var i=0;i<arr.length;++i){
			if(arr[i].element.name){
				if(arr[i].element.name.toLowerCase()==elementName){
					return i;
				}
			};
		};
	}
	return -1;
};
function _jsVal_Language(){
	this.err_form="Please enter/select valid values for the following fields:\n\n";
	this.err_select="Please select a valid \"%FIELDNAME%\"";
	this.err_enter="Please enter a valid \"%FIELDNAME%\"";
};
function Field(element,form){
	this.type=element.type;
	this.element=element;
	this.exclude=element.exclude||element.getAttribute('exclude');
	this.err=element.err||element.getAttribute('err');
	this.element.errorClassName=element.errorClassName||element.getAttribute('errorClassName');
	//alert(this.errorClassName);
	this.required=_parseBoolean(element.required||element.getAttribute('required'));
	this.realname=element.realname||element.getAttribute('realname');
	this.elements=new Array();
	switch(this.type){
		case "textarea":
		case "password":
		case "text":
		case "hidden":
		case "file":
		case "select-one":
			this.value=element.value;
			this.minLength=element.minlength||element.getAttribute('minlength');
			this.maxLength=element.maxlength||element.getAttribute('maxlength');
			this.regexp=this._getRegEx(element);
			this.minValue=element.minvalue||element.getAttribute('minvalue');
			this.maxValue=element.maxvalue||element.getAttribute('maxvalue');
			this.equals=element.equals||element.getAttribute('equals');
			this.callback=element.callback||element.getAttribute('callback');
			break;
		
		case "select-multiple":
			this.values=new Array();
			for(var i=0;i<element.options.length;++i){
				if(element.options[i].selected&&(!this.exclude||element.options[i].value!=this.exclude)){
					this.values[this.values.length]=element.options[i].value;
				}
			}
			this.min=element.min||element.getAttribute('min');
			this.max=element.max||element.getAttribute('max');
			this.equals=element.equals||element.getAttribute('equals');
			break;
		case "checkbox":
			this.min=element.min||element.getAttribute('min');
			this.max=element.max||element.getAttribute('max');
		case "radio":
			this.required=_parseBoolean(this.required||element.getAttribute('required'));
			this.values=new Array();
			if(element.checked){
				this.values[0]=element.value;
			}
				this.elements[0]=element;
			break;
	};
};
Field.prototype.Merge=function(element){
	var required=_parseBoolean(element.getAttribute('required'));
	if(required){
		this.required=true;
	};
	if(!this.err){
		this.err=element.getAttribute('err');
	};
	if(!this.errorClassName){
		this.errorClassName=element.getAttribute('errorClassName');
	};
	if(!this.equals){
		this.equals=element.getAttribute('equals');
	};
	if(!this.callback){
		this.callback=element.getAttribute('callback');
	};
	if(!this.realname){
		this.realname=element.getAttribute('realname');
	};
	if(!this.max){
		this.max=element.getAttribute('max');
	};
	if(!this.min){
		this.min=element.getAttribute('min');
	};
	if(!this.regexp){
		this.regexp=this._getRegEx(element);
	};
	if(element.checked){
		this.values[this.values.length]=element.value;
	};
	this.elements[this.elements.length]=element;
};
Field.prototype.IsValid=function(arrFields,form){
	switch(this.type){
		case "textarea":
		case "password":
		case "text":
		case "file":
		case "hidden":
		case "select-one":
			return this._ValidateText(arrFields,form);
		
		case "select-multiple":
		case "radio":
		case "checkbox":
			return this._ValidateGroup(arrFields);
		default:
			return true;
	};
};
Field.prototype.SetClass=function(newClassName){
	if((newClassName)&&(newClassName!="")){
		if((this.elements)&&(this.elements.length>0)){
			for(var i=0;i<this.elements.length;++i){
				if(this.elements[i].className!=newClassName){
					this.elements[i].oldClassName=this.elements[i].className;
					
					if(this.elements[i].errorClassName)
						this.elements[i].className=this.elements[i].errorClassName;
				}
			}
		}else{
			//alert(this.element.className);
			if(this.element.errorClassName)
			{
				if(this.element.className!=this.element.errorClassName){
					this.element.oldClassName=this.element.className;
					
						this.element.className=this.element.errorClassName;
					
						
				}
			}
		};
	}
};
Field.prototype.ResetClass=function(){
	if((this.type!="button")&&(this.type!="submit")&&(this.type!="reset")){
		if((this.elements)&&(this.elements.length>0)){
			for(var i=0;i<this.elements.length;++i){
				if(this.elements[i].oldClassName){
					this.elements[i].className=this.elements[i].oldClassName;
				}
				else{
					this.elements.className="";
				}
			}
		}else{
			//alert(this.element.getAttribute('name') + ': '+this.element.oldClassName);
			
			if(this.element.oldClassName){
				this.element.className=this.element.oldClassName;
			}
			else{
				//this.element.className="";
			}
		};
	};
};
Field.prototype._getRegEx=function(element){
	regex=element.regexp||element.getAttribute('regexp')
	if(regex==null)return null;
		retype=typeof(regex);
	if(retype.toUpperCase()=="FUNCTION")
		return regex;
	else if((retype.toUpperCase()=="STRING")&&!(regex!=""))
	{
		nBegin=0;nEnd=0;
		if(regex.charAt(0)=="/")nBegin=1;
		if(regex.charAt(regex.length-1)=="/")nEnd=0;
		return new RegExp(regex.slice(nBegin,nEnd));
	}
	else{
		return regex;
	};
};
Field.prototype._ValidateText=function(arrFields,form){
	if((this.required)&&(this.callback)){
		nCurId=this.element.id?this.element.id:"";
		nCurName=this.element.name?this.element.name:"";
		eval("bResult = "+this.callback+"('"+nCurId+"', '"+nCurName+"', '"+this.value+"');");
		if(bResult==false){
			return false;
		};
	}else{
		if(this.required&&!this.value){
			return false;
		};
		if(this.value&&(this.minLength&&this.value.length<this.minLength)){
			return false;
		};
		if(this.value&&(this.maxLength&&this.value.length>this.maxLength)){
			return false;
		};
		//alert(this.regexp);
		if(this.regexp){
			if(!_checkRegExp(this.regexp,this.value,form))
			{
				if(!this.required&&this.value){
					return false;
				}
				if(this.required){
					return false;
				}
			}
			else
			{
				return true;
			};
		};
		if(this.equals){
		for(var i=0;i<arrFields.length;++i){
			var field=arrFields[i];
				if((field.element.name==this.equals)||(field.element.id==this.equals)){
					if(field.element.value!=this.value){
						return false;
					};
					break;
				};
			};
		};
		if(this.required){
			var fValue=parseFloat(this.value);
			if((this.minValue||this.maxValue)&&isNaN(fValue)){
				return false;
			};
			if((this.minValue)&&(fValue<this.minValue)){
				return false;
			};
			if((this.maxValue)&&(fValue>this.maxValue)){
				return false
			};
		};
	}
	return true;
};
Field.prototype._ValidateGroup=function(arrFields){
	if(this.required&&this.values.length==0){
		return false;
	};
	if(this.required&&this.min&&this.min>this.values.length){
		return false;
	};
	if(this.required&&this.max&&this.max<this.values.length){
		return false;
	};
	return true;
};

function _handleError(field,strErrorMessage){
	var obj=field.element;
	 if(field.regexp == "JS_PHONE" && strErrorMessage.indexOf("Phone") == -1){
		strErrorMessage=strErrorMessage+"Phone No.\n";	
	 }else if(field.regexp == "JS_PHONE" && strErrorMessage.indexOf("Phone") != -1){
		strErrorMessage=strErrorMessage+"";	
	}else{
		strErrorMessage=strErrorMessage+((field.realname)?field.realname:((obj.id)?obj.id:obj.name))+"\n";
	}
	return strErrorMessage;
};
function _throwError(field){
	var obj=field.element;
	switch(field.type){
		case "text":
		case "password":
		case "textarea":
		case "hidden":
		case "file":
			alert(_getError(field,"err_enter"));
			try{
				obj.focus();
			}
			catch(ignore){}
			break;
		case "select-one":
		case "select-multiple":
		case "radio":
		case "checkbox":
			alert(_getError(field,"err_select"));
			break;
	};
};
function _getError(field,str){
	var obj=field.element;
	strErrorTemp=(field.err)?field.err:_getLanguageText(str);
	idx=strErrorTemp.indexOf("\\n");
	while(idx>-1){
		strErrorTemp=strErrorTemp.replace("\\n","\n");
		idx=strErrorTemp.indexOf("\\n");
	};
	return strErrorTemp.replace("%FIELDNAME%",(field.realname)?field.realname:((obj.id)?obj.id:obj.name));
};
function _parseBoolean(value){
	return !(!value||value==0||value=="0"||value=="false");
};
function _checkRegExp(regx,value,form){
	//alert(regx);
	switch(regx){
	case "none":
		return true;
		break;
	case "JS_EMAIL":
	//return((/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,5})+$/).test(value));
	//return ((/^[A-Za-z]+[A-Za-z0-9_]*?\@[A-Za-z0-9]+((\.|-)[A-Za-z]+){1,2}$/).test(value));
	return ((/^[A-Za-z0-9]+[A-Za-z0-9_\-\.]*?\@[A-Za-z0-9|-]+((\.)[A-Za-z0-9\.]+){1,5}$/).test(value));
	break;
	case "JS_TEL":
	return((/^1?[\-]?\(?\d{3}\)?[\-]?\d{3}[\-]?\d{4}$/).test(value));
	break;
	case "JS_NUMBER":
		var patternString=/^([0-9]*$)/;
		return patternString.test(value);
	break;
	case "TEL_JS_STRING":
		var patternString=/^([+()a-zA-Z0-9-.][+()a-zA-Z0-9-. \/#]*$)/;
		return patternString.test(value);
	break;
	case "JS_PHONE":
		var patternString=/^([0-9]*$)/;
		return patternString.test(value);
	break;
	case "JS_STRING":
		/*var patternString=/^([a-zA-Z]*$)/;
		return patternString.test(value);
		break;*/
		var patternDesc=/^([a-zA-Z0-9]+)/;
		return patternDesc.test(value);
	case "JS_ALPHANUMERIC":
		var patternString=/^([a-zA-Z0-9-.][a-zA-Z0-9-. \'#]*$)/;
		return patternString.test(value);	
		break;
		/*var patternDesc=/^([a-zA-Z0-9]+)/;
		return patternDesc.test(value);*/
	case "JS_ADDRESS":
		var patternDesc=/^([a-zA-Z0-9]+)/;
		return patternDesc.test(value);
		break;
	case "JS_LINK":
	var sUrl = value;
		if(sUrl != "")
		{
				var url = false ;
				var isNot = "`!@$^*()[{]}\|;'',<> " ;
				if (sUrl.length != 0 )
				{
					if (sUrl.indexOf('://') != -1)
					{
						if (sUrl.indexOf('"') == -1)
						{
							url = true ;
							if (sUrl.length <= 7 )
							{
								url = false ;	
							}
							for (i=0;i!=sUrl.length;++i)
							{
								if (isNot.indexOf(sUrl.substring(i,i+1)) != -1)
								{
									url = false ;	
								}
							}
						}
					}
				}	
				if (url == false )
				{
					//alert("Please enter valid URL.\nEx. http://www.test.com") ;
					return false;
				}
				return true;
		}
break;
	
	case "JS_DESCRIPTION":
		var patternDesc=/^([a-zA-Z0-9]+)/;
		return patternDesc.test(value);
break;
	case"JS_USERNAME":
		var username = value;
		if(username.length<3)
			return false;
		var temp;
	
		if(!(username.charAt(0)>="A" && username.charAt(0)<="z"))
			return false;
		if((username.charAt(username.length-1)>="A" && username.charAt(username.length-1)<="z") || (username.charAt(username.length-1)>="0" && username.charAt(username.length-1)<="9"))
			temp="";
		else
			return false;
			
		for(var i=0;i<username.length;i++){
			temp=username.charAt(i);
			
			if((temp>="0" && temp<="9") || (temp>="A" && temp<="z") || (temp=="_") || (temp=="."))
				temp="";
			else
				return false;
			
		}
		return true;
		break;
	case"JS_IMG":
	var property_file=value; //document.frmpicture.picture.value;
					
					var file = property_file.substring(property_file.length -5);
					var ext = file.slice(file.indexOf(".")).toLowerCase();
					if(ext!=".gif" && ext!=".png" && ext!=".jpg" && ext!=".jpeg" && ext!=".bmp") 
					{
						 return false;
					}
					else
					{
						return true;
					}
					return true;
	break;
	case"JS_CSV":
	var property_file=value; //document.frmpicture.picture.value;
					
					var file = property_file.substring(property_file.length -5);
					var ext = file.slice(file.indexOf(".")).toLowerCase();
					if(ext!=".csv" && ext!=".CSV") 
					{
						 return false;
					}
					else
					{
						return true;
					}
					return true;
	case"JS_PDF":
	var property_file=value; //document.frmpicture.picture.value;
					
					var file = property_file.substring(property_file.length -5);
					var ext = file.slice(file.indexOf(".")).toLowerCase();
					if(ext!=".pdf") 
					{
						 return false;
					}
					else
					{
						return true;
					}
					return true;
	break;
	 
	case"JS_DWG":
	var property_file=value; //document.frmpicture.picture.value;
					
					var file = property_file.substring(property_file.length -5);
					var ext = file.slice(file.indexOf(".")).toLowerCase();
					if(ext!=".dwg") 
					{
						 return false;
					}
					else
					{
						return true;
					}
					return true;
	break;
	case"JS_BAK":
	var property_file=value; //document.frmpicture.picture.value;
					
					var file = property_file.substring(property_file.length -5);
					var ext = file.slice(file.indexOf(".")).toLowerCase();
					if(ext!=".bak") 
					{
						 return false;
					}
					else
					{
						return true;
					}
					return true;
	break;
	case "JS_ZIP":
	//return((/^\d{6}$/).test(value));
	val=value;
		if(val.length>20)
		{
			return false;
		}
		else
		{
			var patternString=/^([0-9]*$)/;
			return patternString.test(value);
			//return((/^\d{20}$/).test(value));
		}
	break;
	case "JS_RePassword":
		if(value!="" && value!=form.txtpassword.value) {
			alert('Password & Confirm Password should be same.');
			return false;
		}
		else if(value!="" &&  value==form.txtpassword.value) {
			return true;
		}
		else {
			return false;
		}
	break;
	case "JS_NewRePassword":
		if(value!="" && value!=form.txtnewpassword.value) {
			alert('New Password & Confirm Password should be same.');
			return false;
		}
		else if(value!="" &&  value==form.txtnewpassword.value) {
			return true;
		}
		else {
			return false;
		}
	break;
	
	case "JS_PRICE":
		var price = value;
		if(isNaN(price)){
			alert("Please enter valid Price");
			return false;
		}else if(price <= 0){
			alert("Price should be greater than zero.");
			return false;
		}
		return true;
	break;
	case "JS_FLOAT":
		if(isNaN(value)){
			return false;
		}
		if(value < 0){
			return false;
		}
		return true;
	break;
	case "JS_MONEY":
		return((/^\d+([\.]\d\d)?$/).test(value));
	break;
	case "JS_CREDITCARD":
		return(!isNaN(value));
	
	break;
	case "JS_CHKFILE":
		return validatefiles();
	break;
	case "JS_CHKCOLOR":
		return ValidateProduct(value);
	break;
	default:
	return(regx.test(value));
	};
};

var montharray=new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec")
	
function countdown(yr,m,d){
	theyear=yr;themonth=m;theday=d
	var today=new Date()
	var todayy=today.getYear()
	if (todayy < 1000)
		todayy+=1900
	var todaym=today.getMonth()
	var todayd=today.getDate()
	var todayh=today.getHours()
	/*var todaymin=today.getMinutes()
	var todaysec=today.getSeconds()*/
	var todaystring=montharray[todaym]+" "+todayd+", "+todayy//+" "+todayh+":"+todaymin+":"+todaysec
	futurestring=montharray[m-1]+" "+d+", "+yr
	dd=Date.parse(futurestring)-Date.parse(todaystring)
	dday=Math.floor(dd/(60*60*1000*24)*1)
	dhour=Math.floor((dd%(60*60*1000*24))/(60*60*1000)*1)
	dmin=Math.floor(((dd%(60*60*1000*24))%(60*60*1000))/(60*1000)*1)
	dsec=Math.floor((((dd%(60*60*1000*24))%(60*60*1000))%(60*1000))/1000*1)
	//alert(todaym+"-"+todayd+"-"+todayy);
	if(dday>0)
	{
		//alert("Please enter date less than todays date.");
		return false;
	}
	else
	{
	  return true;
	}
}//end of function
