
function SynchronizeExplore(ExploreHRef,SyncToc)
{
   if (null != parent.TabHandler)
      parent.ItemsHandler(ExploreHRef,SyncToc);
   window.status = AWStatusMsg;
}

////////////////////////////////////////////////////////////////
// When adding controls to a table .NET prefixes the control  //
// ID with the table ID and adds a serial number. So in the   //
// functions below control ID generation is in a loop that    //
// spans a larger (than required) index range.                //
////////////////////////////////////////////////////////////////
var itmCount = 0;
// Upper limit rather than actual count

function CountItems()
{
   itmCount = 0;
   if (null != document.getElementById('ItemsGrid'))
      itmCount = document.getElementById('ItemsGrid').getElementsByTagName("td").length;
}

var itmGrdPrefix = 'ItemsGrid__ctl';
var selItmSufix = '_cbxSelectItem';
var parmsPrefix = 'Parms=';
var jscriptStrLen = 2000;

function ToggleGridItems()
{
   // Assumes first control in 'ItemsGrid'
   var all = itmGrdPrefix + '1' + '_cbxSelectAll';
   if (null == document.getElementById(all))
      return;
   var chkd = document.getElementById(all).checked;
   CountItems();
   for (var i = 0;i < itmCount;++i)
   {
      var itm = itmGrdPrefix + i + selItmSufix;
      if (null != document.getElementById(itm))
         document.getElementById(itm).checked = chkd;
   }
   // Update the Action Status;
   UpdateLSActionStatus();
}
 
function EmailGridItems(CloseAction)
{
   var parms = "";
   CountItems();
   for (var i = 0;i < itmCount;++i)
   {
      var itm = itmGrdPrefix + i + selItmSufix;
      if (null != document.getElementById(itm) && true == document.getElementById(itm).checked)
      {
         var hr = document.getElementById(itmGrdPrefix + i + '_ItemTitleLink').href;
         var openScript = "javascript:OpenAwWindow('";
         
         if (0 == hr.indexOf(openScript))
         {
            hr = hr.substr(openScript.length,hr.length);
            hr = hr.substr(0,hr.indexOf(',')-1);
            hr = hr.substr(hr.indexOf(parmsPrefix) + parmsPrefix.length,hr.length);
            // Needed for Special Characters since the Javascript does not honor the URLEncoding, we need to re encode.
            hr = URLEncode(hr);
         }
         else
         {
            hr = hr.substr(hr.indexOf(parmsPrefix) + parmsPrefix.length,hr.length);
         }
         if (parms.length > 0)
            parms = parms + '~';
         if ((parms.length + hr.length) > jscriptStrLen)
            break;
         parms = parms + hr;
      }
   }
   if (parms.length > 0)
   {
      var hr = 'EmailItemPage.aspx?' + parmsPrefix + parms;
      // 'Email' is the same as WebUtilities.WINDOWNAME_EMAIL
      if (0 == CloseAction.indexOf('Close'))
         window.open(hr,'Email','toolbar=no,status=no,resizable=yes');
      else
         document.location.href = hr;
   }
   window.status = AWStatusMsg;
}

function SyncGridItem()
{
   CountItems();
   var hr = "",firstHr = "";
   for (var i = 0;i < itmCount;++i)
   {
      var itm = itmGrdPrefix + i + selItmSufix;
      if (null != document.getElementById(itm))
      {
         var temp = document.getElementById(itmGrdPrefix + i + '_ItemSyncLink').href;
         if (temp.length > 0 && firstHr.length == 0)
            firstHr = temp;
         if (true == document.getElementById(itm).checked)
         {
            hr = document.getElementById(itmGrdPrefix + i + '_ItemSyncLink').href;
            break;
         }
      }
   }
   if (hr.length == 0 && firstHr.length > 0)
      hr = firstHr;
   if (hr.length > 0)
      SynchronizeExplore(hr,true);
   window.status = AWStatusMsg;
}

