/**
* **************************************************************
*                                                              *
* JavaScript FutureStore Framework                             *
*                                                              *
****************************************************************
*/

window.FutureStore = window.FutureStore || {};    

/**
* FutureStore : main object and utilities methods
*/
FutureStore = {

    Init: function() {

        YAHOO.log("--------------------BEGIN-----------------------------", 'info');
        YAHOO.log("Enter FLS-framework-future.Init", 'info');

        FutureStore.ActivateTooltip();  //Activate the tooltip box for each link of the page
        
        FutureStore.Search.Init();
        FutureStore.Technologies.Init();
        FutureStore.Search.Compare.Init(); 
        FutureStore.Newsletter.Init();
        //FutureStore.Manufacturers.Init();
        //FutureStore.Shop.Init();
        //FutureStore.Config.Xml.Init();   // rotating part move to new separate js file

        // In a case of the page which is diplayed has two top products...
        FutureStore.SetHeightOfTopProducts();

        // Country Selection Handler
        var button = new YAHOO.widget.Button("country-selection-button", { type: "menu", menu: "country-selection-menu" });

        // Insert a specific class for each first-child tr of table.common
        var nodesFirstTr = YAHOO.util.Selector.query('table.product-sitemap tbody tr:first-child');
        YAHOO.util.Dom.addClass(nodesFirstTr, "first");

        YAHOO.log("------------------------------------------------------", 'info');
        YAHOO.log("Exit FLS-framework-future.Init", 'info');
        YAHOO.log("--------------------END-------------------------------", 'info');

    },    

    /**
    * Manage <filter navigation> menu, set top and height
    */
    SetTopFilterOfNavigation: function(pixelsCorrection) {
        var adjustedHeight = 0;
        document.getElementById('search-filter-navigation').style.marginTop = '-' + pixelsCorrection + 'px';
        if (parseInt(document.getElementById('search-filter-navigation').offsetHeight)) {
            adjustedHeight = document.getElementById('search-filter-navigation').offsetHeight - pixelsCorrection;
            if (adjustedHeight < 0) { // FIXES AN IE BUG WHEN adjustedHeight < 0
                adjustedHeight = 0;
            }
        }
        document.getElementById('search-content-column-2-content').style.height = adjustedHeight + "px";
    },

    /**
    * Set all height of elements passed in parameter at the same height which is the highest height of all elements
    */
    SetHeightOfElements: function(elementsArray) {

        var max = 0;
        // Search the max height
        for (var x = 0; x < elementsArray.length; ++x) {
            currentElement = elementsArray[x];
            if (currentElement && currentElement.offsetHeight > max) {
                max = currentElement.offsetHeight;
            }
        }

        // Set all elements with the max height
        for (var x = 0; x < elementsArray.length; ++x) {
            currentElement = elementsArray[x];
            if (currentElement) currentElement.style.height = max + 'px';
        }

    },

    /**
    * Set all height of elements passed in parameter at the same height which is the highest height of all elements
    */
    SetHeightOfTopProducts: function() {

        YAHOO.log("------------------------------------------------------", 'info');
        YAHOO.log('Updating height of top product boxes...', 'info');
        var max = 0;
        var elementsArray = YAHOO.util.Dom.getElementsByClassName('desc', 'div', 'top-products');



        // Search the max height
        for (var x = 0; x < elementsArray.length; ++x) {
            currentElement = elementsArray[x];
            if (currentElement && currentElement.offsetHeight > max) {
                max = currentElement.offsetHeight;
            }
        }

        // Set all elements with the max height
        for (var x = 0; x < elementsArray.length; ++x) {
            currentElement = elementsArray[x];
            if (currentElement) currentElement.style.height = max + 'px';
        }

        YAHOO.log(elementsArray.length + ' top product boxe(s) found', 'info');

    },

    /**
    * Removes whitespace-only text node children
    * Copy from prototype.js
    */
    CleanWhitespace: function(element) {
        var node = element.firstChild;
        while (node) {
            var nextNode = node.nextSibling;
            if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
                element.removeChild(node);
            node = nextNode;
        }
        return element;
    },

    /**
    * Active the tooltip for each link of the availability feature
    * For All Page
    */
    ActivateTooltip: function() {

        YAHOO.log("------------------------------------------------------", 'info');
        YAHOO.log("Activating tooltip links...", 'info');
        // Obtain an array of the links for which the tooltip should be activate
        var links = YAHOO.util.Dom.getElementsByClassName('tooltip', 'b');

        YAHOO.log(links.length + ' tooltip link(s) found', 'info');

        // For links which all have titles, this is all we need. 
        // The tooltip text for each context element will be set from the title attribute 
        if (links.length > 0) {
            var ttA = new YAHOO.widget.Tooltip("ttA", {
                context: links,
                autodismissdelay: 10000
            });
        }
    }

};


