//* This is an attempt to eventually pull out the custom
//* coding approach for Data validation and replace it
//* with validation classes on the input element


function validateForm(validateFormThis)
{
mythis=validateFormThis;
//*debugAlert(mythis);
var myattr=new Array();
bldAttrArray(myattr,mythis);
if(chkreqelements(myattr,'form'))
	{mapValuesBack();return(true);} else {return(false);}
if(customValidations) {return(true);} else {return(false);}
}

function validateField(vfieldobj)
{
var myfieldobj=vfieldobj;
var myfieldattr=new Array();
bldFieldAttrArray(myfieldobj,myfieldattr);
if(!chkreqelements(myfieldattr,'field')) ErrField(myfieldobj);
}

function bldAttrArray(bldattrarr,bldattrthis)
{
var attstr="what is in new array\n\n";
var attnodeName="";
var attnodeValue="";
var k=0;
    for(i=0;i<bldattrthis.elements.length;i++)
    {
        for(j=0;j<bldattrthis.elements[i].attributes.length;j++)
          {
        attnodeName=bldattrthis.elements[i].attributes[j].nodeName.toUpperCase();
        if(attnodeName=="EDPX")
        {
        attnodeValue=bldattrthis.elements[i].attributes[j].nodeValue;
        attnodeValue=attnodeValue.toUpperCase();
        k=bldattrarr.length;
        bldattrarr[ k ]=bldattrthis.elements[i].id+":"+attnodeValue;
        attstr += bldattrarr[ k ]+"  ";
        }
        }
     attstr += "\n";
    }
    //* remove comment bellow to see all EDPX elements in form
    //*alert( attstr );
 }

function bldFieldAttrArray(fieldobj,fieldattarr)
{
var fieldattobj=fieldobj;
var fieldattstr="what is in field array\n\n";
var fieldattnodeName="";
var fieldattnodeValue="";
var k=0;
        for(j=0;j<fieldattobj.attributes.length;j++)
          {
                fieldattnodeName=fieldattobj.attributes[j].nodeName.toUpperCase();
                if(fieldattnodeName=="EDPX")
                {
                        fieldattnodeValue=fieldattobj.attributes[j].nodeValue;
                        fieldattnodeValue=fieldattnodeValue.toUpperCase();
                        k=fieldattarr.length;
                        fieldattarr[ k ]=fieldattobj.id+":"+fieldattnodeValue;
                        fieldattstr += fieldattarr[ k ]+"  ";
                }
          }
     fieldattstr += "\n";
    //* remove comment bellow to see all EDPX elements in form
    //* alert(fieldattstr);
 }