function PerformLSAction(LSAction,sAlertMessage)
{
   // NOTE: Base64 Encoding script is located in CommonScripts.js file
   var LSRepositoryName = "";
   var LSItemParms = "";

   CountItems();
   for (var i = 0;i < itmCount;++i)
   {
      var itm = itmGrdPrefix + i + selItmSufix;
      if (null != document.getElementById(itm) && true == document.getElementById(itm).checked)
      {
         var openScript = "javascript:OpenAwWindow('";
         var ItemTitleLinkParms = "";
         var ItemTitleLinkObj = document.getElementById(itmGrdPrefix + i + '_ItemTitleLink');
         var ItemTitleLinkHRef = ItemTitleLinkObj.href;

         // Must parse the href differently depending if they are opening in another window, or in the current window
         if (0 == ItemTitleLinkHRef.indexOf(openScript))
         {
            ItemTitleLinkHRef = ItemTitleLinkHRef.substr(openScript.length,ItemTitleLinkHRef.length);
            ItemTitleLinkHRef = ItemTitleLinkHRef.substr(0,ItemTitleLinkHRef.indexOf(',') - 1);
            ItemTitleLinkHRef = ItemTitleLinkHRef.substr(ItemTitleLinkHRef.indexOf(parmsPrefix) + parmsPrefix.length,ItemTitleLinkHRef.length);
            // Needed for Special Characters since the Javascript does not honor the URLEncoding, we need to re encode.
            ItemTitleLinkParms = URLEncode(ItemTitleLinkHRef);
         }
         else
         {
            ItemTitleLinkParms = ItemTitleLinkHRef.substr(ItemTitleLinkHRef.indexOf(parmsPrefix) + parmsPrefix.length,ItemTitleLinkHRef.length);
         }

         if (ItemTitleLinkParms.length > 0)
         {
            // Unescape the parms
            ItemTitleLinkParms = unescape(ItemTitleLinkParms);
            // Split the parms to get at the individual parms
            var IndividualParms = ItemTitleLinkParms.split("|");
            if (IndividualParms.length > 2)
            {
               // 0 - Repository Name
               LSRepositoryName = IndividualParms[0];
               var NewParms = LSItemParms + "|" + encode64(decode64(IndividualParms[1] ) + "|" + IndividualParms[2]  + "|" + ItemTitleLinkObj.getAttribute("LSACL"));
               NewParms = encode64(LSAction ) + "|" + LSRepositoryName + NewParms;
               NewParms = "LibraryServicesActionPage.aspx?Parms=" + escape(NewParms);
               if (NewParms.length > jscriptStrLen)
               {
                  alert(sAlertMessage);
                  break;
               }
               // 1 = Item title  +  Item ACL - attribute 'LSACL'
               //LSItemParms += "|" + encode64( decode64( IndividualParms[1] ) + "|" + decode64( IndividualParms[2] ) + "|" + ItemTitleLinkObj.getAttribute( "LSACL" ) );
               LSItemParms += "|" + encode64( decode64( IndividualParms[1] ) + "|" +  IndividualParms[2]  + "|" + ItemTitleLinkObj.getAttribute( "LSACL" ) );
            }
         }
      }
   }

   if (LSItemParms.length > 0)
   {
      var LSParms = encode64(LSAction ) + "|" + LSRepositoryName + LSItemParms;
      LSParms = "?Parms=" + escape(LSParms);

      switch (LSAction)
      {  
         case "CheckOut" : //200
            DialogFeatures = "dialogHeight:240px; dialogWidth:300px; center: Yes; resizable: No; help: No; status: No; scroll: Yes"; 
            break;
         case "CheckIn" :
            DialogFeatures = "dialogHeight:380px; dialogWidth:300px; center: Yes; resizable: No; help: No; status: No; scroll: Yes"; 
            break;
         case "UndoCheckOut":
            DialogFeatures = "dialogHeight:130px; dialogWidth:380px; center: Yes; resizable: No; help: No; status: No; scroll: Yes"; 
            break;
         default:
            alert("Invalid Parameters");
            break;
      }

      // Note:  If you are using IE 6.0 (no service packs) there is an issue with the return value.  You must access the web site via
      // the full URL  http:/maching name/AlchemyWeb/  in order to get the return code.  if you access via localhost, you will 
      // always get "UNDEFINED" as the result.
      // http://support.microsoft.com/default.aspx?scid=kb;en-us;327315
      var ReturnParms = window.showModalDialog("LibraryServicesActionPage.aspx" + LSParms,"",DialogFeatures);

      // For Debugging use the Window Opne - this will let you do view source, etc and resize.
      // BUT IT WILL NOT RETURN PROPER VALUES FROM THE LS ACTION WINDOW.
      // var ReturnValue = window.open( "LibraryServicesActionPage.aspx" + LSParms, "", "" );
      
      if (ReturnParms != null)
      {
         if (ReturnParms.length > 0)
         {
            var ReturnParmsArray = ReturnParms.split("|");
            var ReturnValue = ReturnParmsArray[0];
            if (ReturnValue > 0)
            {
               // ReturnParmsArray[1] is for the Viewer pane which doesnt exist in this instance
               // Refresh the ViewItemDetails Pain
               history.go(0);
               if (ReturnParmsArray.length >= 3)
               {
                  if (parent.frames("ActionFrame") != null)
                  {
                     // Are we in Explore or Search Mode?
                     var ExploreDBList = parent.frames("ActionFrame").document.getElementById('ExploreDBSelectionList');
                     if (ExploreDBList != null)
                        parent.frames("ActionFrame").location.href = ReturnParmsArray[2];
                  }
               }
            }
         }
      }
   }
   // CheckOutLink.NavigateUrl = "javascript:var RC = window.showModalDialog(\"ModalFormLauncher.aspx?Action=CheckOut\", \"" + LibraryServicesArguments + "\", \"" + CheckOutDialogFeatures + "\");alert(RC);";
}

