function validate(frm,fun)
{

	var num=frm.elements.length;
	for(var i=0;i<num;i++)
	{

		hidname=frm.elements[i].name+"_hidden";
		hid_obj="document."+frm.name+"."+hidname+".value";

		for(var k=0;k<num;k++)
		{
			hid=frm.elements[k].name;
		//	alert(hid);alert(hidname);			
			if(hidname==hid)
			{
				
				hid_obj=eval(hid_obj);
				
				strarr=hid_obj.split("~");
				str_valid=strarr[0].split("|");
				str_alert=strarr[1].split("|");
				
				for(var atype=0;atype<str_valid.length-1;atype++)
				{					
					if(frm.elements[i].type.toUpperCase()=="TEXT" || frm.elements[i].type.toUpperCase()=="TEXTAREA" || frm.elements[i].type.toUpperCase()=="PASSWORD")
					{					
						value=removeSpace(frm.elements[i].value);
						frm.elements[i].value=value;						

						if(str_valid[atype]=="B")
						{
							if(navigator.appName=="Netscape" || frm.elements[i].disabled==false)
							{
								if(!blankValidation(frm.elements[i],frm.elements[i].value,str_alert[atype]))
								{
									return false;
								}
							}
						}  //end if
						else
						if(str_valid[atype]=="E" && frm.elements[i].value!="")
						{
							if(!emailValidation(frm.elements[i],frm.elements[i].value,str_alert[atype]))
							{
								return false;
							}
						} //end if
						else
						if(str_valid[atype]=="N" && frm.elements[i].value!="")
						{
							if(!numericValidation(frm.elements[i],frm.elements[i].value,str_alert[atype]))
							{
								return false;
							}
						} //end if
						else
						if(str_valid[atype]=="P" && frm.elements[i].value!="")
						{
							if(!positiveValidation(frm.elements[i],frm.elements[i].value,str_alert[atype]))
							{
								return false;
							}
						} //end if
						else
						if(str_valid[atype]=="I" && frm.elements[i].value!="")
						{
							if(!integerValidation(frm.elements[i],frm.elements[i].value,str_alert[atype]))
							{
								return false;
							}
						} //end if
						else
						if(str_valid[atype]=="S" && frm.elements[i].value!="")
						{
							if(!stringValidation(frm.elements[i],frm.elements[i].value,str_alert[atype]))
							{
								return false;
							}
						} //end if
						/*else
						if(str_valid[atype]=="D" && frm.elements[i].value!="")
						{
							if(!dateValidation(frm.elements[i],frm.elements[i].value,str_alert[atype]))
							{
								return false;
							}
						} *///end if
					} // end if of textortextarea

					else
					if(frm.elements[i].type.toUpperCase()=="SELECT-ONE" )
					{
						if(str_valid[atype]=="B")
						{
							if(!comboValidation(frm.elements[i],frm.elements[i][frm.elements[i].selectedIndex].value,str_alert[atype]))
							{
								return false;
							}
						}
					} //end if of select-one
					else
					if(frm.elements[i].type.toUpperCase()=="SELECT-MULTIPLE")
					{	
						if(str_valid[atype]=="B")
						{
							if(!comboValidation(frm.elements[i],frm.elements[i].options[0].value,str_alert[atype]))
							{
								return false;
							}
						}
					} //end if of select-multiple
					
				}  //foratype

				break;

			} //end if of (hidname=hid)
			
		}  // endfor (kloop)
			
	}  //--- endFor elements

	if(fun!="")
	{
		if(!eval(fun))
		{
			return false;
		}
	}
	return true;
}

//=== Remove space
function removeSpace(str)
{
	var s="";
	s=str;
	var i
	var strr=s;
	for (i=0;i<s.length;i++)
	{
		if (s.charAt(i)==" ")
		{
			strr=s.substring(i+1,s.length)
		}
		else 
		{
			strr=strr;
			break;
		}	
	} 
	return strr
}


//=== Blank validation
function blankValidation(formElement,value,alertMsg)
{
	if(!value)
	{
		alert(alertMsg);
		formElement.focus();
		return false;
	}
	else return true;
}

//=== Email validation
function emailValidation(formElement,value,alertMsg)
{

	emailad=value;
	var exclude=/[^@\-\.\w]|^[_@\.\-]|[\._\-]{2}|[@\.]{2}|(@)[^@]*\1/;
	var check=/@[\w\-]+\./;
	var checkend=/\.[a-zA-Z]{2,3}$/;
	if(((emailad.search(exclude) != -1)||(emailad.search(check)) == -1)||(emailad.search(checkend) == -1))
	{
		alert(alertMsg);
		formElement.value="";
	        formElement.focus();
		return false;
	}
	else return true;
}


//=== String validation
function stringValidation(formElement,value,alertMsg)
{

	var alpha=/[^a-zA-Z\ \.\-\,]/;
	if(value.search(alpha) != -1)
	{
		alert(alertMsg);
		formElement.value="";
	       	formElement.focus();
		return false;
	}
	else return true;
}

//=== Numeric validation
function numericValidation(formElement,value,alertMsg)
{
	if(isNaN(value))
	{
		alert(alertMsg);
		formElement.value="";
		formElement.focus();
		return(false);
	}
	else return true;
}

//=== Positive validation
function positiveValidation(formElement,value,alertMsg)
{

	if(isNaN(value)||value<0)
	{
		alert(alertMsg);
		formElement.value="";
		formElement.focus();
		return(false);
	}
	else
	{
		if(value.charAt(0)=="+")
		{
			value=value.substring(1,value.length);
			formElement.value=value;
		}		
	 return true;
	}
}


//=== Integer Validation
function integerValidation(formElement,value,alertMsg)
{
	flag=0;
	if(isNaN(value))
	{
		alert(alertMsg);
		formElement.focus();
		formElement.value="";
		return(false);
	}
	for(var j=0; j<value.length; j++)
	{
		if(value.charAt(j)==".")
		{
			alert(alertMsg);
			formElement.value="";
			formElement.focus();
			flag=1;
		}
	}
	if(flag==1)
	{
		return false;
	}
	else
	{
		return true;
	} 
}

//=== Combo box validation
function comboValidation(formElement,value,alertMsg)
{

	if(value=="0" || value=="")
	{
		alert(alertMsg);
		formElement.focus();
		return(false);
	}
	else return true;
}

//=== Date Validation

function dateValidation(formElement,value,alertMsg)
{
	var alpha=/\d{2}[/]\d{2}[/]\d{4}/;
	if(value.search(alpha) != -1)
	{
		dtarr=value.split("/");
		yr=dtarr[2];
		mr=dtarr[1];
		dr=dtarr[0];
		if(yr.length>4 || mr.length>2 || dr.length>2 || parseInt(mr)>12 || parseInt(mr)<1 || parseInt(dr)<1)
		{
			alert(alertMsg);
			//formElement.value="";
			formElement.focus();
			return false;
		}
		fmdate=new Date(yr,mr,'');
		day=fmdate.getDate();
		if(parseInt(dr) > parseInt(day))
		{
			alert(alertMsg);
			formElement.focus();
			return false;
		}
		else return true;
	}
	else
	{
		alert(alertMsg);
		return false;
	}
	return true;
}
