/*
  jQuery MegaMenu Plugin
  Author: GeekTantra
  Author URI: http://www.geektantra.com
*/
var isIE6 = navigator.userAgent.toLowerCase().indexOf('msie 6') != -1;

jQuery.fn.megamenu = function (options) {
    options = jQuery.extend({
        activate_action: "mouseover",
        deactivate_action: "mouseleave",
        show_method: "simple",
        hide_method: "simple",
        justify: "left",
        enable_js_shadow: false,
        shadow_size: 3,
        mm_timeout: 200
    }, options);
    var $megamenu_object = this;
    if (options.activate_action == "click") options.mm_timeout = 0;
    $megamenu_object.children("li").each(function () {
        jQuery(this).addClass("mm-item");
        jQuery(".mm-item").css({ 'float': options.justify });

        jQuery(this).find("div:first").addClass("mm-item-content");
        jQuery(this).find("a:first").addClass("mm-item-link");
        var $mm_item_content = jQuery(this).find(".mm-item-content");
        var $mm_item_link = jQuery(this).find(".mm-item-link");
        $mm_item_content.hide();

        jQuery(document).bind("click", function () {
            jQuery(".mm-item-content").hide();
            jQuery(".mm-item-link").removeClass("mm-item-link-hover");
        });
        jQuery(this).bind("click", function (e) {
            e.stopPropagation();
        });
        $mm_item_content.wrapInner('<div class="mm-content-base"></div>');
        if (options.enable_js_shadow == true) {
            $mm_item_content.append('<div class="mm-js-shadow"></div>');
        }
        var $mm_timer = 0;
        // Activation Method Starts
        jQuery(this).bind(options.activate_action, function (e) {
            e.stopPropagation();
            var mm_item_link_obj = jQuery(this).find("a.mm-item-link");
            var mm_item_content_obj = jQuery(this).find("div.mm-item-content");
            var list_content_obj = jQuery(mm_item_content_obj).find("ul#list-content");

            clearTimeout($mm_timer);
            $mm_timer = setTimeout(function () { //Emulate HoverIntent

                mm_item_link_obj.addClass("mm-item-link-hover");

                if (!(mm_item_content_obj == undefined) && !(mm_item_content_obj[0] == undefined)) {
                if (mm_item_content_obj[0].style.display != "block") {
                    showMenu(mm_item_content_obj, options); //ie 8 does not have $mm_item_content.outerWidth(); set until style != none or maybe after showing.

                    var topOfContentMenu = ($mm_item_link.offset().top + $mm_item_link.outerHeight()) - 19 - document.documentElement.scrollTop;
                    var leftOfContentMenu = $mm_item_link.offset().left;


                    if (navigator.appVersion.indexOf('MSIE 7.') >= 0) {
                        list_content_obj.css({ "marginLeft": '0px' });   //ie 7 is throwing 30px on marginLeft from some kind of VooDo
                        topOfContentMenu = topOfContentMenu - 2;

                    }

                    var widthOfContentMenu = $mm_item_content.outerWidth();
                    var widthOfMegaMenu = $megamenu_object.outerWidth();

                    if (widthOfContentMenu > widthOfMegaMenu) {
                        widthOfContentMenu = widthOfMegaMenu;
                    }

                    if (options.justify == "left") {

                        var mm_object_right_end = $megamenu_object.offset().left + widthOfMegaMenu;        // right end of the megamenu object
                        var mm_content_right_end = $mm_item_link.offset().left + widthOfContentMenu;     // right end of the megamenu content

                        if (mm_content_right_end > mm_object_right_end) { // Menu content exceeding the outer box
                            leftOfContentMenu = ($mm_item_link.offset().left - (mm_content_right_end - mm_object_right_end));
                            topOfContentMenu = topOfContentMenu + 'px';
                            leftOfContentMenu = leftOfContentMenu + 'px';
                            widthOfContentMenu = widthOfContentMenu + 'px';

                        }

                    } else if (options.justify == "right") {
                        var mm_object_left_end = $megamenu_object.offset().left;
                        // Coordinates of the left end of the megamenu object
                        var mm_content_left_end = $mm_item_link.offset().left - mm_item_content_obj.outerWidth() +
                                    $mm_item_link.outerWidth() + 5;
                        // Coordinates of the left end of the megamenu content
                        if (mm_content_left_end <= mm_object_left_end) { // Menu content exceeding the outer box
                            mm_item_content_obj.css({
                                'left': mm_object_left_end + 2 + 'px'
                            }); // Limit megamenu inside the outer box
                        } else {
                            mm_item_content_obj.css({
                                'left': mm_content_left_end + 'px'
                            }); // Limit megamenu inside the outer box
                        }
                    }
                    if (options.enable_js_shadow == true) {
                        mm_item_content_obj.find(".mm-js-shadow").height(mm_item_content_obj.height());
                        mm_item_content_obj.find(".mm-js-shadow").width(mm_item_content_obj.width());
                        mm_item_content_obj.find(".mm-js-shadow").css({
                            'top': (options.shadow_size) + (isIE6 ? 2 : 0) + "px",
                            'left': (options.shadow_size) + (isIE6 ? 2 : 0) + "px",
                            'opacity': 0.5
                        });
                    }

                    mm_item_content_obj.css({ 'left': leftOfContentMenu, 'top': topOfContentMenu, 'width': widthOfContentMenu });
                }}
            }, options.mm_timeout);
        });


        function showMenu(mm_item_content_obj, options) {
                //split the submenu into columns
                splitSubMenu(mm_item_content_obj[0]);
                switch (options.show_method) {
                    case "simple":
                        mm_item_content_obj.show();
                        break;
                    case "slideDown":
                        mm_item_content_obj.height("auto");
                        mm_item_content_obj.slideDown('fast');
                        break;
                    case "fadeIn":
                        mm_item_content_obj.fadeTo('fast', 1);
                        break;
                    default:
                        mm_item_content_obj.each(options.show_method);
                        break;
                }
        }

        // Activation Method Ends
        // Deactivation Method Starts
        jQuery(this).bind(options.deactivate_action, function (e) {
            e.stopPropagation();
            clearTimeout($mm_timer);
            var mm_item_link_obj = jQuery(this).find("a.mm-item-link");
            mm_item_link_obj[0].innerHTML = mm_item_link_obj[0].innerHTML.replace("hover/hover", "megamenu")

            var mm_item_content_obj = jQuery(this).find("div.mm-item-content");
            //      mm_item_content_obj.stop();
            switch (options.hide_method) {
                case "simple":
                    mm_item_content_obj.hide();
                    mm_item_link_obj.removeClass("mm-item-link-hover");
                    break;
                case "slideUp":
                    mm_item_content_obj.slideUp('fast', function () {
                        mm_item_link_obj.removeClass("mm-item-link-hover");
                    });
                    break;
                case "fadeOut":
                    mm_item_content_obj.fadeOut('fast', function () {
                        mm_item_link_obj.removeClass("mm-item-link-hover");
                    });
                    break;
                default:
                    mm_item_content_obj.each(options.hide_method);
                    mm_item_link_obj.removeClass("mm-item-link-hover");
                    break;
            }
            if (mm_item_content_obj.length < 1) mm_item_link_obj.removeClass("mm-item-link-hover");
        });
        //    Deactivation Method Ends
    });
    this.find(">li:last").after('<li class="clear-fix"></li>');
    this.show();
};


