//-----------------------------------------------------------
var sTgtProg = "targets.js";
var sTgtVers = "20111017";
//
// This contains code related to favorites processing.
//
// Version history (in reverse chronological order, newest first):
// --------------------------------------------------------------
// 20111017 :dms:name target save name field wider; changed width of rename target name field to match 
//               save target name field;prevent user from renaming target to same name
// 20111014 :dms:when save or rename to target name that already exists, push through existing target id for reuse
// 20111013 :dms:when save or rename to target name that already exists, ask if user wants to over-write existing
//               or not and handle as requested
// 20110914 :dms:Parameter mod to shadowbox to allow select boxes to display in the background as applicable
// 20110822 :dms:modified default min width to delete target selection list; expands as necessary for wider descriptions
// 20110816 :dms:Changed download Target file delete to handle multiple download/file delete; default first item
//               in Rename list to fields for changing
// 20110815 :dms:Smoothe out download Target process flow
// 20110705 :dms:Put cursor in name field by default when saving target
// 20110216 :dms:Added more detail to ajax exception output message
// 20100927 :dms:increase target name field to accept 255 characters
// 20100909 :dms:added refresh=1 parameter to checkfordupes method to force the behind-the-scenes process to NOT
//               gray out the screen and show 'loading'
// 20100831 :dms:modified copyToRename, chged to copyTgtToRename to avoid conflict with similar favorites method; removed 
//               need for parameter to fix error in undefined form value sent from renameTarget onclick event
// 20100825 :dms:initial version completed
//-----------------------------------------------------------

var dupeTargetId = -1;
var dnldFilesForDeletion = $A();

function saveTargets (params) {

   // Purpose:   Display modal box to name report target
   //
   // Arguments: 
   //
   // Returns:   neither true or false

   //first, check for duplicate request id/params/username/company combo
   if (dupeTargetId > 0) { 
      if (confirm("Target definition already exists.  Rename existing target definition?")) {
         renameTarget(dupeTargetId);   
      }
   } else {
      //html to be included in modal box
      var node = "";
      node = node + " <p style='text-align:center;'>Please enter the target name.</p>";
      node = node + " <form id='tgtForm' name='tgtForm' method='POST'>";
      node = node + "  <center><label for='tgtName' style=''>Name</label>";
      node = node + "  <input type='text' maxlength='255' name='tgtName' id='tgtName' size='50' style=''/><br />";
      node = node + "  <input type='checkbox' name='tgtAdv' id='tgtAdv' value='YES' checked style='margin-top:20px;'/>";
      node = node + "  Advance target's timeframe along with data updates.</br></center>";
      node = node + "  <input type='hidden' name='tgtParams' id='tgtParams' value='" + params.parseQuery()["paramList"] + "' />";
      node = node + "  <input type='hidden' name='tgtHHCnt' id='tgtHHCnt' value='" + params.parseQuery()["hhcount"] + "' />";
      node = node + "  <div style='text-align:center;margin-top:20px;'>";
      node = node + "   <input type='submit' value='Save' id='tgtSave' onClick='chkTargetName(this.form, &quot;saveTargets&quot;); window.parent.Shadowbox.close(); return false;' />";
      node = node + "   <input type='button' value='Cancel' id='tgtCancel' onClick='window.parent.Shadowbox.close()' />";
      node = node + "  </div>";
      node = node + " </form>";

      //display modal box
      Shadowbox.open({
         content: node.valueOf(),
         title: 'Save Target',
         player: 'html',
         height: 200,
         width: 500,
         options: {
            enableKeys:false,
            displayNav:false,
            troubleElements:["object", "embed", "canvas"],
            onFinish: function(element) { 
               $('tgtName').activate();
            },
            onOpen: function(element) { },
            onClose: function(element){ }
         }
      });
   }
}

//-----------------------------------------------------------

