SW.domWidget.add({
    id:"dhtmlSelect",
    container:null,
    trigger:null,
    load:function(){
        this.setup();
    },
    update:function(root){
        this.setup(root);
    },
    setup:function(root){
        var self = this;
        yuiDom.getElementsByClassName("dhtmlSelect","div",root).forEach(function(container){
            if(!self.getConfig(container)){
                var config = {
                    container:container,
                    trigger:yuiDom.getElementsByClassName("dhtmlSelectTrigger",null,container)[0]
                };
                SW.domWidget.dhtmlSelect.setConfig([config.trigger,config.container],config);
                if(yuiDom.get(container).id == 'rateSortDirection') {
                    yuiEvent.addListener(config.trigger, "click", SW.domWidget.dhtmlSelect.showBridge);
                } else {
                    yuiEvent.addListener(config.trigger,"mouseover",SW.domWidget.dhtmlSelect.showBridge);
                }
                SW.domWidget.bodyClickHandler.add(SW.domWidget.dhtmlSelect.hideBridge,[config.container],config.trigger);
            }
        });
    },
    show:function(config){
        yuiDom.addClass(config.container,"show");
    },
    hide:function(config){
        yuiDom.removeClass(config.container,"show");
    },
    showBridge:function(e){
        var self = SW.domWidget.dhtmlSelect;
        var config = self.getConfig(this);
        self.show(config);
    },
    hideBridge:function(e){
        var self = SW.domWidget.dhtmlSelect;
        var config = self.getConfig(this);
        self.hide(config);
    }
});

SW.domWidget.add({
    id:"topNavHighlight",
    load:function() {
        if (yuiDom.get("topNavigation")) {
            this.isSupported = true;
            this.setup();
        }
    },
    setup:function(root) {
        var self = this;
        if (self.isSupported) {
            yuiDom.getElementsByClassName("dhtmlSelect", "div", "topNavigation",
            function(container) {
                var config = {
                    container:container,
                    trigger:yuiDom.getElementsByClassName("dhtmlSelectTrigger", null, container)[0]
                };
                SW.domWidget.dhtmlSelect.setConfig([config.trigger,config.container], config);
                // show/hide top navigation drop-downs
                yuiEvent.addListener(container, "mouseover", SW.domWidget.dhtmlSelect.showBridge);
                yuiEvent.addListener(container, "mouseout", SW.domWidget.dhtmlSelect.hideBridge);
                // hide/show select boxes in find & replace form
                yuiEvent.addListener(container, "mouseover", self.showSelect);
                yuiEvent.addListener(container, "mouseout", self.hideSelect);

            });
        }
    }
});

