// CONSTANTS ___________________________________________________________________
var ixConstriantType=0;
var ixIDs=1;
var ixErrMsg=2;

var miNolimit  = 0;
var miRequired  = 1;
var miNumber = 2;
var miPassword = 4;
var miEmail = 512;
var miPhone = 1024;

var msMsgRequired="Please enter a value for the field [<1>]."
var msMsgRequiredRadio="Please select the [<1>] option."
var msMsgRequiredChkBox="Please select at least one [<1>] ."
var msWrongeEmail="Please enter a valid Email address for the field [<1>]."
var msWrongeNumber="Please enter a valid number for the field [<1>]."
var msMsgPasswordNoEqual="The password you typed in [Confirm Password] does not match the password.\n Please retry by typing and re-typing carefully"
var msMsgInvalidData="[<1>] includes invalid character(s)"
var msConfirmSave="Save changes for this user?"
var msConfirmCancel="Cancel changes to this user?"
var msPWDShortLen="Password length must be more than or equal to 7 character"
var msConfirmDelete="Do you like to remove the user"
var msConfirmResetPWD="Do you like to reset the password of user"
//_______________________________________________________________________________
function trim(s)
{
  return(s.replace(/^\s*|\s*$/g,""))
}
//_________________________________________
function isNumber(sValue){
 var anum=/(^\d+$)|(^\d+\.\d+$)/
 return((anum.test(sValue)));
}
//_________________________________________
function IsPhone(strPhone)
{
  var filter=/(.*\d{3}.*)(.*\d{3}.*)(.*\d{4}.*)/
  return (trim(strPhone).length >= 10 && filter.test(strPhone));
}
//_________________________________________
function IsEMail(strEmail)
{
	var filter=/^[A-Za-z0-9-_\.]+@+[A-Za-z0-9-_\.]+\.+[A-Za-z]{2,4}$/;
	return (filter.test(strEmail));
}
//_________________________________________
function getAttrib(elm,AttributeName){

  for (var i = 0; i < elm.attributes.length; i++)
  if(elm.attributes[i].nodeName.toLowerCase()==AttributeName.toLowerCase())return(elm.attributes[i])
  return(null)
}
//_________________________________________
function getValue(elm,AttributeName)
{
    var oAttrib = getAttrib(elm,AttributeName);
    if(oAttrib!=null)return(oAttrib.nodeValue)
    else return("")
}
//_________________________________________
function invalidChar(sValue)
{
//alert("checkincvalid"+sValue);
var invalidChars="'\"`";
for(var i=0;i<invalidChars.length;i++)
 if(sValue.indexOf(invalidChars.charAt(i))>=0)return(true)
 return(false)
}
//_________________________________________
function anyChecked(elms)
{
 for(i=0;i<elms.length;i++)
  if(elms[i].checked)return(true);
 return(false);
}
//_________________________________________
function checkRadio(elm,ilimit,sCustomErrMsg,sDefErrMsg){
  if(ilimit==0)return("");
  if((ilimit & miRequired)>0)
  {
    elms=document.getElementsByName(elm.name);
    if(sCustomErrMsg.length==0)sCustomErrMsg=sDefErrMsg;
    if(!anyChecked(elms))return( sCustomErrMsg.replace("<1>",getValue(elm,"caption"))+"\n" );
  }
  return("");
}
//_________________________________________
function checkInput(elm,ilimit,sErrMsg){
  //var sErrMsg="";

  if(invalidChar(trim(elm.value)))return( msMsgInvalidData.replace("<1>",getValue(elm,"caption"))+"\n" );
  if(ilimit==0)return("");
  var sValue=trim(elm.value);
  if((ilimit & miRequired)>0 && (sValue=="") )
  {
      if(sErrMsg.length==0)sErrMsg=msMsgRequired;
      return( sErrMsg.replace("<1>",getValue(elm,"caption"))+"\n" );
   }
     if((ilimit & miNumber)>0 && (sValue!="")&& !isNumber(sValue) )
  {
      if(sErrMsg.length==0)sErrMsg=msWrongeNumber;
      return( sErrMsg.replace("<1>",getValue(elm,"caption"))+"\n" );
   }

  if((ilimit & miEmail)>0 && (sValue!="") && !IsEMail(elm.value) )
   {
      if(sErrMsg.length==0)sErrMsg=msWrongeEmail;
      return(sErrMsg.replace("<1>",getValue(elm,"caption"))+"\n" );
   }
    //if(trim(elm.value).length==0)

  return("");
}
//_________________________________________
function checkPWDEqual(oPWD,oComfirmPWD,sErrMsg){
 if(oPWD.value!=oComfirmPWD.value)
 {
  try {oPWD.focus();}catch(e){}
  if(sErrMsg.length==0)sErrMsg=msMsgPasswordNoEqual;
  return(sErrMsg.replace("<1>",getValue(oPWD,"caption"))+"\n" );
 }
 return("");
} 
//_________________________________________
function validateInputs(items,ilimit,sErrMsg)
{
  var sTotalErrMsg="";
  var i,sMsg;
  var slimit="";
  //var ilimit=0;
  var useItemLimit=ilimit==0;
  
  var oFirstItem=null;
  
  if(!items)return("");
  
  for ( i=0; i < items.length; i++ )
  {
    if(!items[i] || !items[i].type)continue;
    if ( items[i].type.length > 0 )
    {
     if(useItemLimit)
     {
      slimit=getValue(items[i],"limit");
      if(slimit!="")ilimit=parseInt(slimit);
      else ilimit=0;
     }
     sMsg="";
      switch ( items[i].type )
      {
        case "text" :
        case "password" :
         sMsg=checkInput(items[i],ilimit,sErrMsg);
         break;           
         case "radio":
         sMsg=checkRadio(items[i],ilimit,sErrMsg,msMsgRequiredRadio);
         break
         case "checkbox":
         sMsg=checkRadio(items[i],ilimit,sErrMsg,msMsgRequiredChkBox);
         break;
         //default:alert(items[i].type+items[i].name);
      }
       if((sMsg!="")&&(oFirstItem==null) )oFirstItem=items[i];
       if(sTotalErrMsg.indexOf(sMsg)==-1)sTotalErrMsg=sTotalErrMsg+sMsg;
    }
  }
if(oFirstItem!=null) try {oFirstItem.focus();}catch(e){}
return(sTotalErrMsg)
}
//_________________________________________
function submitForm(frm,action){
 return(submitFormX(frm,action,''));
}
//_________________________________________
function confirmSubmit(frm,action,confirmMsg){
 return(confirmSubmitX(frm,action,confirmMsg,''));
}
//_________________________________________
function validateForm(frm,action){
 var ErrMsg=validateInputs(frm.elements,0,"");
 if(ErrMsg!=""){alert(ErrMsg); return(false) };
 return(submitForm(frm,action))
}
//_________________________________________
function ConfirmValidateSubmit(frm,action,confirmMsg){
 var ErrMsg=validateInputs(frm.elements,0,"");
 if(ErrMsg!=""){alert(ErrMsg); return(false) };
 if(window.confirm(confirmMsg))
   return(submitForm(frm,action))
 return(false)
}
//_________________________________________