function deleteTargets () {

   // Purpose:   Display modal box of list of targets to select from for deletion
   //
   // Arguments: 
   //
   // Returns:   neither true or false
   // ---------------------------------------------------------------

   var task = "getTargetsAsDeleteOptionList";

   //get list of targets
   new Ajax.Request('targets.asp?task=' + task, {                              
      method: 'post',
      evalJSON: 'force',
      requestHeaders: {Accept: 'application/json'},
      onSuccess: function(transport) { 
         var json = transport.responseJSON;
         if (assessJsonResponse(json, task) == "success") {
            //html to be included in modal box
            var node = "";
            node = node + " <p style='text-align:center;'>Please select Targets to be deleted.</p>";
            node = node + " <form id='tgtForm' name='tgtForm' method='POST'>";
            node = node + "  <center>";
            node = node + "   <select name='deleteRec' id='deleteRec' size='10' multiple onclick='unmarkRunningProc($(&quot;deleteRec&quot;));' style='width:300px;'>";
            
            node = node + json.result;

            node = node + "   </select>";
            node = node + "   <p style='font-size:8pt;'>Click to make selection, Ctrl-Click or Shift-Click to select multiple.</p>";
            node = node + "   <input type='submit' value='Delete' id='tgtDelete' onClick='handleTargets(this.form, &quot;deleteTargets&quot;, false); window.parent.Shadowbox.close(); return false;' />";
            node = node + "   <input type='button' value='Cancel' id='tgtCancel' onClick='window.parent.Shadowbox.close()' />";
            node = node + "  </center>";
            node = node + " </form>";
//            node = node + "<script>$('deleteRec').observe('click',function(event) {unmarkRunningProc($('deleteRec'));})</script>";

            //display modal box
            Shadowbox.open({
               content: node.valueOf(),
               title: 'Delete Selected Targets',
               player: 'html',
               height: 325,
               width: 500,
               options: {
                  enableKeys:false,
                  displayNav:false,
                  troubleElements:["object", "embed", "canvas"],
                  onFinish: function(element) { 
                     var minWidth = 300;                   //default min width
                     var selLst = $('deleteRec').options;  //select list items
                     var strWidth = 0;                     //capture string width

                     //temporarily create a place to measure strings
                     if ($('tgtRuler') == undefined) {
                        var d = new Element('div', { 'id': 'tgtRuler', 'style': 'position:absolute;height:auto;width:auto;marginLeft:-1000;' });
                        document.body.appendChild(d);
                     }

                     //loop through records in select box and find longest, in px
                     for (var i = 0; i < selLst.length; i++) {
                        $('tgtRuler').update(selLst[i].innerHTML);
                        strWidth = $('tgtRuler').getWidth();
                        minWidth = (strWidth > minWidth ? strWidth : minWidth);
                     }
                     
                     //change dimensions of lightbox and select object
                     if (minWidth > 300) {
                        $('deleteRec').setStyle({'width':minWidth+'px'});
                        var vpWidth = document.viewport.getDimensions().width;
                        $('sb-wrapper').setStyle({'width':(minWidth+25)+'px', 
                                                  'left' :parseInt((vpWidth-(minWidth+25))/2)+'px'});
                     }
                     
                     if ($('tgtRuler') != undefined) { $('tgtRuler').remove(); } //clean up element
                  },
                  onOpen: function(element) { },
                  onClose: function(element){ }
               }
            });
         }
      },
      onFailure: function (oXHR, oJson) { 
         handleErr('C100', 'ZD100', sTgtProg+".deleteTargets", sTgtVers, "Failure: " + oXHR.status);
      },
      onException: function(request, err) { 
         handleErr('C100', 'ZD101', sTgtProg+".deleteTargets", sTgtVers, "Exception: " + err.message + "<br/><br/>Resulting from the following:<br/>" + request.transport.responseText);
      }
   });
}

//-----------------------------------------------------------

