var showError = function(t) {
    alert('Error ' + t.status + ' : ' + t.statusText);
}

var timer="";

var navigation = {

    /* properties */
    abc: null,
    letterList: null,
    ul: null,
    li: null,
    letterContainer: null,
    a109: null,
    a110: null,
    a111: new Object(),
    a115: new Array(),
    flyoutCache: new Array(),
    a119: new Object(),
    colCount: new Array(),
    maxItemsCol: 15,

    init : function() {
        this.abc = document.getElementById("abc");
        if (!this.abc) return false;
        this.letterList = document.getElementById("letterList");
        if (!this.letterList) return false;
        this.ul = this.abc.getElementsByTagName("ul")[0]
        if (!this.ul) return false;
        this.li = this.ul.getElementsByTagName("li");
        if (!this.li || this.li.length==0) return false;
        this.letterContainer = document.getElementById("letterContainer");
        if (!this.letterContainer) return false;
        this.maxItems  = 90;
        this.addMouseHandlers();
        this.f2();

        return true;
    },


    addMouseHandlers : function() {
        for (var i = 1; i < this.li.length - 1; i++) {
            var elm1 = this.li[i];
            var maxelm = elm1.getElementsByTagName("a").length;
            var a = elm1.getElementsByTagName("a")[maxelm-1];
            Event.observe(a, 'mouseover', function(e) { navigation.onActive(e, null); } );
            Event.observe(a, 'focus'    , function(e) { navigation.onActive(e, null); } );
            Event.observe(a, 'mouseout', function(e) { navigation.onDeactivate(a);});
            Event.observe(a, 'blur'    , function(e) { navigation.onDeactivate(a);});
        }
    },

    f2 : function() {

        Event.observe(document.body, 'click', function(e) {
            if (navigation.a109) {
                navigation.onDeactivate(navigation.a109);
            }
        }
        );

        Event.observe(this.letterContainer, 'mouseover', function(e) {
            if (navigation.a109 && navigation.a110) {
                window.clearTimeout(navigation.a110);
                navigation.a110 = null;
            }
        }
        );
        Event.observe(this.letterContainer, 'mouseout', function(e) {
            if (navigation.a109) {
                navigation.onDeactivate(navigation.a109);
            }
        }
        );
    },

    onActive : function(event, element) {
        var elm1 = Event.element(event);

        timer = window.setTimeout(function() {sf1(elm1);}, 300);

        function sf1(elm1) {
            if (elm1.id) {
                var currNav = document.getElementById("currentHeadNav").innerHTML;
                var currLett = encodeURIComponent(elm1.innerHTML);
                var url = letterLandingFlyoutJsp + "?categoryName=" + currLett + "&currHeadNav=" +currNav;
                new Ajax.Request(url, {asynchronous:true, onSuccess:sf2, onFailure:showError, method:'get'});
            }
        }

		function sf2(response) {
            ssf1(response, elm1.innerHTML);
            ssf2(elm1, element);
		}
    },

    onDeactivate : function(a) {
        window.clearTimeout(timer);
        navigation.a110 = window.setTimeout(function() {

        /* IE hide drop menu */
            if(document.getElementById("sortby"))
        {
            var temp= document.getElementById("sortby");
            temp.style.visibility= "";
        }

            Element.removeClassName(a, "active");
            Element.hide(navigation.letterContainer);},
            350
        );

    },



    renderFlyout : function(letter) {
        var maxCharLength = 350;
        this.letterList.innerHTML = "";
        var colCount = 1;
        if (this.a115[letter] != undefined) {
            if (this.a115[letter].length) {
                var letterItemsLength = 0;
                for(var l = 0; l < this.a115[letter].length; l++){
                    var letterLength = this.a115[letter][l].name.length;
                    if(letterLength > maxCharLength){
                        letterItemsLength += 2;
                    } else {
                        letterItemsLength++;
                    }
                }

                var count = Math.min(letterItemsLength, this.maxItems);

                if (count >= 10 && count <= 15) {
                    this.maxItemsCol = 10;
                } else {
                    this.maxItemsCol = 15;
                }
                if (count > 90) {
                    this.maxItemsCol = count/6 + 1;
                }
                var div = document.createElement("div");
                var ul = document.createElement("ul");
                var j = 0; var k = 0; var colLineCount = 0;
                var totalLineCount = 0;
                for (var i = 0; i < this.a115[letter].length; i++) {
                        if (colLineCount > 0 && colLineCount >= this.maxItemsCol) {
                            div.appendChild(ul);
                            ul = document.createElement("ul");
                            if(j >= this.maxItemsCol) {
                                this.letterList.appendChild(div);
                                div = document.createElement("div");
                                j = 0;
                                colCount++;
                            }
                            colLineCount = 0;
                        }

                    var a = document.createElement("a");
                    a.href = "#";
                    a.innerHTML = this.a115[letter][i].name;
                    a.href = this.a115[letter][i].url;
                    if (this.a115[letter][i].emphasis == "true") Element.addClassName(a, "emphasis");
                    var li = document.createElement("li");
                    li.appendChild(a);
                    ul.appendChild(li);
                    letterLength = this.a115[letter][i].name.length;
                    if(letterLength > maxCharLength){
                        totalLineCount += 2;
                        j += 2;
                        colLineCount += 2
                    } else {
                        totalLineCount++;
                        j++;
                        colLineCount++;
                    }

                    if(totalLineCount >= this.maxItems) break;

            }
            ul.className = div.className = "last";
            div.appendChild(ul);
            this.letterList.appendChild(div);
            k++;
            this.letterList.childNodes[0].setAttribute("cols",k);
            navigation.flyoutCache[letter] = navigation.letterList.innerHTML;
                navigation.colCount[letter] = colCount;
        } else {
                navigation.flyoutCache[letter] = "";
                navigation.colCount[letter] = 0;
            }
        } else {
            navigation.flyoutCache[letter] = "";
            navigation.colCount[letter] = 0;
        }


    }


};