/**
* FutureStore.Homepage
*/
FutureStore.EuropeHomepage = {

    Init: function() {

        YAHOO.log('------------------------------------------------------', 'info');
        YAHOO.log('Enter FutureStore.EuropeHomepage.Init');

        if (document.getElementById('jsEuropeHomepage')) {
            var nodes = YAHOO.util.Selector.query('#box-technologies ul.nav > li > a');

            YAHOO.util.Event.addListener(nodes, "click", function(e) {
                FutureStore.EuropeHomepage.SelectPanel(this);
                YAHOO.util.Event.preventDefault(e);
            });

            FutureStore.EuropeHomepage.SetFooterLayout();

            // Selecting the tab depends on current date
            var currentDate = new Date();
            var nodesRow1 = YAHOO.util.Selector.query('#tabsRow1 > li > a');
            var nodesRow2 = YAHOO.util.Selector.query('#tabsRow2 > li > a');
            var selectedTab = 1;

            if (nodesRow1 != null && nodesRow2 != null) {
                /*  if want to keep row1 and row2 equal length
				
				var sumRow1Length = 0;
                var sumRow2Length = 0;
                for ( var i=0; i < nodesRow1.length; ++i )
                {
                sumRow1Length += parseInt(nodesRow1[i].clientWidth);
                }
                for ( var i=0; i < nodesRow2.length; ++i )
                {
                sumRow2Length += parseInt(nodesRow2[i].clientWidth);
                }
           		
           		var lastTab;
                if (sumRow2Length > sumRow1Length) 
                {
                lastTab = nodesRow1[nodesRow1.length-1];
                lastTab.parentNode.style.width = lastTab.clientWidth + ( sumRow2Length - sumRow1Length ) + "px";
                }
                else
                {
                var lastTab = nodesRow2[nodesRow2.length-1];
                lastTab.parentNode.style.width = lastTab.clientWidth + ( sumRow1Length - sumRow2Length ) + "px";
                }
                */

                var tabsCount = nodesRow1.length + nodesRow2.length;
                selectedTab = currentDate.getDate() % tabsCount;

                if (selectedTab == 0) {
                    selectedTab = tabsCount;
                }

                if (selectedTab <= nodesRow1.length) {
                    FutureStore.EuropeHomepage.MoveFirstTabsRowDown();
                }
            }

            var link = YAHOO.util.Selector.query('#box-technologies ul.nav > li > a.tab' + selectedTab)
            if (link.length > 0) {
                FutureStore.EuropeHomepage.SelectPanel(link[0]);
            }
        }
    },

    SelectPanel: function(link) {
        var techno = link.hash.replace("#", "");
        FutureStore.EuropeHomepage.HideAllPanel();

        // Marks selected link as... selected
        YAHOO.util.Dom.addClass(link.parentNode, 'selected');

        // Marks selected box as... selected
        var boxTech = YAHOO.util.Selector.query('div.' + techno);
        YAHOO.util.Dom.addClass(boxTech, 'box-selected');

    },

    HideAllPanel: function() {

        var nodes = YAHOO.util.Selector.query('#box-technologies ul.nav > li');
        for (var i = 0; i < nodes.length; ++i) {
            YAHOO.util.Dom.removeClass(nodes[i], 'selected');

        }
        nodes = YAHOO.util.Selector.query('#box-technologies > div.box-tech');
        for (var i = 0; i < nodes.length; ++i) {
            YAHOO.util.Dom.removeClass(nodes[i], 'box-selected');

        }

    },

    MoveFirstTabsRowDown: function() {
        // get the max offset of two tabs row
        var tabsRow1 = document.getElementById("tabsRow1");
        var tabsRow2 = document.getElementById("tabsRow2");

        var offsetTopRow1 = tabsRow1.offsetTop;
        var offsetTopRow2 = tabsRow2.offsetTop;

        var maxOffset = (offsetTopRow1 > offsetTopRow2) ? offsetTopRow1 : offsetTopRow2;

        tabsRow1.style.top = maxOffset + "px";
        tabsRow2.style.top = -maxOffset + "px";
    },

    SetFooterLayout: function() {
        var divLeft = document.getElementById("container-footer1-left");
        var divRight = document.getElementById("container-footer1-right");

        if (divLeft != null && divRight != null) {
            var heightLeft = divLeft.clientHeight;
            var heightRight = divRight.clientHeight;

            if (heightLeft > heightRight)
                divRight.style.height = heightLeft + "px";
            else
                divLeft.style.height = heightRight + "px";
        }
    },

    SetTabsRowPosition: function(id) {
        // get the max offset of two tabs row
        var tabsRow1 = document.getElementById("tabsRow1");
        var tabsRow2 = document.getElementById("tabsRow2");

        if (tabsRow1 != null && tabsRow2) {
            var offsetTopRow1 = tabsRow1.offsetTop;
            var offsetTopRow2 = tabsRow2.offsetTop;

            var maxOffset = (offsetTopRow1 > offsetTopRow2) ? offsetTopRow1 : offsetTopRow2;

            var firstRow = (offsetTopRow1 > offsetTopRow2) ? tabsRow2 : tabsRow1;
            var secondRow = (offsetTopRow1 > offsetTopRow2) ? tabsRow1 : tabsRow2;

            // if selected tab is not in the second row, exchange the postion of tab rows 
            var tab = document.getElementById(id);
            var tabrowid = tab.parentNode.parentNode.id;

            if (tabrowid != secondRow.id) {
                if (tabrowid == "tabsRow1") {
                    firstRow.style.top = maxOffset + "px";
                    secondRow.style.top = -maxOffset + "px";
                }
                else {
                    firstRow.style.top = "0px";
                    secondRow.style.top = "0px";
                }
            }
        }
    }
    /*Old Methods used jQuery Framework,
	
	
    InitOld : function() {
    if (document.getElementById('jsEuropeHomepage'))
    {
    $("#box-technologies ul.nav > li > a").each(function() {
    $(this).bind("click", function(e) {
    var techno = this.hash.replace("#","");
    FutureStore.EuropeHomepage.HideAllPanel();
    $(this.parentNode).toggleClass("selected");
    $("#box-technologies-image").removeClass("passives production-products semiconductors interconnect electromechanical development-tools").toggleClass(techno);
    $("div." + techno).toggleClass("box-selected");
    e.preventDefault();
    });
    });
    }
    },
	
	HideAllPanelOld: function() {

		$("#box-technologies ul.nav > li").each(function() {
    $(this).removeClass("selected");
    });
		
		$("#box-technologies > div.box-tech").each(function() {
    $(this).removeClass("box-selected");
    });		
				
    }*/

}


/**
* FutureStore.Search : all stuff for the search page and quick search
*/
FutureStore.Search = {

    Init: function() {

        YAHOO.log("------------------------------------------------------", 'info');
        YAHOO.log("Enter FutureStore.Search.Init", 'info');
        // Initialize part for Search Results Page only
        if (document.getElementById('jsSearchResultsPage')) 
        {
            FutureStore.Search.ManageFilterOfNavigation();
            //FutureStore.Search.SetTopFilterOfNavigation();
            //FutureStore.Shop.Cart.InitUpdateCartController();
            FutureStore.Search.Compare.Init();
            YAHOO.util.Event.addListener("display", "change", FutureStore.Search.SetResultsPerPage);
        }

        // Add a listener for the Quick Search button (present in all pages of site in the header)
        var txtSearch = YAHOO.util.Dom.getElementsByClassName('txt-search');
        var nodesSearch1 = YAHOO.util.Selector.query('#header-quick-search a.search-1');
        var nodesSearch2 = YAHOO.util.Selector.query('#header-quick-search a.search-2');
        /*
        if (!FutureStore.Search.ManualFocus())
        txtSearch[0].focus();
        */
        YAHOO.util.Event.addListener(nodesSearch1, "focus", FutureStore.Search.HandleComboButtonSearch1);
        YAHOO.util.Event.addListener(nodesSearch1, "blur", FutureStore.Search.HandleComboButtonSearch1);
        YAHOO.util.Event.addListener(nodesSearch1, "mouseover", FutureStore.Search.HandleComboButtonSearch1);
        YAHOO.util.Event.addListener(nodesSearch1, "mouseout", FutureStore.Search.HandleComboButtonSearch1);
        YAHOO.util.Event.addListener(nodesSearch2, "focus", FutureStore.Search.HandleComboButtonSearch2);
        YAHOO.util.Event.addListener(nodesSearch2, "blur", FutureStore.Search.HandleComboButtonSearch2);
        YAHOO.util.Event.addListener(nodesSearch2, "mouseover", FutureStore.Search.HandleComboButtonSearch2);
        YAHOO.util.Event.addListener(nodesSearch2, "mouseout", FutureStore.Search.HandleComboButtonSearch2);

        //YAHOO.util.Event.addListener("aspnetForm", "submit", FutureStore.Search.Submit); // Prevent a bug from firefox, bypass the auto-submit of form on enter keypressed
        var submitKey1 = new YAHOO.util.KeyListener(txtSearch[0], { keys: 13 }, FutureStore.Search.Submit); // 13 = Carriage Return
        var submitKey2 = new YAHOO.util.KeyListener(nodesSearch1, { keys: 13 }, FutureStore.Search.Submit); // 13 = Carriage Return
        var submitKey3 = new YAHOO.util.KeyListener(nodesSearch2, { keys: 13 }, FutureStore.Search.Submit); // 13 = Carriage Return
        submitKey1.enable();
        submitKey2.enable();
        submitKey3.enable();
    },

    /**
    * Invoke the search HttpHandler bu gathering the search box input values.
    * 
    */
    ManualFocus: function() {
        var noQuickFocus = YAHOO.util.Dom.getElementsByClassName('noQuiqFocus', 'div');
        if (null != noQuickFocus && 0 < noQuickFocus.length) {
            return true;
        }

        return false;
    },

    /**
    * Invoke the search HttpHandler bu gathering the search box input values.
    * 
    */
    Submit: function(e) {
        var btnSearch = YAHOO.util.Dom.getElementsByClassName('search-1');
        window.location = btnSearch[0].href;
        return false;
    },

    /**
    * 
    * 
    */
    HandleComboButtonSearch1: function(e) {
        var btnSearch = YAHOO.util.Dom.getElementsByClassName('btn-search')[0];
        if (YAHOO.util.Dom.hasClass(btnSearch, "hover-1")) {
            YAHOO.util.Dom.removeClass(btnSearch, "hover-1");
        } else {
            YAHOO.util.Dom.addClass(btnSearch, "hover-1");
        }
        return false;
    },

    /**
    * 
    * 
    */
    HandleComboButtonSearch2: function(e) {
        var btnSearch = YAHOO.util.Dom.getElementsByClassName('btn-search')[0];
        if (YAHOO.util.Dom.hasClass(btnSearch, "hover-2")) {
            YAHOO.util.Dom.removeClass(btnSearch, "hover-2");
        } else {
            YAHOO.util.Dom.addClass(btnSearch, "hover-2");
        }
        return false;
    },

    /**
    * Manage <filter navigation> menu, set top and height
    * For Search Page
    */
    SetTopFilterOfNavigation: function() {
        FutureStore.SetTopFilterOfNavigation(document.getElementById('search-content-summary').offsetHeight);
    },

    /**
    * Manage <filter navigation> menu
    * For Search Page
    */
    ManageFilterOfNavigation: function() {

        var filterNavigation = new Array();
        filterNavigation = document.getElementById('search-filter-navigation-content').childNodes;
        var currentNode;
        for (var x = 0; x < filterNavigation.length; ++x) {
            currentNodes = filterNavigation[x].childNodes;
            for ( var i = 0; i < currentNodes.length; ++i ){ 
                if (currentNodes[i].nodeName.toLowerCase() == 'div') {
                    for ( var j = 0; j < currentNodes[i].childNodes.length; ++j ){ 
                        if (currentNodes[i].childNodes[j].nodeName.toLowerCase() == 'ul') {
                            if (currentNodes[i].offsetHeight > 300) {
                                currentNodes[i].style.overflow = 'auto';
                                currentNodes[i].style.height = '300px';
                            }
                        }
                    }
                }
            }
        }
    },


    /**
    * Set the results per page number
    * For Search Page
    */
    SetResultsPerPage: function() {
        var display = document.getElementById('display');
        var destinationUrl = display.options[display.selectedIndex].value;
        var sep = "_"
        var part1 = destinationUrl.split(sep, 1);

        if (destinationUrl) document.location.href = destinationUrl.replace(part1 + sep, "");
    }

};

