////%$#@!
// message structure
/// the wording to  display in window 1 index
// suffix for some specific information the fields spli by $=   index 2
//nav  for additng html with proper keywords     index 3
// xml structure of the record to display              index 4
//%$#@!
//  parse incomming messages
//
function parseincom(inmsg,mode){
    splchr='$#';
    spldsp='$#$';     // the mesage to display in the box
    blank='';
    inmr=inmsg.split(spldsp);
    inml=inmr.length;
    ajxread[0]='  waiting for response ';
    switch(inml){
        case '0':
            ajxread[0]=inmsg;
            ajxread[1]=blank;
            ajxread[2]=blank;
            return inmsg;
            break;
        case '1':
            ajxread[0]=inmr[1];
            ajxread[1]=blank;
            ajxread[2]=blank;
            return inm[1]; ;
            break;
    }
    ajxread[0]=inmr[1];           // message
    ajxread[1]=inmr[2];           // special suffix
    operat=inmr[3];           // Opearting mode
    ajxread[2]=inmr[4];          // xml data structure
    ajxread[3]=inmr[5];          // navigation+tr structure+ recctl (reccnt,pagcnt,mxrwcnt)
    inm=ajxread[3].split(splchr);
    inml=inm.length;
    ///    alert(ajxread[3]+' 3 in parsing incomm 4     '+ajxread[4]);
    //!!!! This needs to be  slsent specific
    //!!!
///   primak=gelid('primak').value;
///    primk=gelid('primak').content;
    switch(mode){
        case 'lookup':
        case 'refresh':
            break;
        case 'add':
        case 'edit':
        case 'calculate':
            cngelem(inmr[5],splchr,mode);
            break;
        case 'delete':
            for (ibx=0;ibx<inm.length;ibx++){
                if (inm[ibx]=='navrec'){
                    continue;
                }
                if (inm[ibx]=='navpag'){
                    continue;
                }
                if(inm[ibx]=='tr'){
                    tr = inm[ibx+1];
                    replacer = $(tr).attr('id');
                    mesagw(" Got Deleter   "+replacer);      // util.js
                    removeNavRec(replacer);
                    /////                    $("tbody tr[id='"+replacer+"']").replaceWith(tr);
                    continue;
                //               console.log(replaceID);
                }
            }
            break;
    }      // end case opmode
    //!!!! This needs to be  slsent specific
    //!!!
    return ajxread[0];           // message
}
//
//// ajax communication handling
// // ajxsnd array to send data for server  10 starting fields
//  fields separator $#
function prepsnd(nam,getype){
    var sndata = new Object();
    separ='$#';
    selkey=addfld('frmnam','meta');
    if (getype == 'refresh') {
        sndata.selkey =   prepsnobj(nam,selkey);                  // in preparse
        return sndata;
    }
    selkey=selkey+addfld('mainfl','meta');
    ///    selkey=selkey+addfld('parent','meta');
    selkey=selkey+addfld('primak','meta');
    selkey=selkey+addfld('keyval','meta');
    selkey=selkey+addfld('incnam','meta');
    selkey=selkey+addfld('opmode','meta');
    selkey=selkey+addfld('keytyp','meta');
    selkey=selkey+addfld('keylok','meta');
    selkey=selkey+addfld('valkey','meta');
    selkey=selkey+addfld('trnavid','meta');
    selkey=selkey+addfld(getype,'internal');
    //**
    //**** Previous keys came from meta tags
    //**
    //*** Folowing keys comming from input tags
    //
    selkey=selkey+addfld('pagsiz','input');
    //
    //**** get the table footer
    //
    selkey=fndfoot(selkey,getype);
    irl=0;
    fields='';
    for (ifx=0;ifx<frmfcnt;ifx++){
        obj=document.getElementById(frmflds[ifx]);
        if (obj==null){
            break;
        }
        objtag=obj.tagName;
        switch (objtag){
            case 'INPUT':
            case 'SELECT':
            case 'TEXTAREA':
                if (obj.name.toUpperCase() == 'UPLOAD'){
                    break;
                }
                txt=obj.value;
                if (obj.name.toUpperCase() == 'REMARK'){
                    txt=obj.textContent;
                }
                fields=fields+dolar+obj.name;
                irl++;
                txt=strepl(txt,dolar,'dollar');
                fields=fields+dolar+txt;
                irl++;
                break;
            case 'xxxTEXTAREA':
                fields=fields+dolar+obj.name;
                irl++;
                vals=obj.textContent;                          // firefox only
                txt=strepl(vals,dolar,'dollar');
                fields=fields+dolar+txt;
                irl++;
                alert(txt+'   text area vals-->>'+vals);
                break;
            case 'LABEL':
                labnam=frmflds[ifx].split(dolar);
                labl=labnam.length-1;
                lblnam=labnam[labl];
                labaudit=lblnam.toLowerCase();
                break;        // not sending labels
                switch (labaudit){
                    //
                    //no audit trail fields to send
                    //
                    case'creuid':
                    case'credtm':
                    case'upduid':
                    case'upddtm':
                    case'CREUID':
                    case'CREDTM':
                    case'UPDUID':
                    case'UPDDTM':
                        break;
                    default:
                        fields=fields+dolar+lblnam;
                        irl++;
                        vals=obj.textContent;                          // firefox only
                        txt=strepl(vals,dolar,' dollar ');
                        fields=fields+dolar+txt;
                        ////                    fields=fields+dolar+vals;
                        irl++;
                        break;
                }

        }              // enbd type switch
    }
    selkey=selkey+dolar+fields;
    sndata.selkey = selkey;
    return sndata   //
}
//
//
// add new field from metatags to send string
//datatype -input,meta...select other tags
//
function addfld(inp,datype,valu){
    fldbeg='$#';
    fldend='#$';
    dot='.';
    /////    alert(datype,' in addflds'+inp);
    switch (datype){
        case'input':
            switch(inp){
                case'pagsiz':
                    fldnam=gelid('frmnam').content  +dolar+'pf1'+dolar+'tab1'+dolar+inp;
                    fld=gelid(fldnam);
                    if (fld== null){
                        return '';
                    }
                    break;
            }
            keyv=fld.value;
            break;
        case'meta':
            fld=gelid(inp);
            showmsg=' meta filed '+inp;
            mesagw(showmsg);
            openDialog();
            ///            alert(inp+' add addfld metatg to send to ajax '+fld);
            if (fld== null){
                return '';
            }
            showmsg=' meta  not null '+inp+'   content '+fld.content;
            mesagw(showmsg);
            openDialog();
            keyv=fld.content;
            break;
            fldid='#'+fld.id;
            ///            alert(' in addfld meta fld.id '+fldid);
            ///            keyval=$(fldid).attr('content');
            keyv=$(fldid).attr('id');
            ///         alert(' in addfld keyval   id  '+keyval);
            ///               keyval=fld.content;
            break;
        case'internal':
            keyv=inp;
            inp='getype';
            break;
        case'tfootid':
            keyv=inp;
            inp='tfootid';
            break;
        case'tfootit':
            keyv=inp;
            inp='tfootit';
            break;
        case'data':
            keyv=valu;
            break;

    }
    fldn=fldbeg+inp+dolar+keyv+fldend;
    return fldn;
}
//
// add  a key for multi key query
//
function addmk(inp){
    flds='$#';
    fld=gelid(inp);
    if (fld== null){
        return '';
    }
    kl=$("#keylok").attr('content');
    kv=$("#valkey").attr('content');
    fldn=flds+inp+flds;
    fldn=fldn+kl+flds+'valkey'+flds+kv+flds;
    return fldn;
}
//
// prepare data for object refresh
///        prepsnobj(objnam,selkey);
//
function prepsnobj(objnam,keval){
    var sndata = new Object();
    fldbeg='$#';
    fldend='#$';
    bcardat=gelid(objnam).content;
    selkey=addfld('frmnam','meta',fldbeg);
    switch(objnam){
        case 'bcard':
            inm=bcardat.split(',');
            selkey=selkey+addfld('opmode','data','refresh');
            selkey=selkey+addfld('mainfl','data',inm[0]);
            selkey=selkey+addfld('primak','data',inm[1]);
            selkey=selkey+addfld('keyval','data',keval);
            selkey=selkey+addfld('objnam','data',objnam);
            break;
    }
    sndata.selkey = selkey;
    return sndata   //
}