function findElements(IDs)
{
  var elmIDs=IDs.split(",");
  elms = new Array();
  for(var i=0;i<elmIDs.length;i++)elms[i]=document.getElementById(elmIDs[i]);
  return elms;
}
//_________________________________________
function ValidateAll(constList)
{
 if(constList)
  for (var constriantName in constList)
  {
   var ErrMsg="";
   var elms=null;
   var sIDs=constList[constriantName][ixIDs];
   
   if(sIDs.length==0)elms=document.getElementsByName(constriantName);
   else elms=findElements(sIDs);
   
   var cType=constList[constriantName][ixConstriantType];
   var sDefErrMsg=constList[constriantName][ixErrMsg];
   
   if(cType==4)//passwords have to be equall
      ErrMsg=checkPWDEqual(elms[0],elms[1],sDefErrMsg);
   else if(cType!=-1)
      ErrMsg=validateInputs(elms,cType,sDefErrMsg);
   
   if(ErrMsg!=""){alert(ErrMsg); return(false) }; 
  }
  return(true);
} 
//_________________________________________
function ConfirmValidateSubmitEx(frm,action,confirmMsg,constList)
{
 if(!ValidateAll(constList))return(false)
 if(window.confirm(confirmMsg))return(submitForm(frm,action));
 else return(false);
}
//_________________________________________
function ValidateList(constList,items)
{
 var CustomList= new Array();
   for (var i = 0; i < items.length; i++) {
    CustomList[items[i]]=constList[items[i]];
   }
 if(!ValidateAll(CustomList))return(false);
 return(true);
}
//_________________________________________
function checkPWD(oPWD,oComfirmPWD){
if(oPWD.value!=oComfirmPWD.value){alert(msMsgPasswordNoEqual);oPWD.focus(); return(false) };
if(oPWD.value.length<7){alert(msPWDShortLen);oPWD.focus();return(false) };
return(true);
}
//_________________________________________
function matchGroup(sGroupID,elmGroup)
{
 aGroups=sGroupID.split(",");
 for(j=0; j < aGroups.length; j++ )
  if(elmGroup.indexOf("|"+aGroups[j]+"|")==-1)return false;
 return true; 
}
//_________________________________________
function setGrpValue(sName,sGroupID,Value)
{
 var items=document.getElementsByName(sName);
 for ( i=0; i < items.length; i++ )
  {
   if(sGroupID && sGroupID.length>0)
     if(!matchGroup(sGroupID,getValue(items[i],"GroupID")))continue;
   var typ  =items[i].type;
   if(typ=="checkbox" || typ=="radio" )items[i].checked=Value;
   else if(typ=="text" || typ=="password")items[i].value=Value;
  }
 return false;
}
//_________________________________________
function submitFormX(frm,action,target){
 frm.action=action;
 if(target!='')frm.target=target;
 frm.submit();
 return(false)
}
//_________________________________________
function confirmSubmitX(frm,action,confirmMsg,target){
 if(window.confirm(confirmMsg))
   return(submitFormX(frm,action,target))
 return(false)
}
//_________________________________________
function getParentTag(obj,tagName)
{
    tagName=tagName.toUpperCase();
    do{
    if(obj.tagName.toUpperCase()==tagName)return obj;
    obj=obj.parentNode;
    }while(obj)
}
//_________________________________________
function getChildTag(obj,tagName,attrbName,attrbValue)
{
 if(obj.tagName && obj.tagName.toUpperCase() == tagName.toUpperCase() )
  if(!attrbName || ( getValue(obj,attrbName) && (attrbValue.toUpperCase()==getValue(obj,attrbName).toUpperCase())))
   return(obj);
  
 if(obj.childNodes.length>0)
  for( var i = 0; i< obj.childNodes.length; i++ )
   {
    child=getChildTag(obj.childNodes[i],tagName)
    if(child)return(child)
   } 
 return(null); 
}
//_________________________________________
function FormatPhone(sIn){
  var R,sOut;
   sOut = sIn;
   R = /\s{2}/gi; sOut = sOut.replace(R, " "); // double-spaces
   R = /ext\./gi; sOut = sOut.replace(R, "x"); // "ext."
   R = /ext/gi;   sOut = sOut.replace(R, "x"); // "ext"
   R = /x\s/gi;   sOut = sOut.replace(R, "x"); // "x "
   return sOut
}
function FormatWebsite(sIn){
  var sOut,sLC;
  sOut = sIn;
  sLC = sOut.toLowerCase();
  if(sLC=="www.") {sOut = ""}
  else if(sLC.substr(0,11)=="http://www.") {sOut = sOut.substr(11)}
  else if(sLC.substr(0,7)=="http://")      {sOut = sOut.substr(7)}
  else if(sLC.substr(0,4)=="www.")         {sOut = sOut.substr(4)}
  return sOut;
}