/**
* FutureStore.Search.Compare : all stuff for the compared product tool in search page
*/
FutureStore.Search.Compare = {

    /**
    * Init the compare tool
    */
    Init: function() {

        YAHOO.log("------------------------------------------------------", 'info');
        YAHOO.log("Enter FutureStore.Search.Compare.Init", 'info');
        // Initialize part for Search Results Page only
        if (document.getElementById('jsSearchResultsPage')) {
            var buttonClearAll = YAHOO.util.Dom.getElementsByClassName('button-clear-all', 'a', 'product-compare');
            if (buttonClearAll) {
                YAHOO.util.Event.addListener(buttonClearAll[0], "click", FutureStore.Search.Compare.ClearAll);
            }
        }
        /*
        if (document.getElementById('jsProductComparePage')) {
            // Nothing to do
        }
        */
        if (document.getElementById('jsProductComparePage')) {
            
            FutureStore.Shop.Cart.InitUpdateCartController();
            
            var backBtn = YAHOO.util.Dom.getElementsByClassName('cmp-item', 'a');
            
            if (backBtn) {
                YAHOO.util.Event.addListener(backBtn[0], "click", function() {
                    if(document.referrer) {
                        window.open(document.referrer,'_self');
                    } else {history.go(-1);}
                });
            }
        }
    },

    /**
    * Compare a Product : add or remove product in compare tool
    */
    CompareProduct: function(chkBox, productId) {
        if (chkBox && chkBox.checked) {
            FutureStore.Search.Compare.AddProduct(productId, chkBox);
        } else {
            FutureStore.Search.Compare.RemoveProduct(productId);
        }
    },

    /**
    * Ajax call to add a product in compare tool
    */
    AddProduct: function(productId, chkBox) {
        var d = new Date();
        var culture = FutureStore.Newsletter.GetNewsletterCulture();

        var transaction = YAHOO.util.Connect.asyncRequest('GET', '/ProductCompare.asmx/AddProduct?ts=' + d.getTime() + '&productId=' + productId + '&culture=' + culture,
	    				{ success: function(response) {
	    				    FutureStore.Search.Compare.CompleteAddProduct(response, chkBox);
	    				},
	    				    failure: FutureStore.Search.Compare.HandleError,
	    				    argument: {}
	    				});
    },

    /**
    * Ajax call to remove a product from compare tool
    */
    RemoveProduct: function(productId) {
        var d = new Date();
        var transaction = YAHOO.util.Connect.asyncRequest('GET', '/ProductCompare.asmx/RemoveProduct?ts=' + d.getTime() + '&productId=' + productId,
	    				{ success: FutureStore.Search.Compare.CompleteRemoveProduct,
	    				    failure: FutureStore.Search.Compare.HandleError,
	    				    argument: {}
	    				});
    },

    /**
    * Ajax call to clear all the compare tool (remove all products from compare tool)
    */
    ClearAll: function() {
        var transaction = YAHOO.util.Connect.asyncRequest('GET', '/ProductCompare.asmx/ClearAll',
	    				{ success: FutureStore.Search.Compare.CompleteClearAll,
	    				    failure: FutureStore.Search.Compare.HandleError,
	    				    argument: {}
	    				});
    },

    /**
    * Ajax call to get informations of a product
    */
    GetProduct: function(productId) {

        var d = new Date();
        var culture = FutureStore.Newsletter.GetNewsletterCulture();

        var transaction = YAHOO.util.Connect.asyncRequest('GET', '/ProductCompare.asmx/GetProduct?ts=' + d.getTime() + '&productId=' + productId + '&culture=' + culture,
	    				{ success: FutureStore.Search.Compare.CompleteGetProduct,
	    				    failure: FutureStore.Search.Compare.HandleError,
	    				    argument: {}
	    				});
    },

    /**
    * Ajax call to get all product registered in compared tool
    */
    GetProducts: function() {
        var d = new Date();
        var culture = FutureStore.Newsletter.GetNewsletterCulture();

        var transaction = YAHOO.util.Connect.asyncRequest('GET', '/ProductCompare.asmx/GetProducts?ts=' + d.getTime() + '&culture=' + culture,
	    				{ success: FutureStore.Search.Compare.CompleteGetProducts,
	    				    failure: FutureStore.Search.Compare.HandleError,
	    				    argument: {}
	    				});
    },

    /**
    * Process the add product on the client side
    */
    CompleteAddProduct: function(val, chkBox) {
        docXml = val.responseXML;
        var products = docXml.getElementsByTagName('string');
        var productList = new Array();
        for (var i = 0; i < products.length; ++i) {
            if (products[i].firstChild) {
                productList[i] = products[i].firstChild.nodeValue;
            } else {
                productList[i] = null;
            }
        }

        // Product was correctly inserted
        if (productList[0] != -1) {
            // Product is from a new leaf category than previous registered compared products
            if (productList[7] == "newLeaf") {
                FutureStore.Search.Compare.EmptyAllComparedProducts();
            }
            YAHOO.util.Dom.getElementsByClassName('product-panel-wrapper', 'div', '')[0].style.display = "block";
            FutureStore.Search.Compare.ViewComparedProduct(productList[0], true, productList);
        } else {
            if (chkBox) {
                chkBox.checked = false;
            }
        }
    },

    /**
    * Process the remove product on the client side
    */
    CompleteRemoveProduct: function(val) {
        var index;
        var numberOfRegisteredComparedproducts;
        var productId;
        docXml = val.responseXML;

        if (docXml.getElementsByTagName('int')[0].firstChild) {
            index = docXml.getElementsByTagName('int')[0].firstChild.nodeValue;
        }
        if (docXml.getElementsByTagName('int')[1].firstChild) {
            numberOfRegisteredComparedproducts = docXml.getElementsByTagName('int')[1].firstChild.nodeValue;
        }
        if (docXml.getElementsByTagName('int')[2].firstChild) {
            productId = docXml.getElementsByTagName('int')[2].firstChild.nodeValue;
        }

        if (index != -1) {
            if (numberOfRegisteredComparedproducts < 1) {
                YAHOO.util.Dom.getElementsByClassName('product-panel-wrapper', 'div', '')[0].style.display = "none";
            }
            FutureStore.Search.Compare.ViewComparedProduct(index, false, null);
        }
    },

    /**
    * Process the clear all product on the client side
    */
    CompleteClearAll: function(val) {
        docXml = val.responseXML;
        var products = docXml.getElementsByTagName('int');
        FutureStore.Search.Compare.EmptyAllComparedProducts();
        YAHOO.util.Dom.getElementsByClassName('product-panel-wrapper', 'div', '')[0].style.display = "none";
    },

    /**
    * Process the clear all product on the client side
    */
    CompleteGetProducts: function(val) {
        var noProductRegistered = true;
        FutureStore.Search.Compare.EmptyAllComparedProducts();
        docXml = val.responseXML;
        var products = docXml.getElementsByTagName('string');
        var productInfos;
        for (var i = 0; i < 40; i++) // 5 products x 8 property per product = 40 items
        {
            productInfos = new Array();
            for (var j = 0; j < 8; j++) {
                if (products[i].firstChild) {
                    productInfos[j] = products[i].firstChild.nodeValue;
                } else {
                    productInfos[j] = null;
                }
                i++;
            }
            i--; // Cancel the last i++, loop will do the job

            // If a product is registered at this index
            if (parseInt(productInfos[0]) >= 0) {
                noProductRegistered = false;
                FutureStore.Search.Compare.ViewComparedProduct(productInfos[0], true, productInfos);
            }
        }
        // If no product is register, make sure that the compared products panel is not displayed
        if (noProductRegistered) {
            YAHOO.util.Dom.getElementsByClassName('product-panel-wrapper', 'div', '')[0].style.display = "none";
        } else {
            YAHOO.util.Dom.getElementsByClassName('product-panel-wrapper', 'div', '')[0].style.display = "block";
        }
    },

    /**
    * Process the add product on the client side
    */
    CompleteGetProduct: function(val) {
    },

    /**
    * Checked or unchecked the checkbox associate to itemNumber
    */
    HandleError: function(error) {
        var val = error.responseText;
        alert(val);
    },

    /**
    * Empty all informations of compared products list
    */
    EmptyAllComparedProducts: function() {
        var comparedProducts = YAHOO.util.Dom.getElementsByClassName('compared-item', 'dl', 'product-compare-content');
        for (var i = 0; i < comparedProducts.length; i++) {
            FutureStore.Search.Compare.ViewComparedProduct(i, false, null);
        }
    },

    /**
    * Process the add or remove product on the clientside
    */
    ViewComparedProduct: function(index, display, productInfos) {
        var comparedProducts = YAHOO.util.Dom.getElementsByClassName('compared-item', 'dl', 'product-compare-content');

        // Get the right compared product box (with index parameter)
        comparedProduct = comparedProducts[index];
        if (comparedProduct.childNodes.length != 5) {
            comparedProduct = FutureStore.CleanWhitespace(comparedProduct);
        }

        // Get some html elements of compared product box

        imgAnchor = comparedProduct.childNodes[0].childNodes[0];
        img = imgAnchor.childNodes[0];
        mfrNameAnchor = comparedProduct.childNodes[1].childNodes[0];
        mfrPartNumber = comparedProduct.childNodes[2].childNodes[0];
        price = YAHOO.util.Dom.getElementsByClassName('price', 'span', comparedProduct.childNodes[3])[0];
        fromTxt = comparedProduct.childNodes[3].childNodes[0];
        removeAnchor = comparedProduct.childNodes[4].firstChild;

        // In case of AddProduct, display the compared product box
        if (display) {
            imgAnchor.href = productInfos[6];
            if (productInfos[2]) {
                img.src = productInfos[2];
            }
            price.appendChild(document.createTextNode(productInfos[5]));
            mfrNameAnchor.appendChild(document.createTextNode(productInfos[3]));
            var regex = /<acronym title="(.+)">(.+)<\/acronym>/i;
            if (productInfos[4].match(regex)) {
                var mfrPartNumberShortValue = productInfos[4].match(regex)[1];
                var mfrpartNumberLongValue = productInfos[4].match(regex)[2];
                var acronym = document.createElement('acronym');
                var acronymTitle = document.createAttribute('title');
                acronymTitle.nodeValue = mfrpartNumberLongValue;
                acronym.setAttributeNode(acronymTitle);
                acronym.appendChild(document.createTextNode(mfrpartNumberLongValue));
                mfrPartNumber.appendChild(acronym);
            } else {
                mfrPartNumber.appendChild(document.createTextNode(productInfos[4]));
            }

            fromTxt.style.visibility = "visible";
            mfrNameAnchor.href = productInfos[6];

            removeAnchor.style.visibility = "visible";
            removeAnchor.href = "";
            var onC = 'FutureStore.Search.Compare.CompareProduct(null,' + productInfos[1] + ');return false;';
            removeAnchor.onclick = new Function(onC);

            comparedProduct.className += " " + productInfos[1];
            FutureStore.Search.Compare.HandleCheckbox(productInfos[1], true);

        } else { // Hide the compared product box

            imgAnchor.removeAttribute("href");
            img.src = "/Style%20Library/FLS/Images/Samples/sample-thumbnail-no-image.png";
            if (price != null && price.childNodes.length) {
                price.removeChild(price.firstChild);
            }
            mfrNameAnchor.href = "";
            if (mfrNameAnchor.childNodes.length) {
                mfrNameAnchor.removeChild(mfrNameAnchor.firstChild);
            }
            if (mfrPartNumber.childNodes.length) {
                mfrPartNumber.removeChild(mfrPartNumber.firstChild);
            }
            if ( fromTxt != null ) {
                fromTxt.style.visibility = "hidden";
            }

            // Unchecked checkbox if present in page
            var itemNumber = String(comparedProduct.className);
            var regex = /([0-9]+)/im;
            if (itemNumber != 'null' && itemNumber.match(regex) != null) {
                FutureStore.Search.Compare.HandleCheckbox(itemNumber.match(regex)[1], false);
                comparedProduct.className = comparedProduct.className.replace(" " + itemNumber.match(regex)[1], '');
            }
            removeAnchor.style.visibility = "hidden";
        }
    },

    /**
    * Checked or unchecked the checkbox associate to itemNumber
    */
    HandleCheckbox: function(itemNumber, mustBeChecked) {
        var associateCheckbox = YAHOO.util.Dom.getElementsByClassName("ItemNumber" + itemNumber, 'span');
        if (associateCheckbox && associateCheckbox.length > 0) {
            for (var x = 0; x < associateCheckbox.length; ++x) {
                associateCheckbox[x].childNodes[0].checked = mustBeChecked;
            }
        }
    }
};



