/*
 * jixedbar - a jQuery fixed bar plugin.
 * http://code.google.com/p/jixedbar/
 * 
 * Version 0.0.4 (Beta)
 * 
 * Copyright (c) 2009-2010 Ryan Yonzon, http://ryan.rawswift.com/
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 * 
 * Last update - August 16, 2010
 */

(function($) { // start jixedbar's anonymous function

    // jixedbar plugin
    $.fn.jixedbar = function(options) {
        var constants = { // constant variables, magic variables that'll make the bar stick on the bottom or the top portion of any browser
            constOverflow: "hidden",
            constBottom: "0px"
        };
        var defaults = { // default options
            showOnTop: false, // show bar on top, instead of default bottom
            transparent: false, // enable/disable bar's transparent effect
            opacity: 0.9, // default bar opacity
            opaqueSpeed: "fast", // default opacity speed effect
            slideSpeed: "fast", // default slide effect
            roundedCorners: true, // rounded corners only works on FF, Chrome, Latest Opera and Safari
            roundedButtons: true, // only works on FF, Chrome, Latest Opera and Safari
            menuFadeSpeed: 250, // menu fade effect
            tooltipFadeSpeed: "slow", // tooltip fade effect
            tooltipFadeOpacity: 0.8, // tooltip fade opacity effect
            hideToolbar: "hide toolbar"
        };
        var options = $.extend(defaults, options); // extend options
        /* IE6 detection method */
        var ie6 = (navigator.appName == "Microsoft Internet Explorer" && parseInt(navigator.appVersion) == 4 && navigator.appVersion.indexOf("MSIE 6.0") != -1);
        /* var ie7 = window.XMLHttpRequest; // simple way to detect IE7 (see variable below) */
        var ie7 = (document.all && !window.opera && window.XMLHttpRequest); // ...but I guess this is a much more accurate method
        var button_active = false; // active button flag
        var active_button_name = ""; // name of current active button
        var hideToolbar = ""
        this.each(function() {
            var obj = $(this); // reference to selected element
            var screen = jQuery(this); // reference to client screen size
            var fullScreen = screen.width(); // get screen width
            var centerScreen = (fullScreen / 2) * (1); // get screen center
            var hideBar = false; // default bar hide/show status

            if ($(this).checkCookie("JXID")) { // check if cookie already exists
                if ($(this).readCookie("JXHID") == "true") {
                    this.hideBar = true; // hide bar
                }
            } else { // else drop cookie
                $(this).createCookie("JXID", $(this).genRandID()); // set random ID and create cookie
                $(this).createCookie("JXHID", false); // set bar hide to false then create cookie
            }

            // set html and body style for jixedbar to work
            if (($.browser.msie && ie6) || ($.browser.msie && ie7)) { // check if we have an IE client browser
                $("html").css({ "overflow": "hidden", "height": "100%" });
                $("body").css({ "margin": "0px", "overflow": "auto", "height": "100%" });
            } else { // else for FF, Chrome, Opera, Safari and other browser
                $("html").css({ "height": "100%" });
                $("body").css({ "margin": "0px", "height": "100%" });
            }

            /* check what position method to use */
            if (($.browser.msie && ie6) || ($.browser.msie && ie7)) { // for IE browsers
                pos = "absolute";
            } else { // else for other browsers
                pos = "fixed";
            }

            // create hide container and button
            if ($(".jx-bar-button-right", this).exists()) { // check if there are currently an item on the right side portion of the bar
                $("<ul />").attr("id", "jx-hid-con-id").insertBefore($(this).find(".jx-bar-button-right:first")); // insert hide/show button "before" the existing item and let the "float right" do its magic
            } else { // else just append it and it'll automatically set to the right side of the bar
                $("<ul />").attr("id", "jx-hid-con-id").appendTo(this);
            }

            if ($.browser.msie && ie6) {
                $("#jx-hid-con-id").css({ "width": "1px", "float": "right" }); // fix hide container width to prevent float drop issue on IE6 (any width other than "auto" or none specified)
            } else if ($.browser.msie && ie7) {
                $("#jx-hid-con-id").css({ "width": "40px", "float": "right" }); // fix hide container width to prevent float drop issue on IE7
            }
            /* Check title for hide button*/
            hideToolbar = defaults.hideToolbar;

            /* check what position should be the arrow indicator will be */
            if (defaults.showOnTop) {
                hideIndicator = "jx-hide-top"; // on the top
            } else {
                hideIndicator = "jx-hide"; // on the bottom
            }

/*
            // insert the hide button indicator and add appropriate CSS class
            $("#jx-hid-con-id").html('<li alt="' + hideToolbar + '"><a id="jx-hid-btn-id" class="' + hideIndicator + '"></a></li>');
            $("#jx-hid-con-id").addClass("jx-bar-button-right");

            // insert hide button separator and CSS class
            $("<span />").attr("id", "jx-hid-sep-id").insertAfter("#jx-hid-con-id");
            $("#jx-hid-sep-id").addClass("jx-hide-separator");

            // add click event on hide button
            $("#jx-hid-btn-id").parent().click(function() {
                $("#jx-menu-con-id").fadeOut();
                $(obj).slideToggle(defaults.slideSpeed, function() {
                    $(this).createCookie("JXHID", true); // set bar hide to true
                    if (!$(this).checkCookie("JXID")) { // check if cookie JXID exists, if not create one
                        $(this).createCookie("JXID", $(this).genRandID()); // set random ID and drop cookie
                    }
                    $("#jx-uhid-con-id").slideToggle(defaults.slideSpeed);
                });
                return false;
            });
*/
            // initialize bar
            $(this).css({
                "overflow": constants["constOverflow"],
                "position": pos
            });

            // set location: top or bottom
            if (defaults.showOnTop) {
                $(this).css({
                    "top": constants["constBottom"]
                });
            } else {
                $(this).css({
                    "bottom": constants["constBottom"]
                });
            }

            // add bar style (theme)
            $(this).addClass("jx-bar");

            // rounded corner style (theme)
            if (defaults.roundedCorners) {
                if (defaults.showOnTop) {
                    $(this).addClass("jx-bar-rounded-bl jx-bar-rounded-br");
                } else {
                    $(this).addClass("jx-bar-rounded-tl jx-bar-rounded-tr");
                }
            }

            // button style (theme)
            $(this).addClass("jx-bar-button");

            // rounded button corner style (theme)
            if (defaults.roundedButtons) {
                $(this).addClass("jx-bar-button-rounded");
            }

            // calculate and adjust bar to the center
            marginLeft = centerScreen - ($(this).width() / 2);
            $(this).css({ "margin-left": marginLeft });

            // fix image vertical alignment and border
            $("img", obj).css({
                "vertical-align": "bottom",
                "border": "#fff solid 0px" // no border
            });

            // check for alt attribute and set it as button text
            $(this).find("img").each(function() {
                if ($(this).attr("alt") != "") { // if image's ALT attribute is not empty then do the code below
                    altName = "&nbsp;" + $(this).attr("alt"); // set button text using the image's ALT attribute
                    $(this).parent().append(altName); // append it
                }
            });

            // check of transparency is enabled
            if (defaults.transparent) {
                $(this).fadeTo(defaults.opaqueSpeed, defaults.opacity); // do transparent effect
            }

            // create menu container first before creating the tooltip container, so tooltip will be on foreground
            $("<div />").attr("id", "jx-menu-con-id").appendTo("body");

            // add transparency effect on menu container if "transparent" is true
            if (defaults.transparent) {
                $("#jx-menu-con-id").fadeTo(defaults.opaqueSpeed, defaults.opacity);
            }

            /*
            * create show/unhide container and button
            */
            $("<div />").attr("id", "jx-uhid-con-id").appendTo("body"); // create div element and append in html body
            $("#jx-uhid-con-id").addClass("jx-show");
            $("#jx-uhid-con-id").css({
                "overflow": constants["constOverflow"],
                "position": pos,
                "margin-left": ($(this).offset().left + $(this).width()) - $("#jx-uhid-con-id").width() // calculate the show/unhide left margin/position
            });

            // set show/unhide location: top or bottom
            if (defaults.showOnTop) {
                $("#jx-uhid-con-id").css({
                    "top": constants["constBottom"]
                });
            } else {
                $("#jx-uhid-con-id").css({
                    "bottom": constants["constBottom"]
                });
            }

            // check if we need to add transparency to menu container
            if (defaults.transparent) {
                $("#jx-uhid-con-id").fadeTo(defaults.opaqueSpeed, defaults.opacity);
            }

            // check if we need to hide the bar (based on cookie)
            if (this.hideBar) {
                $(this).css({
                    "display": "none" // do not display the main bar
                });
            }

            // check if we need to hide the show/unhide button (based on cookie)
            if (!this.hideBar) {
                $("#jx-uhid-con-id").css({
                    "display": "none" // do not display the show/unhide button
                });
            }

            // create/append the show/unhide button item
            $("<ul />").attr("id", "jx-uhid-itm-id").appendTo($("#jx-uhid-con-id"));
            if (defaults.showOnTop) { // do we need to show this on top
                unhideIndicator = "jx-show-button-top";
            } else { // or on bottom (default)
                unhideIndicator = "jx-show-button";
            }
            // add the show/unhide item ("Show toolbar" button)
            $("#jx-uhid-itm-id").html('<li alt="Show toolbar"><a id="jx-uhid-btn-id" class="' + unhideIndicator + '"></a></li>');

            // show/unhide container and button style
            if (defaults.roundedCorners) {
                if (defaults.showOnTop) { // rounded corner CSS for top positioned bar
                    $("#jx-uhid-con-id").addClass("jx-bar-rounded-bl jx-bar-rounded-br");
                } else { // rounded corner CSS for bottom positioned bar
                    $("#jx-uhid-con-id").addClass("jx-bar-rounded-tl jx-bar-rounded-tr");
                }
            }
            $("#jx-uhid-con-id").addClass("jx-bar-button"); // add CSS style on show/unhide button based on the current theme
            if (defaults.roundedButtons) { // additional CSS style for rounded buttons
                $("#jx-uhid-con-id").addClass("jx-bar-button-rounded");
            }

            // add click event on show/unhide button
            $("#jx-uhid-con-id").click(function() {
                $(this).slideToggle(defaults.slideSpeed, function() {
                    $(this).createCookie("JXHID", false); // set bar hide to false
                    if (!$(this).checkCookie("JXID")) { // check if cookie JXID exists, if not create one
                        $(this).createCookie("JXID", $(this).genRandID()); // set random ID and drop cookie
                    }
                    $(obj).slideToggle(defaults.slideSpeed); // slide toggle effect
                    if (active_button_name != "") { // check if we have an active button (menu button)
                        $("#jx-menu-con-id").fadeIn(); // if we have then do fade in effect
                    }
                });
                return false; // return false to prevent any unnecessary click action
            });

            // create tooltip container
            $("<div />").attr("id", "jx-ttip-con-id").appendTo("body"); // create div element and append in html body
            $("#jx-ttip-con-id").css({ // CSS for tooltip container (invisible to viewer(s))
                "height": "auto",
                "margin-left": "0px",
                "width": "100%", // use entire width
                "overflow": constants["constOverflow"],
                "position": pos
            });

            // set tooltip container: top or bottom
            if (defaults.showOnTop) { // show on top?
                $("#jx-ttip-con-id").css({
                    "margin-top": $(this).height() + 6, // put spacing between tooltip container and fixed bar
                    "top": constants["constBottom"]
                });
            } else { // else bottom
                $("#jx-ttip-con-id").css({
                    "margin-bottom": $(this).height() + 6, // put spacing between tooltip container and fixed bar
                    "bottom": constants["constBottom"]
                });
            }

            // prevent browser from showing tooltip; replace title tag with alt tag; comply with w3c standard
            $("li", obj).each(function() { // iterate through LI element
                var _title = $(this).attr("title");
                if (_title != "") {
                    $(this).removeAttr("title"); // remove TITLE attribute
                    $(this).attr("alt", _title); // add (replace with) ALT attribute
                }
            });

            // bar container hover in and out event handler
            $("li", obj).hover(
				function() { // hover in method event
				    var elemID = $(this).attr("id"); // get ID (w/ or w/o ID, get it anyway)					
				    var barTooltipID = elemID + "jx-ttip-id"; // set a tooltip ID
				    var tooltipTitle = $(this).attr("title");

				    if (tooltipTitle == "") { // if no 'title' attribute then try 'alt' attribute
				        tooltipTitle = $(this).attr("alt"); // this prevents IE from showing its own tooltip
				    }

				    if (tooltipTitle != "") { // show a tooltip if it's not empty
				        // create tooltip wrapper; fix IE6's float double-margin bug
				        barTooltipWrapperID = barTooltipID + "_wrapper";
				        $("<div />").attr("id", barTooltipWrapperID).appendTo("#jx-ttip-con-id");
				        // create tooltip div element and put it inside the wrapper
				        $("<div />").attr("id", barTooltipID).appendTo("#" + barTooltipWrapperID);

				        // tooltip default style
				        $("#" + barTooltipID).css({
				            "float": "left"
				        });

				        // theme for tooltip (theme)
				        if ((defaults.showOnTop) && !($.browser.msie && ie6)) { // IE6 workaround; Don't add tooltip pointer if IE6
				            $("<div />").addClass("jx-tool-point-dir-up").appendTo("#" + barTooltipID);
				        }
				        $("<div />").html(tooltipTitle).addClass("jx-bar-button-tooltip").appendTo("#" + barTooltipID);

				        if ((!defaults.showOnTop) && !($.browser.msie && ie6)) { // IE6 workaround; Don't add tooltip pointer if IE6							
				            $("<div />").addClass("jx-tool-point-dir-down").appendTo("#" + barTooltipID);
				        }

				        // fix tooltip wrapper relative to the associated button
				        lft_pad = parseInt($(this).css("padding-left"));
				        $("#" + barTooltipWrapperID).css({
				            "margin-left": ($(this).offset().left - ($("#" + barTooltipID).width() / 2)) + ($(this).width() / 2) + lft_pad // calculate left margin
				        });

				        /* check for active buttons; tooltip behavior */
				        if ((($(this).find("a:first").attr("name") == "") || (button_active == false))) {
				            $("#" + barTooltipID).fadeTo(defaults.tooltipFadeSpeed, defaults.tooltipFadeOpacity);
				        } else if (active_button_name != $(this).find("a:first").attr("name")) {
				            $("#" + barTooltipID).fadeTo(defaults.tooltipFadeSpeed, defaults.tooltipFadeOpacity);
				        } else { // we got an active button here! (clicked state)
				            $("#" + barTooltipID).css({ // prevent the tooltip from showing; if button if currently on-clicked state
				                "display": "none"
				            });
				        }

				    }
				},
				function() { // hover out method event
				    var elemID = $(this).attr("id"); // get ID (whether there is an ID or none)					
				    var barTooltipID = elemID + "jx-ttip-id"; // set a tooltip ID
				    var barTooltipWrapperID = barTooltipID + "_wrapper";
				    $("#" + barTooltipID).remove(); // remove tooltip element
				    $("#" + barTooltipWrapperID).remove(); // remove tooltip's element DIV wrapper
				}
			);

            // show/unhide container hover in and out event handler
            $("li", $("#jx-uhid-con-id")).hover(
				function() { // in/over event
				    var elemID = $(this).attr("id"); // get ID (w/ or w/o ID, get it anyway)					
				    var barTooltipID = elemID + "jx-ttip-id"; // set a tooltip ID
				    var tooltipTitle = $(this).attr("title");

				    if (tooltipTitle == "") { // if no 'title' attribute then try 'alt' attribute
				        tooltipTitle = $(this).attr("alt"); // this prevents IE from showing its own tooltip
				    }

				    if (tooltipTitle != "") { // show a tooltip if it is not empty
				        // create tooltip wrapper; fix IE6's float double-margin bug
				        barTooltipWrapperID = barTooltipID + "_wrapper";
				        $("<div />").attr("id", barTooltipWrapperID).appendTo("#jx-ttip-con-id");
				        // create tooltip div element and put it inside the wrapper
				        $("<div />").attr("id", barTooltipID).appendTo("#" + barTooltipWrapperID);

				        // tooltip default style
				        $("#" + barTooltipID).css({
				            "float": "left"
				        });

				        // theme for show/unhide tooltip
				        if ((defaults.showOnTop) && !($.browser.msie && ie6)) {
				            $("<div />").addClass("jx-tool-point-dir-up").appendTo("#" + barTooltipID);
				        }

				        $("<div />").html(tooltipTitle).addClass("jx-bar-button-tooltip").appendTo("#" + barTooltipID);

				        if ((!defaults.showOnTop) && !($.browser.msie && ie6)) {
				            $("<div />").addClass("jx-tool-point-dir-down").appendTo("#" + barTooltipID);
				        }

				        // fix tooltip wrapper relative to the associated button
				        ulft_pad = parseInt($(this).css("padding-left"));
				        $("#" + barTooltipWrapperID).css({
				            "margin-left": ($(this).offset().left - ($("#" + barTooltipID).width() / 2)) + ($(this).width() / 2) + ulft_pad // calculate tooltip position
				        });

				        /* check for active buttons; tooltip behavior */
				        if ((($(this).find("a:first").attr("name") == "") || (button_active == false))) {
				            $("#" + barTooltipID).fadeTo(defaults.tooltipFadeSpeed, defaults.tooltipFadeOpacity);
				        } else if (active_button_name != $(this).find("a:first").attr("name")) {
				            $("#" + barTooltipID).fadeTo(defaults.tooltipFadeSpeed, defaults.tooltipFadeOpacity);
				        } else {
				            $("#" + barTooltipID).css({ // prevent the tooltip from showing; if button if currently on-clicked state
				                "display": "none"
				            });
				        }

				    }
				},
				function() { // out event
				    var elemID = $(this).attr("id"); // get ID (whether there is an ID or none)
				    var barTooltipID = elemID + "jx-ttip-id"; // set a tooltip ID
				    var barTooltipWrapperID = barTooltipID + "_wrapper";
				    $("#" + barTooltipID).remove(); // remove tooltip element
				    $("#" + barTooltipWrapperID).remove(); // remove tooltip's element DIV wrapper
				}
			);

            // fix PNG transparency problem on IE6
            if ($.browser.msie && ie6) {
                $(this).find("li").each(function() {
                    $(this).find("img").each(function() {
                        imgPath = $(this).attr("src");
                        altName = $(this).attr("alt");
                        if (altName == "") { // workaround for IE6 bug: Menu item text does not show up on the popup menu
                            altName = "&nbsp;&nbsp;" + $(this).attr("title");
                        }
                        srcText = $(this).parent().html();
                        $(this).parent().html( // wrap with span element
							'<span style="cursor:pointer;display:inline-block;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + imgPath + '\');">' + srcText + '</span>&nbsp;' + altName
						);
                    });
                    $(this).find("img").each(function() {
                        $(this).attr("style", "filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);"); // show image
                    })
                });
            }

            // adjust bar on window resize event
            $(window).resize(
				function() {
				    var screen = jQuery(this); // reference to client/viewers screen
				    var screenWidth = screen.width(); // get current screen width
				    var centerScreen = (screenWidth / 2) * (1); // get current screen center
				    var marginLeft = centerScreen - ($(obj).width() / 2); // re-calculate and adjust bar's position
				    $(obj).css({ "margin-left": marginLeft }); // do it!
				}
			);

            /**
            * Element click events
            */

            // hide first level menu
            $("li", obj).find("ul").each(function() {
                $(this).css({ "display": "none" }); // hide it! but we're listening to any click event
            });

            // create menu ID
            i = 1;
            $("li", obj).find("ul").each(function() {
                $(this).attr("id", "nav-" + i);
                $(this).parent().find("a:first").attr("href", "#"); // replace href attribute
                $(this).parent().find("a:first").attr("name", "nav" + i); // replace href attribute				

                if (defaults.showOnTop) { // check what position to use
                    buttonIndicator = "jx-arrow-down"; // top
                } else {
                    buttonIndicator = "jx-arrow-up"; // bottom
                }

                /* IE6/IE7 arrow indicator float drop fix: user replaced insertAfter with insertBefore */
                if (($.browser.msie && ie6) || ($.browser.msie && ie7)) {
                    $("<div />").attr("class", buttonIndicator).insertBefore($(this).parent().find("a")).css({ "background-position": "top" }); // IE6 and IE7 fix background position
                } else { // else any other browser
                    $("<div />").attr("class", buttonIndicator).insertAfter($(this).parent().find("a")); // prevent Chrome from wrapping button text
                }

                // add click event (button)
                $(this).parent().find("a:first").click(function() {
                    var elemID = $(this).attr("id"); // get ID (whether there is an ID or none)					
                    var barTooltipID = elemID + "jx-ttip-id"; // set a tooltip ID
                    var barTooltipWrapperID = barTooltipID + "_wrapper";

                    $("#" + barTooltipID).remove(); // remove tooltip element
                    $("#" + barTooltipWrapperID).remove(); // remove tooltip's element DIV wrapper

                    if ((button_active) && (active_button_name == $(this).attr("name"))) { // is this an active button?
                        if (defaults.showOnTop) { // check bar position
                            buttonIndicator = "jx-arrow-down"; // top
                        } else {
                            buttonIndicator = "jx-arrow-up"; // bottom
                        }
                        $(this).parent().find("div").attr("class", buttonIndicator); // change button indicator

                        $("#jx-menu-con-id").fadeOut(defaults.menuFadeSpeed); // remove/hide menu using fade effect
                        $(this).parent().removeClass("jx-nav-menu-active"); // remove active state for this button (style)

                        if (defaults.roundedButtons) { // remove additional CSS style if rounded corner button
                            $(this).parent().removeClass("jx-nav-menu-active-rounded");
                        }

                        button_active = false; // remove button's active state
                        active_button_name = "";
                        $(this).blur(); // unfocus link/href
                    } else {
                        if (defaults.showOnTop) { // is bar's on the top position?
                            buttonIndicator = "jx-arrow-up";
                        } else {
                            buttonIndicator = "jx-arrow-down";
                        }
                        $(this).parent().find("div").attr("class", buttonIndicator); // change button indicator

                        $("#jx-menu-con-id").css({ "display": "none" }); // hide menu container
                        $("#jx-menu-con-id").html("<ul>" + $(this).parent().find("ul").html() + "</ul>");
                        $("#jx-menu-con-id").css({
                            "overflow": constants["constOverflow"],
                            "position": pos,
                            "margin-left": $(this).parent().offset().left // calculate menu container position by setting its left margin
                        });

                        // set menu container location: top or bottom
                        if (defaults.showOnTop) { // top
                            $("#jx-menu-con-id").css({
                                "top": constants["constBottom"],
                                "margin-top": $(obj).height() + 6
                            });
                        } else { // bottom
                            $("#jx-menu-con-id").css({
                                "bottom": constants["constBottom"],
                                "margin-bottom": $(obj).height() + 6
                            });
                        }

                        $("#jx-menu-con-id").addClass("jx-nav-menu");

                        if ($.browser.msie && ie6) {
                            $("#jx-menu-con-id ul li a").css({ "width": "100%" }); // IE6 and IE7 right padding/margin fix
                        }

                        if (defaults.roundedButtons) { // additional CSS style for rounded corner button
                            $("#jx-menu-con-id").addClass("jx-nav-menu-rounded");
                        }

                        $(this).parent().addClass("jx-nav-menu-active"); // add active state CSS style

                        if (defaults.roundedButtons) {
                            $(this).parent().addClass("jx-nav-menu-active-rounded");
                        }

                        if (active_button_name != "") { // remove/hide any active button (on-clicked state)
                            $("a[name='" + active_button_name + "']").parent().removeClass("jx-nav-menu-active");
                            $("a[name='" + active_button_name + "']").parent().removeClass("jx-nav-menu-active-rounded");

                            if (defaults.showOnTop) { // change button indicator (depends on the current bar's position)
                                buttonIndicator = "jx-arrow-down";
                            } else {
                                buttonIndicator = "jx-arrow-up";
                            }
                            $("a[name='" + active_button_name + "']").parent().find("div").attr("class", buttonIndicator);
                        }

                        button_active = true; // change button's active state
                        active_button_name = $(this).attr("name"); // save button name for future reference (e.g. remove active state)
                        $(this).blur(); // unfocus link/href

                        $("#jx-menu-con-id").fadeIn(defaults.menuFadeSpeed); // show menu container and its item(s)
                    }
                    return false; // prevent normal click action
                });

                i = i + 1;
            });

            // nav items click event
            $("li", obj).click(function() {
                if ($("ul", this).exists()) {
                    $(this).find("a:first").click();
                    return false;
                } else if ($(this).parent().attr("id") == "jx-hid-con-id") {
                    // do nothing
                    return false;
                }
                window.location = $(this).find("a:first").attr("href"); // emulate normal click event action (e.g. follow link)
                return false;
            });

        });

        return this;

    };

})(jQuery);  // end of anonymous function

