(function(){

    var yuiDom = YAHOO.util.Dom;
    var yuiEvent = YAHOO.util.Event;

    // ### TabManager ### //
    var TabManager = (function() {
        // private
        var initialized = false;
        var settings = {
            tabMap:["cash","starpoints","cashPoints"]
        };
        var configs = [];
        var activeTab = "cash";

        function clickBridge(e, idx) {
            var config = yuiEvent.getTarget(e).tabConfig;
            self.selectTab(config, idx);
            self.hideCalendar(config, idx);
        }
        // public
        var self = {
            initialize:function() {
                if (initialized) {
                    return;
                }
                initialized = true;

//                var properties = yuiDom.getElementsByClassName("property", "div", yuiDom.get("searchResults"));
                var properties = yuiDom.getElementsByClassName("property", "div");
                properties.forEach(function(propDiv) {
                    var tabs = yuiDom.getElementsByClassName("tab", "li", propDiv);
                    var tabContent = yuiDom.getElementsByClassName("tabContent", "div", propDiv);
                    var cashPointsCalendar = yuiDom.getElementsByClassName('cashPointsCalendar','div',propDiv)[0];
                    var config = {
                        tabs:tabs,
                        tabContent:tabContent,
                        cashPointsCalendar:cashPointsCalendar
                    };
                    configs.push(config);
                    tabs.forEach(function(tab, idx) {
                        var div = tab.getElementsByTagName("div")[0];
                        div.tabConfig = config;
                        tab.tabConfig = config;
                        yuiEvent.addListener(tab, "click", clickBridge, idx);
                    });
                });
            },
            setAll:function(type) {
                activeTab = type;
                var idx = settings.tabMap.indexOf(type);
                configs.forEach(function(config) {
                    self.selectTab(config, idx);
                });
            },
            selectTab:function(config, idx) {
                var tab,tabContent;
                for (var i = 0; i < config.tabs.length; i++) {
                    tab = config.tabs[i];
                    tabContent = config.tabContent[i];
                    if (idx == i) {
                        yuiDom.addClass(config.tabs[i], "activeTab");
                        yuiDom.addClass(config.tabContent[i], "activeTab");
                    } else {
                        yuiDom.removeClass(config.tabs[i], "activeTab");
                        yuiDom.removeClass(config.tabContent[i], "activeTab");
                    }
                }
            },
            getActiveTab:function() {
                return activeTab;
            },
            hideCalendar:function(config, idx){
                if(config.cashPointsCalendar && !yuiDom.hasClass(config.tabs[idx], "browseCalendar")){
                    if(config.cashPointsCalendar.calendar){
                        config.cashPointsCalendar.calendar.handleHide();
                    }
                }
            },
            configure:function(config) {
                var prop;
                for (prop in config) {
                    if (config.hasOwnProperty(prop) && settings[prop]) {
                        settings[prop] = config[prop];
                    }
                }
            }
        };
        return self;
    })();

    yuiEvent.onDOMReady(TabManager.initialize);

    // handle clicks in more options section
    yuiEvent.onDOMReady(function(){
        var pointsPopUpWin = null;

        function showPointsComparison(e){
            var target = yuiEvent.getTarget(e);
            var url = target.href;
            yuiEvent.preventDefault(e);
            if(!pointsPopUpWin || pointsPopUpWin.closed){
                pointsPopUpWin = window.open(url,null,'width=850,height=500,toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=0');
            }else{
                pointsPopUpWin.document.location.href = url;
            }
            pointsPopUpWin.focus();
        }
        // starpoint compare
        yuiDom.getElementsByClassName("starpointRequirementLink","a",null,function(el){
            yuiEvent.addListener(el, "click", showPointsComparison);
        });
    });

    SW.widget.PropertyDetails = {
        TabManager:TabManager
    };

})();