/**
* FutureStore.Technologies : stuff for the technologies pages
*/
FutureStore.Technologies = {

    Init: function() {

        YAHOO.log("------------------------------------------------------", 'info');
        YAHOO.log("Enter FutureStore.Technologies.Init", 'info');
        // Initialize part for Technologies Page Type (Technologies, CategoryLanding, CategoryBrowser, Product)
        if (document.getElementById('jsTechnologiesPage')) 
        {
            FutureStore.SetTopFilterOfNavigation(80);
            FutureStore.Technologies.SetHeightOfTechnologyBoxes();
        }
        FutureStore.Technologies.CategoryLanding.Init();
        FutureStore.Technologies.CategoryBrowser.Init();
        FutureStore.Technologies.Product.Init();

    },

    /**
    * Adjust the top of Filter navigation Menu
    */
    SetTopFilterOfNavigation: function() {
        FutureStore.SetTopFilterOfNavigation(120);
    },

    /**
    * Adjust the height of each technology group box
    */
    SetHeightOfTechnologyBoxes: function() {
        var technologyBoxes = YAHOO.util.Dom.getElementsByClassName('sub-categories-list-content', 'div', 'search-content-column-1-content');
        FutureStore.SetHeightOfElements(technologyBoxes);
    }

}

/**
* FutureStore.Technologies.CategoryLanding : stuff for the category landing pages
*/
FutureStore.Technologies.CategoryLanding = {

    Init: function() {

        YAHOO.log("------------------------------------------------------", 'info');
        YAHOO.log("Enter FutureStore.Technologies.CategoryLanding.Init", 'info');
        // Initialize part for CategoryLanding Page Type
        if (document.getElementById('jsCategoryLandingPage')) {
            FutureStore.Technologies.SetTopFilterOfNavigation();
            var linkSubCategories = YAHOO.util.Dom.getElementsByClassName('view-sub-categories', 'a', 'search-content-content');
            YAHOO.util.Event.addListener(linkSubCategories, "click", FutureStore.Technologies.CategoryLanding.ViewSubCategories);
        }

    },

    /**
    * Manage displaying of sub-categories in Category Browser Page
    *
    */
    CurrentSelectedCategory: null,
    ViewSubCategories: function(e) {

        var footer;
        var link;
        var subCategories;
        var categoriesList = YAHOO.util.Dom.getElementsByClassName('category-preview', 'div', 'search-content-column-1-content');

        // Deselect current selected category
        if (FutureStore.Technologies.CategoryLanding.CurrentSelectedCategory != null) {
            link = FutureStore.Technologies.CategoryLanding.CurrentSelectedCategory;
            footer = link.parentNode;
            subCategories = YAHOO.util.Dom.getElementsByClassName('sub-categories-list', 'div', footer.parentNode)[0];
            YAHOO.util.Dom.removeClass(link, 'selected');
            YAHOO.util.Dom.removeClass(footer, 'selected');
            YAHOO.util.Dom.removeClass(subCategories, 'displayed');
        }

        // Selected the new one if... new
        if (FutureStore.Technologies.CategoryLanding.CurrentSelectedCategory != this) {
            link = this;
            FutureStore.Technologies.CategoryLanding.CurrentSelectedCategory = link;
            footer = link.parentNode;
            subCategories = YAHOO.util.Dom.getElementsByClassName('sub-categories-list', 'div', footer.parentNode)[0];
            YAHOO.util.Dom.addClass(link, 'selected');
            YAHOO.util.Dom.addClass(footer, 'selected');
            YAHOO.util.Dom.addClass(subCategories, 'displayed');
        } else {
            FutureStore.Technologies.CategoryLanding.CurrentSelectedCategory = null;
        }

        return false;
    }

}