SW.domWidget.add({
    id:"navigation",
    navigation:null,
    showDelay:0.3,
    hideDelay:0.2,
    load:function(){
        var self = this;
        var globalNavigation = document.getElementById("globalNav");
        var globalNavItems = yuiDom.getElementsByClassName("navItem","li",globalNavigation);

        globalNavItems.forEach(function(navItem){
            var config = {
                item:navItem,
                isOver:false,
                isShowing:false,
                className:"navHover",
                showDelay:0.2,
                hideDelay:0.5
            }
            // SW.domWidget.navigation.setupHover(navItem,"navHover");
             yuiEvent.addListener(navItem,"mouseover",SW.domWidget.navigation.showNavigationBridge,config);
             yuiEvent.addListener(navItem,"mouseout",SW.domWidget.navigation.hideNavigationBridge,config);

            SW.domWidget.navigation.setupSubNavigation(navItem);

        });

        var topNavigation = document.getElementById("topNavigation");
        var topNavItems = yuiDom.getElementsByClassName("hasSubItems","li",topNavigation);

        topNavItems.forEach(function(navItem){
           // SW.domWidget.navigation.setupHover(navItem,"navHover");
            var config = {
                item:navItem,
                isOver:false,
                isShowing:false,
                className:"navHover",
                showDelay:0.1,
                hideDelay:0.2
            }
            // SW.domWidget.navigation.setupHover(navItem,"navHover");
             yuiEvent.addListener(navItem,"mouseover",SW.domWidget.navigation.showNavigationBridge,config);
             yuiEvent.addListener(navItem,"mouseout",SW.domWidget.navigation.hideNavigationBridge,config);


        });

        var dhtmlSelectLists = yuiDom.getElementsByClassName("dhtmlSelectList","ul",document);
        if (dhtmlSelectLists.length>0){
            dhtmlSelectLists.forEach(function(dhtmlSelectList){
                var dhtmlSelectItems = dhtmlSelectList.getElementsByTagName("li");
                if (dhtmlSelectItems.length>0){
                    for (i=0; i<dhtmlSelectItems.length; i++) {
                        SW.domWidget.navigation.setupHover(dhtmlSelectItems[i],"hover");
                    };
                }
            })
        }
    },
    setupSubNavigation:function(navItem){

        var subNavLinks = yuiDom.getElementsByClassName("subNavLink","li",navItem);
        var subNavContentItems = yuiDom.getElementsByClassName("subNavContent","div",navItem);

        if (subNavLinks.length>0 && subNavContentItems.length>1){
            var defaultContent = subNavContentItems[0];

            for (i=0; i<subNavLinks.length; i++){
                var subNavItem = subNavLinks[i];
                var subNavContent = subNavContentItems[i+1];
                if (subNavContent && subNavContent!=null){
                    var subNavConfig = {
                        link: subNavItem,
                        content:subNavContent,
                        defaultContent:defaultContent
                    }

                    yuiEvent.addListener(subNavConfig.link,"mouseover",function(e,config){
                        yuiDom.addClass(config.defaultContent,"hide");
                        yuiDom.removeClass(config.content,"hide");

                    },subNavConfig);
                    yuiEvent.addListener(subNavConfig.link,"mouseout",function(e,config){
                        yuiDom.addClass(config.content,"hide");
                        yuiDom.removeClass(config.defaultContent,"hide");
                    },subNavConfig);
                }
            }
        }
    },
    setupHover:function(element,className){
        yuiEvent.addListener(element,"mouseover",function(e,target){yuiDom.addClass(target,className);},element);
        yuiEvent.addListener(element,"mouseout",function(e,target){yuiDom.removeClass(target,className);},element);
    },
    showNavigation:function(config){
        config.isOver=true;
        if (!config.isShowing){
            config.showTimeout = setTimeout(function(){
                SW.domWidget.navigation.show(config);
            },config.showDelay*1000);
        }
    },
    hideNavigation:function(config){
        config.isOver=false;
        if (config.isShowing){
            config.hideTimeout = setTimeout(function(){
                SW.domWidget.navigation.hide(config);
            },config.hideDelay*1000);
        }
    },
    show:function(config){
        if(config.isOver && !config.isShowing){
            if (YAHOO.env.ua.ie == 6 && document.getElementById("findAndBookFormContainer")) document.getElementById("findAndBookFormContainer").style.visibility = "hidden";
            yuiDom.addClass(config.item,config.className);
            config.isShowing=true;
        }
    },
    hide:function(config){
        if(!config.isOver && config.isShowing){
            config.isShowing=false;
            yuiDom.removeClass(config.item,config.className);
            
            // Error handling for idPrefix undefined error
            try {
        		if(document.getElementById(idPrefix+"instAlt"))
        			document.getElementById(idPrefix+"instAlt").style.display = "none";
            } catch (err){
            	var txt = "Error: "+err.description; 
            	//alert(txt); //uncomment alert for debug
            	
            	if(document.getElementById("instAlt"))
        			document.getElementById("instAlt").style.display = "none";
            }
            if (YAHOO.env.ua.ie == 6 && document.getElementById("findAndBookFormContainer")) document.getElementById("findAndBookFormContainer").style.visibility = "visible";
        }
    },
    showNavigationBridge:function(e,params){
        SW.domWidget.navigation.showNavigation(params);
    },
    hideNavigationBridge:function(e,params){
        SW.domWidget.navigation.hideNavigation(params);
    }
});


SW.domWidget.add({
  id:"brandHighlightPopUp",
  win:null,
  initialize:function() {
    // standard function name - manually called - SW.domWidget.WidgetId.initialize(params...);
  },
  load:function() {
    this.setup();
  },
  update:function(root) {
    this.setup(root);
  },
  setup:function(root) {
    var self = this;
    yuiDom.getElementsByClassName("brandHighlightLink", "a", root).forEach(function(link) {
      self.setupLink(link);
    });
  },
  setupLink:function(link) {
    if (!this.getConfig(link)) {
      var config = {
        link:link,
        url:link.href
      };
      this.setConfig(link, config);
      yuiEvent.addListener(link, "click", this.showPopUpBridge);
    }
  },
  showPopUp:function(config) {
    if (!this.win || this.win.closed) {
      this.win = window.open(config.url, null, "width=800,height=360");
    } else {
      this.win.location.href = config.url;
      this.win.focus();
    }
  },
  showPopUpBridge:function(e) {
    var self = SW.domWidget.brandHighlightPopUp;
    var config = self.getConfig(this);
    self.showPopUp(config);
    yuiEvent.preventDefault(e);
  }
});

