var search = 
{
    init:function()
    {
        var arrArrow = $$(".arrow");
		if (arrArrow.length > 0) search.arrow = arrArrow[0];
		
		var maps = document.getElements("area");
		maps.each(function(item)
		{
		    if(item.getAttribute("rel") != null)
		    {
			    item.addEvent("click", search.rectReleased);
			    item.addEvent("mouseover", search.skinRollOver);
			    item.addEvent("mouseout", search.skinRollOut);
			}
		});
    },
    
    
    /*** SEARCH FUNCTIONS ***/
    searchResultsAjax_Show:function(html)
    {
        var divTarget = $$(".mainLayout");
        
        if (divTarget.length > 0)
        {
            divTarget[0].innerHTML = html;
            
            //... Hide the waiting message
            $("divSearchInProgress").style.display = "none";
            divTarget[0].style.display = "block";

            //... Assign events dynamically
            var divProductList = $("divProductList");
            if (!divProductList) return;
            
            common.initSub(divProductList);
            care.initProductList();
            
            //... Reinitialize the scrolling
            BlocScroll.init();
        }
    },
            
    searchNeeds_SubmitAjax:function(searchType)
    {
        //... Reset the scrolling menu
        BlocScroll.scrollReset();
        
        //... Display the waiting message
        $$(".mainLayout")[0].style.display = "none";
        $("divSearchInProgress").style.display = "block";
        
        var inputKeyword = $$(".SearchProductKeyword")[0];
        var selectFranchise = $$(".SearchFranchiseList")[0];
        
        //... Build url with search parameters
        var params = "";
        
        switch (searchType)
        {
            case "keyword":
                //http://xkr.us/articles/javascript/encode-compare/ for the encodeURIComponent
                params += "?keyword=" + (inputKeyword.value != "" && inputKeyword.getAttribute("alt") != inputKeyword.value ? encodeURIComponent(inputKeyword.value) : "");
                break;
            case "franchise":
                //params += "?franchiseid=" + (selectFranchise.selectedIndex != 0 ? selectFranchise.value : "");
                top.document.location.href = "/franchises/" + selectFranchise.value + ".aspx";
                return;
                break;
            case "needs":
                params += "?pneedid=" + search.searchNeeds_GetSelectedNeed();
                params += "&sneedid=" + search.searchNeeds_GetSelectedSecNeeds();
                break;
            case "skingroup":
                params += "?skinonly=1"; //Indicates that only the skin has changed
                break;
        }
        
        //... Combine the selected skin
        params += (params == "" ? "?" : "&") + "skinid=" + search.getSelectedSkinId();
        
        //... Load url into an iframe
        var myAjax = new Ajax("/ajax/ProductSearchResultsAjax.aspx" + params, {onComplete : search.searchResultsAjax_Show, method: 'get'}).request();
    },
    
    searchProduct_Name:function(input)
	{
	    if (input.value == "" || input.value == input.getAttribute("alt") ) return;

	    search.loadUrl("frmSearchProductName", "/ProductSearch.aspx?keyword=" + input.value);
	},
	
	searchProduct_Type:function(idPrimaryNeed)
	{
	    if (idPrimaryNeed == "") return;
	    
	    search.loadUrl("frmSearchProductType", "/ProductSearch.aspx?idPrimaryNeed=" + idPrimaryNeed);
	},

	searchNeeds_Show:function(isPageLoading)
    {
        if (isPageLoading == null) isPageLoading = false;
        
        var divNeedsSec = $("divSearchNeedsSec");
        var divSearchNeedsSecButton = $("divSearchNeedsSecButton");
        
        if (divNeedsSec)
        {
            divNeedsSec.style.display = "none";
            if (divSearchNeedsSecButton) divSearchNeedsSecButton.style.display = "none";
            
            //... Check if a primary need radio button is selected
            var radioSel = search.searchNeeds_GetCheckedControl(document.getElements("input[secId]"));
            
            if (radioSel != null)
            {
                //... Get the sec needs list from input properties
                var arrSecId = radioSel.getAttribute("secId").split("#");
                var arrSecLabel = radioSel.getAttribute("secLabel").split("#");
                var selectedSecNeedsId = (radioSel.getAttribute("selSecId") != null ? "," + radioSel.getAttribute("selSecId") + "," : "");
                
                //... Display nothing if only one need
                if (arrSecId.length > 1)
                {
                    //... Determine the number of checkbox to insert into the left column
                    var intNbLeftColumn = Math.floor(arrSecId.length / 2 + arrSecId.length % 2);
                    
                    //... Build html for each sec need checkbox
                    var strHtmlLeft = "", strHtmlRight = "";
                    
                    for (var i=0; i<arrSecId.length; i++)
                    {
                        var strHtml = "<div class=\"line\"><input type=\"checkbox\" style=\"height:20px;\" name=\"chkSecNeed\" id=\"chkSecNeed" + arrSecId[i] + "\" value=\"" + arrSecId[i] + "\"" + (selectedSecNeedsId.search("," + arrSecId[i] + ",") != -1 ? " checked" : "") + " /><label for=\"chkSecNeed" + arrSecId[i] + "\">" + arrSecLabel[i] + "</label></div>";
                        if (i < intNbLeftColumn) strHtmlLeft += strHtml; else strHtmlRight += strHtml;
                    }
                    
                    $("divSearchNeedsSecLeft").innerHTML = strHtmlLeft;
                    $("divSearchNeedsSecRight").innerHTML = strHtmlRight;
                    
                    divNeedsSec.style.display = "block";
                    if (divSearchNeedsSecButton) divSearchNeedsSecButton.style.display = "block";
                }
            }
        }
        
        //... Automatic results display
        if (!isPageLoading) search.searchNeeds_SubmitAjax("needs");
    },
    
    searchNeeds_Check:function(source, clientside_arguments)
    {
        //... Determine if at least one radio button is selected
        clientside_arguments.IsValid = (search.searchNeeds_GetCheckedControl(document.getElements("input[secId]")) != null || search.getSelectedSkinId() != "-1");
    },
    
    searchNeeds_Reset:function()
    {
        //... Empty the product name
        var inputProduct = $$(".SearchProductKeyword");
        if (inputProduct.length > 0)
        {
            inputProduct[0].value = inputProduct[0].getAttribute("alt");
        }
        
        //... Unselect franchise
        var selectFranchise = $$(".SearchFranchiseList");
        if (selectFranchise.length > 0)
        {
            selectFranchise[0].selectedIndex = 0;
        }
        
        //... Hide sec needs section
        $("divSearchNeedsSec").style.display = "none";
                
        //... Unchecked all needs
        var arrInputs = document.getElements("input[secId]");
        for (var i=0; i<arrInputs.length; i++)
        {
            arrInputs[i].checked = false;
        }
           
        arrInputs = document.getElementsByName("chkSecNeed");
        for (var i=0; i<arrInputs.length; i++)
        {
            arrInputs[i].checked = false;
        }
        
        //... Unselect skin type
        search.resetSelectedSkin();
        
        //... Automatic display results
        search.searchNeeds_SubmitAjax();
    },
    
    searchNeeds_GetSelectedNeed:function()
    {
        //... Get the value of the selected primary need radio button
        var radioSel = search.searchNeeds_GetCheckedControl(document.getElements("input[secId]"));
        return (radioSel != null ? radioSel.getAttribute("priId") : "-1");
    },
    
    searchNeeds_GetSelectedSecNeeds:function()
    {
        //... Get the value of the selected sec needs
        var selectedSecId = "";
        
        if ($("divSearchNeedsSec").style.display == "block")
        {
            var arrSecNeeds = document.getElementsByName("chkSecNeed");
            
            for (var i=0; i<arrSecNeeds.length; i++)
            {
                if (arrSecNeeds[i].checked) selectedSecId += (selectedSecId != "" ? "," : "") + arrSecNeeds[i].value;
            }
        }
        
        return selectedSecId;
    },
    
    searchNeeds_Submit:function()
    {
        //... Just before the server submit, determine selected values and assign them to hidden fields server controls
        //... The hidden fields are the three first input controls into the submit button parent
        var radioSel = search.searchNeeds_GetCheckedControl(document.getElements("input[secId]"));
        
        //... If there is no primary need selected, stop the process
        if (radioSel == null && search.getSelectedSkinId() == "-1") return false;
        
        var objParent = $$(".SearchHiddenFields")[0];
        var arrInputs = objParent.getElementsByTagName("INPUT");
        
        arrInputs[0].value = (radioSel != null ? radioSel.getAttribute("priId") : "-1");
        arrInputs[1].value = search.searchNeeds_GetSelectedSecNeeds();
        arrInputs[2].value = search.getSelectedSkinId();
    },
    
    searchNeeds_GetCheckedControl:function(arrInputs)
    {
        var selectedControl = null;
        
        for (var i=0; i<arrInputs.length; i++)
        {
            if (arrInputs[i].checked)
            {
                selectedControl = arrInputs[i];
                break;
            }
        }
        
        return selectedControl;
    },
	
	
    /*** SKIN SELECTION FUNCTIONS ***/
	selectedSkinId:String(),
	selectedUserSkinId:String(),
	
	getSelectedSkinId:function()
	{
	    return (search.selectedSkinId == null || search.selectedSkinId == "" ? "-1" : search.selectedSkinId);
	},
	
	setSelectedSkin:function(skinId, objArea)
	{
	    search.selectedSkinId = (skinId == -1 ? "" : skinId);
	    
	    //... Move the arrow to the center of the area object
		if (search.moveArrow) search.moveArrow.stop();
	    
	    var arrowDest = (skinId == -1 ? 0 : parseInt(objArea.coords.split(",")[2] - 21));
	    search.moveArrow = new Fx.Style(search.arrow, "left", {duration:200}).start(parseInt(search.arrow.getStyle("left")), arrowDest);
	    	    
	    //... Empty the selected skin type label
        var divSkinSelected = $("divSkinSelected");
		if (divSkinSelected)
		{
		    if (skinId == -1)
		    {
		        divSkinSelected.innerHTML = "";
		        divSkinSelected.setAttribute("backup", "");
		    }
		    else
		    {
		        divSkinSelected.setAttribute("backup", objArea.getAttribute("title"));
		        divSkinSelected.innerHTML = objArea.getAttribute("title");
		    }
		}
	},
	
	resetSelectedSkin:function()
	{
	    if (search.selectedUserSkinId != null && search.selectedUserSkinId != "")
	    {
	        var objArea = $$("area[tabindex=" + search.selectedUserSkinId + "]");
	        if (objArea.length > 0)
	        {
	            search.setSelectedSkin(search.selectedUserSkinId, objArea[0]);
	            return;
	        }
	    }
	    
	    search.setSelectedSkin(-1);
	},
	
	rectReleased:function(e)
	{
		var evt = new Event(e);
		var objArea = evt.target;
		
		search.setSelectedSkin(objArea.getAttribute("tabindex"), objArea);
	    
	    //... Check if the skin bar is located on the home page
	    if (objArea.getAttribute("rel") == "search")
	    {
		    //... Automatic results display
		    window.setTimeout("search.searchNeeds_SubmitAjax('skingroup');", 200);
		}
	},
	
	skinRollOver:function(e)
	{
	    //... Display the title into the selected skin label
	    var evt = new Event(e);
	    var objArea = evt.target;
		
		var divSkinSelected = $("divSkinSelected");
		if (!divSkinSelected) return;
		
		divSkinSelected.innerHTML = objArea.getAttribute("title");
	},
	
	skinRollOut:function(e)
	{
	    //... Remove the title from the selected skin label
	    var evt = new Event(e);
		var objArea = evt.target;
		
		var divSkinSelected = $("divSkinSelected");
		if (!divSkinSelected) return;
		
		divSkinSelected.innerHTML = (divSkinSelected.getAttribute("backup") == null ? "" : divSkinSelected.getAttribute("backup"));
	},
    
		
	/*** MENU NEWSLETTER FUNCTIONS ***/
	newsletter_Suscribe:function(input)
	{
	    if (input.value == "" || input.value == input.getAttribute("alt") ) return;
	    
	    search.loadUrl("frmNewsletter", "/NewsletterSubscribe.aspx?email=" + input.value);
	},
    
    
    /*** TOOLS ***/
    openedWindows:Array(),
    
    loadUrl:function(frameName, url)
	{
	    if (search.openedWindows[frameName] != null)
	    {
	        search.openedWindows[frameName].src = url;
	    }
	    else
	    {
	        //... Create an iframe and load the url into it
	        var objFrame;
	        
	        if (document.body.insertAdjacentHTML)
            {
                document.body.insertAdjacentHTML("beforeEnd", "<iframe id=\"" + frameName + "\" style=\"display: none;\" src=\"" + url + "\"></iframe>");
                objFrame = document.getElementById(frameName);
            }
            else
            {
                objFrame = document.createElement("iframe");
                objFrame.setAttribute("id", frameName);
                //objFrame.style.display = "none"; SAFARI BUG : The iframe can't be invisible
				objFrame.style.visibility = "hidden";
                objFrame.setAttribute("src", url);
				
                document.getElementsByTagName("body")[0].appendChild(objFrame);
            }
            
            search.openedWindows[frameName] = objFrame;
	    }
	},
	
	unComment:function(strSource)
    {
	    return strSource.substring( strSource.indexOf( "<!--" ) + 4, strSource.lastIndexOf( "-->" ) );
    }
}

window.addEvent("domready", search.init);