/**
* FutureStore.Technologies.CategoryBrowser : stuff for the category browser pages
*/
FutureStore.Technologies.CategoryBrowser = {

    Init: function() {

        YAHOO.log("------------------------------------------------------", 'info');
        YAHOO.log("Enter FutureStore.Technologies.CategoryBrowser.Init", 'info');
        // Initialize part for CategoryLanding Page Type
        if (document.getElementById('jsCategoryBrowserPage')) {
            FutureStore.Technologies.SetTopFilterOfNavigation();
        }

    }

}

/**
* FutureStore.Technologies.RichProduct : stuff for the rich product pages
*/
FutureStore.Technologies.Product = {

    DetailPanels: null,
    Thumbnails: null,

    Init: function() {

        YAHOO.log("------------------------------------------------------", 'info');
        YAHOO.log("Enter FutureStore.Technologies.Product.Init", 'info');
        // Initialize part for Product Page Type (Rich or Simple)
        if (document.getElementById('jsProductPage')) {
            // Handle the rich product panels
            this.DetailPanels = YAHOO.util.Dom.getElementsByClassName('productPanel', 'a', 'product-details-content');
            YAHOO.util.Event.addListener(this.DetailPanels, "click", FutureStore.Technologies.Product.ViewPanel);
            YAHOO.util.Event.addListener(this.DetailPanels, "focus", FutureStore.Technologies.Product.ViewPanel);
            YAHOO.log('Rich product panel activated', 'info');

            // Handle the add to cart tool
            FutureStore.Shop.Cart.InitUpdateCartController();
            YAHOO.log('Add to cart tool activated', 'info');

            // Handle Product Images Control
            // Get the first SML image object
            var smlImg = YAHOO.util.Dom.getFirstChild(YAHOO.util.Dom.getFirstChild(document.getElementById('product-images-thumbnails')));
            if (smlImg) {
                // Instantiate a Panel from markup
                var imgPanel = new YAHOO.widget.Panel("imgPanel", { visible: false, close: true, modal: true, draggable: true, fixedcenter: true, constraintoviewport: true });
                imgPanel.setHeader('&nbsp;<a class="container-close" href="#">Close</a>');
                imgPanel.setBody('<img src="' + FutureStore.Technologies.Product.GetCurrentImageSrc(smlImg, 'LRG') + '" />');
                //imgPanel.setFooter('<a class="container-close" href="#">Close</a>');
                imgPanel.render("container-sharepoint-main");
                YAHOO.util.Event.addListener("modalRichProductImageLink", "click", FutureStore.Technologies.Product.ViewLRGImage, imgPanel);
                // Handle the product images panel
                this.Thumbnails = YAHOO.util.Dom.getElementsByClassName('productThumbnail', 'img', 'product-images-thumbnails');
                YAHOO.util.Event.addListener(this.Thumbnails, "click", FutureStore.Technologies.Product.ViewImage, imgPanel);
                YAHOO.util.Event.addListener(this.Thumbnails, "focus", FutureStore.Technologies.Product.ViewImage, imgPanel);
                YAHOO.log('Product Images Handler activated', 'info');
            }

        }

    },

    /**
    * Manage tabs in Rich Product Page
    *
    */
    ViewPanel: function(e) {

        // Hide all panels
        for (var x = 0; x < FutureStore.Technologies.Product.DetailPanels.length; ++x) {
            document.getElementById(FutureStore.Technologies.Product.DetailPanels[x].id.replace('view', 'title-product-details')).className = "";
            document.getElementById(FutureStore.Technologies.Product.DetailPanels[x].id.replace('view', 'product-details')).style.display = "none";
        }

        // Show enabled panel
        document.getElementById(this.id.replace('view', 'title-product-details')).className = "selected";
        document.getElementById(this.id.replace('view', 'product-details')).style.display = "block";
        return false;
    },

    /**
    * Manage image which must be display in Product Page
    *
    */
    ViewImage: function(e, obj) {

        var anchor = document.getElementById('modalRichProductImageLink');
        var imageMedium = YAHOO.util.Dom.getFirstChild(anchor);

        var LRG = FutureStore.Technologies.Product.GetCurrentImageSrc(this, 'LRG');
        var MED = FutureStore.Technologies.Product.GetCurrentImageSrc(this, 'MED');
        anchor.href = LRG;
        imageMedium.src = MED;

        // Update the imgPanel object with the new LRG image
        obj.setBody('<img src="' + LRG + '" />');

    },

    /**
    * Manage image which must be display in Product Page
    *
    */
    ViewLRGImage: function(e, obj) {
        YAHOO.util.Event.preventDefault(e); // To prevent the browser to follow the anchor's link
        obj.show();
    },

    /**
    * Get the current image (size in parameter, should be : MED, SML, LRG)
    *
    */
    GetCurrentImageSrc: function(smlImgObj, size) {

        var regex = /-(BCK|FNT|SID)-(MED|SML|LRG)\.[a-z]{3,4}/i;
        if (smlImgObj.src.match(regex)) {
            var strMatch = smlImgObj.src.match(regex)[0];
            var strMatchReplace = strMatch.replace('SML', 'MED');
            var smlImg = smlImgObj.src;
            var medImg = smlImg.replace(strMatch, strMatchReplace);
            var strMatchReplace = strMatch.replace('SML', 'LRG');
            var lrgImg = smlImg.replace(strMatch, strMatchReplace);

            if (size == 'LRG') {
                return lrgImg;
            }
            if (size == 'MED') {
                return medImg;
            }
        }
        YAHOO.log('Product has no image', 'warn');
        return smlImg; // By default returns the src of the SML image

    }

}