function chkreqelements(attarr,atttyp)
{
var cremsg="The following errors were detected:  INVALID WEBSITE ADDRESS\n\nIf you refuse to follow the directions then that may be considered a terms of use policy violation and your access to the server may be terminated.  The site administrator has been notified of this incident and your future submissions will now be monitored.";
//* For LANSA users Messages can be put in a browse list *NOBICP then do a merge list here
var crems00=" is required and must be entered correctly."
var crems01=" is required and must be entered correctly.";
var crems02=" is required and must be entered correctly.";
var crems03=" is required and must be entered correctly.";
var crems04=" is required and must be entered correctly.";
var crems05=" is required and must be entered correctly.";
var crems06=" is required and must be entered correctly.";
var crems07=" is required and must be entered correctly.";
var crems08=" is required and must be entered correctly.";
var crems09=" ";
var crems10="fails input length minimum of  ";
var crems11="fails input length maximum of  ";
var crems12="fails input value minimum of  ";
var crems13="fails input value maximum of  ";
var crems14=" ";
var crems15=" ";
var crems99="ERROR COUNT ->  ";
var creid="";
var creval="";
var crestr="";
var dotdot=0;
var creobj="";
var crereq="";
var cretyp="";
var cretxt="";
var errcnt=0;
var crefld="";
var cretmp="";

var wrkval=0;

cremsg += "\n\n";

  for(i=0;i<attarr.length;i++)
    {
      crestr=attarr[i];
      dotdot=crestr.indexOf(":");
      creid=crestr.substr(0,dotdot);
      creval=crestr.substr(dotdot+1,crestr.length-1);
      crereq=creval.match("REQ");
      creobj=document.getElementById(creid);
      creobj.value=trimTrailingBlanks(creobj.value);
      creobj.name=trimTrailingBlanks(creobj.name);
      creobj.title=trimTrailingBlanks(creobj.title);
      crefld=creobj.name;
      if(creobj.title.length>0) {crefld=creobj.title}

      if(creobj.value.length == 0)
          {
                 //* Format of message here
                 cretmp=" A valid website " + crefld
                 if(creval.match("REQ")) {errcnt=errcnt+1;cremsg +=cretmp+crems00+"\n";}

          }
          else
            {
                 //* Format of message here
                 cretmp=crefld+" as "+creobj.value+"  => "

                 //* Add new validation checks here
                 if(creval.match("EML")) {if(!emailValidator(creobj)){errcnt=errcnt+1;cremsg +=cretmp+crems01+"\n";}}
                 if(creval.match("A2Z")) {if(!isAlpha(creobj)){errcnt=errcnt+1;cremsg +=cretmp+crems02+"\n";}}
                 if(creval.match("A29")) {if(!isAlphanumeric(creobj)){errcnt=errcnt+1;cremsg +=cretmp+crems03+"\n";}}
                 if(creval.match("NUM")) {if(!isNumeric(creobj)){errcnt=errcnt+1;cremsg +=cretmp+crems04+"\n";}}
                 if(creval.match("NAN")) {if(isNumeric(creobj)){errcnt=errcnt+1;cremsg +=cretmp+crems05+"\n";}}
                 if(creval.match("DTE")) {if(!dmyValidator(creobj)){errcnt=errcnt+1;cremsg +=cretmp+crems06+"\n";continue}}
                 if(creval.match("DOB")) {if(!dmyValidator(creobj)){errcnt=errcnt+1;cremsg +=cretmp+crems07+"\n";}}
                 if(creval.match("SSN")) {if(!isSSN(creobj)){errcnt=errcnt+1;cremsg +=cretmp+crems08+"\n";}}
                 if(creval.match("ZIP")) {if(!isZipcodeUSA(creobj)){errcnt=errcnt+1;cremsg +=cretmp+crems09+"\n";}}
                 if(creval.match("ZZZ")) {if(!dummyValidator(creobj)){errcnt=errcnt+1;cremsg +=cretmp+crems10+"\n";}}
                 if(creval.match("ZZZ")) {if(!dummyValidator(creobj)){errcnt=errcnt+1;cremsg +=cretmp+crems11+"\n";}}
                 if(creval.match("ZZZ")) {if(!dummyValidator(creobj)){errcnt=errcnt+1;cremsg +=cretmp+crems12+"\n";}}
                 if(creval.match("ZZZ")) {if(!dummyValidator(creobj)){errcnt=errcnt+1;cremsg +=cretmp+crems13+"\n";}}
                 if(creval.match("ZZZ")) {if(!dummyValidator(creobj)){errcnt=errcnt+1;cremsg +=cretmp+crems14+"\n";}}
                 if(creval.match("ZZZ")) {if(!dummyValidator(creobj)){errcnt=errcnt+1;cremsg +=cretmp+crems15+"\n";}}

                 if(creval.match("MNL#")){getNum("MNL#",crestr,wrkval);if(!isMinLen(creobj,wrkval)){errcnt=errcnt+1;cremsg +=cretmp+crems10+wrkval+"\n";}}
            }

      }
 if(errcnt!= 0)
    {
     if(errcnt!=1) cremsg+="\n"+crems99+errcnt;
     if(atttyp=='form') alert( cremsg );
     return(false);
    }
  else
    {return(true);}
 }

function trimTrailingBlanks(TrimtrailingblanksValue)
{trim=TrimtrailingblanksValue;
 if (trim.length==0) return trim;
 for (var i=trim.length-1;i>=0;i--) if (trim.substring(i,i+1) !=' ') {i++;break;}
 if (i<0) i=0;
 trim=trim.substring(0,i);
 return trim;
}


//* ==============================================
//* Validation functions -- Add new functions here
//* ==============================================