if (document.images)
{
   CheckIn_Image_Enabled = new Image;
   CheckIn_Image_Disabled = new Image;
   CheckOut_Image_Enabled = new Image;
   CheckOut_Image_Disabled = new Image;
   UndoCheckOut_Image_Enabled = new Image;
   UndoCheckOut_Image_Disabled = new Image;

   CheckIn_Image_Enabled.src = "images/DOC_CHECKIN_Enabled.gif";
   CheckIn_Image_Disabled.src = "images/DOC_CHECKIN_Disabled.gif";
   CheckOut_Image_Enabled.src = "images/DOC_CHECKOUT_Enabled.gif";
   CheckOut_Image_Disabled.src = "images/DOC_CHECKOUT_Disabled.gif";
   UndoCheckOut_Image_Enabled.src = "images/DOC_UNDOCHECKOUT_Enabled.gif";
   UndoCheckOut_Image_Disabled.src = "images/DOC_UNDOCHECKOUT_Disabled.gif";
}

function UpdateLSActionStatus()
{
   var CanCheckOut = true;
   var CanCheckIn = true;
   var CanUndoCheckOut = true;
   
   var CheckOutLinkImg = document.getElementById("CheckOutLink");
   var CheckInLinkImg = document.getElementById("CheckInLink");
   var UndoCheckOutLinkImg = document.getElementById("UndoCheckOutLink");

   if ((CheckOutLinkImg != null) && (CheckInLinkImg != null) && (UndoCheckOutLinkImg != null))
   {
      var IsLSAdminText = UndoCheckOutLinkImg.attributes["LSAdmin"].value;
      var IsLSAdmin = (IsLSAdminText.toLowerCase( ) == "false" ? false : true);
      
      CountItems();
      var CheckedCount = 0;
      for (var i = 0;i < itmCount;++i)
      {
         var itm = itmGrdPrefix + i + selItmSufix;
         if (null != document.getElementById(itm) && true == document.getElementById(itm).checked)
         {
            CheckedCount++; 
            var ItemTitleLinkObj = document.getElementById(itmGrdPrefix + i + '_ItemTitleLink');
            var ItemLSACL = ItemTitleLinkObj.attributes["LSACL"].value;
            if (ItemLSACL.length >= 5)
            {
               // CanCheckOut if the Document ACL States Checkout is allowed
               CanCheckOut = CanCheckOut && (ItemLSACL.substring(0,1) == '1');
               // CanCheckIn if the document is checked out by me
               CanCheckIn = CanCheckIn && (ItemLSACL.substring(2,3) == '1');
               // CanUndoCheckout if  document is checked out to me  OR (checked out && LS Admin)
               CanUndoCheckOut = CanUndoCheckOut && (((ItemLSACL.substring(2,3) == '1')) || ((ItemLSACL.substring(1,2) == '1') && IsLSAdmin));
            }        
         }
      }
      // If nothing is checked, then cant do anything
      if (CheckedCount == 0)
      {
         CanCheckOut = false;
         CanCheckIn = false;
         CanUndoCheckOut = false;
      }
      // Checkout only if the itemACL Allows 
      if (null != CheckOutLinkImg)
      {
         CheckOutLinkImg.disabled = !CanCheckOut;
         CheckOutLinkImg.style.cursor = (CanCheckOut ? 'hand' : 'default');
         CheckOutLinkImg.src = (CanCheckOut ? CheckOut_Image_Enabled.src : CheckOut_Image_Disabled.src);
      }
      // CheckIn is allowed if the Item is Checked out by me
      if (null != CheckInLinkImg)
      {
         CheckInLinkImg.disabled = !CanCheckIn;
         CheckInLinkImg.style.cursor = (CanCheckIn ? 'hand' : 'default');
         CheckInLinkImg.src = (CanCheckIn ? CheckIn_Image_Enabled.src : CheckIn_Image_Disabled.src);
      }
      // UndoCheckOut is allowed if the Item is checked out by me OR (the item is checked out AND the User has LSAdmin Privledges) 
      if (null != UndoCheckOutLinkImg)
      {
         UndoCheckOutLinkImg.disabled = !CanUndoCheckOut; 
         UndoCheckOutLinkImg.style.cursor = (CanUndoCheckOut ? 'hand' : 'default');
         UndoCheckOutLinkImg.src = (CanUndoCheckOut ? UndoCheckOut_Image_Enabled.src : UndoCheckOut_Image_Disabled.src);
      }
   }
}

