//-----------------------------------------------------------
var sFavProg = "favorites.js";
var sFavVers = "20111122";
//
// This contains code related to favorites processing.
//
// 20111122 :dms:combine short dscr and long dscr into single dscr
// 20111121 :dms:add check for naming favorite same as an existing one
// 20110914 :dms:Parameter mod to shadowbox to allow select boxes to display in the background as applicable
// 20110816 :dms:Do checkDupes after delete in addition to save; default first item in Rename list to 
//               fields for changing
// 20110216 :dms:Added more detail to ajax exception output message
// 20101206 :dms:added check to ensure favorite being saved on reports only
// 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 copyFavToRename to avoid conflict with similar targets method; removed 
//               need for parameter to fix error in undefined form value sent from renameFavorites onclick event
// 20100825 :dms:minor user messages updated
// 20100819 :dms:initial move to this file
//-----------------------------------------------------------
var dupeFavoriteId = -1;

function saveFavorites () {

   // Purpose:   Display modal box to name report favorite and provide description
   //
   // Arguments: 
   //
   // Returns:   neither true or false

   //first, 
   if ($('report_content') == undefined) {                 // check to see if report contents exist
      alert('Favorites can currently only be saved for reports that have been successfully run.  Input forms, dashboards, blank pages, etc do not currently apply.');
   } else if (dupeFavoriteId > 0) {                        // check for duplicate request id/params/username/advances combo
      if (confirm("Report already saved as Favorite.  Rename?")) {
         renameFavorites(dupeFavoriteId);   
      }
   } else {
      //html to be included in modal box
      var node = "";
      node = node + " <p style='text-align:center;'>Please enter a name for your favorite.</p>";
      node = node + " <form id='favForm' name='favForm' method='POST'>";
      node = node + "  <label for='favName' style='float:left;margin-left:20px;'>Name</label>";
      node = node + "  <input type='text' maxlength='100' name='favName' id='favName' style='float:right;margin-right:20px;'/><br /><br />";
      node = node + "  <center>";
      node = node + "   <input type='submit' value='Save' id='favSave' onClick='chkFavoriteName(this.form, &quot;saveFavorites&quot;); window.parent.Shadowbox.close(); return false;' />";
      node = node + "   <input type='button' value='Cancel' id='favCancel' onClick='window.parent.Shadowbox.close()' />";
      node = node + "  </center>";
      node = node + " </form>";

      //display modal box
      Shadowbox.open({
         content: node.valueOf(),
         title: 'Save Report to Favorites',
         player: 'html',
         height: 200,
         width: 300,
         options: {
            enableKeys:false,
            displayNav:false,
            troubleElements:["object", "embed", "canvas"],
            onFinish: function(element) { },
            onOpen: function(element) { },
            onClose: function(element){ }
         }
      });
   }
}

//-----------------------------------------------------------

function checkForDupeFavorites () {

   // Purpose:   Check to see if a potential favorite, as defined by combination of 
   //            request id/params/username/advances already exists; sets dupeFavoriteId
   //            accordingly
   //
   // Arguments: (pulled from session)
   //
   // Returns:   neither true or false
   var task = "chkForDupes";
   
   new Ajax.Request('favorites.asp?task=' + task + '&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") {
            dupeFavoriteId = json.result;
         } else {
            dupeFavoriteId = -1;
         }
      },
      onFailure: function (oXHR, oJson) { 
         handleErr('C100', 'ZA100', sFavProg+".checkForDupeFavorites", sFavVers, "Failure: " + oXHR.status);
      },
      onException: function(request, err) { 
         handleErr('C100', 'ZA101', sFavProg+".checkForDupeFavorites", sFavVers, "Exception: " + err.message + "<br/><br/>Resulting from the following:<br/>" + request.transport.responseText);
      }
   });
}

//-----------------------------------------------------------

function deleteFavorites () {

   // Purpose:   Display modal box of list of favorites to select from for deletion
   //
   // Arguments: 
   //
   // Returns:   neither true or false
   var task = "getFavoritesAsOptionList";

   //get list of favorites
   new Ajax.Request('favorites.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 favorites to be deleted.</p>";
            node = node + " <form id='favForm' name='favForm' method='POST'>";
            node = node + "  <center>";
            node = node + "   <select name='deleteRec' id='deleteRec' size='10' multiple>";
            
            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='favDelete' onClick='handleFavorites(this.form, &quot;deleteFavorites&quot;); window.parent.Shadowbox.close(); return false;' />";
            node = node + "   <input type='button' value='Cancel' id='favCancel' onClick='window.parent.Shadowbox.close()' />";
            node = node + "  </center>";
            node = node + " </form>";

            //display modal box
            Shadowbox.open({
               content: node.valueOf(),
               title: 'Delete Selected Favorites',
               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', 'ZA102', sFavProg+".deleteFavorites", sFavVers, "Failure: " + oXHR.status);
      },
      onException: function(request, err) { 
         handleErr('C100', 'ZA103', sFavProg+".deleteFavorites", sFavVers, "Exception: " + err.message + "<br/><br/>Resulting from the following:<br/>" + request.transport.responseText);
      }
   });
}

//-----------------------------------------------------------

