//valid US ZipCode length
var VALIDUSZIPCODELENGTH = 5;

//expiry days for the zipcode cookie.
var ZIPCODECOOKIEEXPIREDAYS = 7;

//prefix of the 'viewSpecialOffers' container.
var partOfId = "ViewSpecialOffer";

//global variable the contains the div at which zipcode is entered.
var userInputBaseId;

//selected vehicle at the vehicle select drop down.
var selectedVehicle = "";

//global variable for the zipCode
var zipCode = getCookie("zipCodeCookie");

/**
 * Shows/Hides the 'view special offer' hyperlink.
 * @param {Object} showdivOrHidediv boolean
 */
function showHideViewSpecialOffer(showdivOrHidediv)
{
  var i = 0;
  var divId = ifVehicleDetailsPage() ? partOfId : partOfId + i;
  var baseDiv = YAHOO.util.Dom.get(divId);
  while(1)
  {
    if (YAHOO.util.Dom.inDocument(divId))
    {
      var baseDiv = YAHOO.util.Dom.get(divId);
      YAHOO.util.Dom.setStyle(baseDiv,"display", showdivOrHidediv ? "block" : "none");
    }
    else
    {
      break;
    }
    i++;
    divId = partOfId + i;
  }
}

/**
 * Validates whether the zipcode entered is valid.
 * @param {Object} userZipCode userZipCode to be validated.
 * @param {Object} baseId parent div Id, at which the zipcode is entered.
 * @return boolean
 */
function isInvalidZipCode(userZipCode, baseId)
{
  var iszipcodeinvalid = !userZipCode || userZipCode == '' || !validateUSZipCode(userZipCode);
  showHideZipCodeErrorMessage(baseId, iszipcodeinvalid);
  return iszipcodeinvalid;
}

/**
 * Set the Cookie with a valid zipcode.
 * @param {Object} userZipCode
 */
function setZipCodeCookie(userZipCode)
{
  if (!ifVehicleDetailsPage())
  {
    if (userZipCode == "" || userZipCode == null || VALIDUSZIPCODELENGTH != userZipCode.length)
    {
      changeDisplayStatus("zipCodeDiv", false);
      showHideViewSpecialOffer(true);
    }
    else
    {
      showHideViewSpecialOffer(false);
    }
  }
  document.getElementById("zipCodeEntered").innerHTML = userZipCode + '.';
  setCookie("zipCodeCookie", userZipCode, ZIPCODECOOKIEEXPIREDAYS);
}

/***
 * Shows Hides, zipcode error message.
 * @param {Object} parent div Id, at which the zipcode is entered.
 * @param {Object} iszipcodeinvalid boolean
 */
function showHideZipCodeErrorMessage(baseId, iszipcodeinvalid)
{
  var baseDiv = document.getElementById(baseId);
  var divArr = baseDiv.getElementsByTagName('div');
  
  for (i=0; i<divArr.length; i++)
  {
    if ("zipCodeErrorMessage" == divArr[i].id)
    {
      divArr[i].style.display = iszipcodeinvalid ? 'block' : 'none';
      if (ifVehicleDetailsPage() && "ViewSpecialOffer" != baseDiv.id)
      {
        if (iszipcodeinvalid)
        {
          YAHOO.util.Dom.setStyle(divArr[i],"padding-left","2px");
          YAHOO.util.Dom.setStyle(baseDiv,"height","90px");
        }
        else
        {
          YAHOO.util.Dom.setStyle(baseDiv, "height", "70px");
        }
      }
    }
  }
}

/**
 * Refresh the Vehicle offers for the zipcode enetered by the user.
 * @param {Object} zipCode zipCode to be validated.
 * @param {Object} baseId parent div Id, at which the zipcode is entered.
 */
function refreshDealerZipCode(userZipCode, baseId)
{
  userInputBaseId = baseId;
  var baseDiv = document.getElementById(baseId);
  baseDiv.getElementsByTagName('input')[0].value = ifVehicleDetailsPage()? userZipCode:'';

  if (isInvalidZipCode(userZipCode, baseId)) 
  {
    return;
  }
  zipCode = userZipCode;
  ifVehicleDetailsPage() ? getInlinePricing(zipCode) : getLocateVehicles(strModelInfoId, true);
}

/**
 * Returns true if the current page being viewed VehicleDetails or NewInvenrory.
 * @return boolean 
 */
function ifVehicleDetailsPage()
{
  return isDetailsPage;
}

/**
 * Shows/Hides a dom element. 
 * @param domElement element whose visibility has to be changed
 * @param showHide true value shows the dom element; false value hides it 
 */
function changeDisplayStatus(domElement, showHide )
{
  var element = YAHOO.util.Dom.get(domElement);
  if ( element != null && element != undefined )
  {
    element.style.display = (showHide?"block":"none");
  }
}

/**
 * Shows the 'zipcode' div, where the user can enter the zipcode. 
 * @param {Object} vehicleId
 */
function showZipCodeDiv(vehicleId)
{
  if ("" == selectedVehicle)
  {
    selectedVehicle = partOfId + vehicleId;
    showSelectedZipCodeDiv();
  }
  else
  {
    var baseDiv = YAHOO.util.Dom.get(selectedVehicle); 
    var element = YAHOO.util.Dom.getElementsByClassName('view-special-offer-open','a',baseDiv);
    YAHOO.util.Dom.removeClass(element,'view-special-offer-open');
    YAHOO.util.Dom.addClass(element,'view-special-offer-close bodyTextLink');
    baseDiv.getElementsByTagName('div')[0].style.display = "none";
    selectedVehicle = partOfId + vehicleId;
    showSelectedZipCodeDiv();
  }
}

/**
 * Shows the 'view special data' once it has been successfully retrieved by the ajax call.
 */
function showSelectedZipCodeDiv()
{
  var baseDiv = YAHOO.util.Dom.get(selectedVehicle); 
  var element = YAHOO.util.Dom.getElementsByClassName('view-special-offer-close','a',baseDiv);
  YAHOO.util.Dom.removeClass(element,'view-special-offer-close');
  YAHOO.util.Dom.addClass(element,'view-special-offer-open');
  baseDiv.getElementsByTagName('div')[0].style.display = "block";
}
