YAHOO.widget.MHInterface = function ()
{
  this.dimmer = new DynamicDimLayer();
  this.dimmer.defaultHideMessage = true;

  this.addToCart = new YAHOO.widget.AddToCart();
  this.score = new YAHOO.widget.ScoreTip();
  this.score.adjustForMarketplace();
  this.canInitializeWindow = true;
  this.url = "/do/marketplace/home";
  this.formName = "martketplaceHomeForm";
  this.targetApplication = "marketplace";
  this.targetAction = "home";
  this.doAction = "";
  this.context = "";

  this.bidWizard = new YAHOO.widget.BidHandler(this, 'marketplace');
  this.alertHandler = new AlertHandler('marketplace');
  this.alertHandler.target = this;
  this.alertHandler.application = "marketplace";
  this.alertHandler.action = "activityMatch";
  this.alertHandler.formName = "activityMatchForm";

  this.loginHandler = new LoginHandler(this);
  this.loginHandler.loginContext = 'vf';
};

YAHOO.widget.MHInterface.prototype = {
  initNavigator : function()
  {
    this.initWinestoreHome();
    if (this.canInitializeWindow)
    {
      initializeWindow(); //popup.js
    }
    this.score.init();
    this.canInitializeWindow = true;
    this.bidWizard.init();
    this.initMarketplaceLinks();
    if (csi)
    {
      this.loadAsyncContent();
    }
  },

  initWinestoreHome:function()
  {
    var producerElements = YAHOO.util.Dom.getElementsByClassName('byProducers') ;

    for (var i = 0; i < producerElements.length; i++)
    {
      YAHOO.util.Event.purgeElement(producerElements[i], true);
      YAHOO.util.Event.addListener(producerElements[i], "click", this.applyByProducer.bind(this), false);
    }

    var searchBtn = YAHOO.util.Dom.get("searchBtn");
    if (searchBtn)
    {
      YAHOO.util.Event.purgeElement(searchBtn, true);
      YAHOO.util.Event.addListener(searchBtn, "click", this.search.bind(this));
    }

    var searchWine = YAHOO.util.Dom.get("searchWine");
    if (searchWine)
    {
      YAHOO.util.Event.purgeElement(searchWine, true);
      YAHOO.util.Event.addListener(searchWine, "keypress", this.checkQueryInput.bind(this));
    }

    var lnkElements = YAHOO.util.Dom.getElementsByClassName('lnkNotableVintage') ;
    for (var i = 0; i < lnkElements.length; i++)
    {
     YAHOO.util.Event.purgeElement(lnkElements[i], true);
     YAHOO.util.Event.addListener(lnkElements[i], "click", this.applyClickedVintage.bind(this), false);
    }

    var reviewerPickLinks = YAHOO.util.Dom.getElementsByClassName('reviewerPickLinks');
    for (var cnt = 0; cnt < reviewerPickLinks.length; cnt++)
    {
      YAHOO.util.Event.purgeElement(reviewerPickLinks[cnt], true);
      YAHOO.util.Event.addListener(reviewerPickLinks[cnt], "click", this.applyReviewerPicks.bind(this), false);
    }

  },

  applyClickedVintage:function(evt)
  {
    evt = evt ? evt : window.event;
    var srcEl = evt.target ? evt.target : evt.srcElement;
    document.location = "/do/marketplace/varietal/" + srcEl.id;
  },

  applyReviewerPicks: function(evt)
  {
    evt = evt ? evt : window.event;
    var srcEl = evt.target ? evt.target : evt.srcElement;
    if (srcEl.id == null || srcEl.id == undefined || srcEl.id =="")
    {
      alert("Comming soon.");
      return;
    }
    document.location = "/do/marketplace/reviewerPick/" + srcEl.id;
  },

  initMarketplaceLinks : function()
  {
    var marketplaceLinks = YAHOO.util.Dom.getElementsByClassName("marketplaceLinks");
    if (marketplaceLinks)
    {
      for (var i = 0; i < marketplaceLinks.length; i++)
      {
        YAHOO.util.Event.purgeElement(marketplaceLinks[i], true);
        YAHOO.util.Event.addListener(marketplaceLinks[i], "click", this.showMarketplaceListing.bind(this, marketplaceLinks[i].id));
      }
    }
  },

  showMarketplaceListing : function (criteriaName)
  {
    this.url = "/do/marketplace/listing?doAction=showMPlaceListingPage&viewState.criteriaInfo.name=";
    if (criteriaName.indexOf("Best Marketplace Value") != -1)
    {
      this.url = this.url + criteriaName.substring(0, criteriaName.indexOf('-')) + "&viewState.criteriaInfo.value1=" + criteriaName.substring(criteriaName.indexOf('-') + 1);
    }
    else
    {
      this.url = this.url + criteriaName;
    }
    document.location.href = this.url;
  },

  search: function()
  {
    var query = YAHOO.util.Dom.get("searchWine").value;
    if (query == "")
    {
      alert('Search term cannot be empty');
      document.marketplaceListingForm.query.focus();
    }
    else
    {
      document.location = "/do/marketplace/listing?doAction=search&advancedSearch.name="+query+"&advancedSearch.searchTerm="+query+"&viewState.criteriaInfo.name=Quick Search&viewState.criteriaInfo.value1=" + query+"&viewState.criteriaInfo.context=marketplace";
    }
    return false;
  },

  checkQueryInput : function(evt)
  {
    if (evt.keyCode == 13)
    {
      this.search();
      YAHOO.util.Event.stopEvent(evt);
      return false;
    }
  },

  loadAsyncContent: function ()
  {
    // get cellar summary data
    var asyncCallback = {success:this.handleLoadAsyncSummarySuccess.bind(this),failure:this.handleFailure.bind(this)};

    // Make the async request.
    vfAsyncRequest("GET", "/do/winestore/storeHome?doAction=asyncCellarSummay", asyncCallback);
    return false;
  },

  applyByProducer: function (evt)
  {
    evt = evt ? evt : window.event;
    var srcEl = evt.target ? evt.target : evt.srcElement;
    document.location = "/do/marketplace/byProducers/" + encodeURIComponent(srcEl.id);
  },

  handleLoadAsyncSummarySuccess: function (response)
  {
    var jsonObject = getJsonObject(response);

    var cellarSummary = YAHOO.util.Dom.get("cellarSummary");
    if (cellarSummary != null)
    {
      cellarSummary.innerHTML = jsonObject.cellarSummary;
    }

    return false;
  },

  handleFailure: function(response)
  {
    return false;
  },

  refreshPage: function()
  {
    document.location.href = this.url;
  },

  closeBidAndAsyncRefresh: function ()
  {
    this.bidWizard.closeBid();
    document.location.href = this.url;
  },

  loginFromBid: function(srcEl, wineInfo, forward)
  {
    var wineId = wineInfo.split('_')[0];
    var year = wineInfo.split('_')[1];
    var size = wineInfo.split('_')[2];
    var loginSuccessArgs = new Array(wineId, year, size);
    var loginSuccessArgNames = new Array('wineId', 'year', 'size');

    var fwdArgs = null;
    var fwdArgNames = null;
    fwdArgs = new Array();
    fwdArgNames = new Array();

    // Open the login modal
    this.loginHandler.loginContext = "marketplace";
    this.loginHandler.showLogin("Please enter your email and password to continue",
                                 forward,
                                 deployEnvironment, //global var define in vincellar-layout
                                 loginSuccessArgs,
                                 loginSuccessArgNames,
                                 fwdArgs,
                                 fwdArgNames,
                                 csi);//setting isForceLogin based on the customer signed in. if customer is signed in using cookie, then we should redirect them to force-login otherwise should be forwarded to security/login.
  },

  loginSuccess: function(argNames, argValues)
  {
    if (argValues)
    {
      var wineId = argValues[0];
      var year = argValues[1];
      var size = argValues[2];
      if (argNames[3] == 'showActivityAlert')
      {
        this.alertHandler.showActivityAlert(wineId, year, size, 'MARKETPLACE');
        return false;
      }
      else
      {
        var doAction = YAHOO.util.Dom.get("doAction").value;
        if (doAction == 'editBid')
        {
          this.bidWizard.initEditBidWindow(wineId, year, size);
        }
        else
        {
          this.bidWizard.initBidWindow(wineId, year, size);
        }
      }
    }
    return false;
  }

};