function splitSubMenu(subMenu) {
    if (subMenu.getElementsByTagName("Table").length == 0) {
                    if (hasSplit(subMenu)) {
                                 createColumns(subMenu);
                         }
              }
}

function hasSplit(subMenu) {
   anchorArray =  subMenu.getElementsByTagName("a");
   for (var index = 0; index < anchorArray.length; index++) {
       if (anchorArray[index].className.indexOf("columnsplit") != -1) {
            return true;
        }
    }
    return false;
}

function createColumns(subMenu) {
    var liArray = subMenu.getElementsByTagName("li");
    var parentNode = liArray[0].parentNode;  // should be ul id=list-content
    var childrenOF = new Array();
    var temp = parentNode.children;  // these should be the li children of the ul
    for (var index = 0; index < temp.length; index++) {
        childrenOF[index] = temp[index];
    }


    var subMenuColumns = new Array();
    var indexSubMenu = 0;
    subMenuColumns[indexSubMenu] = new Array();
    var childrenOfCount = childrenOF.length;

    for (var index = 0; index < childrenOfCount; index++) {
        if (hasSplit(childrenOF[index])) {
            indexSubMenu = indexSubMenu + 1;
            subMenuColumns[indexSubMenu] = new Array();
        }
        subMenuColumns[indexSubMenu].push(childrenOF[index]);
    }

    while (parentNode.hasChildNodes()) {
        parentNode.removeChild(parentNode.firstChild);
    }

    var table = document.createElement('table');
    var row = document.createElement('tr');
    var columns = new Array();

    for (var index = 0; index < subMenuColumns.length; index++) {
        var cell = document.createElement('td');

        if (navigator.appVersion.indexOf('MSIE 7.') >= 0) {
            cell.className = "megamenu_column_dataIE7";
        } else {
            cell.className = "megamenu_column_data";
        }

        var newUL = document.createElement('ul');



        for (var index2 = 0; index2 < subMenuColumns[index].length; index2++) {
            if (subMenuColumns[index][index2].nodeType != undefined) {
                if (subMenuColumns[index][index2].nodeType == 1) {
                    newUL.appendChild(subMenuColumns[index][index2]);
                }
                else {
                    newUL.appendChild(subMenuColumns[index][index2]);
                }
            }
            else {
                if (subMenuColumns[index][index2][0] != undefined) {
                    newUL.appendChild(subMenuColumns[index][index2][0]);
                }
            } //End of nodeType undefined
        } //End of for index2  (submenus)
        cell.appendChild(newUL);
        columns[index] = cell;
        row.appendChild(columns[index]);

        if (index < subMenuColumns.length - 1) {
            var spaceColumn = document.createElement('td');
            spaceColumn.className = "megamenu_column_seperator";
            spaceColumn.innerHTML = "&nbsp;";
            row.appendChild(spaceColumn);
        }


        table.appendChild(row);

        if (navigator.appVersion.indexOf('MSIE 7.') >= 0) {
            parentNode.innerHTML = table.outerHTML;
        }
        else {
            parentNode.appendChild(table);
        }
    }
}
