// jQuery Menu Tree Plugin
//
// Version 1.0
//
// Usage: $('.menuTree').menuTree( options, callback )
//
// Options:  
//           menuEvent                      - event to trigger expand/collapse; default = click
//           expandSpeed                    - default = 500 (ms); use -1 for no animation
//           collapseSpeed                  - default = 500 (ms); use -1 for no animation
//           expandEasing                   - easing function to use on expand (optional)
//           collapseEasing                 - easing function to use on collapse (optional)
//           multiOpenedSubMenu             - whether or not to limit to one opened menu at a time; default = false;
//           parentMenuTriggerCallback      - whether or not parent menu triggers callback; default = false;
//           expandedNode                   - default node to expand (optional)
//
// Callback:
//           a callback function triggered with <a> 'rel' parameter.
//
// History:
//
// 1.0 - first release (28 May 2009)
//

if (jQuery) (function($) {

    $.extend($.fn, {
        menuTree: function(o, callback) {
            // Default parameters
            if (!o) var o = {};
            o.data = this.html();
            if (o.menuEvent == undefined) o.menuEvent = 'click';
            if (o.expandSpeed == undefined) o.expandSpeed = 500;
            if (o.collapseSpeed == undefined) o.collapseSpeed = 500;
            if (o.expandEasing == undefined) o.expandEasing = null;
            if (o.collapseEasing == undefined) o.collapseEasing = null;
            if (o.multiOpenedSubMenu == undefined) o.multiOpenedSubMenu = false;
            if (o.parentMenuTriggerCallback == undefined) o.parentMenuTriggerCallback = false;
            if (o.expandedNode == undefined) o.expandedNode = null;

            $(this).each(function() {

                function bindTree(t) {

                    var liClickedSelector = callback != undefined ? 'LI > A' : 'LI.parent > A';
                    
                    $(t).find(liClickedSelector).bind(o.menuEvent, function() {
                        currentItem = $(this);
                        if ($(this).parent().hasClass('parent')) {
                            if ($(this).parent().hasClass('expanded')) {
                                // Collapse
                                $(this).parent().find('UL').slideUp({ duration: o.collapseSpeed, easing: o.collapseEasing });
                                $(this).parent().removeClass('expanded').addClass('collapsed');

                            } else {
                                // Expand
                                if (!o.multiOpenedSubMenu) {
                                    $(this).parent().parent().find('UL').slideUp({ duration: o.collapseSpeed, easing: o.collapseEasing });
                                    $(this).parent().parent().find('LI.parent').removeClass('expanded').addClass('collapsed');
                                }
                                $($(this).parent().find("UL")[0]).slideDown({ duration: o.expandSpeed, easing: o.expandEasing });
                                $(this).parent().removeClass('collapsed').addClass('expanded');
                                $(this).parent().find('LI.parent').removeClass('expanded').addClass('collapsed');

                                if (o.parentMenuTriggerCallback)
                                    callback($(this).attr('rel'));
                            }

                        }
                        else if ($(this).parent().hasClass('mparent')) {
                            if ($(this).parent().hasClass('expanded2')) {
                                // Collapse
                                $(this).parent().find('UL').slideUp({ duration: o.collapseSpeed, easing: o.collapseEasing });
                                $(this).parent().removeClass('expanded2').addClass('collapsed');

                            } else {
                                // Expand
                                if (!o.multiOpenedSubMenu) {
                                    $(this).parent().parent().find('UL').slideUp({ duration: o.collapseSpeed, easing: o.collapseEasing });
                                    $(this).parent().parent().find('LI.mparent').removeClass('expanded2').addClass('collapsed');
                                }
                                $($(this).parent().find("UL")[0]).slideDown({ duration: o.expandSpeed, easing: o.expandEasing });
                                $(this).parent().removeClass('collapsed').addClass('expanded2');
                                $(this).parent().find('LI.mparent').removeClass('expanded2').addClass('collapsed');

                                if (o.parentMenuTriggerCallback)
                                    callback($(this).attr('rel'));
                            }

                        } 
                        else {
                            callback($(this).attr('rel'));
                        }
                        return false;
                    });

                    // Prevent A from triggering the # on non-click events
                    if (o.menuEvent.toLowerCase != 'click') $(t).find(liClickedSelector).bind('click', function() { return false; });
                }

                // initialization
                $($(this)).find(":first").show();
                bindTree($(this));

                // Expend default node            
                
				function getQueryParameter ( parameterName ) {
				  var queryString = window.top.location.search.substring(1);
				  var parameterName = parameterName + "=";
				  if ( queryString.length > 0 ) {
				    begin = queryString.indexOf ( parameterName );
				    if ( begin != -1 ) {
				      begin += parameterName.length;
				      end = queryString.indexOf ( "&" , begin );
				        if ( end == -1 ) {
				        end = queryString.length
				      }
				      return unescape ( queryString.substring ( begin, end ) );
				    }
				  }
				  return "null";
				} 
				
				var tid = getQueryParameter("id");					
                var elementToExpend = $($(this)).find("a[rel="+tid+"]").parent().parent();
				
				if (elementToExpend.length)
				{
                    // Collect all UL items that need to be extended
                    var ulMenuElements = new Array();
                    var i = 0;
                    while (elementToExpend && elementToExpend.find('DIV').length == 0) {

                        if (elementToExpend[0].tagName == "UL") {
                            ulMenuElements[i] = elementToExpend;
                            i++;
                        }
                        elementToExpend = elementToExpend.parent();
                    }
                    ulMenuElements = ulMenuElements.reverse()

                    // Extend all collected item (recursive)
                    var i = 0;
                    var openMenu = function() {
						
                        i++; // skip first ul(root)
                        if (i >= ulMenuElements.length) return;

                        ulMenuElements[i].removeClass('collapsed').addClass('expanded');
                        //ulMenuElements[i].slideDown({ duration: '20', easing: o.expandEasing, complete: openMenu });
                        ulMenuElements[i].toggle('fast',openMenu);

                    }
                    openMenu(ulMenuElements);
                 }                
            });
        }
    });

})(jQuery);