/**
* FutureStore.Technologies.RichProduct : stuff for the rich product pages
*/
/*FutureStore.Technologies.Product.Rich = {
	
DetailPanels : null,
	
Init : function() {
		
// Initialize part for Product Page Type (Rich or Simple)
if (document.getElementById('jsRichProductPage'))
{
}
		
}		
}*/



/**
* FutureStore.Manufacturers : stuff for the manufacturers pages
*/
FutureStore.Manufacturers = {

    Init: function() {

        YAHOO.log("------------------------------------------------------", 'info');
        YAHOO.log("Enter FutureStore.Manufacturers", 'info');
        // Initialize part for Manufacturers Landing Page
        if (document.getElementById('jsManufacturersLandingPage')) {
            FutureStore.Manufacturers.SetHeightOfManufacturersList();
        }

        // Initialize part for Manufacturer Detail Page
        if (document.getElementById('jsManufacturerDetailPage')) {
            FutureStore.Manufacturers.SetTopFilterOfNavigation();
        }

    },

    /**
    * Adjust the top of Filter navigation Menu
    */
    SetTopFilterOfNavigation: function() {
        FutureStore.SetTopFilterOfNavigation(60);
    },

    /**
    * Set the same height for the 4 columns of Manufacturers Landing Page
    * The height ot the most long column is used for the 4 columns
    */
    SetHeightOfManufacturersList: function() {

        var manufacturersListContent = new Array(document.getElementById("manufacturersListContent1"), document.getElementById("manufacturersListContent2"), document.getElementById("manufacturersListContent3"), document.getElementById("manufacturersListContent4"));
        FutureStore.SetHeightOfElements(manufacturersListContent);

    }

}

/**
* FutureStore : stuff for the shop section pages
*/
FutureStore.Shop = {

    Init: function() {

        YAHOO.log("------------------------------------------------------", 'info');
        YAHOO.log("Enter FutureStore.Shop.Init", 'info');
        // Initialize part for Shop Page
        if (document.getElementById('jsShopPage')) {
            FutureStore.Shop.SetTopFilterOfNavigation();
        }
        FutureStore.Shop.Cart.Init();

    },

    /**
    * Adjust the top of Filter navigation Menu
    */
    SetTopFilterOfNavigation: function() {
        FutureStore.SetTopFilterOfNavigation(20);
    }

}

