jQuery(document).ready(function(){
  embeddedSearchComponent.initialize();
});

var embeddedSearchComponent = {
    container: null,
    paginationLinksContainer: null,
    sessionId:null,
    browseNodeId:null,
    sortByForm:null,
    sortByDropDown:null,
    ajaxPageUrl:null,
    loadingComponent:null,
    errorComponent:null,
    hash:null,
    changingHash:false,
    embeddedSearchContent:null,

    initialize:function(){
        this.container = jQuery("#embeddedSearchResults");
        if(this.container.length>0){
            if(typeof(itemCompare)!='undefined'){
              itemCompare.initialize();
            }
            this.paginationLinksContainer = this.container.find(".paginationDetail");
            this.sessionId = sessionId;
            this.browseNodeId = browseNodeId;
            this.ajaxPageUrl = ajaxPageUrl;
            this.sortByForm = this.container.find(".sortByForm");
            this.sortByDropDown = this.sortByForm.find("#sort");
            this.sortByDropDown.attr("onchange","");
            this.errorComponent = this.container.find(".embeddedSearchError");
            this.hash = this.getBrowserHash();
            if(this.loadingComponent == null){
                this.loadingComponent = this.createLoadingComponent();
                jQuery("body").append(this.loadingComponent);
                var parentThis = this;
                this.loadingComponent.fadeTo("normal",0.6,function(){parentThis.loadingComponent.fadeTo("normal",0);});
                jQuery.historyInit(function(){});
            }
            this.bindEvents();
            this.detectAndProcessChangeInHash();
        }
    },

    getBrowserHash:function(){
        var currentHash = window.location.href;
        if(currentHash.indexOf("#")>-1){
            currentHash = currentHash.substring(currentHash.indexOf("#")+1);
            return currentHash;
        }
        return '';
    },

    setLocalHash:function(data){
        this.changingHash = true;
        this.hash = data;
        this.changingHash = false;
    },

    detectAndProcessChangeInHash:function(){
        var parentThis = this;
        var currentHash = this.getBrowserHash();
        if(currentHash != this.hash && !this.changingHash){
            this.hash = currentHash;
            this.loadAjaxSearchContent(currentHash);
        } else {
          window.setTimeout(function(){parentThis.detectAndProcessChangeInHash();}, 100);
        }
    },

    createLoadingComponent:function(){
        if(this.loadingComponent == null){
            var loadingComponent = jQuery("<iframe></iframe>");
            loadingComponent.attr("id","embeddedSearchFrame");
            loadingComponent.attr("frameBorder","0");
            loadingComponent.attr("src","");
            return loadingComponent;
        }
        return this.loadingComponent;
    },

    bindEvents:function(){
        var parentThis = this;
        this.paginationLinksContainer.find("a").click(function(){
            if(typeof(itemCompare)!='undefined'){
              itemCompare.nextPage(this);
            }
            var jObj = jQuery(this);
            var thisElementUrl = jObj.attr("href");
            var data='';
            if(thisElementUrl.indexOf("?")>-1){
                data = thisElementUrl.substring(thisElementUrl.indexOf("?")+1);
            }
            parentThis.loadAjaxSearchContent(data);
            jQuery.historyLoad(data);
            parentThis.setLocalHash(parentThis.getBrowserHash());
            return false;
        });
        this.sortByDropDown.change(function(){
            var data = parentThis.sortByForm.serialize();
            parentThis.loadAjaxSearchContent(data);
            jQuery.historyLoad(data);
            parentThis.setLocalHash(parentThis.getBrowserHash());
        });
        this.sortByForm.submit(function(){
            return false;
        });
    },

    loadAjaxSearchContent: function(data){
        this.errorComponent.hide();
        var parentThis = this;
        this.loadingComponent.css("top",this.container.offset().top);
        this.loadingComponent.css("left",this.container.offset().left);
        this.loadingComponent.height(this.container.height());
        this.loadingComponent.width(this.container.width());
        this.loadingComponent.fadeTo("normal",0.6,function(){parentThis.makeAjaxRequest(data);});

    },

    makeAjaxRequest: function(data, callBackOnSuccess, callBackOnError){
        if(typeof(data)=='undefined' || data==null){
           data='';
        }
        if(data.length>0){
           data = data+"&";
        }
        data = data+"browseNodeId="+this.browseNodeId+"&sessionID="+this.sessionId+"&isAjaxRequest=1";

        var parentThis = this;
        jQuery.ajax({
            type:'GET',
            url:parentThis.ajaxPageUrl,
            data:data,
            cache:true,
            error:function(html,status){
                if(callBackOnError){
                  callBackOnError();
                } else {
                  parentThis.errorComponent.show();
                  parentThis.loadingComponent.fadeTo("normal",0);
                  parentThis.loadingComponent.height(0);
                  parentThis.loadingComponent.width(0);
                }
            },
            success:function(html,status){
                parentThis.embeddedSearchContent = html;
                if(callBackOnSuccess){
                  callBackOnSuccess();
                } else {
                  parentThis.container.html(html);
                  parentThis.initialize();
                  parentThis.loadingComponent.fadeTo("normal",0);
                  parentThis.loadingComponent.height(0);
                  parentThis.loadingComponent.width(0);
                }
            },
            timeout: 20000
        });
    },

    populateAjaxContentOnLoad: function(){
      if(window.location.href && window.location.href.indexOf("#")>-1){
        var data = window.location.href;
        data = data.substring(data.indexOf("#")+1);
        this.makeAjaxRequest(
          data,
          function(){
            jQuery("#embeddedSearchResults").html(embeddedSearchComponent.embeddedSearchContent);
            jQuery(".embeddedSearchBackDiv").show();
            if(typeof(embeddedSearchComponent)!='undefined'){
              embeddedSearchComponent.initialize();
            }
          }, function(){
            jQuery(".embeddedSearchBackDiv").show();
            if(typeof(embeddedSearchComponent)!='undefined'){
              embeddedSearchComponent.initialize();
            }
          }
        );
      }
    }
};

