﻿// namespaces creation
SeaDoo = SeaDoo || {};
SeaDoo.globals = SeaDoo.globals || {};
SeaDoo.widget = SeaDoo.widget || {};
//***

SeaDoo.globals.getAQuoteSelectorFieldID = "";

/**
* Add functionnalities to the "Get A Quote selector"
* @param (HTMLElement) The html element that represents the GetAQuoteSelector.
* @param {Object} cfg (optional) A configuration map of the GetAQuoteSelector's .
*/
SeaDoo.widget.GetAQuoteSelector = function (elm, field, cfg){
    var __config = {
        selected : "selected",
        over: "over",
        level4 : "level-4",
        idPrefix : "GAQS-"
    }

    this.HTMLElement = elm;
    __config = cfg || __config;
    
    this.selectedModel = function(modelID){
        var selm = document.getElementById(__config.idPrefix + modelID);
        __resetChildrenCSS(this.HTMLElement, __config);
        selm.className = __config.selected;
        __selectLIContainer(selm);
    }
    
    function __selectLIContainer(elm){
        if(elm.tagName.toLowerCase() != "li")
            return;
    
        var parentLI = YAHOO.util.Dom.getAncestorByTagName(elm,"li");
        
        
        if(YAHOO.util.Dom.getAncestorByTagName(parentLI,"ul") != this.HTMLElement){
            parentLI.className = __config.selected;
            
            __selectLIContainer(parentLI);
        }
    }
    
    this.bind = function(){
        __bind(this.HTMLElement);
        
        if(field.value !== ""){
            this.selectedModel(field.value);        
        }
    }
    
     function __bind(elm){
        var childNodes  = YAHOO.util.Dom.getChildrenBy(elm, __getLIOnly);
        for (var i = 0; i < childNodes.length; i++){
            
            var node = childNodes[i];
            
            YAHOO.util.Event.addListener(node,"click", __onClick);
            YAHOO.util.Event.addListener(node,"mouseover", __onMouseOver);
            YAHOO.util.Event.addListener(node,"mouseout", __onMouseOut);
            
            if(YAHOO.util.Dom.getChildrenBy(node, __getSubmenu).length > 0){
                __bind(YAHOO.util.Dom.getChildrenBy(node,__getSubmenu)[0])
            }
        }
    
    }
    
    
    function __getLIOnly(elm){
        return elm.tagName.toLowerCase() === "li";
    }
    
    function __getSubmenu(elm){
        if(elm.tagName.toLowerCase() === "ul"){ return true;}
        else if (elm.tagName.toLowerCase() === "div" && elm.className === __config.level4){ return true;}
        
        return false;
    }

    function __onMouseOver(e){
        if (!YAHOO.util.Dom.hasClass(this, __config.selected)){
            if(YAHOO.util.Dom.hasClass(this, __config.over)){
                YAHOO.util.Dom.removeClass(this, __config.over);
            }
            YAHOO.util.Dom.addClass(this, __config.over);
        }
    }
    
    function __onMouseOut(e){
        YAHOO.util.Dom.removeClass(this, __config.over);
    }
    
    function __onClick(e){
        __resetChildrenCSS(YAHOO.util.Dom.getAncestorByTagName(this,"ul"));
        
        if(YAHOO.util.Dom.hasClass(this, __config.selected)){
            YAHOO.util.Dom.removeClass(this, __config.selected);
        }
        
        if(YAHOO.util.Dom.hasClass(this, __config.over)){
            YAHOO.util.Dom.removeClass(this, __config.over);
        }
        YAHOO.util.Dom.addClass(this, __config.selected);
        
        if(this.id.match(__config.idPrefix) && field){
            field.value = this.id.substr(5);
        }
        else if (field){
            field.value = "";
        }
        
        YAHOO.util.Event.stopPropagation( e || event );        
    }
    
    function __resetChildrenCSS(elm){
        YAHOO.util.Dom.getElementsByClassName(__config.selected,"li", elm, function (el){
            YAHOO.util.Dom.removeClass(el, __config.selected);
            YAHOO.util.Dom.removeClass(el, __config.over);
           });
    }
}

   

