/*********************************************************
 *	File:		  main.js
 *	Author:		MetaDesign
 *	Created:	January 2, 2007
 *
 *	Description:
 *	Main javascript file for Shangri-la Web site
 *	
 ********************************************************/

/* used for sign in toggle on checkout / guest info page */
/*--------------------------------------------------------------
 * Function: toggleDisplay
 *
 * Toggles display of div
 * Optionally, reveals second div on hide of first (and vice-versa)
 * Naming of second div, if it exists, is: [basename]hide
 *
 * Note: rather than set display to block, set it to null so as
 * to allow display in class to take effect. (sometimes 'block',
 * sometimes 'inline'
 *
 * Parameters:
 * pBlock  string  base name for div element(s) to toggle
 *
 * Return:
 * None
 *------------------------------------------------------------*/
function toggleDisplay(pBlock) {
  if ($(pBlock).style.display == 'none') {
    $(pBlock).style.display = '';
    if ($(pBlock+'hide')) {
      $(pBlock+'hide').style.display = 'none';
    }
  } else {
    $(pBlock).style.display = 'none';
    if ($(pBlock+'hide')) {
      $(pBlock+'hide').style.display = '';
    }
  }
}

/*--------------------------------------------------------------
 * Function: toggleDisp
 *
 * Enables display of the div
 * Hides others based on base class (match on *_divCatTarget & *_divSubCatTarget)
 * e.g. hide class=*_divCatTarget, show id=*_ctl[#]_divCatTarget
 * e.g. hide class=*_divSubCatTarget, show id=*_ctl[#]_divSubCatTarget
 *
 * Parameters:
 * pId     string  id for div element to display
 * pType   string  cat or subcat
 *
 * Return:
 * None
 *------------------------------------------------------------*/
function toggleDisp(pId,pType) {
  // parse id
  var aId = pId.split('_');
  // hide all based on class name
  $$('.' + aId[aId.length-1]).each(function(el) {
    el.hide();
  });
  // show selected item
  $(pId).show();
  // if cat, show first subcat and hide other subcats
  if (pType == "cat")
  {
    // determine id of first subcat
    var subcat = pId.replace(aId[5],'rptGCFaq2');
    subcat = subcat.replace(aId[7],'rptGCFaqDetail_ctl00_divSubCatTarget');
    // parse subcat id
    var aSubcat = subcat.split('_');
    // hide content for all subcats
    $$('.' + aSubcat[aSubcat.length-1]).each(function(el) {
      el.hide();
    });
    // show content for first subcat in this cat
    $(subcat).show();
  }
}

function toggleDispGCDininingPrivilege(pId, pLinkId) {
  // parse id
  var aId = pId.split('_');
  // hide all based on class name
  $$('.' + aId[aId.length-1]).each(function(el) {
    el.hide();
  });
  // show selected item
  $(pId).show();
  // set the collapsed links text
  var aLinkId = pLinkId.split('_');
  $$('.' + aLinkId[aLinkId.length-1]).each(function(el) {
    el.innerHTML = '+';
  });
  // set the expanded link text
  $(pLinkId).innerHTML = '-';
}

/*--------------------------------------------------------------
 * Functions: pageLoaded, hrefBlur
 *
 * Immediately blur any <a> element onclick to avoid 
 * lingering outline in Firefox
 * 
 * Parameters:
 * pEvent  string  the event provided in Event.observe
 *
 * Return:
 * None
 *------------------------------------------------------------*/
Event.observe(window, 'load', pageLoaded, false);
function pageLoaded(pEvent) {
  var hrefs = $$('a');
  for (var i=0; i<hrefs.length; i++) {
    Event.observe(hrefs[i], 'click', hrefBlur, false);
  }
}
function hrefBlur(pEvent) {
  var clickedEl = Event.element(pEvent);
  clickedEl.blur();
}

/*--------------------------------------------------------------
 * Function: filterPressReleases
 *
 * Redirect to correct press release page display based on user selection
 * 
 * Parameters:
 * pSelect  string  the select menu being changed
 *
 * Return:
 * None
 *------------------------------------------------------------*/
function filterPressReleases(pSelect) {
  var index = pSelect.selectedIndex;
  location = pSelect.options[index].value;
}

/*--------------------------------------------------------------
 * Function: toggleBtnDisabled
 *
 * Toggles class of button based on status of related checkbox.
 * Disables the link by toggling onclick value
 * (not part of button attribute on page load; attach here)
 * 
 * Parameters:
 * pCheckbox        object  the checkbox that performs the toggle
 * pBtn             string  class of button
 * pHiddenOnclick   string  class of hidden input that contains 
 *                            proper onclick when button is enabled
 *
 * Return:
 * None
 *------------------------------------------------------------*/
 
function toggleBtnDisabled(pCheckbox, pBtn, pHiddenOnclick) {
  var newBtnClass = pCheckbox.checked ? "btn" : "btnDisabled";
  var btn = $(pBtn);
  var hiddenInputs = $$('.' + pHiddenOnclick);
  var jsVoid = "javascript:void(0);";
  if ((typeof btn != "undefined") && (hiddenInputs.length > 0))
  {
    btn.className = newBtnClass;
    btn.href = pCheckbox.checked ? hiddenInputs[0].value : jsVoid;
  }
}


/*--------------------------------------------------------------
 * Function: toggleDisplayDetail
 *
 * Toggles display of detail div and change link text
 *
 * Parameters:
 * pDetail         string   base name for detail div element to toggle
 * pIntro          string   base name for intro div element to toggle (opposite to pBlock) 
 * pLink           object   hyperlink to trigger the toggle
 * pShowDetailText string   text of hyperlink indicating expand
 * pHideDetailText string   text of hyperlink indicating collapse
 * Return:
 * None
 *------------------------------------------------------------*/
function toggleDisplayDetail(pDetail, pIntro, pLink, pShowDetailText, pHideDetailText) {
  if ($(pDetail).style.display == 'none')
  {
    $(pDetail).style.display = '';
    $(pIntro).style.display = 'none';
    pLink.innerHTML = pHideDetailText;
  }
  else
  {
    $(pDetail).style.display = 'none';
    $(pIntro).style.display = '';
    pLink.innerHTML = pShowDetailText;
  }
}


/*--------------------------------------------------------------
 * Function: storeRtfEditorContent
 *
 * Assigns RTF Editor content to hidden input
 * 
 * Parameters:
 * None
 *
 * Return:
 * None
 *------------------------------------------------------------*/
 
function storeRtfEditorContent() {
  var editBox = idEditbox;
  var hiddenInputs = $$('.hRtfEditor');
  if ((typeof editBox != "undefined") && (hiddenInputs.length > 0))
  {
    // must HTML-encode here, else tags from HTML in editor
    // will cause form validation and submission to fail.
    // HTML-decode in job_application.aspx.cs
    hiddenInputs[0].value = htmlEncode(getHTML());
  }
}

/*--------------------------------------------------------------
 * Function: htmlEncode
 *
 * Utility function to HTML-encode strings
 * 
 * Parameters:
 * pString    string  the string to HTML-encode
 *
 * Return:
 * HTML-encoded string
 *------------------------------------------------------------*/
 
function htmlEncode(pString) {
  var s = pString;
  s = s.replace(/</g, "&lt;");
  s = s.replace(/>/g, "&gt;");
  s = s.replace(/"/g, "&quot;");
  return s;
}
