﻿var DanBolig = DanBolig || {};

DanBolig.Tabs = function(){
    var hTabs, vTabs, stepTabs, searchType, stepVal, tabCache;
    return {
        init : function(){
            DanBolig.Tabs.searchType = "1";//default is region
            DanBolig.Tabs.stepVal = "1";
            DanBolig.Tabs.cache = null;
            DanBolig.Tabs.id = "tabs";
            //hTabs = new Valtech.TabView({ id : "ext-top-nav", selectedClass : "current", callBack : DanBolig.Tabs.validate, context : DanBolig.Tabs});
            hTabs = new Valtech.TabView({ id : "ext-top-nav", selectedClass : "current" });
            vTabs = new Valtech.TabView({ id : "ext-left-nav", selectedClass : "current", deliTabs : ["search-type-radius"] });
            vTabs.onChange.subscribe(DanBolig.Tabs.setSearchType, DanBolig.Tabs, true);
            hTabs.onChange.subscribe(DanBolig.Tabs.setStepGlobal, DanBolig.Tabs, true);
            stepTabs = $D.getElementsByClassName("bp-direct", "div", "ext-search");
            viewerShortCuts = $D.getElementsByClassName("vsc", "a", "ext-search-criteries");
            $E.addListener(stepTabs, "click", DanBolig.Tabs.step, DanBolig.Tabs);
            $E.addListener(viewerShortCuts, "click", DanBolig.Tabs.step, DanBolig.Tabs);
            $E.addListener("ext-top-nav", "click", DanBolig.Tabs.setCache, DanBolig.Tabs);
            $E.addListener($$("[id$=m_searchLinkButton]", $$("div.button_submit", null, true), true), "click", DanBolig.Tabs.validateSubmit, DanBolig.Tabs);
            $E.addListener($$("a", $$("div.button_gemsoeg", null, true), true), "click", function(e) {
                // This code conflicts with the modularization of code, since IE handles queued event handlers incorrect, I see no other way.
                var valid = DanBolig.Tabs.validateSubmit(e);
                if (valid) DanBolig.Utils.ModalPanel.showPanel("#save-search");
                return valid;
            }, DanBolig.Tabs);
            
            DanBolig.Tabs.validationManager = new Valtech.ValidationManager( { "id" : "warning" } );
            DanBolig.Tabs.validationManager.addValidator(DanBolig.Tabs);
        },
        setSearchType : function(type, args){
            switch(args[0].id){
                case "search-type-region":
                    this.searchType = "1";
                    break;
                case "search-type-radius":
                    this.searchType = "2";
                    break;
                case "search-type-map":
                    this.searchType = "8";
                    break;
                default:
                    throw "Unknown search type from id '" + args[0].id + "'.";
                    break;
            }
            var data = {}, obj = {};
            obj["text"] = args[0].id;
            obj["value"] = this.searchType;
            data["m_searchType"] = obj;
            DanBolig.Global.dataManager.update("DanBolig.Tabs", data);
        },
        setCache : function(e, c){
            $E.preventDefault(e);
            var target = $E.getTarget(e);
            DanBolig.Tabs.cache = target;
        },
        step : function(e, c){
            $E.preventDefault(e);
            var target = $E.getTarget(e);
            while(target.nodeName.toLowerCase() != 'a' && target.nodeName.toLowerCase() != 'body'){
                target = target.parentNode;
            }
            if(target.nodeName.toLowerCase() != 'a'){
                return false;
            }
            DanBolig.Tabs.cache = target;
            /*
            if(!c.validate()){
                return false;
            }
            */
            DanBolig.Tabs.selectTab(target);
            return false;
        },
        selectTab : function (from) {
            hTabs.selectTab(from, true);
            var href = from.getAttribute("href");
            var mainTabHeads = $D.getElementsByAttribute("href", href, "a", "ext-top-nav");
            if(mainTabHeads && mainTabHeads.length > 0){
                $D.addClass(mainTabHeads[0], hTabs.selectedClass);
            }
        },
        setStepGlobal : function(type, args){
            switch(args[0].id){
                case "wrapper-searcharea":
                    this.stepVal = "1";
                    break;
                case "wrapper-type-values":
                    this.stepVal = "2";
                    break;
                case "wrapper-prize-size":
                    this.stepVal = "3";
                    break;
                default:
                    throw "Unknown step from id '" + args[0].id + "'.";
                    break;
            }
            var data = {}, obj = {};
            obj["text"] = args[0].id;
            obj["value"] = this.stepVal;
            data["currentStep"] = obj;
            DanBolig.Global.dataManager.update("DanBolig.Tabs", data);
            DanBolig.Tabs.cache = null;
        },
        update : function (type, args) {
            var provider = args[0].provider;
            var _searchType = args[0]["data"]["m_searchType"];
            var id;
            if(provider == "DanBolig.Tabs" || !_searchType){//self or empty
                return;
            }
            this.searchType = _searchType.value;
            switch(this.searchType){
                /*
                case "1":
                    id = "search-type-region";
                    break;
                */
                case "2":
                    id = "search-type-radius";
                    break;
                case "8":
                    id = "search-type-map";
                    break;
                default:
                    id = "search-type-region";
                    break;
            }
            var leftNav = $("ext-left-nav").getElementsByTagName("a");
            var leftTab = leftNav[0];
            var tmp;
            for(var i = 0, l = leftNav.length; i < l; i++){
                tmp = leftNav[i].getAttribute("href").replace(/(.)*#/, "");
                if(tmp == id){
                    leftTab = leftNav[i];
                    vTabs.selectTab(leftTab, true);
                    break;
                }
            }
            
        },
        validate : function(){
            var obj = { message : "test", valid : false };
            /*
            DanBolig.Tabs.validationManager.clearErrors();
            switch(DanBolig.Tabs.stepVal){
                case "1":
                    obj = DanBolig.Tabs.validateSearchType();
                    break;
                case "2":
                    obj.valid = true;
                    break;
                case "3":
                    obj.valid = true;
                    break;
                default:
                    break;
            }
            if(!obj.valid){
                DanBolig.Tabs.validationManager.propagateErrors({ "message" : obj.message });
            }
            */
            return DanBolig.Tabs.validateSearchType();
        },
        validateSearchType : function (){
            var obj = { message : "test", valid : false };
            switch(DanBolig.Tabs.searchType){
                case "1": //region
                    obj.valid = (!!DanBolig.Global.dataManager.dataMap["m_cityAreas"] && DanBolig.Global.dataManager.dataMap["m_cityAreas"].length > 0) || 
                        (!!DanBolig.Global.dataManager.dataMap["m_zipCodes"] && DanBolig.Global.dataManager.dataMap["m_zipCodes"].length > 0) || 
                        (!!DanBolig.Global.dataManager.dataMap["m_districts"] && DanBolig.Global.dataManager.dataMap["m_districts"].length > 0);
                    obj.message = "Vælg søgeområde: Vælg først region og herefter en eller flere kommuner, postnumre og/eller lokalområder";    
                    break;
                case "2": //radius
                    DanBolig.RadiusSearch.checkFields(null, DanBolig.RadiusSearch);
                    obj.valid = (!!DanBolig.Global.dataManager.dataMap["m_zipCode"] && !!DanBolig.Global.dataManager.dataMap["m_zipCode"].value) && 
                        (!!DanBolig.Global.dataManager.dataMap["m_town"] && !!DanBolig.Global.dataManager.dataMap["m_town"].value);// && 
                        //(!!DanBolig.Global.dataManager.dataMap["m_utm32x"] && !!DanBolig.Global.dataManager.dataMap["m_utm32x"].value) && 
                        //(!!DanBolig.Global.dataManager.dataMap["m_utm32y"] && !!DanBolig.Global.dataManager.dataMap["m_utm32y"].value);
                    obj.message = "Vælg søgeområde: Skriv en adresse du gerne vil bo i nærheden af";
                    break;
                case "8": //marker omraade
                    obj.valid = (!!$("m_polyCoordsHidden") && !!$("m_polyCoordsHidden").value) && 
                        ($("m_polyCoordsHidden").value.split(';').length > 2);
                    //obj.message = "Vælg søgeområde: Definér dit søgeområde ved at benytte værktøjet \"Marker område\" og afsætte mindst 3 punkter på kortet";
                    obj.message = "Vælg søgeområde: Benyt værktøjet \"Marker område\" og afsæt herefter mindst 3 punkter på kortet";
                    
                    break;
                default:
                    break;    
            }
            return obj;
        },
        validateSubmit : function (e) {
            var isValid = DanBolig.Tabs.validationManager.validate();
            if(!isValid){
                $E.preventDefault(e);
            }
            return isValid;
            /*
            var errors = {};
            var valid = true;
            var obj = { message : "test", valid : false };
            DanBolig.Tabs.validationManager.clearErrors();
            obj = DanBolig.Tabs.validateSearchType();
            if(!obj.valid){
                valid = false;
                errors["searchType"] = obj.message;
                $E.preventDefault(e);
            }
            DanBolig.Tabs.validationManager.propagateErrors(errors);
            return valid;
            */
        }
    };
}();