function downloadTargets () {

   // Purpose:   Display modal box of list of targets to select from for download
   //
   // Arguments: 
   //
   // Returns:   neither true or false
   // ---------------------------------------------------------------

   var task = "getTargetsAsDownloadOptionList";

   //get list of targets
   new Ajax.Request('targets.asp?task=' + task, {                              
      method: 'post',
      evalJSON: 'force',
      requestHeaders: {Accept: 'application/json'},
      onSuccess: function(transport) { 
         var json = transport.responseJSON;
         if (assessJsonResponse(json, task) == "success") {
            //html to be included in modal box
            var node = "";
            node = node + " <p style='text-align:center;'>Please select Target to be downloaded.</p>";
            node = node + " <form id='tgtForm' name='tgtForm' method='POST'>";
            node = node + "  <center>";
            node = node + "   <select name='tgtId' id='tgtId' size='10' onclick='unmarkRunningProc($(&quot;tgtId&quot;));'>";
            
            node = node + json.result;

            node = node + "   </select><br />";
            node = node + "   <input type='submit' value='Download' id='tgtDnld' onClick='handleTargets(this.form, &quot;downloadTarget&quot;, false); return false;' />";
            node = node + "   <input type='button' value='Cancel' id='tgtCancel' onClick='window.parent.Shadowbox.close()' />";
            node = node + "  </center>";
            node = node + " </form>";
            node = node + " <div id='downloadTargets' style='text-align:center;'></div>";
//            node = node + "<script>$('tgtId').observe('click',function(event) {unmarkRunningProc($('tgtId'));})</script>";

            //display modal box
            Shadowbox.open({
               content: node.valueOf(),
               title: 'Download Selected Target',
               player: 'html',
               height: 325,
               width: 500,
               options: {
                  enableKeys:false,
                  displayNav:false,
                  troubleElements:["object", "embed", "canvas"],
                  onFinish: function(element) { },
                  onOpen: function(element) { },
                  onClose: function(element){ }
               }
            });
         }
      },
      onFailure: function (oXHR, oJson) { 
         handleErr('C100', 'ZD102', sTgtProg+".downloadTargets", sTgtVers, "Failure: " + oXHR.status);
      },
      onException: function(request, err) { 
         handleErr('C100', 'ZD103', sTgtProg+".downloadTargets", sTgtVers, "Exception: " + err.message + "<br/><br/>Resulting from the following:<br/>" + request.transport.responseText);
      }
   });
}

//-----------------------------------------------------------

function renameTarget (dupeRecord) {

   // Purpose:   Display modal box of list of targets to select from for renaming
   //
   // Arguments: dupeRecord - record id of duperecord if trying to save duplicate
   //
   // Returns:   neither true or false
   // -------------------------------------------------------------

   var task = "getTargetsAsOptionList";

   //get list of targets
   new Ajax.Request('targets.asp?task=' + task, {                              
      method: 'post',
      evalJSON: 'force',
      requestHeaders: {Accept: 'application/json'},
      onSuccess: function(transport) { 
         var json = transport.responseJSON;
         if (assessJsonResponse(json, task) == "success") {
            //html to be included in modal box
            var node = "";
            node = node + " <p style='text-align:center;'>Please select Target to be renamed.</p>";
            node = node + " <form id='tgtForm' name='tgtForm' method='POST'>";
            node = node + "  <center>";
            node = node + "   <select name='tgtId' size='10' onClick='copyTgtToRename();'>";

            node = node + json.result;

            node = node + "   </select>";
            node = node + "   <p style='font-size:8pt;'>Click to select Target to rename.</p>";
            node = node + "   <center><label for='tgtName' style=''>Name</label>";
            node = node + "   <input type='text' maxlength='255' name='tgtName' id='tgtName' size='50' style=''/><br /><br /></center>";
            node = node + "   <input type='submit' value='Rename' id='tgtRename' onClick='chkTargetName(this.form, &quot;renameTarget&quot;); window.parent.Shadowbox.close(); return false;' />";
            node = node + "   <input type='button' value='Cancel' id='tgtCancel' onClick='window.parent.Shadowbox.close()' />";
            node = node + "  </center>";
            node = node + " </form>";

            //display modal box
            Shadowbox.open({
               content: node.valueOf(),
               title: 'Rename Selected Target',
               player: 'html',
               height: 375,
               width: 500,
               options: {
                  enableKeys:false,
                  displayNav:false,
                  troubleElements:["object", "embed", "canvas"],
                  onFinish: function(element) { 
                     $('tgtName').disable();
                     if (dupeRecord > 0) {
                        $(dupeRecord).selected = true;
                        copyTgtToRename();
                     } else {
                        $($('tgtForm').tgtId.options[0].id).selected = true;
                        copyTgtToRename();
                     }
                  },
                  onOpen: function(element) { },
                  onClose: function(element){ }
               }
            });
         }
      },
      onFailure: function (oXHR, oJson) { 
         handleErr('C100', 'ZD104', sTgtProg+".renameTarget", sTgtVers, "Failure: " + oXHR.status);
      },
      onException: function(request, err) { 
         handleErr('C100', 'ZD105', sTgtProg+".renameTarget", sTgtVers, "Exception: " + err.message + "<br/><br/>Resulting from the following:<br/>" + request.transport.responseText);
      }
   });
}

//-----------------------------------------------------------