function getTotalOffsetLeft(elm) {
    if(elm.offsetParent)
        return elm.offsetLeft + getTotalOffsetLeft(elm.offsetParent);
    return elm.offsetLeft;
}

function ssf2(a, el){

    var letter = a.innerHTML;
        var item = a.parentNode;
        Element.addClassName(a, "active");
        if (navigation.a109 && navigation.a109 != a) {
            Element.removeClassName(navigation.a109, "active");
            if (navigation.a110) {window.clearTimeout(navigation.a110); navigation.a110 = null;}
        }
        navigation.a109 = a;
        if (navigation.flyoutCache[letter] == undefined) {
            try {
                navigation.renderFlyout(letter);
            } catch (e) {

            }
        }
        if (navigation.flyoutCache[letter] != "") {
            navigation.letterList.innerHTML = navigation.flyoutCache[letter];

            if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)){
               navigation.letterContainer.style.top = document.getElementById('abc').offsetTop + 29 + 45;
            }   else {
               navigation.letterContainer.style.top = document.getElementById('abc').offsetTop + 29 + 20;
            }

           // navigation.a107.style.top = document.getElementById('abc').offsetTop + 29 + 20;
            navigation.letterContainer.style.left = document.getElementById('mainContainer').offsetLeft;// + 30;
            //navigation.a107.style.display = "block";

            //navigation.a107.style.border="10px";
            //navigation.a107.style.borderColor="#dd1111";

            navigation.letterList.style.height = "auto";

                letterOffset2 = getTotalOffsetLeft(document.getElementById('nav' + letter)) - 20;

            var letterNavWidth = navigation.colCount[letter] *150;
            var maxRightOffset = getTotalOffsetLeft(document.getElementById('mainContent')) + document.getElementById('mainContent').clientWidth;
            if (letterOffset2 + letterNavWidth > maxRightOffset) {
               letterOffset2 = maxRightOffset - letterNavWidth;
            }
            navigation.letterList.style.left = letterOffset2 + "px";
            navigation.letterList.style.width = letterNavWidth + "px";
            //navigation.a102.offsetLeft = letterOffset;
            //navigation.a102.width = letterNavWidth;

            if (navigation.letterList.innerHTML.toLowerCase().indexOf("cols") != -1) {
                navigation.letterList.className = "col"+navigation.letterList.childNodes[0].getAttribute("cols");
            }
            jQuery("div#letterContainer").slideDown("fast");
            //navigation.a107.style.display = "block";
                        

        } else {
            jQuery("div#letterContainer").slideUp("fast");
            //navigation.a107.style.display = "none";

        }

        /* IE hide drop menu */
            if(document.getElementById("sortby"))
        {
            var temp= document.getElementById("sortby");
            temp.style.visibility= "hidden";

        }
}

var ssf1 = function(t, letter) {
    var items = t.responseXML.getElementsByTagName("FindCategoryByLetter");
    navigation.a115[letter] = new Array();
    if (items && items.length) {
                    var k = 0;
                    for (var j = 0; j < items.length; j++) {
                        var s = items[j].getAttribute("categoryName");
                        var e = items[j].getAttribute("emphasis");
                        var u = items[j].getAttribute("url");
                        if (s && e && u) {
                            navigation.a115[letter][k++] = {name:s, emphasis:e, url:u};
                        }
                    }
                }
}
jQuery(document).ready(function(){navigation.init();})