/**
* FutureStore : stuff for the shop section pages
*/
FutureStore.Shop.Cart = {

    Init: function() {

        YAHOO.log("------------------------------------------------------", 'info');
        YAHOO.log("Enter FutureStore.Shop.Cart.Init", 'info');
        // Initialize part for Shop Page
        if (document.getElementById('jsViewCartPage')) {
            FutureStore.Shop.Cart.InitUpdateCartController();
        }

    },

    /**
    * Hook Update Cart Controller Event
    *
    */
    InitUpdateCartController: function(e) {

        var updateCartControllerList = YAHOO.util.Dom.getElementsByClassName('qtySelectorItem', 'div');
        var addToCartControllerList = new Array();
        var removeFromCartControllerList = new Array();
        var cartControllerList = new Array();
        var idTmp;

        // vanilla loops must be use beacause of protoypejs use; see <http://www.prototypejs.org/api/array>
        for (var x = 0; x < updateCartControllerList.length; ++x) {
            idTmp = updateCartControllerList[x].className.replace('qtySelectorItem qtySelectorItem', '');
            addToCartControllerList[x] = YAHOO.util.Dom.getElementsByClassName('qtySelectorUpItem' + idTmp, 'a', updateCartControllerList[x])[0];
            removeFromCartControllerList[x] = YAHOO.util.Dom.getElementsByClassName('qtySelectorDownItem' + idTmp, 'a', updateCartControllerList[x])[0];
            cartControllerList[x] = YAHOO.util.Dom.getElementsByClassName('qtyCartItem' + idTmp, 'input', updateCartControllerList[x])[0];
        }

        YAHOO.util.Event.addListener(addToCartControllerList, "click", FutureStore.Shop.Cart.AddToCart);
        YAHOO.util.Event.addListener(removeFromCartControllerList, "click", FutureStore.Shop.Cart.RemoveFromCart);
        var submitAddKey = new YAHOO.util.KeyListener(addToCartControllerList, { keys: 13 }, FutureStore.Shop.Cart.AddToCart); // 13 = Carriage Return
        var submitRemoveKey = new YAHOO.util.KeyListener(removeFromCartControllerList, { keys: 13 }, FutureStore.Shop.Cart.RemoveFromCart); // 13 = Carriage Return
        submitAddKey.enable();
        submitRemoveKey.enable();

        YAHOO.util.Event.addListener(cartControllerList, "blur", FutureStore.Shop.Cart.RoundUp);

        return false;
    },

    /**
    * Add to cart (add by step), Manage Max and Min Cart Qty
    * Step value is initialized in hidden field id="qtyStepItem"
    * Max quantity is initialized in hidden field id="qtyMaxItem"
    * Min quantity is initialized in hidden field id="qtyMinItem"
    */
    AddToCart: function() {

        var itemId = this.className.replace('qtySelectorUpItem qtySelectorUpItem', '');
        var cartQty = YAHOO.util.Dom.getElementsByClassName('qtyCartItem' + itemId, 'input', this.parentNode)[0];
        var maxQty = YAHOO.util.Dom.getElementsByClassName('qtyMaxItem' + itemId, 'input', this.parentNode)[0];
        var stepQty = YAHOO.util.Dom.getElementsByClassName('qtyStepItem' + itemId, 'input', this.parentNode)[0];

        if (parseInt(cartQty.value) + parseInt(stepQty.value) <= parseInt(maxQty.value)) {
            cartQty.value = parseInt(cartQty.value) + parseInt(stepQty.value);
        }

        return false;

    },

    /**
    * Remove cart (add by step), Manage Max and Min Cart Qty
    * Step value is initialized in hidden field id="qtyStepItem"
    * Max quantity is initialized in hidden field id="qtyMaxItem"
    * Min quantity is initialized in hidden field id="qtyMinItem"
    */
    RemoveFromCart: function() {

        var itemId = this.className.replace('qtySelectorDownItem qtySelectorDownItem', '');
        var cartQty = YAHOO.util.Dom.getElementsByClassName('qtyCartItem' + itemId, 'input', this.parentNode)[0];
        var minQty = YAHOO.util.Dom.getElementsByClassName('qtyMinItem' + itemId, 'input', this.parentNode)[0];
        var stepQty = YAHOO.util.Dom.getElementsByClassName('qtyStepItem' + itemId, 'input', this.parentNode)[0];

        if (parseInt(cartQty.value) - parseInt(stepQty.value) >= parseInt(minQty.value)) {
            cartQty.value = parseInt(cartQty.value) - parseInt(stepQty.value);
        }

        return false;

    },

    /**
    * 
    */
    RoundUp: function() {

        //alert('Round Up Cart - (Control ID:  ' + this.id.replace('qtyCartItem', '') + ')');
        var itemId = this.className.replace('qtyCartItem', '');
        var qtyCartItem = this.value;
        var qtyMaxItem = parseInt(YAHOO.util.Dom.getElementsByClassName('qtyMaxItem' + itemId, 'input', this.parentNode)[0].value);
        var qtyMinItem = parseInt(YAHOO.util.Dom.getElementsByClassName('qtyMinItem' + itemId, 'input', this.parentNode)[0].value);
        var qtyStepItem = parseInt(YAHOO.util.Dom.getElementsByClassName('qtyStepItem' + itemId, 'input', this.parentNode)[0].value);

        /* Verify integrity */
        if (!qtyCartItem.match("^[0-9]*$")) {
            qtyCartItem = qtyMinItem;
        }
        else
        /* Verify maximum limit */
            if (qtyCartItem > qtyMaxItem) {
            qtyCartItem = qtyMaxItem;
        }
        else
        /* Verify minimum limit */
            if (qtyCartItem < qtyMinItem) {
            qtyCartItem = qtyMinItem;
        }
        else
        /* Round Up */
            if (qtyCartItem % qtyStepItem > 0) {
            qtyCartItem = qtyCartItem - (qtyCartItem % qtyStepItem) + qtyStepItem;
        }

        this.value = qtyCartItem;

        return false;

    }


}

