function getElement(sID) {
  return document.getElementById(sID);
}

var isIE = document.all ? true : false;
var isOpera = navigator.userAgent.toLowerCase().indexOf('opera') != -1;
var isChrome = /chrome/.test(navigator.userAgent.toLowerCase());

function LoadJS(filename) {
  LoadResourceFile(filename, "js");
}

function LoadCSS(filename) {
  LoadResourceFile(filename, "css");
}

function LoadResourceFile(filename, filetype) {
  if (filetype == "js") { //if filename is a external JavaScript file
    var fileref = document.createElement('script')
    fileref.setAttribute("type", "text/javascript")
    fileref.setAttribute("src", filename)
  }
  else if (filetype == "css") { //if filename is an external CSS file
    var fileref = document.createElement("link")
    fileref.setAttribute("rel", "stylesheet")
    fileref.setAttribute("type", "text/css")
    fileref.setAttribute("href", filename)
  }
  if (typeof fileref != "undefined")
    document.getElementsByTagName("head")[0].appendChild(fileref)
}

function isUrl(s) {
  var sUrlParts = s.split('?');
  var regexp = new RegExp();
  var regexp2 = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/
  var regexp3 = /(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/
  regexp.compile("^[A-Za-z]+://[A-Za-z0-9-_]+\\.[A-Za-z0-9-_%&\?\/.=]+$");
  if (sUrlParts.length == 1)
    return (regexp.test(sUrlParts[0]) && regexp2.test(sUrlParts[0]))
  return (regexp3.test(sUrlParts[0]) && regexp3.test(sUrlParts[1]))
}

function getLocalizedAppDir() {
  var sLang = (typeof (BaseMaster_sLanguageCode) == "undefined" ? "he" : BaseMaster_sLanguageCode.toLowerCase());
  var sLocal = (sLang == 'he' ? '/KotarApp' : '/KotarApp/Loc/' + BaseMaster_sLanguageCode)
  return sLocal;
}

function isRTL() {
  var sLang = (typeof (BaseMaster_sLanguageCode) == "undefined" ? "he" : BaseMaster_sLanguageCode.toLowerCase());
  return (sLang == 'he' ? true : false)
}

var nHideAjaxMessageBoxTimeout = 0;
var oAjaxMessageContent = null;
var oAjaxMessageContainer = null;
var oAjaxMessageContainerBG = null;
var oAjaxMessageBox = null;
var bAjaxMessageIsImportant = false;
var nAjaxMessageWidth = 0;
var nAjaxMessageCustomContainerLeft = 0;
var nAjaxMessageCustomContainerWidth = 0;
var nAjaxMessageCustomContainerTop = 0;


function SetAjaxAjaxMessageCustomContainerLeft(nLeft) {
  nAjaxMessageCustomContainerLeft = nLeft;
}

function SetAjaxAjaxMessageCustomContainerWidth(nWidth) {
  nAjaxMessageCustomContainerWidth = nWidth;
}

function SetAjaxAjaxMessageCustomContainerTop(nTop) {
  nAjaxMessageCustomContainerTop = nTop;
}


function ShowAjaxImportantMessageBox(sMessage, nTimeout) {
  if (typeof (nTimeout) == "undefined")
    nTimeout = 3000;
  bAjaxMessageIsImportant = true;
  ShowAjaxMessage(sMessage, nTimeout);
}

function ShowAjaxNotification(sMessage, nTimeout) {
  if (typeof (nTimeout) == "undefined")
    nTimeout = 2000;
  bAjaxMessageIsImportant = true;
  ShowAjaxMessage(sMessage, nTimeout);
}

function ShowAjaxMessageBox(sMessage, nTimeout) {
  if (bAjaxMessageIsImportant == true)
    return;
  if (typeof (nTimeout) == "undefined")
    nTimeout = 1200;

  ShowAjaxMessage(sMessage, nTimeout);
}

function ShowAjaxMessage(sMessage, nTimeout) {
  VerifyAjaxMessageBoxControls();
  sMessage = SetAjaxMessageBoxDimensions(sMessage);

  oAjaxMessageContent.innerHTML = sMessage;
  SetAjaxMessageBoxVisibility(true);
  window.clearTimeout(nHideAjaxMessageBoxTimeout);
  nHideAjaxMessageBoxTimeout = window.setTimeout("HideAjaxMessageBox()", nTimeout);
}

function VerifyAjaxMessageBoxControls() {
  if (oAjaxMessageContent == null) {
    oAjaxMessageContent = document.getElementById("ajaxMessageContent");
    oAjaxMessageContainer = document.getElementById("ajaxMessageContainer");
    oAjaxMessageContainerBG = document.getElementById("ajaxMessageContainerBG");
    oAjaxMessageBox = document.getElementById("ajaxMessageBox");
    CalcClientSize();
  }
}

function HideAjaxMessageBox() {
  bAjaxMessageIsImportant = false;
  SetAjaxMessageBoxVisibility(false);
}

function SetAjaxMessageBoxDimensions(sMessage) {
  sMessage = ReplaceAll(sMessage, "[A]", "'");
  var nLen = sMessage.length;

  if (nLen < 15)
    SetAjaxMessageBoxWidth(150);
  else if (nLen < 20)
    SetAjaxMessageBoxWidth(170);
  else if (nLen < 30)
    SetAjaxMessageBoxWidth(230);
  else if (nLen < 35)
    SetAjaxMessageBoxWidth(280);
  else if (nLen < 40)
    SetAjaxMessageBoxWidth(330);
  else if (nLen < 45)
    SetAjaxMessageBoxWidth(370);
  else if (nLen < 50)
    SetAjaxMessageBoxWidth(400);
  else if (nLen < 55)
    SetAjaxMessageBoxWidth(480);
  else if (nLen < 60)
    SetAjaxMessageBoxWidth(520);
  else if (nLen < 65)
    SetAjaxMessageBoxWidth(550);
  else {
    SetAjaxMessageBoxWidth(570);
    sMessage = sMessage.substr(0, 65) + "...";
  }

  return sMessage;
}

function SetAjaxMessageBoxWidth(nWidth) {
  nAjaxMessageWidth = nWidth;
  oAjaxMessageContainer.style.width = nWidth + "px";
  oAjaxMessageContainerBG.style.width = (nWidth - (isIE ? 0 : 2)) + "px";
  oAjaxMessageBox.style.width = nWidth + "px";
}

function SetAjaxMessageBoxVisibility(bVisible) {
  var nTop = (nAjaxMessageCustomContainerTop > 0 ? nAjaxMessageCustomContainerTop : 150);
  var nContainerWidth = (nAjaxMessageCustomContainerWidth > 0 ? nAjaxMessageCustomContainerWidth : clientDimensions.width);
  var nLeft = (nContainerWidth - nAjaxMessageWidth) / 2 + nAjaxMessageCustomContainerLeft;

  oAjaxMessageContainer.style.left = nLeft;
  oAjaxMessageContainer.style.top = nTop;
  oAjaxMessageBox.style.left = nLeft;
  oAjaxMessageBox.style.top = nTop;
  oAjaxMessageContainer.style.display = (bVisible ? "block" : "none");
  oAjaxMessageBox.style.display = (bVisible ? "block" : "none");
}

function ShowCetLinks() {
  if (ModalPopupIsVisible())
    return;

  if (nCetLinks_Timer > 0)
    window.clearTimeout(nCetLinks_Timer);

  var hCetLinks = getElement("hCetLinks");
  hCetLinks.style.borderBottom = "solid 1px white";

  var dvCetLinks = getElement("dvCetLinks");
  dvCetLinks.style.display = "";
  dvCetLinks.style.zIndex = 2;
}


var nCetLinks_Timer = 0;
function HideCetLinks() {
  if (nCetLinks_Timer > 0)
    window.clearTimeout(nCetLinks_Timer);

  nCetLinks_Timer = window.setTimeout("CetLinks_OnTimeout()", 500);
}

function CetLinks_OnTimeout() {
  getElement("hCetLinks").style.borderBottom = "none";
  getElement("dvCetLinks").style.display = "none";
}


var PopupDimensions =
  [
    { name: "Login", width: 550, height: 290 },
    { name: "LoginWithAutoLine", width: 550, height: 324 },
    { name: "LoginFromIPSubscriptionTerminal", width: 550, height: 400 },
    { name: "PasswordRecovery", width: 496, height: 400 },
    { name: "AdditionalInfo", width: 580, height: 412 },
    { name: "WhyRegister", width: 580, height: 420 },
    { name: "ExpireNotice", width: 496, height: 350 },
    { name: "SiteSubscriptionInMonthlyMode", width: 496, height: 250 },
    { name: "SiteSubscriptionStillActive", width: 496, height: 250 },
    { name: "ActiveProductsInCartWarning", width: 496, height: 250 },
    { name: "SiteSubscriptionActiveByProxy", width: 496, height: 250 },
    { name: "AddBookToProject", width: 560, height: 240 },
    { name: "AddBookToCart", width: 320, height: 250 },
    { name: "UserHasNoBooks", width: 550, height: 500 },
    { name: "WelcomeToFreeSite", width: 550, height: 420 },
    { name: "WelcomeToCartSite", width: 550, height: 420 },
    { name: "WelcomeToSubscriptionSite", width: 550, height: 420 },
    { name: "UserHasNoSubscription", width: 550, height: 300 },
    { name: "MessageBox", width: 350, height: 190 },
    { name: "SyncBox", width: 350, height: 150 },
    { name: "AddLink", width: 420, height: 177 },
    { name: "CopyToClipboard", width: 410, height: 207 },
    { name: "IAmTheWalrus", width: 700, height: 500 },
    { name: "GoToCheckout", width: 350, height: 152 },
    { name: "ClipboardInaccessible", width: 350, height: 150 },
    { name: "ManualCopyToClipboard", width: 350, height: 250 },
    { name: "ViewerHelp", width: 400, height: 350 },
    { name: "UploadAvatar", width: 400, height: 150 },
    { name: "PendingMembershipApproval", width: 400, height: 150 },
    { name: "SiteMembershipIsRequired", width: 400, height: 150 },
    { name: "ExplainPrivate", width: 400, height: 150 },
    { name: "ExplainPublic", width: 400, height: 150 },
    { name: "TechnicalRequirements", width: 500, height: 500 }
  ];


function ShowPrivateNoteExplanationPopup() {
  ShowNoteExplanationPopup("Private");
}

function ShowPublicNoteExplanationPopup() {
  ShowNoteExplanationPopup("Public");
}

function ShowNoteExplanationPopup(sType) {
  ChangeIFrameSource("/KotarApp/Viewer/Popups/Markers/Explain" + sType + ".aspx?", false);
  BV_SmartHideMarkerBubble('', false);
  ShowModalPopup("Explain" + sType);
}

function ShowPendingMembershipApprovalPopup(bFromViewer) {
  ChangeIFrameSource(MainMaster_AccountPopupsFolder + "PendingMembershipApproval.aspx?bFromViewer=" + bFromViewer, false);
  if (bFromViewer)
    BV_SmartHideMarkerBubble('', false);
  ShowModalPopup("PendingMembershipApproval");
}

function ShowSiteMembershipIsRequiredPopup(bFromViewer) {
  ChangeIFrameSource(MainMaster_AccountPopupsFolder + "SiteMembershipIsRequired.aspx?bFromViewer=" + bFromViewer, false);
  if (bFromViewer)
    BV_SmartHideMarkerBubble('', false);
  ShowModalPopup("SiteMembershipIsRequired");
}

function ShowUploadAvatar() {
  ChangeIFrameSource("/Account/Popups/UploadAvatar.aspx", false)
  ShowModalPopup("UploadAvatar");
}

function ShowViewerHelp() {
  ChangeIFrameSource(getLocalizedAppDir() + "/Viewer/Popups/Help.aspx", false)
  ShowModalPopup("ViewerHelp");
}

function SetLoginIFrameURL(sLoginWindow, sUrl) {
  ChangeIFrameSource(sLoginWindow + "?bPopup=true&sReturnUrl=" + sUrl, false);
}

function SetLoginIFrameURLForIncompleteRegistration(sLoginWindow) {
  ChangeIFrameSource(sLoginWindow + "?bClear=true&bSubscriptionExpired=true", false);
}

function CloseWarningPopupAndShowAddBookToCartPopup(nBookID) {
  HideModalPopup();
  var params = new Array(
    { name: "nBookID", value: nBookID },
    { name: "SerType", value: 2 },
    { name: "tmp", value: Date() }
    );
  executeWebRequest("Products.AddToCart", params, { onSuccessFunction: ShowAddBookToCartPopup, onFailureFunction: ShowFailedToAddBookToCartPopup, nBookID: nBookID });
}

function ShowClipboardInaccessible() {
  ChangeIFrameSource("/KotarApp/Viewer/Popups/ClipboardInaccessible.aspx", false)
  ShowModalPopup("ClipboardInaccessible");
}

function ShowManualCopyToClipboardPopup() {
  var oWin = ChangeIFrameSource("/KotarApp/Viewer/Popups/ManualCopyToClipboard.aspx", false)
  ShowModalPopup("ManualCopyToClipboard");
  return oWin;
}

function ShowGotoCheckout_OnLoad() {
  AddOpenWindowCommand("ShowGotoCheckout()");
}

function ShowGotoCheckout() {
  ChangeIFrameSource("/KotarApp/Shop/Popups/GoToCheckout.aspx", false)
  ShowModalPopup("GoToCheckout");
}

function ShowIAmTheWalrusPopup(nBookID) {
  ChangeIFrameSource("/KotarApp/Account/Popups/IAmTheWalrus.aspx?nBookID=" + nBookID, false)
  ShowModalPopup("IAmTheWalrus");
}

function ShowFailedToAddBookToCartPopup() {
  Utils_ShowMessageDialog("קרתה תקלה בהוספת הספר לעגלת הקניות", "תקלת מערכת", false);
}

function ShowAddBookToCartPopup(nBookID, sReturnUrl) {
  if (typeof (sReturnUrl) == "undefined")
    sReturnUrl = "";

  ChangeIFrameSource("/KotarApp/Shop/Popups/AddBookToCart.aspx?nBookID=" + nBookID + "&sReturnUrl=" + sReturnUrl, false)
  ShowModalPopup("AddBookToCart");
}

function ShowAddLinkPopup() {
  ChangeIFrameSource("/KotarApp/Viewer/Popups/AddLink.aspx", false)
  ShowModalPopup("AddLink");
}

function ShowCopyToClipboardPopup(nBookID) {
  ChangeIFrameSource("/KotarApp/Viewer/Popups/CopyToClipboard.aspx?nBookID=" + nBookID, false)
  ShowModalPopup("CopyToClipboard");
}

function ShowWelcomePopup_OnLoad(sType) {
  AddOpenWindowCommand("ShowWelcomePopup('" + sType + "')");
}

function ShowWelcomePopup(sType) {
  ChangeIFrameSource(MainMaster_AccountPopupsFolder + "WelcomeTo" + sType + "Site.aspx", false)
  ShowModalPopup("WelcomeTo" + sType + "Site");
}

function ShowUserHasNoSubscriptionPopup_OnLoad() {
  AddOpenWindowCommand("ShowUserHasNoSubscriptionPopup()");
}

function ShowUserHasNoSubscriptionPopup() {
  ChangeIFrameSource("/KotarApp/Account/Popups/UserHasNoSubscription.aspx", true)
  ShowModalPopup("UserHasNoSubscription");
}

function ShowUserHasNoBooksPopup_OnLoad() {
  AddOpenWindowCommand("ShowUserHasNoBooksPopup()");
}

function ShowUserHasNoBooksPopup() {
  ChangeIFrameSource("/KotarApp/Account/Popups/UserHasNoBooks.aspx", true)
  ShowModalPopup("UserHasNoBooks");
}

function ShowLoginPopup(bSetUrl, sCallbackFunction, bAuto) {
  if (BaseMaster_bUserIsLoggedIn)
    return;

  if (typeof (bAuto) == "undefined")
    bAuto = false;
  var sPopup = (bAuto ? "LoginWithAutoLine" : "Login");
  var sURL = MainMaster_AccountPopupsFolder + "Login.aspx";
  if (BaseMaster_bIsClientInIpSubscriptionRange == true) {
    sPopup = "LoginFromIPSubscriptionTerminal";
    sURL = MainMaster_AccountPopupsFolder + "LoginFromIPSubscriptionTerminal.aspx";
  }

  if (bSetUrl == true) {
    var params = (typeof (sCallbackFunction) != "undefined" ?
                  "bAuto=" + bAuto + "&bSmartLogin=true&sCallback=" + sCallbackFunction : "bPopup=true") +
                  "&tmp=" + getTimestamp();
    ChangeIFrameSource(sURL + "?" + params, false);
  }
  if (IsInViewer())
    BV_SmartHideMarkerBubble('ShowLoginPopup', false);
  ShowModalPopup(sPopup);
}

function ShowAdditionalInfoPopup() {
  ChangeIFrameSource("/KotarApp/Account/Popups/AdditionalInfo.aspx", false)
  ShowModalPopup("AdditionalInfo");
}

function ShowWhyRegisterPopup() {
  ChangeIFrameSource(MainMaster_AccountPopupsFolder + "WhyRegister.aspx", false);
  ShowModalPopup("WhyRegister");
}

function ShowPasswordRecoveryPopup() {
  HideModalPopup();
  ChangeIFrameSource("/KotarApp/Account/Popups/PasswordRecovery.aspx", false);
  ShowModalPopup("PasswordRecovery");
}

function ShowHasActiveProductsInCartWarningPopup() {
  ChangeIFrameSource("/KotarApp/Account/Popups/ActiveProductsInCartWarning.aspx", false);
  ShowModalPopup("ActiveProductsInCartWarning");
}

function ShowSiteSubscriptionInMonthlyModeWarningPopup_OnLoad() {
  AddOpenWindowCommand("ShowSiteSubscriptionInMonthlyModeWarningPopup()");
}

function ShowSiteSubscriptionInMonthlyModeWarningPopup() {
  ChangeIFrameSource("/KotarApp/Account/Popups/SiteSubscriptionInMonthlyModeWarning.aspx", false);
  ShowModalPopup("SiteSubscriptionInMonthlyMode");
}

function ShowSiteSubscriptionStillActiveWarningPopup_OnLoad() {
  AddOpenWindowCommand("ShowSiteSubscriptionStillActiveWarningPopup()");
}

function ShowSiteSubscriptionStillActiveWarningPopup() {
  ChangeIFrameSource("/KotarApp/Account/Popups/SiteSubscriptionStillActiveWarning.aspx", false);
  ShowModalPopup("SiteSubscriptionStillActive");
}

function ShowSiteSubscriptionActiveByProxyWarningPopup() {
  ChangeIFrameSource("/KotarApp/Account/Popups/SiteSubscriptionActiveByProxyWarning.aspx", false);
  ShowModalPopup("SiteSubscriptionActiveByProxy");
}

function ShowSiteSubscriptionAboutToExpirePopup_OnLoad() {
  AddOpenWindowCommand("ShowSiteSubscriptionAboutToExpirePopup()");
}

function ShowSiteSubscriptionAboutToExpirePopup() {
  ChangeIFrameSource("/KotarApp/Account/Popups/SiteSubscriptionExpiresSoon.aspx", false);
  ShowModalPopup("ExpireNotice");
}

function ShowBookSubscriptionAboutToExpirePopup_OnLoad(nBookID) {
  AddOpenWindowCommand("ShowBookSubscriptionAboutToExpirePopup(" + nBookID + ")");
}

function ShowBookSubscriptionAboutToExpirePopup(nBookID) {
  ChangeIFrameSource("/KotarApp/Account/Popups/BookSubscriptionExpiresSoon.aspx?nBookID=" + nBookID, false);
  ShowModalPopup("ExpireNotice");
}

function ShowExpireNoticePopup() {
  ChangeIFrameSource("/KotarApp/Account/Popups/ExpireNotice.aspx", false);
  ShowModalPopup("ExpireNotice");
}

function ShowSyncBoxPopup() {
  ChangeIFrameSource("/KotarApp/BackOffice/SyncBox.htm", false);
  ShowModalPopup("SyncBox");
}


function Open_AddBookToProjectPopup(nBookID, bRefreshProjectList, bRefreshPage, nPageID) {
  if (typeof (nPageID) == "undefined") nPageID = 0;
  ChangeIFrameSource("/KotarApp/Projects/Popups/AddBookToProject.aspx?nBookID=" + nBookID + "&nPageID=" + nPageID + "&bRefreshProjectList=" + bRefreshProjectList + "&bRefreshPage=" + bRefreshPage, false);
  ShowModalPopup("AddBookToProject");
}

function Utils_ShowErrorMessageDialog(sMessage, sUrl, sHrefText) {
  Utils_ShowMessageDialog(sMessage, "שגיאת מערכת", true, sUrl, sHrefText);
}

function Utils_ShowDelayedMessageDialog(sMessage, sTitle, bError, nDelay) {
  window.setTimeout("Utils_ShowMessageDialog('" + sMessage + "', '" + sTitle + "', " + bError + ", '')", nDelay);
}

function Utils_ShowMessageDialog(sMessage, sTitle, bError, sUrl, sHrefText, bShowWait) {
  if (typeof (sTitle) == "undefined") sTitle = "שימו לב";
  if (typeof (sUrl) == "undefined") sUrl = "";
  if (typeof (sHrefText) == "undefined") sHrefText = "";
  if (typeof (bShowWait) == "undefined") bShowWait = false;

  if (typeof (bError) == "undefined")
    bError = false;

  ChangeIFrameSource("/KotarApp/System/MessageBox.aspx?sTitle=" + escape(sTitle)
                      + "&sMessage=" + escape(sMessage)
                      + "&bError=" + bError
                      + "&sUrl=" + sUrl
                      + "&sHrefText=" + escape(sHrefText)
                      + "&bShowWait=" + bShowWait
                      , false);

  ShowModalPopup("MessageBox");
}

var _openedWindowName = "";
var _reopenWindowName = "";
var _lastIFrameSource = "";

function ChangeIFrameSource(newLocation, bAddTimestamp) {
  if (typeof (bAddTimestamp) == "undefined")
    bAddTimestamp = false;

  if (_openedWindowName == "")
    _lastIFrameSource = newLocation;

  var oFrame = document.getElementById("modalDialogIFrame");
  if (oFrame == null) {
    Utils_ShowErrorMessageDialog("בעייה בפתיחת החלונית");
    return;
  }

  var gUserID = (typeof (BaseMaster_gUserID) == "undefined" ? '00000000-0000-0000-0000-000000000000' : BaseMaster_gUserID);

  newLocation += (newLocation.indexOf("?") > 0 ? "&" : "?") +
    "bShowResourceFieldName=" + bShowResourceFieldName +
    "&gUserID=" + gUserID +
    (bAddTimestamp ? "&tmp=" + getTimestamp() : "");

  if (isIE) {
    var w = document.getElementById("modalDialogIFrame")
    w.contentWindow.location.replace(newLocation);
    return w;
  }
  else {
    oFrame.src = newLocation;
    return oFrame;
  }
}

function SetPleaseWaitIFrame() {
  var waitUrl = "/KotarApp/System/MessageBox.aspx?bShowLoading=true&sLang=" + BaseMaster_sLanguageCode;
  if (isIE) {
    var w = document.getElementById("modalDialogIFrame")
    w.contentWindow.location.replace(waitUrl);
  }
  else {
    var oFrame = document.getElementById("modalDialogIFrame");
    oFrame.src = waitUrl;
  }
}

var _overflow = "";
var bModalPopupIsVisible = false;

function ModalPopupIsVisible() {
  return bModalPopupIsVisible;
}

var modalPopupListners = new Array();
function AddModalPopupListner(open, close) {
  modalPopupListners[modalPopupListners.length] = [open, close];
}

function ExecModalPopup(bOpen) {
  for (var l = 0; l < modalPopupListners.length; l++)
    if (bOpen)
      eval(modalPopupListners[l][0]);
    else
      eval(modalPopupListners[l][1]);
}

function ShowModalPopup(sPopupName) {
  if (_openedWindowName == sPopupName)
    return;

  if (getElement('dvFlashWrapper') != null)
    getElement('dvFlashWrapper').style.visibility = "hidden";

  if (getElement('FlashDivdvFlash') != null)
    getElement('FlashDivdvFlash').style.visibility = "hidden";

  if (_openedWindowName != "")
    _reopenWindowName = _openedWindowName;
  else
    _reopenWindowName = "";

  bModalPopupIsVisible = true;
  SetBodyOverlayState(true);
  _openedWindowName = sPopupName;
  SetPopupDimensions();
}

function HideModalPopup() {
  if (getElement('dvFlashWrapper') != null)
    getElement('dvFlashWrapper').style.visibility = "";

  if (getElement('FlashDivdvFlash') != null)
    getElement('FlashDivdvFlash').style.visibility = "";

  var now = new Date();

  _openedWindowName = "";
  if (_reopenWindowName == "") {
    SetPleaseWaitIFrame();
    SetBodyOverlayState(false);
    bModalPopupIsVisible = false;
  }
  else {
    ChangeIFrameSource(_lastIFrameSource);
    ShowModalPopup(_reopenWindowName);
  }

  if (IsInViewer()) {
    document.body.scrollTop = 0;
    window.focus();
    BV_SmartShowMarkerBubble(false);
  }
}

function SetBodyOverlayState(bIsVisible) {
  ExecModalPopup(bIsVisible);

  getElement("dvModalDialogBackground").style.display = (bIsVisible ? "block" : "none");
  if (isIE) {
    SetElementOverlayState("tblContentContainer", bIsVisible);
    SetElementOverlayState("tblHomePage", bIsVisible);
    SetElementOverlayState("BV_oBook", bIsVisible);
  }

  if (getElement('dvFlashWrapper') != null)
    getElement('dvFlashWrapper').style.display = (bIsVisible ? "none" : "block");

  if (bIsVisible) {
    _overflow = document.body.style.overflow;
    document.body.style.overflow = "hidden";
  }
  else
    document.body.style.overflow = _overflow;
}

function SetElementOverlayState(sID, bIsVisible) {
  var oElement = getElement(sID);
  if (oElement == null)
    return;

  if (bIsVisible)
    oElement.style.filter = "alpha(opacity=40)";
  else
    oElement.style.removeAttribute('filter');
}

function IsInViewer() {
  var sUrl = window.location.href.replace('http://', '').toLowerCase();
  return (sUrl.indexOf('/viewer.aspx') > 0);
}

function SetPopupDimensions() {
  var nWidth = 0, nHeight = 0;
  for (var p = 0; p < PopupDimensions.length && nWidth == 0; p++) {
    if (PopupDimensions[p].name.toLowerCase() == _openedWindowName.toLowerCase()) {
      nWidth = PopupDimensions[p].width;
      nHeight = PopupDimensions[p].height;
    }
  }

  AdjustModalPopupHeight(nWidth, nHeight);
}

function AdjustModalPopupToTrueDimensions(nWidth, nHeight) {
  for (var p = 0; p < PopupDimensions.length; p++) {
    if (PopupDimensions[p].name.toLowerCase() == _openedWindowName.toLowerCase()) {
      PopupDimensions[p].width = nWidth;
      PopupDimensions[p].height = nHeight;
    }
  }
  AdjustModalPopupHeight(nWidth, nHeight);
}

function AdjustModalPopupHeight(nWidth, nHeight) {
  var dvModalDialogIFrameContainer = getElement("dvModalDialogIFrameContainer");
  var iFrame = getElement("modalDialogIFrame");
  var pleaseWaitIFrame = getElement("pleaseWaitIFrame");
  dvModalDialogIFrameContainer.style.width = nWidth + "px";
  dvModalDialogIFrameContainer.style.height = nHeight + "px";
  iFrame.style.width = nWidth + "px";
  iFrame.style.height = nHeight + "px";

  if (clientDimensions == null)
    CalcClientSize();

  var dvModalDialogBackground = getElement("dvModalDialogBackground");
  var nTop = (clientDimensions.height - nHeight) / 2;
  if (nTop < 0) { nTop = 0; }
  nTop += document.body.scrollTop;
  var nLeft = (clientDimensions.width - nWidth) / 2;
  if (nLeft < 0) { nLeft = 0; }
  dvModalDialogIFrameContainer.style.top = nTop + "px";
  dvModalDialogIFrameContainer.style.left = nLeft + "px";
}

function Utils_ShowMessageDialog_OnLoad(sMessage) {
  AddOpenWindowCommand("Utils_ShowMessageDialog('" + sMessage + "')");
}

var openWindowsQueue = new Array();
function AddOpenWindowCommand(code) {
  openWindowsQueue[openWindowsQueue.length] = code;
}

var windowResizeListners = new Array();
function AddWindowResizeListner(code) {
  windowResizeListners[windowResizeListners.length] = code;
}

var postLoadScripts = new Array();
function AddPostLoadScript(sSrc) {
  postLoadScripts[postLoadScripts.length] = sSrc;
}

function LoadPendingScripts() {
  for (var l = 0; l < postLoadScripts.length; l++)
    LoadJS(postLoadScripts[l]);
}

var MasterPage_OnLoadFlag = false;
function MasterPage_SetOnLoadFlag() {
  MasterPage_OnLoadFlag = true;
  ExecWindowOnResizeEventHandlers();
}

function MasterPage_OnLoadFlagIsSet() {
  return MasterPage_OnLoadFlag;
}

function MasterPage_OnLoad() {
  AddWindowResizeListner("Page_OnResize()");
  CalcClientSize();
  if (_openedWindowName == "") {
    if (!IsInViewer())
      SetPleaseWaitIFrame();
  }
  window.onresize = ExecWindowOnResizeEventHandlers;
  ExecWindowOnResizeEventHandlers();

  GetActiveUserStatus(false);
  window.setTimeout("OpenWindowsInQueue()", 250);

  if (isChrome) {
    var oRSSFeed = document.getElementById("hrefRSSFeed");
    if (oRSSFeed != null)
      oRSSFeed.style.display = "none";
  }
  Splitter_SetEvents();
  XBrowserAddHandler(document, "onmousemove", function (e) { mouseMove(e); });
  XBrowserAddHandler(document, "onmouseup", function (e) { mouseUp(e); });
}

function OpenWindowsInQueue() {
  for (var l = 0; l < openWindowsQueue.length; l++)
    eval(openWindowsQueue[l]);
}

function ExecWindowOnResizeEventHandlers() {
  for (var l = 0; l < windowResizeListners.length; l++)
    eval(windowResizeListners[l]);
}

function Page_OnResize() {
  CalcClientSize();
  var dvModalDialogBackground = getElement("dvModalDialogBackground");
  dvModalDialogBackground.style.width = clientDimensions.width;
  dvModalDialogBackground.style.height = clientDimensions.height;
  if (dvModalDialogBackground.style.display != "none")
    SetPopupDimensions();
}

function footerHeight() {
  return (getElementHeight("trFooterContainer") +
          getElementHeight("trFooterContainer2") +
          getElementHeight("trFooterContainer3") +
          getElementHeight("trNoFrofitContainer"));
}

function getElementHeight(sID) {
  var oElement = getElement(sID);
  if (oElement == null)
    return 0;
  return oElement.offsetHeight
}

function setStageHeight(sStageID, bNavigationLineIsVisible) {
  var oStage = getElement(sStageID);
  var nHeight = clientHeight() - nWebsiteHeaderHeight - footerHeight() - (bNavigationLineIsVisible ? 25 : 0);

  if (nHeight > 30) {
    oStage.style.height = nHeight + "px";
    oStage.style.display = "";
    oStage.style.overflow = "auto";
  }
  else {
    oStage.style.display = "none";
  }
}


var qsParm = new Array();
function qs() {

  var query = window.location.search.substring(1);

  var parms = query.split('&');

  for (var i = 0; i < parms.length; i++) {
    var pos = parms[i].indexOf('=');

    if (pos > 0) {
      var key = parms[i].substring(0, pos);

      var val = parms[i].substring(pos + 1);

      qsParm[key] = val;
    }
  }
}

function cancelEvent() {
  if (window.event) {
    window.event.returnValue = false;
    window.event.cancelBubble = true;
  }
}

function ReplaceAll(ex, oldChar, newChar) {
  oldChar = oldChar + '';
  newChar = newChar + '';
  if (newChar.indexOf(oldChar) != -1) {
    Utils_ShowErrorMessageDialog("ReplaceAll  - worng syntax");
    return;
  }

  var nIndexOfMatch = ex.indexOf(oldChar);
  while (nIndexOfMatch != -1) {
    ex = ex.replace(oldChar, newChar)
    nIndexOfMatch = ex.indexOf(oldChar);
  }
  return ex;

}

function encodeKotar(str) {
  str = encodeURIComponent(str);
  str = ReplaceAll(str, "'", "[A]");
  str = ReplaceAll(str, '"', '[Q]');
  return str;
}

function decodeKotar(str) {
  str = decodeURIComponent(str);
  str = ReplaceAll(str, "[A]", "'");
  str = ReplaceAll(str, '[Q]', '"');
  return str;
}

function CreateXmlHttp() {
  var XmlHttp;

  try {
    XmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
  }
  catch (e) {
    try {
      XmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    catch (oc) {
      XmlHttp = null;
    }
  }

  if (!XmlHttp && typeof XMLHttpRequest != "undefined")
    XmlHttp = new XMLHttpRequest();

  return XmlHttp;
}

function DoSiteSearch(sTextboxID, rbMybooksCtrlID, sSearchType, sLanguage, sProdType) {
  var sMyBooks = "";
  var sFilter = "";

  if (typeof (rbMybooksCtrlID) != "undefined" && rbMybooksCtrlID != "")
    if (getElement(rbMybooksCtrlID).checked)
      sMyBooks = "&bMyBooks=true";

  if (typeof (sSearchType) == "undefined")
    sSearchType = "All";

  if ((typeof (sLanguage) != "undefined") && sLanguage != "") {
    sFilter = "&bAdvanced=true&sLanguage=" + sLanguage;
  }

  if ((typeof (sProdType) != "undefined") && sProdType != "") {
    sFilter = "&bAdvanced=true&sProdType=" + sProdType;
  }

  var sSearchText = getElement(sTextboxID).value;
  var myRegExp = new RegExp("<[^>]*>", "g");
  sSearchText = sSearchText.replace(myRegExp, "");
  sSearchText = encodeKotar(sSearchText);

  var sUrl = "/KotarApp/Search.aspx?sSearchText=" + sSearchText + "&sSearchType=" + sSearchType + sMyBooks + sFilter;
  Utils_ShowMessageDialog(UTXT_Searching, UTXT_PleaseWait, false, "", "", true);
  window.setTimeout("SetWindowLocation('" + sUrl + "', false)", 500);
}


function SubmitSiteSearch(e, sTextboxID) {
  if (e.keyCode == 13) {
    DoSiteSearch(sTextboxID);
    return false;
  }
}

// ---------- Homepage Books Tabs ----------

var selectedHomePageTabButtonID = "";

function SelectHomePageUserTab(tdClientID, btnClientID) {
  document.getElementById(tdClientID).onclick = null;
  document.getElementById(tdClientID).onclick = null;
  SelectHomePageTabButton(document.getElementById(tdClientID), btnClientID, true);
}

function SelectHomePageTabButton(HomePageTabButton, btnClientID, bDoOnClick) {
  if (typeof (bDoOnClick) == "undefined")
    bDoOnClick = true;

  if (selectedHomePageTabButtonID != "") {
    //    if (selectedHomePageTabButtonID == HomePageTabButton.id)
    //      return;
    getElement(selectedHomePageTabButtonID).className = "button";
  }

  HomePageTabButton.className = "selectedButton";
  selectedHomePageTabButtonID = HomePageTabButton.id;
  if (bDoOnClick) {
    try {
      getElement(btnClientID).click();
    } catch (e) { }
  }
}

function RefreshSelectedHomepageTab() {
  if (selectedHomePageTabButtonID != "") {
    if (isIE)
      getElement(selectedHomePageTabButtonID).click();
    else
      getElement(selectedHomePageTabButtonID).onclick();
  }
}

function HomePageTabButton_OnMouseOver(HomePageTabButton) {
  if (selectedHomePageTabButtonID != HomePageTabButton.id)
    HomePageTabButton.className = "highlightedButton";
}

function HomePageTabButton_OnMouseOut(HomePageTabButton) {
  if (selectedHomePageTabButtonID != HomePageTabButton.id)
    HomePageTabButton.className = "button";
}

// ------- BOOK THUMBNAIL BUTTONS --------

function ShowAddButtons(divID) {
  document.getElementById(divID + "_AddButtons").style.display = "";
}

function HideAddButtons(divID) {
  document.getElementById(divID + "_AddButtons").style.display = "none";
}

function BookThumb_CreateAddToCartParams(nBookID) {
  return new Array(
    { name: "nBookID", value: nBookID },
    { name: "SerType", value: 2 },
    { name: "tmp", value: Date() }
    );
}

function BookThumb_AddToCart(nBookID, sLinkID, sThumbIconID) {
  document.getElementById(sLinkID).innerHTML = "";
  document.getElementById(sThumbIconID).style.backgroundImage = "url(/KotarApp/Shop/Images/cart_icon_checked.gif)";
  var params = BookThumb_CreateAddToCartParams(nBookID);
  executeWebRequest("Products.AddToCart", params, { onSuccessFunction: BookThumb_AddToCart_OnSuccess, onFailureFunction: BookThumb_AddToCart_OnFailure, nBookID: nBookID });
}

function BookThumb_AddToCart_OnSuccess(oRV, oInfo) {
  ShowAddBookToCartPopup(oInfo.nBooID);
  getElement("numItemsInShoppingCart").innerHTML = "(" + oRV.nItemsInCart + ")";
}

function BookThumb_AddToCart_OnFailure() {
  Utils_ShowMessageDialog("BookThumb_AddToCart_OnFailure");
}

function CloseAddedToCartPopup(bGoToShoppingCart) {
  GetAddToCartExtender().hide();
  if (bGoToShoppingCart == true)
    window.location = "/KotarApp/Shop/Cart.aspx";
}

function AddBookToFavorites(nBookID, bRefreshPage) {
  var sUrl = '/KotarApp/System/ApiBroker.aspx?sMethod=UserBooks.Add&nBookID=' + nBookID;

  var params = new Array({ name: "SerType", value: 2 },
                         { name: "nBookID", value: nBookID },
                         { name: "tmp", value: Date() });

  executeWebRequest("UserBooks.Add", params,
    { onSuccessFunction: AddBookToFavorites_OnComplete, onFailureFunction: AddBookToFavorites_OnError, bRefreshPage: bRefreshPage, nBookID: nBookID });

  cancelEvent();
}

function AddBookToFavorites_OnError() {
  Utils_ShowErrorMessageDialog(UTXT_ActionFailed);
}

function AddBookToFavorites_OnComplete(oRes, oCmd) {
  var oIcon = document.getElementById("dvAddToFavorites_" + oCmd.nBookID);
  if (oIcon != null)
    oIcon.style.display = "none";

  Utils_ShowMessageDialog(UTXT_BookAddedToFavorites, UTXT_ActionCompleted,
    false, (oCmd.bRefreshPage == false ? "" : "javascript:parent.location.reload()"));
}

var sUtils_sJSAction = "";
var bUtils_bInPlaceLogin = false;
var bCancelTabRefresh = false;
function Utils_OpenSmartLoginPopup(sJSAction, bCancelRefresh) {
  if (typeof (bCancelRefresh) != "undefined")
    bCancelTabRefresh = bCancelRefresh;

  sJSAction = ReplaceAll(sJSAction, "[A]", "'");
  if (bUtils_bInPlaceLogin == true) {
    eval(sJSAction);
    return true;
  }
  cancelEvent();
  sUtils_sJSAction = sJSAction;
  ShowLoginPopup(true, "Utils_SmartLogin_OnSuccess", true);
  return false;
}

function Utils_OpenInPlaceLoginPopup() {
  cancelEvent();
  sUtils_sJSAction = "";
  bCancelTabRefresh = false;
  ShowLoginPopup(true, "Utils_SmartLogin_OnSuccess", false);
}

function Utils_OpenLoginPopupAndRefreshAfterLogin() {
  ShowLoginPopup(true, "Utils_RefreshAfterLogin", false);
}

function Utils_RefreshAfterLogin(gUserID, sUsername, bIsAdmin, bIsCoordinator, bIsSchoolUser, bIsTeacher, nDefaultProjectID, sMySpaceUrl, numOpenTasksInLMS) {
  UpdateAnonymousControlsToReflectNewState(sUsername, bIsAdmin);

  var bAddedLMSLink = false;

  if ((bIsSchoolUser || bIsTeacher) && sMySpaceUrl != "") {
    getElement("tdMySpace1").style.display = "";
    getElement("tdMySpace2").style.display = "";
    getElement(hrefMySpaceClientID).href = sMySpaceUrl;
    OptionallySetInnerTextByID("numOpenTasksInLMS", (numOpenTasksInLMS == 0 ? "" : "(" + numOpenTasksInLMS + ")"));
    bAddedLMSLink = true;
  }

  if (bIsCoordinator && !bAddedLMSLink)
    window.setTimeout("Refresh('Utils_RefreshAfterLogin');", 200);
  else {
    Utils_SmartLogin_OnSuccess(gUserID, sUsername, bIsAdmin);
  }
}

var Utils_sClickOnSuccessfulLogin = "";

function Utils_SmartLogin_OnSuccess(gUserID, sUsername, bIsAdmin) {
  bUtils_bInPlaceLogin = true;
  BaseMaster_gUserID = gUserID;
  BaseMaster_bUserIsLoggedIn = true;
  UpdateAnonymousControlsToReflectNewState(sUsername, bIsAdmin);
  if (!bCancelTabRefresh)
    RefreshSelectedHomepageTab();

  if (Utils_sClickOnSuccessfulLogin != "") {
    getElement(Utils_sClickOnSuccessfulLogin).click();
  }

  if (sUtils_sJSAction != "")
    eval(sUtils_sJSAction);
}

function UpdateAnonymousControlsToReflectNewState(sUsername, bIsAdmin) {
  var loginButtons = getElement("tblHomepageLoginButtons");
  if (loginButtons != null)
    loginButtons.style.display = "none";
  if (sUsername.length > 15)
    sUsername = sUsername.substring(0, 15);
  document.getElementById(ltrUsername_ctrlID).innerHTML = sUsername;
  if (bIsAdmin == true)
    document.getElementById(ltrUsername_ctrlID).style.color = "green";
  var oLogin = document.getElementById(hrefLogin_ctrlID);
  oLogin.href = "/default.aspx?logout=true";
  oLogin.innerHTML = UTXT_Logout;
  oLogin.title = UTXT_Logout;
}

var _SmartLoginPopupForRedirect_sDestURL = "";
function Utils_OpenSmartLoginPopupForRedirect(sDestURL) {
  if (bUtils_bInPlaceLogin == false) {
    _SmartLoginPopupForRedirect_sDestURL = sDestURL;
    ShowLoginPopup(true, "Utils_SmartLoginPopupForRedirect_OnSuccess", true);
  } else
    window.location = sDestURL;
}

function Utils_SmartLoginPopupForRedirect_OnSuccess() {
  window.location = _SmartLoginPopupForRedirect_sDestURL;
}

var _nVerifiedLoginStatusInterval = 0;
var _dtVerifiedLoginStatusIsReal = new Date();
_dtVerifiedLoginStatusIsReal.setFullYear(1970, 1, 1);
var _nVerifyActiveUserStatusResponseID = 0;

function GetActiveUserStatus(bNow) {
  var diff = new Date();
  var now = new Date();
  diff.setTime(Math.abs(_dtVerifiedLoginStatusIsReal.getTime() - now.getTime()));
  var numSecondsSinceLastCheck = (diff.getTime() / 1000);
  if (numSecondsSinceLastCheck > 60 || bNow) {
    _dtVerifiedLoginStatusIsReal = now;

    var params = new Array(
    { name: "tmp", value: Date() }
    , { name: "cb", value: BrowserDetect.browser }
    , { name: "cbv", value: BrowserDetect.version });

    executeWebRequest("Users.GetActiveUserStatus", params,
    { onSuccessFunction: GetActiveUserStatus_OnComplete, onFailureFunction: GetActiveUserStatus_OnFailure });

    _nVerifyActiveUserStatusResponseID = window.setTimeout("VerifyActiveUserStatusResponse()", 7500);
  }

  if (_nVerifiedLoginStatusInterval == 0)
    _nVerifiedLoginStatusInterval = window.setInterval("GetActiveUserStatus(false)", 5000);
}

function VerifyActiveUserStatusResponse() {
  GetActiveUserStatus_Refresh();
}

function GetActiveUserStatus_OnFailure() {
  GetActiveUserStatus_Refresh();
}

function GetActiveUserStatus_OnComplete(oStatus) {
  if (oStatus == "Refresh" || BaseMaster_bUserIsLoggedIn != oStatus.bIsLoggedIn)
    GetActiveUserStatus_Refresh();
  window.clearTimeout(_nVerifyActiveUserStatusResponseID);
  OptionallySetInnerTextByID("numOpenTasksInLMS", (oStatus.nNumOpenTasksInLMS == 0 ? "" : "(" + oStatus.nNumOpenTasksInLMS + ")"));
}

function GetActiveUserStatus_Refresh() {
  if (IsInViewer())
    location.reload(true);
  else
    Refresh('GetActiveUserStatus_OnComplete');
}

function Refresh(sCaller) {
  window.location.replace(window.location + '');
}
// This function executes a Web request.
// using the AJAX.NET client library for all the data access functions.
// Parameters:
// "methodName" - a string with the name of method to call.
// "parameters" - array of objects for the parameters to send with the FlashMethod.
//		object structure - { name:<name of parameter> , value:<value of parameter> }
// "callbackData" - object with data to go with the call and come back on callback
//		2 must have properties - { onSuccessFunction:<the function to execute if call succeeded> , onFailureFunction:<the function to execute if call failed> }
//		other than that - add any data in additional properties that want to be sent with the request.

function executeCombinedWebRequest(methods, parameters, callbackData, serviceUrl, callbackFunc) {
  var sMethods = methods[0];
  for (var m = 1; m < methods.length; m++)
    sMethods = sMethods + "," + methods[m];
  executeWebRequest(sMethods, parameters, callbackData, serviceUrl, callbackFunc);
}

function executeWebRequest(methodName, parameters, callbackData, serviceUrl, callbackFunc) {
  var url = buildRequestURL(methodName, {}, serviceUrl);
  url += addTimestampParameter(parameters);

  webRequest = new Sys.Net.WebRequest();
  webRequest.set_url(url);
  if (typeof (callbackData) != "undefined")
    webRequest.set_userContext(callbackData);
  addParameters(webRequest, parameters)
  webRequest.set_httpVerb("POST");


  if (typeof (callbackFunc) == "undefined")
    webRequest.add_completed(callback);
  else {
    webRequest.set_userContext({ callbackFunc: callbackFunc });
    webRequest.add_completed(callbackBridge);
  }

  webRequest.invoke();
}

function callbackBridge(executor, eventArgs) {
  if (executor.get_responseData() == "Refresh") {
    Refresh('callbackBridge');
  }

  var callbackData = executor.get_webRequest().get_userContext();
  oHandler = eval(callbackData.callbackFunc);
  oHandler(executor);
}

function adjustCdnPattern(sCdnDomain) {
  if (sCdnDomain == '')
    return '';

  var sHost = window.location.href.replace('http://', '').split('/')[0];
  sHost = sHost.replace(".cotar.co.il", ".kotar.co.il")
  var sCDN = sCdnDomain.split('.')[0];
  var sTempCdnDomain = sCdnDomain.replace(sCDN + ".", "");
  var nIndex = sHost.toLowerCase().indexOf(sTempCdnDomain);
  return sCdnDomain;
}

var sAdjustedCdn = "";

function buildRequestURL(methodName, parameters, serviceUrl) {
  if (serviceUrl == undefined) {
    if (sAdjustedCdn == "") {
      var sHost = window.location.href.replace('http://', '').split('/')[0];
      sAdjustedCdn = adjustCdnPattern(sHost);
    }
    serviceUrl = 'http://' + sAdjustedCdn + "/KotarApp/System/ApiBroker.aspx";
  }
  if (serviceUrl.indexOf("?") == -1)
    serviceUrl += "?";
  else if (serviceUrl.charAt(serviceUrl.length - 1) != "&")
    serviceUrl += "&";

  var url = serviceUrl + "sMethod=" + methodName;
  if (parameters.length > 0) {
    for (i = 0; i < parameters.length; i++)
      url += "&" + parameters[i].name + "=" + parameters[i].value;
  }
  return url;
}

function addTimestampParameter(parameters) {
  if (parameters.length > 0) {
    for (i = 0; i < parameters.length; i++) {
      if (parameters[i].name == "tmp") {
        return "&" + parameters[i].name + "=" + getTimestamp()
      }
    }
  }
  return "";
}

function getTimestamp() {
  var tmp = new Date();
  return tmp.getFullYear() + "." + tmp.getMonth() + "." + tmp.getDate() + "." + tmp.getHours() + "." +
          tmp.getMinutes() + "." + tmp.getSeconds() + "." + tmp.getMilliseconds();
}

function addParameters(webRequest, parameters) {
  var sParams = "";
  if (parameters.length > 0) {
    for (i = 0; i < parameters.length; i++) {
      if (parameters[i].name != "tmp")
        sParams += (sParams != "" ? "&" : "") + parameters[i].name + "=" + parameters[i].value;
    }
  }
  var gUserID = (typeof (BaseMaster_gUserID) == "undefined" ? '00000000-0000-0000-0000-000000000000' : BaseMaster_gUserID);

  sParams += (sParams != "" ? "&" : "") + "gUserID=" + gUserID;
  webRequest.set_body(sParams);
}

function callback(executor, eventArgs) {
  if (executor.get_responseAvailable()) {
    var callbackData = executor.get_webRequest().get_userContext();
    if (executor.get_statusCode() == 200)		// loading completed successfully
    {
      try {
        if (executor.get_responseData() == "Refresh") {
          Refresh('callback');
          return;
        }
        eval('var recievedData = ' + executor.get_responseData());
      }
      catch (Error) {
        callbackData.onFailureFunction(callbackData);
        return;
      }
      callbackData.onSuccessFunction(recievedData, callbackData);
    }
    else
      callbackData.onFailureFunction(callbackData);
  }
  else {
    if (executor.get_timedOut()) {
      // TODO: message for server call timeout
    }
    else if (executor.get_aborted()) {
      // TODO: message for server call aborted
    }
  }
}

function callbackXml(executor, eventArgs) {
  if (executor.get_responseAvailable()) {
    var callbackData = executor.get_webRequest().get_userContext();
    if (executor.get_statusCode() == 200)		// loading completed successfully
    {
      try {

        var recievedData = getXMLDoc(executor.get_responseData());

      }
      catch (Error)    // error in servers response
			{
        callbackData.onFailureFunction(callbackData);
        return;
      }

      callbackData.onSuccessFunction(recievedData, callbackData);
    }
    else            // loading completed with errors - try again
    {
      callbackData.onFailureFunction(callbackData);
    }
  }
  else {
    if (executor.get_timedOut()) {
      // TODO: message for server call timeout
    }
    else if (executor.get_aborted()) {
      // TODO: message for server call aborted
    }
  }
}

//////////////////////////////

var Splitter_bDraggingDisabled = false;
var Splitter_bToggleBtnDisabled = false;
var Splitter_bDragging = false;
var Splitter_oSlider = false;
var Splitter_nStartMouseX;
var Splitter_nStartSplitterX;
var Splitter_nWidth = 8
var Splitter_fRatio = 0.3

function Splitter_SetEvents() {
  var oHandle = getElement("imgSplitterHandle");
  if (oHandle != null)
    XBrowserAddHandler(oHandle, "onmousedown", function (e) { SplitterHandle_OnMouseDown(e); return false; });
}

function SplitterHandle_OnMouseDown(e) {
  if (window.event) e = window.event;
  if (e.preventDefault) { e.preventDefault(); }
  e.cancelBubble = true;
}

function GetElementPos(oElement) {
  var nLeft = 0;
  var nTop = 0;
  while (oElement != null) {
    nLeft += oElement.offsetLeft;
    nTop += oElement.offsetTop;
    oElement = oElement.offsetParent;
  }
  return { nLeft: nLeft, nTop: nTop }
}

function Splitter_DisableDragging() {
  Splitter_bDraggingDisabled = true;
}

function Splitter_EnableDragging() {
  Splitter_bDraggingDisabled = false;
}

function Splitter_StartDrag(event) {
  if (Splitter_bDragging || Splitter_bDraggingDisabled)
    return;

  var oPos = GetElementPos(oSplitterLine);

  Splitter_oSlider = document.createElement("DIV");
  Splitter_oSlider.style.overflow = "hidden";
  Splitter_oSlider.style.width = "8px";

  if (oSplitterLine.parentElement != null)
    Splitter_oSlider.style.height = oSplitterLine.parentElement.offsetHeight + "px";
  else
    Splitter_oSlider.style.height = oSplitterLine.parentNode.offsetHeight + "px";

  Splitter_oSlider.style.position = "absolute";
  Splitter_oSlider.style.left = oPos.nLeft;
  Splitter_oSlider.style.top = oPos.nTop;
  Splitter_oSlider.style.backgroundImage = "url(/KotarApp/Resources/Images/Splitter/splitter_tile.gif)";
  Splitter_oSlider.style.backgroundPosition = "center center";
  Splitter_oSlider.style.backgroundRepeat = "repeat-y";

  document.body.appendChild(Splitter_oSlider);
  Splitter_nStartMouseX = mousePos.x;
  Splitter_nStartSplitterX = oPos.nLeft;
  Splitter_bDragging = true;
}

function Splitter_ContinueDrag() {
  if (!Splitter_bDragging)
    return;
  var nDiff = mousePos.x - Splitter_nStartMouseX;
  var nNewLeft = Splitter_nStartSplitterX + nDiff;
  Splitter_oSlider.style.left = nNewLeft;
}

function Splitter_EndDrag() {
  if (!Splitter_bDragging)
    return;
  Splitter_bDragging = false;

  var nDiff = Splitter_oSlider.offsetLeft - Splitter_nStartSplitterX;

  document.body.removeChild(Splitter_oSlider);

  var nStageWidth = clientWidth();
  var nTabsWidth = Math.round(nStageWidth * Splitter_fRatio);

  if (isRTL())
    nTabsWidth -= nDiff;
  else
    nTabsWidth += nDiff;

  Splitter_fRatio = nTabsWidth / nStageWidth;
  if (Splitter_fRatio < 0)
    Splitter_fRatio = 0;

  if (Splitter_fRatio > 0.70)
    Splitter_fRatio = 0.70;

  ExecSplitterOnResizeEventHandlers();
}

function Splitter_SetDefaultRatio() {
  Splitter_fRatio = 0.3;
}

function Splitter_GetCollpasiblePanel() {
  var oPanel = document.getElementById("oSubjectsTreeContainer");
  if (oPanel == null)
    oPanel = document.getElementById("oTabs");
  return oPanel;
}

function Splitter_CalcRatio() {
  var oPanel = Splitter_GetCollpasiblePanel();
  Splitter_fRatio = (oPanel.style.width.replace('px', '') * 1) / clientWidth();
}

var nSplitter_fRatio_onClose = 0;

function Splitter_DisableToggleBtn() {
  Splitter_bToggleBtnDisabled = true;
}

function Splitter_EnableToggleBtn() {
  Splitter_bToggleBtnDisabled = false;
}

function OpenSplitter() {
  if (Splitter_bToggleBtnDisabled)
    return;
  var oPanel = Splitter_GetCollpasiblePanel();
  oPanel.style.display = '';
  oOpenedSplitter.style.display = 'block';
  oClosedSplitter.style.display = 'none';
  Splitter_fRatio = nSplitter_fRatio_onClose; //0.3;
  ExecSplitterOnResizeEventHandlers();
}

function CloseSplitter() {
  if (Splitter_bToggleBtnDisabled)
    return;
  var oPanel = Splitter_GetCollpasiblePanel();
  oPanel.style.display = 'none';
  oOpenedSplitter.style.display = 'none';
  oClosedSplitter.style.display = 'block';
  nSplitter_fRatio_onClose = Splitter_fRatio;
  Splitter_fRatio = 0;
  ExecSplitterOnResizeEventHandlers();
}

var splitterResizeListners = new Array();
function AddSplitterResizeListner(code) {
  splitterResizeListners[splitterResizeListners.length] = code;
}

function ExecSplitterOnResizeEventHandlers() {
  for (var l = 0; l < splitterResizeListners.length; l++)
    eval(splitterResizeListners[l]);
}


var oBreakPoints = new Array();

function Dbg(sName) {
  if (typeof (oBreakPoints[sName]) == "undefined") {
    oBreakPoints[sName] = true;
    debugger;
  }
}

function AddDebugMessage(msg) {
  if (BaseMaster_bIsInDevMode) {
    var oNow = new Date();
    document.title = oNow.toLocaleTimeString() + ":" + oNow.getMilliseconds() + " - " + msg;
  }
}


var mousePos = null;
function mouseMove(ev) {
  ev = ev || window.event;
  mousePos = mouseCoords(ev);
  if (Splitter_bDragging)
    Splitter_ContinueDrag();
}

function mouseUp(ev) {
  if (Splitter_bDragging)
    Splitter_EndDrag();
}


function mouseCoords(ev) {
  try {
    if (ev.pageX || ev.pageY) {
      return { x: ev.pageX, y: ev.pageY };
    }
    else if (typeof (document.body) != "undefined") {
      var evX = ev.clientX + document.body.scrollLeft - document.body.clientLeft;
      var evY = ev.clientY + document.body.scrollTop - document.body.clientTop;
      return { x: evX, y: evY };
    }
  } catch (e) {
  }
  return null;
}


function XBrowserAddHandler(target, eventName, handlerName) {
  if (eventName.indexOf("on") == 0)
    eventName = eventName.substring(2);

  if (target.addEventListener) { // FireFox
    target.addEventListener(eventName, handlerName, false);
  }
  else if (target.attachEvent) { // IE
    target.attachEvent("on" + eventName, handlerName);
  }
  else {
    target["on" + eventName] = handlerName;
  }
}

var clientDimensions = null;
function clientWidth() {
  CalcClientSize();
  return clientDimensions.width;
}

function clientHeight() {
  CalcClientSize();
  return clientDimensions.height;
}

function CalcClientSize() {
  var myWidth = 0, myHeight = 0;
  if (typeof (window.innerWidth) == 'number') {
    //Non-IE
    myWidth = window.innerWidth;
    myHeight = window.innerHeight;
  } else if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) {
    //IE 6+ in 'standards compliant mode'
    myWidth = document.documentElement.clientWidth;
    myHeight = document.documentElement.clientHeight;
  } else if (document.body && (document.body.clientWidth || document.body.clientHeight)) {
    //IE 4 compatible
    myWidth = document.body.clientWidth;
    myHeight = document.body.clientHeight;
  }
  clientDimensions = { width: myWidth, height: myHeight };
}

function f_scrollTop() {
  return f_filterResults(
		window.pageYOffset ? window.pageYOffset : 0,
		document.documentElement ? document.documentElement.scrollTop : 0,
		document.body ? document.body.scrollTop : 0
	);
}

function f_filterResults(n_win, n_docel, n_body) {
  var n_result = n_win ? n_win : 0;
  if (n_docel && (!n_result || (n_result > n_docel)))
    n_result = n_docel;
  return n_body && (!n_result || (n_result > n_body)) ? n_body : n_result;
}

/**
* A simple JavaScript image loaderimage loader
* @author Cuong Tham
* @url http://thecodecentral.com/2008/02/21/a-useful-javascript-image-loader
* @usage
* var loader = new ImageLoader('IMAGE_URL');
* //set event handler
* loader.loadEvent = function(url, image){
*   //action to perform when the image is loaded
*   document.body.appendChild(image);
* }
* loader.load();
*/

//source: http://snipplr.com/view.php?codeview&id=561
// Cross-browser implementation of element.addEventListener()
function addListener(element, type, expression, bubbling) {
  bubbling = bubbling || false;
  if (window.addEventListener) { // Standard
    element.addEventListener(type, expression, bubbling);
    return true;
  } else if (window.attachEvent) { // IE
    element.attachEvent('on' + type, expression);
    return true;
  } else return false;
}

var ImageLoader = function (url) {
  this.url = url;
  this.image = null;
  this.loadEvent = null;
};

ImageLoader.prototype = {
  load: function () {
    this.image = document.createElement('img');
    var url = this.url;
    var image = this.image;
    var loadEvent = this.loadEvent;
    addListener(this.image, 'load', function (e) {
      if (loadEvent != null) {
        loadEvent(url, image);
      }
    }, false);
    this.image.src = this.url;
  },
  getImage: function () {
    return this.image;
  }
};

function OptionallySetInnerTextByID(sCtrlID, sValue) {
  var oCtrl = getElement(sCtrlID);
  if (oCtrl != null)
    SetInnerText(oCtrl, sValue);
}

function SetInnerTextByID(sCtrlID, sValue) {
  SetInnerText(getElement(sCtrlID), sValue);
}

function SetInnerText(oCtrl, sValue) {
  if (isIE)
    oCtrl.innerText = sValue;
  else if (oCtrl.tagName.toLowerCase() == "div" || oCtrl.tagName.toLowerCase() == "span")
    oCtrl.innerHTML = sValue;
  else
    oCtrl.text = sValue;
}

function GetInnerText(oCtrl) {
  if (isIE)
    return oCtrl.innerText;
  else
    return oCtrl.text;
}

function SetWindowLocation(sUrl, bNewWindow) {
  if (typeof (bNewWindow) == "undefined")
    bNewWindow = true;

  if (bNewWindow) {
    if (isIE == false) {
      window.open(sUrl);
    } else {
      var oLink = document.createElement("a");
      oLink.target = "_blank";
      oLink.href = sUrl;
      document.body.appendChild(oLink);
      oLink.click();
    }
  }
  else {
    if (isIE)
      location.href = sUrl;
    else
      window.location.replace(sUrl);
  }
}


var BrowserDetect = {
  init: function () {
    this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
    this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
  },
  searchString: function (data) {
    for (var i = 0; i < data.length; i++) {
      var dataString = data[i].string;
      var dataProp = data[i].prop;
      this.versionSearchString = data[i].versionSearch || data[i].identity;
      if (dataString) {
        if (dataString.indexOf(data[i].subString) != -1)
          return data[i].identity;
      }
      else if (dataProp)
        return data[i].identity;
    }
  },
  searchVersion: function (dataString) {
    var index = dataString.indexOf(this.versionSearchString);
    if (index == -1) return;
    return parseFloat(dataString.substring(index + this.versionSearchString.length + 1));
  },
  dataBrowser: [
		{
		  string: navigator.userAgent,
		  subString: "Chrome",
		  identity: "Chrome"
		},
		{
		  string: navigator.vendor,
		  subString: "Apple",
		  identity: "Safari",
		  versionSearch: "Version"
		},
		{
		  prop: window.opera,
		  identity: "Opera"
		},
		{
		  string: navigator.userAgent,
		  subString: "Firefox",
		  identity: "Firefox"
		},
		{
		  string: navigator.userAgent,
		  subString: "MSIE",
		  identity: "Explorer",
		  versionSearch: "MSIE"
		}
	]
};
BrowserDetect.init();

function IsFirefox() {
  return (BrowserDetect.browser == "Firefox");
}

var nNavHelper = 0;
var aHelp = ["Help", "I need somebody", "not just anybody", "you know I need someone", "H...e...l...p...!"];

function hrefNavHelp_OnMouseOver() {
  if (isRTL() == false) {
    document.getElementById("hrefNavHelp").title = aHelp[nNavHelper];
    if (nNavHelper < aHelp.length - 1)
      nNavHelper++;
    else
      nNavHelper = 0;
  }
}

function RectangleIsInRange(oRect, nMaxWidth, nMaxHeight) {
  var x = oRect.x * 1;
  var y = oRect.y * 1;
  var w = oRect.width * 1;
  var h = oRect.height * 1;
  return (x > 0 && y > 0 && w > 0 && h > 0 && x + w < nMaxWidth && y + h < nMaxHeight);
}

function Utilities_SetCtrlDisplay(sCtrlID, bDisplay) {
  if (typeof (sCtrlID) == 'undefined' || sCtrlID == "")
    return;
  var oCtrl = document.getElementById(sCtrlID);
  if (oCtrl == null) return;
  oCtrl.style.display = (bDisplay ? 'block' : 'none');
}

function Utilities_SetCtrlClass(sCtrlID, sClass) {
  if (typeof (sCtrlID) == 'undefined' || sCtrlID == "")
    return;
  var oCtrl = document.getElementById(sCtrlID);
  if (oCtrl == null) return;
  oCtrl.className = sClass;
}


function OpenMembersPage(sort) {
  var sUrl = "/Misc/Members.aspx?nSort=" + sort;
  Utils_ShowMessageDialog(UTXT_Searching, UTXT_PleaseWait, false, "", "", true);
  window.setTimeout("SetWindowLocation('" + sUrl + "', false)", 500);

}

function ShowTechnicalRequirementsPopup() {
  ChangeIFrameSource("/Item/TechnicalReq.aspx", true)
  ShowModalPopup("TechnicalRequirements");
}

function ZeroPad(num, count) {
  var numZeropad = num + '';
  while (numZeropad.length < count) {
    numZeropad = "0" + numZeropad;
  }
  return numZeropad;
}