function checkForDupeTargets (myParams) {

   // Purpose:   Check to see if a potential target, as defined by combination of 
   //            request id/params/username/company/advances already exists; sets dupeTargetId
   //            accordingly
   //
   // Arguments: (pulled from session)
   //
   // Returns:   neither true or false
   // -----------------------------------------------------------

   var task = "chkForDupes";

   new Ajax.Request('targets.asp?task=' + task + '&' + myParams + '&refresh=1', { //refresh=1 forces no screen gray-out/loading msg
      method: 'post',
      evalJSON: 'force',
      requestHeaders: {Accept: 'application/json'},
      onSuccess: function(transport) { 
         var json = transport.responseJSON;
         if (assessJsonResponse(json, task) == "success") {
            dupeTargetId = json.result;
         } else {
            dupeTargetId = -1;
         }
      },
      onFailure: function (oXHR, oJson) { 
         handleErr('C100', 'ZD106', sTgtProg+".checkForDupeTargets", sTgtVers, "Failure: " + oXHR.status);
      },
      onException: function(request, err) { 
         handleErr('C100', 'ZD107', sTgtProg+".checkForDupeTargets", sTgtVers, "Exception: " + err.message + "<br/><br/>Resulting from the following:<br/>" + request.transport.responseText);
      }
   });
}

//-----------------------------------------------------------

function copyTgtToRename() {

   // Purpose:   Copy selected list box content to appropriate name field for editing
   //
   // Arguments: None
   //
   // Returns:   neither true or false
   // -----------------------------------------------------------

   var task = "getFieldVal";

   new Ajax.Request('targets.asp?task=' + task + '&field=dscr&tgtId='+$('tgtForm').tgtId.getValue(), {                              
      method: 'post',
      evalJSON: 'force',
      requestHeaders: {Accept: 'application/json'},
      onSuccess: function(transport) { 
         var json = transport.responseJSON;
         if (assessJsonResponse(json, task) == "success") {
            $('tgtName').enable();
            $('tgtName').setValue(json.result);
         }
      },
      onFailure: function (oXHR, oJson) { 
         handleErr('C100', 'ZD108', sTgtProg+".copyTgtToRename", sTgtVers, "Failure: " + oXHR.status);
      },
      onException: function(request, err) { 
         handleErr('C100', 'ZD109', sTgtProg+".copyTgtToRename", sTgtVers, "Exception: " + err.message + "<br/><br/>Resulting from the following:<br/>" + request.transport.responseText);
      }
   });

   $('tgtName').activate();
}

//-----------------------------------------------------------

function chkTargetName(frm, task) {

   // Purpose:   Check to see if target name already exists and handle appropriately.
   //
   // Arguments: frm:   the form filled in from the modal popup
   //            task:  the task associated with what needs to be done
   //            params: parameters assicoated with save target hidden form fields
   //
   // Returns:   neither true or false
   // ---------------------------------------------------------------
   
   var lclTask = "isDupeTargetName";

   //first prevent user trying to rename to same name
   if (task == "renameTarget" &&                          
       frm.tgtId.selectedIndex >= 0 &&
       frm.tgtId.options[frm.tgtId.selectedIndex].text == frm.tgtName.getValue()) {
      alert("No change made.");
   } else { //check for duplicate name change
      new Ajax.Request('targets.asp?task=' + lclTask + '&tgtName='+frm.tgtName.getValue(), {                              
         method: 'post',
         evalJSON: 'force',
         requestHeaders: {Accept: 'application/json'},
         onSuccess: function(transport) { 
            var json = transport.responseJSON;
            if (assessJsonResponse(json, lclTask) == "success") {
               if (json.result == "0") { //no duplication
                  handleTargets(frm, task, false);
               } else { // duplicate name
                  if (confirm("Target name already exists.  Replace existing target definition with new target definition?")) {
                     //add trgt_id to form object to be used during delete task
                     frm.insert({'bottom': 
                        new Element('input', {'type':'text','id':'deleteRec','name':'deleteRec','value':json.result}) });
                     handleTargets(frm, 'deleteTargets', true); //delete old one
                     
                     //add trgt_id to form object to be used during save task 
                     frm.insert({'bottom': 
                        new Element('input', {'type':'text','id':'tgtId','name':'tgtId','value':json.result}) });
                     handleTargets(frm, task, false);           //save new one
                  }
               }            
            }
         },
         onFailure: function (oXHR, oJson) { 
            handleErr('C100', 'ZD114', sTgtProg+".chkTargetName", sTgtVers, "Failure: " + oXHR.status);
         },
         onException: function(request, err) { 
            handleErr('C100', 'ZD115', sTgtProg+".chkTargetName", sTgtVers, "Exception: " + err.message + "<br/><br/>Resulting from the following:<br/>" + request.transport.responseText);
         }
      });
   }
}
   