/**
* FutureStore : stuff for the newsletter
*/
FutureStore.Newsletter = {

    Init: function() {

        YAHOO.log("------------------------------------------------------", 'info');
        YAHOO.log("Enter FutureStore.Newsletter.Init", 'info');
        // Initialize part for News letter
        // Add a listener for the subscribe button (present in all pages of site in the header)
        var inputNewsletterDiv = document.getElementById('newsletter-input');
        if (null != inputNewsletterDiv) {
            // Nothing to do
            var inputNewsletter = YAHOO.util.Dom.getElementsByClassName('newsletter-input-email', 'input');
            if (null != inputNewsletter && 0 < inputNewsletter.length) {
                var submitKey = new YAHOO.util.KeyListener(inputNewsletter[0].id, { keys: 13 }, FutureStore.Newsletter.RegisterNewsletter); // 13 = Carriage Return
                submitKey.enable();
            }

            var btnNewsletter = YAHOO.util.Dom.getElementsByClassName('newsletter-subscribe', 'a');
            if (null != btnNewsletter && 0 < btnNewsletter.length) {
                YAHOO.util.Event.removeListener(btnNewsletter[0].id, "click");
                YAHOO.util.Event.addListener(btnNewsletter[0].id, "click", FutureStore.Newsletter.RegisterNewsletter);
            }
        }
    },

    /**
    * Invoke the search HttpHandler bu gathering the search box input values.
    * 
    */
    GetNewsletterEmailAddress: function() {
        var inputNewsletterDiv = document.getElementById('newsletter-input');
        if (null == inputNewsletterDiv)
            return null;

        var inputNewsletter = YAHOO.util.Dom.getElementsByClassName('newsletter-input-email', 'input');
        if (null == inputNewsletter || 0 >= inputNewsletter.length)
            return null;

        return inputNewsletter[0].value;
    },

    /**
    * Get the newsletter's current culture.
    */
    GetNewsletterCulture: function() {
        var inputNewsletterDiv = document.getElementById('newsletter-input');
        if (null == inputNewsletterDiv)
            return null;

        var inputNewsletter = YAHOO.util.Dom.getElementsByClassName('newsletter-input-email', 'input');
        if (null == inputNewsletter || 0 >= inputNewsletter.length)
            return null;

        var culture = inputNewsletter[0].getAttribute('culture');
        if (null == culture || 0 >= culture.length)
            return 'en-US';

        return culture;
    },

    /**
    * Invoke the search HttpHandler bu gathering the search box input values.
    * 
    */
    RegisterNewsletter: function(e) {
        var emailAddress = FutureStore.Newsletter.GetNewsletterEmailAddress();
        if (null == emailAddress || 0 == emailAddress.length) {
            FutureStore.Newsletter.SetRequiredEmail();

            return;
        }
        else {
            var trimed = emailAddress.replace(' ', '');
            if (null == trimed || 0 == trimed.length) {
                FutureStore.Newsletter.SetRequiredEmail();

                return;
            }
        }

        var culture = FutureStore.Newsletter.GetNewsletterCulture();

        try {
            /*new Ajax.Request('/NewsletterService.asmx/Subscribe',
            {	parameters: {"emailAddress":emailAddress}, 
            onSuccess: FutureStore.Newsletter.CompleteRegisterNewsletter,
            onFailure: FutureStore.Newsletter.HandleError
            });*/
            /*Sys.Net.WebServiceProxy.invoke('/NewsletterService.asmx', 'Subscribe', true, 
            {'emailAddress':emailAddress}, 
            FutureStore.Newsletter.CompleteRegisterNewsletter, 
            FutureStore.Newsletter.HandleError, 
            'User Context', 1000000);*/
            var transaction = YAHOO.util.Connect.asyncRequest('GET', '/NewsletterService.asmx/Subscribe?emailAddress=' + emailAddress + '&culture=' + culture,
	    				{ success: FutureStore.Newsletter.CompleteRegisterNewsletter,
	    				    failure: FutureStore.Newsletter.HandleError,
	    				    argument: {}
	    				});
        }
        catch (ex) {
            alert('ex' + ex);
        }

        FutureStore.Newsletter.SetFooterLayout();
        return false;
    },

    /**
    * Set footer layouts
    * 
    */
    SetFooterLayout: function() {
        var resp = document.getElementById("newsletter-response");
        if (resp != null) {
            resp.style.display = "block";
        }

        var divLeft = document.getElementById("container-footer1-left");
        var divRight = document.getElementById("container-footer1-right");

        if (divLeft != null && divRight != null) {
            var heightLeft = divLeft.clientHeight;
            var heightRight = divRight.clientHeight;

            if (heightLeft > heightRight)
                divRight.style.height = heightLeft + "px";
            else
                divLeft.style.height = heightRight + "px";
        }
    },

    /**
    * Set the display value
    * 
    */
    SetVisibility: function(divId, displayVal, visibleVal) {
        var inputNewsletterDiv = document.getElementById('newsletter-subscribe-box');
        if (null == inputNewsletterDiv)
            return;

        var div = YAHOO.util.Dom.getElementsByClassName(divId, 'div');
        if (null == div || 0 >= div.length)
            return;

        div[0].style.display = displayVal;
        div[0].style.visibility = visibleVal;
    },

    /**
    * Set the required email address fields
    * 
    */
    SetHiddenField: function(hiddenFieldId, val) {
        var inputNewsletterDiv = YAHOO.util.Dom.getElementsByClassName('newsletter-validator-summary', 'div');
        if (null == inputNewsletterDiv)
            return;

        var validatorEmail = YAHOO.util.Dom.getElementsByClassName(hiddenFieldId, 'input');
        if (null == validatorEmail || 0 >= validatorEmail.length)
            return;

        validatorEmail[0].value = val;
    },

    /**
    * Set the required email address fields
    * 
    */
    SetRequiredEmail: function() {
        FutureStore.Newsletter.SetVisibility('newsletter-validator-summary', 'block', 'visible');
        FutureStore.Newsletter.SetVisibility('newsletter-req-email', 'block', 'visible');
        FutureStore.Newsletter.SetVisibility('newsletter-valid-email', 'none', 'hidden');
        FutureStore.Newsletter.SetVisibility('newsletter-used-email', 'none', 'hidden');

        FutureStore.Newsletter.SetVisibility('newsletter-subscribe-done', 'none', 'hidden');
    },

    /**
    * Set the invalid email address fields
    * 
    */
    SetInvalidEmail: function() {
        FutureStore.Newsletter.SetVisibility('newsletter-validator-summary', 'block', 'visible');
        FutureStore.Newsletter.SetVisibility('newsletter-req-email', 'none', 'hidden');
        FutureStore.Newsletter.SetVisibility('newsletter-valid-email', 'block', 'visible');
        FutureStore.Newsletter.SetVisibility('newsletter-used-email', 'none', 'hidden');

        FutureStore.Newsletter.SetVisibility('newsletter-subscribe-done', 'none', 'hidden');
    },

    /**
    * Set the required email address fields
    * 
    */
    SetEmailUsed: function() {
        FutureStore.Newsletter.SetVisibility('newsletter-validator-summary', 'block', 'visible');
        FutureStore.Newsletter.SetVisibility('newsletter-req-email', 'none', 'hidden');
        FutureStore.Newsletter.SetVisibility('newsletter-valid-email', 'none', 'hidden');
        FutureStore.Newsletter.SetVisibility('newsletter-used-email', 'block', 'visible');

        FutureStore.Newsletter.SetVisibility('newsletter-subscribe-done', 'none', 'hidden');
    },

    /**
    * Set the required email address fields
    * 
    */
    SetEmailSubscribed: function() {
        FutureStore.Newsletter.SetVisibility('newsletter-validator-summary', 'none', 'hidden');
        FutureStore.Newsletter.SetVisibility('newsletter-subscribe-done', 'block', 'visible');
    },

    /**
    * the newsletter subscribed
    * 
    */
    CompleteRegisterNewsletter: function(result, eventArgs) {
        var res = FutureStore.Newsletter.ResponseInt(result);
        if (('' + -1) == res) {
            FutureStore.Newsletter.SetRequiredEmail();

            return;
        }
        else if (('' + -2) == res) {
            FutureStore.Newsletter.SetInvalidEmail();

            return;
        }
        else if (('' + -3) == res) {
            FutureStore.Newsletter.SetEmailUsed();

            return;
        }
        else if (('' + -4) == res) {
            FutureStore.Newsletter.SetEmailUsed();

            return;
        }


        FutureStore.Newsletter.SetEmailSubscribed();
    },

    /**
    * check if an response is valid or not
    * 
    */
    ResponseInt: function(result) {
        var validEmailAddress = '' + -4;

        try {
            //validEmailAddress = '' + result;
            docXml = result.responseXML;
            validEmailAddress = docXml.getElementsByTagName('int')[0].firstChild.nodeValue;
        }
        catch (ex) {
        }

        return validEmailAddress;
    },

    /**
    * Checked or unchecked the checkbox associate to itemNumber
    */
    HandleError: function(error) {
        var val = error.get_message();
        alert(val);
    }
}

/**
* FutureStore : stuff for the sharepoint pages
*/
FutureStore.Sharepoint = {

    /**
    * Set a MOSS field readonly (in edit mode)
    * 
    */
    RenderReadOnly: function(id) {
        var myObj = document.getElementById(id);
        //newContent = myObj.innerHTML.replace('value=','style="background: #ddd; border:1px solid #aaa" readonly="readonly" value=');
        newContent = myObj.innerHTML.replace('class="ms-input"', 'style="background: #ddd; border:1px solid #aaa" readonly="readonly" class="ms-input"');
        if ('' != newContent && newContent == myObj.innerHTML)
            newContent = myObj.innerHTML.replace('class=ms-input', 'style="background: #ddd; border:1px solid #aaa" readonly="readonly" class=ms-input');
        myObj.innerHTML = newContent;
    }

}

/**
* FutureStore : the core function
*/
FutureStore.Core = {
    /**
    * Set a modal and set the focus
    * 
    */
    ShowModalAndSetFocus: function(behavId, fieldId) {
        FutureStore.Core.ShowModal(behavId);
        FutureStore.Core.ShowFocus(fieldId);

        return false;
    },

    /**
    * Set a modal and set the focus
    * 
    */
    HideModalAndClearText: function(behavId, fieldId) {
        FutureStore.Core.HideModal(behavId);
        FutureStore.Core.ClearText(fieldId);

        return false;
    },

    /**
    * Set a modal and set the focus
    * 
    */
    ShowModal: function(behavId) {
        $find(behavId).show();
    },

    /**
    * Set the focus to a fiels
    * 
    */
    ShowFocus: function(fieldId) {
        $get(fieldId).focus();

        return false;
    },

    /**
    * Set a modal and set the focus
    * 
    */
    HideModal: function(behavId) {
        $find(behavId).hide();

        return false;
    },

    /**
    * Set the clear text for an input field
    * 
    */
    ClearText: function(fieldId) {
        $get(fieldId).value = '';

        return false;
    }
}




/* MUST BE AT THE END OF THIS FILE */
YAHOO.util.Event.onDOMReady(FutureStore.Init);
YAHOO.util.Event.onContentReady('product-compare', FutureStore.Search.Compare.GetProducts);                            
