  /* predefine aMRLcols, cmsForm
    checkboxes have to have values set on click
    requires #srl_wrap, #table_wrap

    handle multiple instances of editor
  includes field names
  */
  var _copy=1;
  var _exit=2;
  var _reload=3;
  var _readDir=4;
  var _setField=5;
  
  var editor;
  var frmDirty=false;  /* SRL */
  var bHelp_form = false;
  var XKey;
  var xRow;
  var sName;

  $(document).ready(function() {    
$.log(".ready cms.js #22")
    $('#jQuery').html('<a href="http://www.randybrandt.net">tjCMS<?=_vers?> &copy 2012 tiredjake.com</a>');
    $('#uploader').hide();
    $('#full_record').hide();

    /* --- r5help system --- */
    $('#r5help').children().hide();
    $('#h_blank').show();

    $('.gotHelp').hover(
      function() {
        sName=$(this).attr("id");
        $('#h_'+sName).show();
        return false;
      },
      function() {
        $('#h_'+sName).hide();
      }
    );
    /* end r5help */
  
      // bind 'srl_files' picture 
      $('#srl_files').ajaxForm(function() { 
        $('#choosepix').html(''); // blank uploading...
        
        ap="";
        $('#file_wrap_list .MultiFile-title').each(function() {  
          ap+=$(this).text()+"<br>";
        });
        pl=$('#picList').html();
        pl+=ap;
        $('#picList').html(pl);
        $('#srl_files input:file').MultiFile('reset');
//      alert("uploaded!"); 
      }); 

      fnWorking(false);



        /* Add a click handler for save button */
        $('#btnSRLsave').click( function() {
//alert("btnSRLsave cms.js");
         var r5parms="r5parms=u:"+cmsTable+":"+xKey+":"+xRow+"&";
//$.log(cmsForm+" fields:"); ///////////////
         
       sCereal=$(cmsForm+" input:not(:checkbox,:password),"+cmsForm+" select[name!=tablePages_length],textarea").serialize();      
          sCereal+="&"+$(cmsForm+" input:checkbox").fieldSerialize(false); // false: include unchecked; normal serialize ignores, but fieldSerialize fails on ckEdit
        
//      alert($('#art_text').serialize());   
          r5parms+=sCereal;

$.log(r5parms); /////////////////
          
//alert ("cms.js calls "+sURL+" to save\n"+r5parms);

          /*we want to store the values from the form input box, then send via ajax below */
          $.ajax({
            type: "POST",
            url: sURL,
  
            data: r5parms,
            error: function(fld) {
              $.log(fld);
              alert ("ajax error in cms.js @ line 109.\n"+r5parms+"\n \n"+fld);
            },

            success: function(sJson){
      $.log("success sJson cms.js 100:");
      $.log(sJson);
              x=parseInt(fnOnReturn2(sJson));
              if (x==xRow) {
                if (curAction==1) {
                  window.location.reload(true);
                  return false;
                }

                if (!ice_mode) {
                  fnBuildRow();
                } else {
                  r5HideEdit();
                }
              } else {
                $.log(sJson);
alert ("error x="+x+" xRow="+xRow+" type:"+typeof(xRow));
                /*  $.log(fld); ----------
                ~FAIL={You have an error in your SQL syntax; 
*/
                var err=sJson.split("}");
                alert ("ERROR!\n"+err[0].substr(7)); 
              }
            }
          })
        return false;
      } );


  /* "var1="+ var1 +"& var2="+ var2,
       data: ({id : this.getAttribute('id')}),
 */
        $('#btnSRLpreview').click(function() {
          srl_copy();
          srl_exit(true);
          return false;
        });

        /* Add a click handler for delete button */
        $('#btnSRLdelete').click( function() {          
          srl_del();
          return false;
        } );

        $('#btnSRLcancel').click(function() {
          
//      alert ("act_eic.js btnSRLcancel");
           if (!isDirty()) {      
            r5HideEdit();
          }
          
          if (ice_mode) {
            srl_restore();
            srl_exit();            
          }
          return false;
        });
  
        $('#btnSRLdup').click(function() {
          srl_dup();
          return false;
        });


        $('#btnSRLupload').click(function() {          
          picPathX='&nbsp;&nbsp;<strong>Existing pics</strong><br>';          
          if (pixPathSolo) {
            picPath=pixPath;
          } else {
            picPath=pixPath+($(cmsForm+' .alias').val())+"/";            
          }
          picPathX+="&nbsp;&nbsp;Path:"+picPath+'<br>';
          $('#picList').html(picPathX);
          $('#picDest').val(picPath);
          var r5parms="r5parms=r:"+picPath+":";
          fnAjax (r5parms,"",_readDir);
          $('#uploader').slideDown();
          return false;
        });


        $('#btnUpload').click(function() {
          return checkUpload();
        });

        $('#btnLoadCancel').click(
        function() {
          $('#uploader').slideUp();
          $('#h_'+sName).hide();
          return false;
        });

     

      
      /* hook into the keystrokes */
        $(document).keydown (function(e) {
          switch (e.which) {
            case 38:
//              $('#btnPrior').trigger('click');
              break;
            
            case 40:
//              $('#btnNext').trigger('click');
              break;
            
            /* if escape is pressed hide the form */
            case 27:
              $('#btnSRLcancel').trigger('click');
              break;
            
          }
        });

      
      /* convert Enter/Return to Tab and process field */
        $("input,select").keydown (function(e) {
//$.log(e.which);
          switch (e.which) {
            case 13: // enter
              e.preventDefault();
              fnHiNext(this);
              break;
          }
        });
        
  });
  
  function fnHiNext(e) {
    ind=$(":input").index(e);
    ex=$(":input:eq(" + ++ind + ")"); //++ next input
    nxt=$(ex).attr("name");
    $(this).trigger("change"); // otherwise prevented
    $('#'+nxt).focus();
  }
  
  function buildEd(elemName,iWidth) {
    if (editor!=null) {
       /*    
       $.log("got:"+elemName);
      var data = "*-*-" + $(elemName).val()+"-*-*"; 
      // Set the editor data. 
      
      $( elemName ).val( data);
                  
      */
    } else {

/*      var w = (iWidth) ? "" : ""; */
      
      var config = { width: [iWidth], toolbar: [
      ['Source'],
      ['Cut','Copy','Paste','PasteText','PasteFromWord','-', 'SpellChecker', 'Scayt'],
      ['Find','Replace'], ['Image','Table','HorizontalRule','SpecialChar'],	
      ['Link','Unlink','Anchor'],['Maximize', 'ShowBlocks','RemoveFormat'],['About'],
      '/',
      ['Styles','Format','Font','FontSize'],['TextColor','BGColor'],
      ['Bold','Italic','Underline'],['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],
      ['NumberedList','BulletedList'],['UIColor']
      ]};

    $(elemName) 
      .ckeditor( function() {  /* callback */ 

          editor = $(elemName).ckeditorGet();
          
        /*
          $('#huh').click(function() {
            
            // Get the editor data. 
            var data = "*-*-" + $(elemName).val()+"-*-*"; 
            // Set the editor data. 
         //   $( elemName ).val( data);
                        
            alert( "ed dirty:"+editor.checkDirty()+" = "+data );
                  return (false);
          });
          
          $('#die').click(function() {
              var data = $(elemName).val(); 
    alert ("die "+data);
            $('#dump').html(data);
            editor.destroy();
            editor=null;
            $.log( "editor value: "+editor );
            return (false);
          });
          */
        },
        config );
    }
  }
 
     $('#oSecurity').change(function() {
alert (this.value);
//      var rez = prompt(this.value+": What is your new level", "1"); 
        var r5parms="r5parms=set:parents:us:"+this.value;   
// alert ("act_script.js "+r5parms+"\n"+sURL);
        fnAjax (r5parms);
      });

        
    /* save fields to db */
  function srl_save () {
    var sWhat=$('#ice_where').text();
    var r5parms="r5parms=u:"+sTable+":"+sWhat+"&"+$("#frmAdmin").serialize();   
        
$.log("\n save button submits: \n"+r5parms+"\n\n");
        /* we want to store the values from the form input box, then send via ajax below */
    fnAjax (r5parms, "",2); // 2= exit
  }
 
   /* duplicate current record */
  function srl_dup () {
    var sWhat=$('#ice_where').text();
    var r5parms="r5parms=c:"+sTable+":"+sWhat+"&"+$("#frmAdmin").serialize();   
        
$.log("\n dup button submits: \n"+r5parms+"\n\n");
        /* we want to store the values from the form input box, then send via ajax below */
    fnAjax (r5parms, "Entry duplicated; make changes and save");
  }
  
        /* delete current record sTable? */
      function srl_del () {
        var rez = confirm ("Delete this entry?");
        if (rez) {
//          var r5parms="r5parms=d:"+cmsTable+":"+$('#ice_where').text();

          var r5parms="r5parms=d:"+cmsTable+":"+xKey+":"+xRow;
$.log("\n del button submits: \n"+r5parms+"\n\n");

          if (!ice_mode) {
            oTable.fnDeleteRow( curRowNode );
          }
          fnAjax (r5parms, "Entry deleted");
        }
      }  

  /* -------
    common ajax function
    show alert if sSuccess
    exit SRL when done unless iAction set
  */
  function fnAjax (r5parms, sSuccess, iAction) {
    if (!iAction) {iAction=_exit;}

    $.ajax({
      type: "POST",
      url: sURL,
      data: r5parms,
      error: function(fld) {
$.log(fld);
        alert ("fnAjax error in cms.js\n"+fld);
        srl_exit();
      },
      
      success: function(sJson){
$.log("cms.js returns >"+sJson); //////////////////
        if (sJson.indexOf("OKAY:")>0) {
          sJsonResult=sJson.substr(6);
          if (sSuccess) {
            alert (sSuccess);
          }
          
          switch (iAction) {
            case _setField:
              fld=sJsonResult.split(";;")
              o=$('#'+fld[0]);
              o.val(fld[1]);
              o.attr("data-prior",fld[1]);
              break;
            
            case _copy:
              srl_copy();
              break;
            
            case _exit:
              srl_exit();
              break;
            
            case _reload:
              window.location.reload(true);
              break;
          
            case _readDir:
      $.log(sJson);
      
            sFiles="";
            filz=eval(sJsonResult);
            for ( var i in filz ) {
              sFiles+='<a href="#" class="picKill">x</a> <a href="'+picPath+filz[i]+'" target="_blank">'+picPath+filz[i]+'</a><br>';
            }
//    alert (bob[1]);  
            pl=$('#picList').html();
            $('#picList').html(pl+sFiles);
          }
          
          
        } else {
          switch (iAction) {
            case _readDir:
            pl=$('#picList').html();
            $('#picList').html(pl+"&nbsp;&nbsp;* none *");
              break;
            
            default:
              alert (sJson.substr(6));
              srl_exit();
          }
        }
      }
    })
  }  
  

  /*
    <input type="hidden" name="webNew" value="0" />
<input type="hidden" name="webRowID" id="webRowID" value="20" />
<input type="hidden" name="myRecID" id="myRecID" value="0" />

checks the editor and returns true if the user
    doesn't care about losing changes
  */
  function isDirty() {
    var edDirty = false;
    if (editor) {
      if (editor.checkDirty()) { /* check all editors! */
        edDirty=true;
      }
    }
    if (frmDirty || edDirty) {    
      var answer = confirm ("You have unsaved changes. Exit anyway?");
      if (answer) {
        edDirty=false;
      } else {
        edDirty=true;
      }
    }
    return edDirty;
  }

/*
  uses SRL to build new MRL xRow based on aMRLcols and aMRLimg
      var aMRLcols=['art_title','art_subtitle','art_date','art_status'];
       var aMRLimg=['','','','1:plus.png:minus.png'];
*/
/*
  function xfnBuildRow() {                
    var aNewTR=( ["<input type=checkbox>"]);
    
    // populate form
    for (var i in aMRLcols) {
      v=$('#'+aMRLcols[i]).val();
      if (aMRLimg[i]) {
        var pic=aMRLimg[i].split(":");
        var htm=(v==pic[0])? pic[1] : pic[2];
         aNewTR.push("<img class='"+v+"' src='inc/"+htm+"'>");
      } else {  
        if (aMRLtxt[i]) {
          var t=aMRLtxt[i].split("^");
          htm="?."+v+".?";

          for (var j in t) {
            o=t[j].split(":");
            if (o[0]==v) {
              htm=o[1];
            }
          }
          aNewTR.push(htm);
        } else {
          aNewTR.push('<td>'+v+'</td>');
        }
      }
    }
  
          
        var oSettings = oTable.fnSettings ();
        $.log(oSettings);
        alert ("about to fnDraw(true)");
         oTable.fnDraw(true); // ????????????????????
        alert ("post fnDraw");
  return false;


    newRowNode = oTable.fnGetNodes(0);

  $.log("cur:"+curRowNode); // last active row
  $.log("new:"+newRowNode); // new active row
  
    alert ("pre-add");
     oTable.fnUpdate(aNewTR,newRowNode);
    alert ("post-add");
                
//    $('#'+xRow).html(newTR);    
    resetEditor();
    $('#btnSRLcancel').trigger('click');
  }
  
*/

  function fnBuildRow() {                
    var newTR='<td><input type=checkbox></td>';
//  alert ("fnBuildRow "); /////////////////////
    var  aNewTR=( ["<input type=checkbox>","title","sib","2009-12-25","7","1" ] );
    
    // populate form
    for (var i in aMRLcols) {
      v=$('#'+aMRLcols[i]).val();
      if (aMRLimg[i]) {
        var pic=aMRLimg[i].split(":");
        var htm=(v==pic[0])? pic[1] : pic[2];
        newTR+="<td><img class='"+v+"' src='inc/"+htm+"'></td>";
      } else {  
        if (aMRLtxt[i]) {
          var t=aMRLtxt[i].split("^");
          htm="?."+v+".?";
          htm=v;
          
          for (var j in t) {
            o=t[j].split(":");
            if (o[0]==v) {
              htm=o[1];
            }
          }
          newTR+="<td>"+htm+"</td>";
        } else {
          newTR+='<td>'+v+'</td>';
        }
      }
    }
/*
    $.log("pre-add");
     oTable.fnAddData(aNewTR);
    $.log("post-add");
*/                
    $('#'+xRow).html(newTR);    
    resetEditor();
    $('#btnSRLcancel').trigger('click');
  }
  
  
// ------------------
	function r5HideEdit () {
		$('#srl_wrap').hide();
		$('#table_wrap').show();		
  }

  
function trim(stringToTrim) {
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}
  
  
  
  
  /* --------------------- shared with ice_script */
  
    
  function resetEditor(){
    frmDirty=false;
    if (editor!=null) { // no editor if no textareas
      editor.resetDirty(); // we dirtied it by loading data
    }
  }

/*
 cereal:txtTitle=Aerial+View&txtDate=0000-00-00&txtID=aerial&txtPicNotes=%3Cp%3E%0A%09dslfjds+fjdslkf+jdslkf+jdslkfjdslkfjfds%3C%2Fp%3E%0A&webNew=0&webRowID=20&myRecID=0
*/

    /*grabs new record
    {"id":"73","...}    */

/* user hit Enter or double-clicked in table to edit */
	function r5EditRow (theKey,rowID,imgClean,alreadyHere) {
    if (imgClean == null){
      imgClean = 1;
    }
    fnWorking();
    xKey = theKey;
    xRow = rowID;
    $('#uploader').hide();

    $.log("cms.js xKey:"+xKey+" xRow:"+xRow );

    var sDF="%b %d %y"; // desired date format
  
// "*" + dates
// special dates

//var mFlds="`id`,`serial`,CONCAT_WS('|',DATE_FORMAT(`date_inv`,'"+sDF+"'),`date_inv`) As date_inv,`acct`,`name`,`invoice_num`,`our_job`,`your_job`,`style`,`cal`,`subtotal`,`tax`,`shipping`,`total_chg`,CONCAT_WS('|',DATE_FORMAT(`date_paid`,'"+sDF+"'),`date_paid`) As date_paid,CONCAT_WS('|',DATE_FORMAT(`date_recd`,'"+sDF+"'),`date_recd`) As date_recd,CONCAT_WS('|',DATE_FORMAT(`date_est`,'"+sDF+"'),`date_est`) As date_est,CONCAT_WS('|',DATE_FORMAT(`date_ap`,'"+sDF+"'),`date_ap`) As date_ap,CONCAT_WS('|',DATE_FORMAT(`date_due`,'"+sDF+"'),`date_due`) As date_due,CONCAT_WS('|',DATE_FORMAT(`date_ship`,'"+sDF+"'),`date_ship`) As date_ship,CONCAT_WS('|',DATE_FORMAT(`date_notice1`,'"+sDF+"'),`date_notice1`) As date_notice1,CONCAT_WS('|',DATE_FORMAT(`date_notice2`,'"+sDF+"'),`date_notice2`) As date_notice2,CONCAT_WS('|',DATE_FORMAT(`date_notice3`,'"+sDF+"'),`date_notice3`) As date_notice3,CONCAT_WS('|',DATE_FORMAT(`date_pay_due`,'"+sDF+"'),`date_pay_due`) As date_pay_due,`item`,`terms`,`usual_terms`,`state`,`warr_guar`,`ins`,`est_via`,`del_time`,`guar`,`prepay`,`cty`,`tax_pct`,`ship_via`,`asterisk`,`due`,`days_overdue`,`temp`,`L_A`,`L_B`,`L_C`,`L_D`,`L_E`,`L_F`,`amount`,`sh_hand`,`do`";

        var mFlds="`id`,`date_active`,`date_modified`,`type`,`security_level`,`id_creator`,`title`,`text`";
        mFlds="*";

    /* for specific fields, use table>field1,field2 */
    var r5parms="r5parms=g:"+cmsTable+">"+mFlds+":"+theKey+":"+rowID+":"+imgClean+sFormats;

$.log("cms.js calls "+sURL+" r5EditRow:"+r5parms,"error");
  
  $.ajax({
    type: "POST",
    url: sURL,
    data: r5parms,
    error: function (fld) {
$.log("cms_ajax g error","error");

        $.log(fld.statusText);
  alert ("error @280 cms.js:"+fld.statusText); //////////
      },
    success: function(sJson) {
$.log("cms_ajax g returns:"+sJson);
  
      if (sJson.indexOf("FAIL")>0) {
        alert (sJson); ///////////////////////////
      } else {
  
  if (sJson.indexOf("<b>Warning</b>:")>0 || sJson.indexOf("<b>Fatal error</b>:")>0){

  //  alert ("cms.js\n"+sJson);
  }

$.log("cms.js 655 sJson:","error");
//$.log(sJson); ////////
  /*
   "credit_hours":"2", 
   "credit_hours":[ {"val":"2", "raw":"2.1"} ],
  */
        var fld = JSON.parse(sJson);

//        $('legend',"#srl").text(' Esc to exit ');
//$.log("cmsForm:"+cmsForm,"error");

        // populate the form; first, inputs
        $(cmsForm+' input').each(function (i) {
//$.log(this.name);
          if (fld[this.name]){

$.log("fld: "+[this.name],"error");
            
            if (fld[this.name].raw != undefined) {
/* ?? sVal=(fld[this.name]+""!="")? fld[this.name][0] : "%%"; */
$.log(fld[this.name]); ////////
              sVal=fld[this.name].val;
              sValRaw=fld[this.name].raw;
              $(this).attr("data-raw",sValRaw);
              $(this).attr("data-prior",sVal);
            } else {
              sVal=fld[this.name];
              sValOrig="";
            }
          } else {
            sVal="";
          }
          $(this).val(sVal);

if (fld[this.name]) {
//  alert (this.name+"="+fld[this.name]);      
}
        });
        
        $(cmsForm+' textarea').each(function (i) {
          
//          fld[this.name]="Help �Me�";
          
          $(this).val(fld[this.name]);
        });
        
        // password
        $(cmsForm+" #password").each(function (i) {
          $(this).val("");
        });

        // checkboxes
        $(cmsForm+" :checkbox").each(function (i) {
          $(this).attr('checked', (fld[this.name]==0)?false:true);
          $(this).val(fld[this.name]);
        });
        
        // option select dropdown by matching val
        $(cmsForm+' select').each(function (i) {
          $(this).val(fld[this.id]);
        });

/*        
        // init data-prior for formatted fields for change detection
        $(cmsForm+" [data-format]").each(function (i) {
          o=$('#'+this.id);
          sValue=o.val();
          o.attr("data-prior",sValue);
        });
           */
        
/*
        $('#bHelp').click(function() {
          bHelp_form=(bHelp_form)?false:true;
          if (bHelp_form) {
            $(cmsForm+'X').attr("id",'frmAdminY');
          } else {
            $(cmsForm+'Y').attr("id",'frmAdminX');
          }
          return false;
        });
*/

/* <?php if ($_SESSION['help']): ?> */
        /* select desired input fields and attach tooltips */
        
        // option select dropdown by matching val
 $(cmsForm+' #credit_hours').mask("99/99/9999"); 
         
        $(cmsForm+'_wrap :input[title]').tooltip({
          events: {
            input: 'click focus, mouseout blur',
            checkbox: 'click focus, mouseout blur'
          },
          
          position: "center left",
        
          // a little tweaking of the position
          offset: [-2, -2],
        
          // use the built-in fadeIn/fadeOut effect
          effect: "fade",
        
          // custom opacity setting
          opacity: 0.9
        
        });
/* <?php endif; ?> */

        resetEditor();

if (!alreadyHere) {
        $('#srl_wrap').show();
        $('#table_wrap').hide();
}

        fnWorking(false);
        $.log("end of r5EditRow");
         $(".modal_btns").focus();
          }
        }    
    });
  }  
  
 
       
  /* check validity of upload files */
  function checkUpload () {
    /* check list of selected files */
    var sWhat=$('#file_wrap_list .MultiFile-title');    
    if (sWhat.length) {
      $('#choosepix').html('Uploading...')
        .css("color","blue");      
      return true;
    } else {
      alert ("Choose a file first");
      return false;
    }
  }
     
    /* process ajax returns */
  function fnOnReturn2 (sJson) {
    $.log("cms.js fnOnReturn2:"); ////////////////////
    $.log(sJson); ////////////////////
  
      if (sJson.indexOf("OKAY")<1) {
        $.log("fnOnReturn2 error:"+sJson);
        return sJson;
      } else {
        
        var result=sJson.split(':');
$.log("fnOnReturn2 result[1]:"+result[1]); /////////////////////////////////////////////////////
        return result[1];
      }
  }
  
    function fnWorking(iState) {
    if (iState==undefined) {iState=true;}
    (iState) ? $('#working').show() : $('#working').hide();
    (iState) ? $('#loading').show() : $('#loading').hide();
  }
  