SW.domWidget.add({
    id:"pagination",
    load:function(){
        var self = this;
        var paginationContainers = yuiDom.getElementsByClassName("paginationContainer","div");
        if (paginationContainers.length>0){
            paginationContainers.forEach(function(paginationItem){
                  var config={
                      paginationContainer:null,
                      startCountElement:null,
                      previousElement:null,
                      nextElement:null,
                      items:[],
                      itemsShowing:[],
                      start:0,
                      count:0,
                      total:0,
                      panRight : null,
                      panLeft : null
                }

                config.paginationContainer = yuiDom.getElementsByClassName("paginationList","ul",paginationItem)[0];

                config.startCountElement = yuiDom.getElementsByClassName("startPage", "span", paginationItem)[0];
                config.previousElement = yuiDom.getElementsByClassName("pagPrevLink", "span", paginationItem)[0];
                config.nextElement = yuiDom.getElementsByClassName("pagNextLink", "span", paginationItem)[0];

                config.items = yuiDom.getElementsByClassName("page", "li", config.paginationContainer);
                config.total = config.items.length;
                config.items.forEach(function(el) {
                if (yuiDom.hasClass(el, "show")) {
                  config.itemsShowing.push(el);
                  config.count++;
                }
                });
                config.panRight = new yuiAnim(config.paginationContainer,{left:{by:-185 ,unit:'px'}},.5,yuiEasing.easeNone);
                config.panLeft = new yuiAnim(config.paginationContainer,{left:{by:185, unit:'px'}},.5,yuiEasing.easeNone);


                yuiEvent.addListener(config.previousElement, "click", self.previousBridge,config);
                yuiEvent.addListener(config.nextElement, "click", self.nextBridge,config);

            });
        }
    },
    showPage:function(config) {
        config.itemsShowing.forEach(function(el) {
          yuiDom.removeClass(el, "show");
        });
        config.itemsShowing = [];
        var thisCount = config.start + config.count;
        if (thisCount > config.total) {
          thisCount = config.total;
        }
        for (var i = config.start; i < thisCount; i++) {
          yuiDom.addClass(config.items[i], "show");
          config.itemsShowing.push(config.items[i]);
        }
    },
    updateInterface:function(config) {
        var thisCount = config.start + config.count;
        if (thisCount > config.total) {
          thisCount = config.total;
        }
        config.startCountElement.innerHTML = (config.start + 1);
        if (config.start > 0) {
          yuiDom.addClass(config.previousElement, "active");
        } else {
          yuiDom.removeClass(config.previousElement, "active");
        }
        if (thisCount < config.total) {
          yuiDom.addClass(config.nextElement, "active");
        } else {
          yuiDom.removeClass(config.nextElement, "active");
        }
    },
    previous:function(config) {
        if (config.start > 0) {
            config.panLeft.animate();

          config.start = config.start - config.count;
          this.showPage(config);
          this.updateInterface(config);
        }
        return;
    },
    next:function(config) {
        if ((config.start + config.count) < config.total) {
          config.panRight.animate();
          config.start = config.start + config.count;
          this.showPage(config);
          this.updateInterface(config);
        }
        return;

    },
    previousBridge:function(e,config) {
        // yuiEvent.preventDefault(e);
        var self = SW.domWidget.pagination;
        if (!config.panLeft.isAnimated()&&!config.panRight.isAnimated()) {
            self.previous(config);
        }
        return;

    },
    nextBridge:function(e,config) {
       // yuiEvent.preventDefault(e);
        var self = SW.domWidget.pagination;
        if (!config.panRight.isAnimated()&&!config.panLeft.isAnimated()) {
           self.next(config);
        }
        return;

    }
});


SW.domWidget.add({
  id:"imageRotator",
  container:null,
  items:[],
  currentIdx:0,
  load:function() {
    var self = this;
    this.container = yuiDom.get("banner_slideshow_gallery");
    if (this.container) {
      this.items = yuiDom.getElementsByClassName("galleryImages", "li", this.container);
      this.items.forEach(function(item, i) {
        item.style.display = "block";
        yuiDom.setStyle(item, "opacity", 0);
        var frameLength = item.getAttribute("framelength") * 1000;
        item.Idx = i;
        item.animIn = new yuiAnim(item, {opacity:{from:0,to:1}}, 0.5);
        item.animIn.onStart.subscribe(function() {
          yuiDom.setStyle(item, "opacity", 0);
          //          yuiDom.addClass(item,"show");
          self.currentIdx = item.Idx;
        });
        item.animIn.onComplete.subscribe(function() {
          setTimeout(function() {
            self.hideThis();
          }, frameLength);
        });
        item.animOut = new yuiAnim(item, {opacity:{from:1,to:0}}, 0.5);
        item.animOut.onStart.subscribe(function() {
          self.showNext();
        });
        item.animOut.onComplete.subscribe(function() {
          //          yuiDom.removeClass(item,"show");
        });
      });
      this.items[0].animIn.animate();
    }
  },
  hideThis:function() {
    this.items[this.currentIdx].animOut.animate();
  },
  showNext:function() {
    this.currentIdx++;
    if (this.currentIdx >= this.items.length) {
      this.currentIdx = 0;
    }
    this.items[this.currentIdx].animIn.animate();
  }
});

SW.domWidget.dhtmlSelect.setEnabled(true);
SW.domWidget.bodyClickHandler.setEnabled(true);
SW.domWidget.inputLabels.setEnabled(true);
SW.domWidget.imageRotator.setEnabled(true);
SW.domWidget.topNavHighlight.setEnabled(true);
SW.domWidget.navigation.setEnabled(true);
SW.domWidget.brandHighlightPopUp.setEnabled(true);
SW.domWidget.pagination.setEnabled(true);
SW.domWidget.toolTips.setEnabled(true);