//
// prepare data for object refresh
///        prepsnobj(objnam,selkey);
//
function prepcalc(objnam,keval){
    var sndata = new Object();
    fldbeg='$#';
    fldend='#$';
    selkey=addfld('frmnam','meta',fldbeg);
    ///////    alert(' after addfld in prepcals '+selkey);
    ///    selkey=fldbeg+'$'+'frmnam'+'$'+gelid('frmnam').content+'$'+fldend;
    selkey=selkey+addfld('opmode','data','calculate');
    ///    selkey=selkey+fldbeg+'opmode'+dolar+'calculate'+fldend;
    selkey=frmCalc(objnam,selkey);            // form dependant
    sndata.selkey = selkey;
    return sndata   //
}
//
// change HTML Elements
//
function cngelem(inmr,splchr,opmode){
    inm=inmr.split(splchr);
    inml=inm.length;
    for (ibx=0;ibx<inm.length;ibx=ibx+3){
        switch (inm[ibx]){
            case 'idtr':
                trid=inm[ibx+1];
                switch(opmode){
                    case 'edit':
                        fndsel=document.getElementById(trid);
                        if (fndsel == null){
                            continue;
                        }
                        tbody=fndsel.parentNode;
                        tbodyid=tbody.id;
                        $("tbody tr[id='"+trid+"']").replaceWith(inm[ibx+2]);
                        break;
                    case 'add':
                        addnav(trid,inm[ibx+2],opmode,'tr');
                        break;
                }      // end modes
                break;     // end tr
            case 'idnav':
                trid=inm[ibx+1];
                ///                    switch(mode){
                switch(opmode){
                    case'edit':
                        fndsel=document.getElementById(trid);
                        if (fndsel == null){
                            continue;
                        }
                        tsel=fndsel.parentNode;
                        curval=tsel.value;
                        $("select option[id='"+trid+"']").replaceWith(inm[ibx+2]);
                        tsel.value=curval;
                        break;
                    case'add':
                        addnav(trid,inm[ibx+2],opmode,'nav');
                        break;
                }      // end modes
                break;     // end navs
            case 'idtable':
                trid=inm[ibx+1];
                //                    mode='calculate';
                switch(opmode){
                    case'calculate':
                        fndsel=document.getElementById(trid);
                        if (fndsel == null){
                            continue;
                        }
                        $("table[id='"+trid+"']").replaceWith(inm[ibx+2]);
                        break;
                }      // end modes
                break;     // end navs
            case 'iddiv':
                trd=inm[ibx+1];
                switch(opmode){
                    case'calculate':
                        fndsel=document.getElementById(trd);
                        if (fndsel == null){
                            continue;
                        }
                        $("div[id='"+trd+"']").replaceWith(inm[ibx+2]);
                        break;
                }      // end modes
                break;     // end navs
        }                      ///end elements
    }
    return;
}
//
// add  a key option to navpag/navrec
//
function addnav(trid,inp,mode,elemen){
    switch(elemen){
        case'tr':
            tbodid=uparent(trid,dolar,3);
            trepl=document.createElement('tr');
            trepl.id=trid;
            tbod=document.getElementById(tbodid);
            tbod.appendChild(trepl);
            $("tbody tr[id='"+trid+"']").replaceWith(inp);
            tfotid=strepl(tbodid,'tbody','tfoot');
            setfoot('mxrwcnt',tfotid);                 // in  util.js
            break;
        case'nav':
            if (trid.indexOf('navpag') >-1){
                break;
            }
            tbodid=uparent(trid,dolar,1);
            ///            function strepl(haystk,needle,replac){
            tbodid=strepl(tbodid,'$select','');
            trepl=document.createElement('option');
            trepl.id=trid;
            tbod=document.getElementById(tbodid);
            tbod.appendChild(trepl);
            $("select option[id='"+trid+"']").replaceWith(inp);
            optval=document.getElementById(trid).value
            document.getElementById(tbodid).value=optval;
            break;
    }
    return;
}
//
// add  a key option to navpag/navrec
//
function fndfoot(selkey,mode){
    switch(mode){
        case'refresh':
            selkey=selkey+addfld('','tfootid');
            selkey=selkey+addfld('','tfootit');
            break;
        default:
            mainf=gelid('mainfl').content;
            primk=gelid('primak').content;
            keyvl=gelid('keyval').content;
            trend=mainf+dolar+primk+dolar+keyvl;
            tbid= $("tbody tr[id$='"+trend+"']").attr('id');
            tbod=document.getElementById(tbid).parentNode.id;
            tfot=strepl(tbod,'tbody','tfoot');
            tfotit=document.getElementById(tfot).title
            tfot=strepl(tfot,dolar,'.');
            selkey=selkey+addfld(tfot,'tfootid');
            selkey=selkey+addfld(tfotit,'tfootit');
            break;
    }
    return selkey;
}

