﻿// JScript File



function frmReset(frmObj) {

    var el;
    for (var i=0; i<frmObj.elements.length; i++) {
        el = frmObj.elements[i];
        if(el.getAttribute('propName')!=undefined)
            switch(el.type) {
	            case 'select-one': case 'text':  el.value=''; break;
	            case 'checkbox' :  el.checked=false; break;
            }
    }    
}



function inputSQL(frmObj) {


    var fltr='', boolOp;
    var el, propName, propType, propVal;
    var valArr = new Array();
    
    var cm='|';
    var sQt='-SQ-';
    var pct='';
    var gt='-GT-';
    var lt='-LT-';
    var eq='-EQ-';
    var lk='-LK-';  //like operator
    
    for (var i=0; i < frmObj.elements.length; i++) {
    
        el = frmObj.elements[i];
        if(el.type!='radio') {
            propName = el.getAttribute('propName');
            propType = el.getAttribute('propType');
            }
        else {
            propName = el.parentNode.parentNode.parentNode.parentNode.getAttribute('propName');
            propType = el.parentNode.parentNode.parentNode.parentNode.getAttribute('propType');            
        }    
        propVal='';
            
                  
        if(propName!=undefined) {
            
            /*==========================================================================
                Determine Boolean Operator based on property type                     */
            
            switch(propType){case 'lookup' :        boolOp=eq;break;             //equals
                             case 'datetime_from' : boolOp=gt;break;             //greater
                             case 'datetime_to' :   boolOp=lt;break;             //less
                             case 'varchar' :       boolOp=lk;pct='-PC-';break;  //like
                             default :              boolOp=eq;break;}            //equals
            

            /*============================================================================
                Get value of input control                                              */

            if(el.type=='checkbox')
                propVal = el.checked?el.getAttribute('propVal'):'';
            else if(el.type=='radio')
                propVal = rbValue(el.name); 
            else
                propVal=el.value;
        

            /*=====================================================================================
                Put value into associative array to avoid redundant elements w/ radio buttons    */
            
            valArr[propName]=propName+boolOp+sQt+pct+propVal+pct+sQt;
        
        }    
        
    }

    for (prop in valArr)
        fltr=fltr+cm+valArr[prop];    
    return fltr.substring(1);

}


function SQLTerm(propName,propVal) {

    var eq='-EQ-';
    var sQt='-SQ-';
    return propName+eq+sQt+propVal+sQt;
    
}



//-----------------------------------------------------------------------------------------
//
//      Basic validation of entire form, loop thru input controls
//

function frmValid(frmObj) {
    
    
    var el, propName, propType, propVal;
    var clean=true;
    
    for (var i=0; i < frmObj.elements.length; i++) {
    
        el = frmObj.elements[i];
        propName = getInpAttr(el,'propName');

        if(propName!=undefined) {
           // for now only validate text-boxes and  drop-downs
            if(el.type=='text' || el.type=='textarea' || el.type=='select-one' || el.type=='password')
                if(!datEntry(el) && clean==true)
                    clean=false;
        }    
        
    }
    return clean;

}


//For now this function is only called for textbox controls w/ onkeyup event

function datEntry(inp) {
    
    //  Initalize variables, get custom input attributes
    var datVal=true, propTyp=inp.getAttribute('propType');
    var datLen=true, propLen=inp.getAttribute('propLen');
    var datHas=true, propReq=inp.getAttribute('propReq');
    
    //  If input attributes are valid, then check data validation
    if(propTyp!=undefined)  datVal=datValid(inp.value,propTyp);
    if(propLen!=undefined)  datLen=(inp.value.length<=propLen || propLen==0);
    if(propReq!=undefined)  datHas=(inp.value!='' || propReq!='True');
        
    //  Assign overall validation for input control
    var datPass = (datVal && datLen && datHas);
    
    //  Change appearance of control based on validity
    if(!datPass)    inp.style.backgroundColor='#ffcccc';
    else            inp.style.backgroundColor='';
        
    return datPass;    
        
}

function datValid(val, typ) {

    if(val=='') return true;
    switch(typ) {
        case 'datetime' : return isDate(val); break;
        case 'int' : return isInteger(val); break;
        case 'decimal' : return isNumeric(val); break;
        case 'varchar' : return true; break;
        default : return true; break;
    }
}



function getInpAttr(el, attrName) {
    
    if(el.type==undefined)      return undefined;
    else if(el.type!='radio')   return el.getAttribute(attrName);
    else                        return el.parentNode.parentNode.parentNode.parentNode.getAttribute(attrName);

}