function isNumeric(elem){
        var numericExpression = /^[0-9]+$/;
        if(elem.value.match(numericExpression)){
                return true;
        }else{ return false;}
}

// If the element's string matches the regular expression it is all letters
function isAlpha(elem){
        var alphaExp = /^[a-zA-Z]+$/;
        if(elem.value.match(alphaExp)){
                return true;
        }else{ return false;}
}

// If the element's string matches the regular expression it is numbers and letters
function isAlphanumeric(elem){
        var alphaExp = /^[0-9a-zA-Z]+$/;
        if(elem.value.match(alphaExp)){
                return true;
        }else{ return false;}
}

function isMinLen(elem1, minl){
        var uInput1 = elem1.value;
        if(uInput1.length >= minl){
                return true;
        }else{ return false;}
}

function isMaxLen(elem2,maxl){
        var uInput2 = elem2.value;
        if(uInput2.length <= maxl){
                return true;
        }else{ return false;}
}

function isMinVal(elem3, minv){
        var uInput3 = elem3.value;
        if(uInput3.length >= min){
                return true;
        }else{ return false;}
}

function isMaxLen(elem4,maxv){
        var uInput4 = elem2.value;
        if(uInput4.length <= max){
                return true;
        }else{ return false;}
}

function emailValidator(elem){
        var emailExp = /^[\w\-\.\+]+\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,4}$/;
        if(elem.value.match(emailExp)){
                return true;
        }else{ return false;}
}

function dummyValidator(elem){
        if(elem==elem){
                return true;
        }else{ return false;}
}

function dmyValidator(elem) {
    var RegExPattern = /^(?=\d)(?:(?:(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})|(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))|(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2}))($|\ (?=\d)))?(((0?[1-9]|1[012])(:[0-5]\d){0,2}(\ [AP]M))|([01]\d|2[0-3])(:[0-5]\d){1,2})?$/;
    if (elem.value.match(RegExPattern)) {
        return true;
    } else { return false;}
}


function ssnValidation(elem) {
    var ssn = elem.value;
    var matchArr = ssn.match();
    var numDashes = ssn.split('-').length - 1;
    if (matchArr == null || numDashes == 1 || (parseInt(matchArr[1],10)==0)) {return false;}   else {  return true;}}


function isSSN(elem){
        var numericExpression = /^(\d{3})-?\d{2}-?\d{4}$/;
        if(elem.value.match(numericExpression)){
                return true;
        }else{ return false;}
}


function isZipcodeUSA(elem)
{
  var iszip = elem.value;
  var numDashes = elem.value.split('-').length - 1;
  var islength = elem.value.length;
     if (islength == 5)
       {
         if(isNumeric(elem))
           {
             return true;
             } else { return false;}
       }
}


function getNum(getNumID,getNumString,getRtn)
{
  var gnstring = getNumString;
  var gnid = getNumID;
  var gnlen = gnid.length;
  var gnpos1= gnstring.indexOf(gnid);
  gnpos1 = gnpos1+gnlen;
  var gnpos2= gnstring.indexOf("#",gnpos1);
  gnpos2 = gnpos2-1;
  var getnm = gnstring.substr(gnpos1,gnpos2);
  getRtn=getnm;
}

//#######################################
//### Highlight/Unhighlight Focused Input Fields
//#######################################
function focusWork(focusworkThis,focusworkEvent)
{var Event=focusworkEvent;
 var This=focusworkThis;
 if (Event.type=='focus') This.style.backgroundColor='White';
 if (Event.type=='blur')
     { This.style.backgroundColor='White';
       validateField(This);}
}
//#######################################
//### Error Notify Red Background Fields
//#######################################
function ErrField(errfieldThis)
{ var This=errfieldThis;
  This.style.backgroundColor='white';
 }

function isCustom()
{
//* Put your custom specific validations here (false=fail)
if('a' == 'a') {return(true);}
       else {return false;}
}


//#####################################################
//### Alert to Show Object Properties
//#####################################################
function debugAlert(AlertObject)
{ var i = 0 ; a = "";
// list all window properties in a variable
for ( property in AlertObject )
{a += ( i ) + " " + property + "...";
i ++;
if(i % 5 == 0) a += "\n";
}
// display the window properties list
alert( a );
}