//-----------------------------------------------------------

function handleTargets(frm, task, quiet) {

   // Purpose:   Handle submission of targets modal form
   //
   // Arguments: frm:   the form filled in from the modal popup
   //            task:  the task associated with what needs to be done
   //            quiet: if true, will surpress status alert msg
   //
   // Returns:   neither true or false
   // ---------------------------------------------------------------

   var fields = $(frm).serialize();
   var url = 'targets.asp?task=' + task;
   var tmpFile;

   if (fields.length > 0) {
      url = url + "&" + fields;
   }

   new Ajax.Request(url, {
      method: 'post',
      evalJSON: 'force',
      requestHeaders: {Accept: 'application/json'},
      onSuccess: function(transport) { 
         var json = transport.responseJSON;
         if (assessJsonResponse(json, task) == "success") {
            initMenu(doNOTloadDashboard);                  //when done, refresh menu with new targets in menu
//            if (task == 'deleteTargets' || task == 'saveTargets') { checkForDupeTargets(); }  //if save or delete, check for dupes
            if (task == 'downloadTarget') {
               var tmpFile = json.result;
               tmpFile = tmpFile.sub(/(.*?)targets(.*?)/,function(match){return 'targets' + match[2]});
               window.open(tmpFile);
               $('tgtCancel').hide();
               dnldFilesForDeletion[dnldFilesForDeletion.length] = json.result;
//               $('downloadTargets').update("<a href='#' onclick='deleteTargetFile(&quot;" + json.result + "&quot;); window.parent.Shadowbox.close(); return false;'>(click to close window)</a>");
               $('downloadTargets').update("<a href='#' onclick='deleteTargetFiles(); window.parent.Shadowbox.close(); return false;'>(click to close window)</a>");
            } else {
               if (!quiet) { alert(json.result); }         //show returned message 
            }
         }
      },
      onFailure: function (oXHR, oJson) { 
         handleErr('C100', 'ZD110', sTgtProg+".handleTargets", sTgtVers, "Failure: " + oXHR.status);
      },
      onException: function(request, err) { 
         handleErr('C100', 'ZD111', sTgtProg+".handleTargets", sTgtVers, "Exception: " + err.message + "<br/><br/>Resulting from the following:<br/>" + request.transport.responseText);
      }
   });
}

//-----------------------------------------------------------

function deleteTargetFile(fname) {

   // Purpose:   Delete target file name
   //
   // Arguments: fname: the full name of the file to be deleted
   //
   // Returns:   neither true or false
   // ----------------------------------------------------------

   var task = "deleteTargetFile";
   var url = 'targets.asp?task=' + task + "&name=" + fname;

   new Ajax.Request(url, {                              
      method: 'post',
      evalJSON: 'force',
      requestHeaders: {Accept: 'application/json'},
      onSuccess: function(transport) { 
         var json = transport.responseJSON;
         if (assessJsonResponse(json, task) == "success") {
//            alert(json.result);                            //show returned message 
         }
      },
      onFailure: function (oXHR, oJson) { 
         handleErr('C100', 'ZD112', sTgtProg+".deleteTargetFile", sTgtVers, "Failure: " + oXHR.status);
      },
      onException: function(request, err) { 
         handleErr('C100', 'ZD113', sTgtProg+".deleteTargetFile", sTgtVers, "Exception: " + err.message + "<br/><br/>Resulting from the following:<br/>" + request.transport.responseText);
      }
   });
}

//-----------------------------------------------------------

function deleteTargetFiles() {

   // Purpose:   Delete multiple target files from global array list of names
   //
   // Returns:   neither true or false
   // ----------------------------------------------------------

   dnldFilesForDeletion.each(function(item) {
      deleteTargetFile(item);
   });
   dnldFilesForDeletion = dnldFilesForDeletion.clear();
}

//-----------------------------------------------------------
function unmarkRunningProc(fld) {

   for (var i=0; i<fld.options.length; i++) {
      if (fld.options[i].selected && fld.options[i].getStyle('color') == 'red') {
         alert("You cannot select Targets in red.");
         fld.options[i].selected = false;
      }
   }
}

