function Validator(frmname)
{
this.formobj=document.forms[frmname];
if(!this.formobj)
{
alert('BUG: couldnot get Form object '+frmname);
return;
}
if(this.formobj.onsubmit)
{
this.formobj.old_onsubmit = this.formobj.onsubmit;
this.formobj.onsubmit=null;
}
else
{
this.formobj.old_onsubmit = null;
}
this.formobj.onsubmit=form_submit_handler;
this.addValidation = add_validation;
}
function form_submit_handler()
{
var vaild;
valid=true;
for(var itr=0;itr < this.elements.length;itr++)
{
if(this.elements[itr].validationset && !this.elements[itr].validationset.validate())
{
valid=false;
}
}
return valid;
}
function add_validation(itemname,descriptor,errstr)
{
if(!this.formobj)
{
alert('Please add all mandatory fields on form before publishing.');
return;
}
var itemobj = this.formobj[itemname];
if(!itemobj)
{
alert('Please add all mandatory fields on form before publishing.');
return;
}
if(!itemobj.validationset)
{
itemobj.validationset = new ValidationSet(itemobj);
}
itemobj.validationset.add(descriptor,errstr);
}
function ValidationDesc(inputitem,desc,error)
{
this.desc=desc;
this.error=error;
this.itemobj = inputitem;
this.validate=vdesc_validate;
}
function vdesc_validate()
{
if(!V2validateData(this.desc,this.itemobj,this.error))
{
this.itemobj.focus();
return false;
}
return true;
}
function ValidationSet(inputitem)
{
this.vSet=new Array();
this.add= add_validationdesc;
this.validate= vset_validate;
this.itemobj = inputitem;
}
function add_validationdesc(desc,error)
{
this.vSet[this.vSet.length]=  new ValidationDesc(this.itemobj,desc,error);
}
function vset_validate()
{
for(var itr=0;itr<this.vSet.length;itr++)
{
if(!this.vSet[itr].validate())
{
return false;
}
}
return true;
}
function validateEmailv2(email)
{
if(email.length <= 0)
{
return true;
}
var splitted = email.match('^(.+)@(.+)$');
if(splitted == null) return false;
if(splitted[1] != null )
{
var regexp_user=/^\"?[\w-_\.]*"?$/;
if(splitted[1].match(regexp_user) == null) return false;
}
if(splitted[2] != null)
{
var regexp_domain=/^[\w-\.]*\.[A-Za-z]{2,4}$/;
if(splitted[2].match(regexp_domain) == null)
{
var regexp_ip =/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
if(splitted[2].match(regexp_ip) == null) return false;
}
return true;
}
return false;
}
function V2validateData(strValidateStr,objValue,strError)
{
var epos = strValidateStr.search("=");
var  command  = "";
var  cmdvalue = "";
if(epos >= 0)
{
command  = strValidateStr.substring(0,epos);
cmdvalue = strValidateStr.substr(epos+1);
}
else
{
command = strValidateStr;
}
switch(command)
{
case "req": 
{
if(eval(objValue.value.length) == 0) 
{
var ErrorObj=document.getElementById(objValue.name+'_v');
ErrorObj.style.cssText="color:Red;position:fixed;";
return false;
}
else
{
var ErrorObj=document.getElementById(objValue.name+'_v');
ErrorObj.style.cssText="color:Red;position:fixed;visibility:hidden;";
}
break;
}
case "email":
{
if(!validateEmailv2(objValue.value))
{
var ErrorObj=document.getElementById(objValue.name+'_v1');
ErrorObj.style.cssText="color:Red;position:fixed;";
return false;
}
else
{
var ErrorObj=document.getElementById(objValue.name+'_v1');
ErrorObj.style.cssText="color:Red;position:fixed;visibility:hidden;";
}
break;
}
case "dontselect":
{
if(objValue.selectedIndex == null)
{
alert("BUG: dontselect command for non-select Item");
return false;
}
if(objValue.selectedIndex == eval(cmdvalue))
{
var ErrorObj=document.getElementById(objValue.name+'_v');
ErrorObj.style.cssText="color:Red;position:fixed;";
return false;
}
else
{
var ErrorObj=document.getElementById(objValue.name+'_v');
ErrorObj.style.cssText="color:Red;position:fixed;visibility:hidden;";
}
break;
}
}
return true;
}