function renameFavorites (dupeRecord) {

   // Purpose:   Display modal box of list of favorites to select from for renaming
   //
   // Arguments: renameCurrent - if true then pull current report into fields to rename
   //
   // Returns:   neither true or false
   var task = "getFavoritesAsOptionList";

   //get list of favorites
   new Ajax.Request('favorites.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 Favorite to be renamed.</p>";
            node = node + " <form id='favForm' name='favForm' method='POST'>";
            node = node + "  <center>";
            node = node + "   <select name='favId' size='10' onClick='copyFavToRename();'>";
   
            node = node + json.result;
   
            node = node + "   </select>";
            node = node + "   <p style='font-size:8pt;'>Click to select Favorite to rename.</p>";
            node = node + "   <label for='favName' style='float:left;margin-left:120px;'>Name</label>";
            node = node + "   <input type='text' maxlength='100' name='favName' id='favName' style='float:right;margin-right:120px;'/><br /><br />";
            node = node + "   <input type='submit' value='Rename' id='favRename' onClick='chkFavoriteName(this.form, &quot;renameFavorite&quot;); window.parent.Shadowbox.close(); return false;' />";
            node = node + "   <input type='button' value='Cancel' id='favCancel' onClick='window.parent.Shadowbox.close()' />";
            node = node + "  </center>";
            node = node + " </form>";

            //display modal box
            Shadowbox.open({
               content: node.valueOf(),
               title: 'Rename Selected Favorite',
               player: 'html',
               height: 375,
               width: 500,
               options: {
                  enableKeys:false,
                  displayNav:false,
                  troubleElements:["object", "embed", "canvas"],
                  onFinish: function(element) { 
                     $('favName').disable();
                     if (dupeRecord > 0) {
                        $(dupeRecord).selected = true;
                        copyFavToRename();
                     } else {
                        $($('favForm').favId.options[0].id).selected = true;
                        copyFavToRename();
                     }
                  },
                  onOpen: function(element) { },
                  onClose: function(element){ }
               }
            });
         }
      },
      onFailure: function (oXHR, oJson) { 
         handleErr('C100', 'ZA104', sFavProg+".renameFavorites", sFavVers, "Failure: " + oXHR.status);
      },
      onException: function(request, err) { 
         handleErr('C100', 'ZA105', sFavProg+".renameFavorites", sFavVers, "Exception: " + err.message + "<br/><br/>Resulting from the following:<br/>" + request.transport.responseText);
      }
   });
}

//-----------------------------------------------------------

function chkFavoriteName(frm, task) {

   // Purpose:   Check to see if favorite 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 associated with save favorite hidden form fields
   //
   // Returns:   neither true or false
   // ---------------------------------------------------------------
   
   var lclTask = "isDupeFavoriteName";

   //first prevent user trying to rename to same name
   if (task == "renameFavorite" &&                          
       frm.favId.selectedIndex >= 0 &&
       frm.favId.options[frm.favId.selectedIndex].text == frm.favName.getValue()) {
      alert("No change made.");
   } else { //check for duplicate name change
      new Ajax.Request('favorites.asp?task=' + lclTask + '&favName='+frm.favName.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
                  handleFavorites(frm, task, false);
               } else { // duplicate name
                  if (confirm("Favorite name already exists.  Replace existing favorite definition with new favorite 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}) });
                     handleFavorites(frm, 'deleteFavorites', 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':'favId','name':'favId','value':json.result}) });
                     handleFavorites(frm, task, false);           //save new one
                  }
               }            
            }
         },
         onFailure: function (oXHR, oJson) { 
            handleErr('C100', 'ZA112', sTgtProg+".chkFavoriteName", sFavVers, "Failure: " + oXHR.status);
         },
         onException: function(request, err) { 
            handleErr('C100', 'ZA113', sTgtProg+".chkfavoriteName", sFavVers, "Exception: " + err.message + "<br/><br/>Resulting from the following:<br/>" + request.transport.responseText);
         }
      });
   }
}
   
//-----------------------------------------------------------

function handleFavorites(frm, task, quiet) {

   // Purpose:   Handle submission of favorites modal form
   //
   // Arguments: 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 = 'favorites.asp?task=' + task;
   
   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 favorite in menu
            if (task == "saveFavorites" || task == "deleteFavorites") { checkForDupeFavorites(); } //if a save or delete was done, we'll want to update check for dupes
            if (!quiet) { alert(json.result); }         //show returned message 
         }
      },
      onFailure: function (oXHR, oJson) { 
         handleErr('C100', 'ZA106', sFavProg+".handleFavorites", sFavVers, "Failure: " + oXHR.status);
      },
      onException: function(request, err) { 
         handleErr('C100', 'ZA107', sFavProg+".handleFavorites", sFavVers, "Exception: " + err.message + "<br/><br/>Resulting from the following:<br/>" + request.transport.responseText);
      }
   });
}

//-----------------------------------------------------------

function copyFavToRename() {

   // 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('favorites.asp?task=' + task + '&field=dscr&favId='+$('favForm').favId.getValue(), {                              
      method: 'post',
      evalJSON: 'force',
      requestHeaders: {Accept: 'application/json'},
      onSuccess: function(transport) { 
         var json = transport.responseJSON;
         if (assessJsonResponse(json, task) == "success") {
            $('favName').enable();
            $('favName').setValue(json.result);
         }
      },
      onFailure: function (oXHR, oJson) { 
         handleErr('C100', 'ZA108', sFavProg+".copyFavToRename", sFavVers, "Failure: " + oXHR.status);
      },
      onException: function(request, err) { 
         handleErr('C100', 'ZA109', sFavProg+".copyFavToRename", sFavVers, "Exception: " + err.message + "<br/><br/>Resulting from the following:<br/>" + request.transport.responseText);
      }
   });

   $('favName').activate();
}
