/*
 *  Used for displaying Campaigns in showincentives page.
 *
 *  @author Anshuman Singh (c) Trilogy 2006
 */

/**
 *  serviceURL: url for the campaign service
 *  dsBaseUrl : url for the DS base page for dealer(along with subdomain)
 *  campaignDivName :  the div where campaign is disabled
 *  dealerCode : the pacode for the Dealer
 *  vfsBase : vfsBase for linking to the image
 */

/**
 * Campaign service object
 * @param serviceURL the service URL
 * @param dsBaseUrl the dealer sites base URL
 * @param campaignDivName the campaign division name
 * @param outerDivName the campaign outer division name
 * @param dealerCode the dealer code
 * @param vfsBase the virtiual file system base URL 
 * @param language the language
 */
var CampaignService = function(serviceURL,dsBaseUrl,campaignDivName,outerDivName,dealerCode,vfsBase,language)
{
  this.serviceURL = serviceURL;
  this.campaignDivName = campaignDivName;
  this.dealerCode = dealerCode;
  this.dsBaseUrl = dsBaseUrl;
  this.vfsBase = vfsBase;
  this.outerDivName = outerDivName;
  this.language = language;

  var containsCampaigns = false;

  var dealerAttrib = "dealer";
  var langAttrib = "language";

  function displayCampaigns(result,campaignDivName)
  {
    var element = document.getElementById(campaignDivName);
    var str = "";

    for(var i in result['campaigns'])
    {
      str += createCampaign(result['campaigns'][i]);
    }
    if(str != "")
    {
      element.innerHTML = '<div class="campaign-container" style="margin-top:10px;"> ' + str + ' </div>';
    }
    else
    {
      containsCampaigns = false;
    }
  }
  /**
   * Creates a campaign with given the campaign object
   * @param campaign the campaign 
   */
  function createCampaign(campaign)
  {
    var str = "";
    for(j in campaign["imagePageMap"])
    {

      var linkBaseURL = campaign["imagePageMap"][j].search("/") == 0 ? dsBaseUrl : "";
      str += '<a href="' + linkBaseURL + campaign["imagePageMap"][j] + '" class="special-off-campaignImgLink" onclick="onClickFireOmnitureForReferralExit(\'dc: referral: exit\',\'home\');">';
      str += '<img src="' + this.vfsBase + j + '" class="special-off-campaignImg"/>';
      str += '</a>';
    }
    return str;
  }

  /**
   * Handles the success response from the ajax request for campaign 
   * @param o the response object   * 
   */
  this.handleSuccess = function(o)
  {
    var result;
    try
    {
      result = JSON.parse(o.responseText);
      containsCampaigns = true;
    }catch(e)
    {
      // Invalid response from the service
      //alert("Invalid response from service\n" + o.responseText);
      containsCampaigns = false;
      return;
    }

    displayCampaigns(result,this.campaignDivName);
    setcampaignsDivContainerStatus(this.outerDivName);
  };
  /**
   * Handles the failure response from the AJAX request for campaign 
   * @param o the response object   * 
   */
  var handleFailure = function(o)
  {
    // alert("Couldn't contact service");
    containsCampaigns = false;
    setcampaignsDivContainerStatus(this.outerDivName);
  };
  /**
   * A callback to handle the success or failure from AJAX request for campaign 
   */
  var callback =
  {
    success: this.handleSuccess,
    failure: handleFailure,
    scope: this
  };

  /**
   * Get the campaigns  from the AJAX request 
   */
  this.getCampaigns = function()
  {
    var url = this.serviceURL + '&' + dealerAttrib + "=" + this.dealerCode + '&' + langAttrib + "=" + this.language ;
    // alert("Requesting Campaigns at " + url);
    var request = YAHOO.util.Connect.asyncRequest('GET', url , callback);
  };
  /**
   * Set the campaign state to visiable in the html page
   * @param outerDiv the campaign outer div
   */
  function setcampaignsDivContainerStatus(outerDiv)
  {
    var containerDiv = YAHOO.util.Dom.get(outerDiv);
    if(containerDiv)
    {
      containerDiv.style.display = containsCampaigns ? 'inline' : 'none';
    }
  }

};