jQuery.fn.exists = function(){return jQuery(this).length>0;};

/**
 * Create a cookie
 */
jQuery.fn.createCookie = function(cookie_name, value) {
	var expiry_date = new Date(2037, 01, 01); // virtually, never expire!
	document.cookie = cookie_name + "=" + escape(value) + ";expires=" + expiry_date.toUTCString();
};

/**
 * Check cookie
 */
jQuery.fn.checkCookie = function(cookie_name) {
	if (document.cookie.length > 0) {
  		cookie_start = document.cookie.indexOf(cookie_name + "=");
  			if (cookie_start != -1) {
    			cookie_start = cookie_start + cookie_name.length + 1;
    			cookie_end = document.cookie.indexOf(";", cookie_start);
    			if (cookie_end == -1) cookie_end = document.cookie.length
    				return true;
			}
  	}
	return false;
}

/**
 * Extract cookie value
 */
jQuery.fn.extractCookieValue = function(value) {
	  if ((endOfCookie = document.cookie.indexOf(";", value)) == -1) {
	     endOfCookie = document.cookie.length;
	  }
	  return unescape(document.cookie.substring(value, endOfCookie));
}

/**
 * Read cookie
 */
jQuery.fn.readCookie = function(cookie_name) {
	  var numOfCookies = document.cookie.length;
	  var nameOfCookie = cookie_name + "=";
	  var cookieLen = nameOfCookie.length;
	  var x = 0;
	  while (x <= numOfCookies) {
	        var y = (x + cookieLen);
	        if (document.cookie.substring(x, y) == nameOfCookie)
	           return (this.extractCookieValue(y));
	           x = document.cookie.indexOf(" ", x) + 1;
	           if (x == 0){
	              break;
	           }
	  }
	  return (null);
}	

/**
 * Generate random ID
 */
jQuery.fn.genRandID = function() {
	var id = "";
	var str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
	for(var i=0; i < 24; i++) {
		id += str.charAt(Math.floor(Math.random() * str.length));
	}
    return id;
}

// end jixedbar package
