var baseurl = jQuery('script[src*=javascripts/]:first').attr('src');
// The baseurl is the src up until the start of our js file
baseurl = baseurl.substring(0, baseurl.indexOf("javascripts/"));

var validateForm = function(elem, options)
{
    var isValid = {
        required: function(value, element)
        {
            switch (element.nodeName.toLowerCase())
            {
                case 'select':
                    var options = jQuery("option:selected", element);
                    return options.length > 0 && (element.type == "select-multiple" || (jQuery.browser.msie && !(options[0].attributes['value'].specified) ? options[0].text : options[0].value).length > 0);
                case 'input':
                    if (jQuery(element).is(":radio") || jQuery(element).is(":checkbox"))
                    {
                        return jQuery("input[name='" + element.name + "']").filter(":checked").length > 0;
                    } else
                    {
                        return jQuery.trim(value).length > 0;
                    }
                default:
                    return jQuery.trim(value).length > 0;
            }
        },
        email: function(value, element)
        {
            return is_optional(element) || /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value);
        }
    };

    var errorMsg = {
        required: "This field is required.",
        email: "Please enter a valid email address."
    };

    var is_optional = function(element)
    {
        return !isValid.required.call(this, element.value, element);
    };

    var check = function(element)
    {
        var r = rules(element);

        for (var i = 0, n = r.length; i < n; i++)
        {
            if (!isValid[r[i]].call(this, element.value, element))
            {
                return errorMsg[r[i]];
            }
        }

        return true;
    };

    var rules = function(element)
    {
        var rules = [];
        var classes = jQuery(element).attr('class') || "";
        classes && jQuery.each(classes.split(/ +/), function()
        {
            if (this in isValid)
            {
                rules.push(this);
            }
        });
        return rules;
    };

    var errorCreateLabel = function(element, options)
    {

    };

    return function(elem, options)
    {
        var frm;
        var options = options || {};

        if (jQuery(elem).is("form"))
        {
            frm = elem;
        } else
        {
            frm = jQuery(elem).parents("form");
            if (frm.length < 1) return;
            frm = frm[0];
        }

        var groups = ({});
        if (options.groups)
        {
            jQuery.each(options.groups, function(k, v)
            {
                jQuery.each(v.split(/\s+/), function(i, n)
                {
                    groups[n] = k;
                });
            });
        };

        var elements = jQuery("input, textarea, select, button", elem);
        elements
			.filter(":input")
			.not(":submit, :reset, :image, [disabled]");


        var getLabel = function(element)
        {
            var label;
            var id = groups[element.name] || ((jQuery(element).is(":radio") || jQuery(element).is(":checkbox")) ? element.name : element.id || element.name);

            label = jQuery("label[generated='true'][for='" + id + "']", elem);
            if (label.length > 0)
            {
                //
            } else
            {
                label = jQuery("<label />")
					.addClass("error")
					.attr("generated", "true")
					.attr("for", id);

                options.errorPlacement ? options.errorPlacement(label, jQuery(element)) : label.insertAfter(element);
            }

            return label;
        };

        var validate = function()
        {
            var valid = true;
            var toShow = [], toHide = [];
            var toFocus = undefined;
            jQuery(elements).each(function()
            {
                var r = check(this);
                var label = getLabel(this);
                if (r !== true)
                {
                    label.html(r || "");
                    toShow.push(label);
                    valid = false;

                    if (toFocus == undefined)
                    {
                        toFocus = this;
                    }
                } else
                {
                    toHide.push(label);
                }
            });

            jQuery(toHide).each(function()
            {
                jQuery(this).hide();
            });

            jQuery(toShow).each(function()
            {
                jQuery(this).show();
            });

            if (!valid && toFocus != undefined)
            {
                try
                {
                    jQuery(toFocus).focus();
                } catch (e) { };
            }

            return valid;
        }


        jQuery(frm).bind("submit", function()
        {
            if (!validate())
            {
                return false;
            }
        });
    }
} ();

////////////////////////////
// bigTarget.js - A jQuery Plugin
// Version 1.0.1
// Written by Leevi Graham - Technical Director - Newism Web Design & Development
// http://newism.com.au
// Notes: Tooltip code from fitted.js - http://www.trovster.com/lab/plugins/fitted/

// create closure
(function($)
{
    // plugin definition
    $.fn.bigTarget = function(options)
    {
        debug(this);
        // build main options before element iteration
        var opts = $.extend({}, $.fn.bigTarget.defaults, options);
        // iterate and reformat each matched element
        return this.each(function()
        {
            // set the anchor attributes
            var $a = $(this);
            var href = $a.attr('href');
            var title = $a.attr('title');
            // build element specific options
            var o = $.meta ? $.extend({}, opts, $a.data()) : opts;
            // update element styles
            $a.parents(o.clickZone)
				.hover(function()
				{
				    $h = $(this);
				    $h.addClass(o.hoverClass);
				    if (typeof o.title != 'undefined' && o.title === true && title != '')
				    {
				        $h.attr('title', title);
				    }
				}, function()
				{

				    $h.removeClass(o.hoverClass);
				    if (typeof o.title != 'undefined' && o.title === true && title != '')
				    {
				        $h.removeAttr('title');
				    }
				})
            // click
				.click(function()
				{
				    if (getSelectedText() == "")
				    {
				        if ($a.is('[rel*=external]'))
				        {
				            window.open(href);
				            return false;
				        }
				        else
				        {
				            //$a.click(); $a.trigger('click');
				            window.location = href;
				        }
				    }
				});
        });
    };
    // private function for debugging
    function debug($obj)
    {
        if (window.console && window.console.log)
            window.console.log('bigTarget selection count: ' + $obj.size());
    };
    // get selected text
    function getSelectedText()
    {
        if (window.getSelection)
        {
            return window.getSelection().toString();
        }
        else if (document.getSelection)
        {
            return document.getSelection();
        }
        else if (document.selection)
        {
            return document.selection.createRange().text;
        }
    };
    // plugin defaults
    $.fn.bigTarget.defaults = {
        hoverClass: 'hover',
        clickZone: 'li:eq(0)',
        title: true
    };
    // end of closure
})(jQuery);
///////////////////////////////

(function(jQuery)
{
    /* MENU */
    function init_menu()
    {
        jQuery(".menu").each(function()
        {
            var elem = this;
            var elemOffset = jQuery(elem).offset();
            var elemWidth = jQuery(elem).outerWidth();
            var mainMenu = jQuery(".mainMenu", elem);
            var hideTimeout = 0;

            var hideCurrentMenu = function()
            {
                hideTimeout = 0;
                jQuery(".mainMenu>li.mainMenuItem_hover").removeClass("mainMenuItem_hover");
            };

            var clearHideTimeout = function()
            {
                if (hideTimeout > 0)
                {
                    window.clearTimeout(hideTimeout);
                    hideTimeout = 0;
                }
            };

            var startHideTimeout = function()
            {
                clearHideTimeout();
                hideTimeout = window.setTimeout(function()
                {
                    hideCurrentMenu();
                }, 100);
            };

            jQuery(".mainMenu>li>a", elem).each(function()
            {
                var li = jQuery(this).parent();
                var hasSubmenu = jQuery(".subMenu", li).length > 0;
                jQuery(this)
					.append(jQuery("<span />").addClass("bl"))
					.append(jQuery("<span />").addClass("br"));

                jQuery(li).bind("mouseover.menu", function()
                {
                    if (jQuery(li).is(".mainMenuItem_hover"))
                    {
                        clearHideTimeout();
                    } else
                    {
                        hideCurrentMenu();
                        if (hasSubmenu)
                        {
                            jQuery(li).addClass("mainMenuItem_hover");
                        }
                    }
                });
                jQuery(this).bind("mouseover.menu", function()
                {
                    clearHideTimeout();
                });

                jQuery(li).bind("mouseout.menu", function()
                {
                    startHideTimeout();
                });

            });


            //submenu
            var subHideTimeout = 0;
            var hideCurrentSubMenu = function()
            {
                subHideTimeout = 0;
                jQuery(".subMenu>li.subMenuItem_hover", elem).removeClass("subMenuItem_hover");
            };

            //calculate row/ col
            jQuery(".mainMenu>li", elem).each(function()
            {
                if (jQuery(".subMenu", parent).lenght < 1) return;
                var parent = jQuery(this);
                var parentOffset = jQuery(parent).offset();
                jQuery(".subMenu_wrapper", parent).show();
                var subMenuItemWidth = jQuery(".subMenu>li.subMenuItem:eq(0)", parent).outerWidth(true);
                var subMenuItemsCount = jQuery(".subMenu>li.subMenuItem", parent).length;
                var maxCols = 4;

                var rows = Math.ceil(subMenuItemsCount / maxCols);
                var cols = maxCols;
                if ((rows * maxCols) > subMenuItemsCount)
                {
                    var d = subMenuItemsCount - ((rows - 1) * maxCols);
                    if (d <= Math.ceil(maxCols / 2))
                    {
                        rows++;
                        cols--;
                    }
                }

                var subMenuItemsWidth = cols * subMenuItemWidth;

                var subMenuItemPaddingH = 0, subMenuItemMarginH = 0;
                var subMenuItemsHeight = 0;
                subMenuItemPaddingH += parseInt(jQuery(".subMenu>li.subMenuItem:eq(0)", parent).css("paddingTop")) || 0;
                subMenuItemPaddingH += parseInt(jQuery(".subMenu>li.subMenuItem:eq(0)", parent).css("paddingBottom")) || 0;
                subMenuItemMarginH += parseInt(jQuery(".subMenu>li.subMenuItem:eq(0)", parent).css("marginTop")) || 0;
                subMenuItemMarginH += parseInt(jQuery(".subMenu>li.subMenuItem:eq(0)", parent).css("marginBottom")) || 0;

                for (var i = 0, n = 0; i < rows; i++)
                {
                    var maxH = 0;
                    for (var j = 0, h = 0; j < cols; j++)
                    {
                        h = jQuery(".subMenu>li.subMenuItem:eq(" + (n + j) + ")", parent).outerHeight(true);
                        if (maxH < h) maxH = h;
                    }

                    for (var j = 0; j < cols; j++)
                    {
                        jQuery(".subMenu>li.subMenuItem:eq(" + n + ")", parent).css({
                            height: (maxH - (subMenuItemPaddingH + subMenuItemMarginH)) + "px"
                        });
                        n++;
                    }

                    subMenuItemsHeight += maxH;
                }

                //subMenuItemsHeight -= parseInt(jQuery(".subMenu", parent).css("paddingTop")) || 0;
                //subMenuItemsHeight -= parseInt(jQuery(".subMenu", parent).css("paddingBottom")) || 0;
                //subMenuItemsWidth -= parseInt(jQuery(".subMenu", parent).css("paddingLeft")) || 0;
                //subMenuItemsWidth -= parseInt(jQuery(".subMenu", parent).css("paddingRight")) || 0;

                subMenuItemsWidth += 20;

                jQuery(".subMenu", parent).css({
                    width: (subMenuItemsWidth) + "px",
                    height: subMenuItemsHeight + "px"
                });

                jQuery(".subMenu_wrapper", parent).css({
                    width: (subMenuItemsWidth + 10) + "px"
                });

                subMenuItemsHeight += parseInt(jQuery(".subMenu", parent).css("paddingTop")) || 0;
                subMenuItemsHeight += parseInt(jQuery(".subMenu", parent).css("paddingBottom")) || 0;

                subMenuItemsHeight += parseInt(jQuery(".subMenu_wrapper", parent).css("paddingTop")) || 0;
                subMenuItemsHeight += parseInt(jQuery(".subMenu_wrapper", parent).css("paddingBottom")) || 0;

                //sub menu position
                var parentWidth = jQuery(parent).outerWidth();

                subMenuItemsWidth -= parseInt(jQuery(".subMenu", parent).css("paddingLeft")) || 0;
                subMenuItemsWidth -= parseInt(jQuery(".subMenu", parent).css("paddingRight")) || 0;
                var d = ((parentOffset.left + parentWidth) - elemOffset.left) - subMenuItemsWidth;
                if (d > 0)
                {
                    jQuery(".subMenu_wrapper", parent).css({
                        left: (elemWidth - subMenuItemsWidth) + "px"
                    });
                }

                jQuery(".subMenu_wrapper", parent).append(
					jQuery("<div />").addClass("subMenu_wrapper_br").append(
						jQuery("<div />").addClass("subMenu_wrapper_r")
					)
				);

                jQuery(".subMenu_wrapper .subMenu_wrapper_br", parent).css({
                    height: (subMenuItemsHeight - 10) + "px"
                }).show();

                jQuery(".subMenu_wrapper", parent).css({
                    display: ""
                });
            });


            var clearSubHideTimeout = function()
            {
                if (subHideTimeout > 0)
                {
                    window.clearTimeout(subHideTimeout);
                    subHideTimeout = 0;
                }
            };

            var startSubHideTimeout = function()
            {
                clearSubHideTimeout();
                subHideTimeout = window.setTimeout(function()
                {
                    hideCurrentSubMenu();
                }, 100);
            };

            jQuery(".subMenu>li", elem).bind("mouseover.menu", function()
            {
                clearSubHideTimeout();
                if (!jQuery(this).is(".subMenuItem_hover"))
                {
                    hideCurrentSubMenu();
                    jQuery(this).addClass("subMenuItem_hover");
                }
            });
            jQuery(".subMenu>li", elem).bind("mouseout.menu", function()
            {
                startSubHideTimeout();
            });

            //actiate bigTarget plugin
            jQuery(".subMenu>li.subMenuItem a").bigTarget({
                clickZone: 'li:eq(0)',
                hoverClass: '.subMenuItem_hover'
            });
        });



        jQuery(".region").each(function()
        {
            var elem = this;
            var hideTimeout = 0;
            var selection = jQuery(".region_selections", elem);

            if (selection.length)
            {
                selection.hide();
                var hideCurrentMenu = function()
                {
                    selection.hide();
                    jQuery(elem).removeClass("region_hover");
                };

                var clearHideTimeout = function()
                {
                    if (hideTimeout > 0)
                    {
                        window.clearTimeout(hideTimeout);
                        hideTimeout = 0;
                    }
                };

                var startHideTimeout = function()
                {
                    clearHideTimeout();
                    hideTimeout = window.setTimeout(function()
                    {
                        hideCurrentMenu();
                    }, 200);
                };

                jQuery(".current_region", elem).bind("mouseover.region", function()
                {
                    clearHideTimeout();
                    if (!jQuery(elem).is(".region_hover"))
                    {
                        jQuery(elem).addClass("region_hover");
                        selection.show();
                    }
                });
                jQuery([selection, elem]).bind("mouseover.region", function()
                {
                    clearHideTimeout();
                });

                jQuery(elem).bind("mouseout.region", function()
                {
                    startHideTimeout();
                });
            }
        });

        if (jQuery.browser.msie && jQuery.browser.version < 7)
        {
            jQuery(".region_selections").show();
            var W = jQuery(".region_selections").innerWidth();
            W -= parseInt(jQuery(".region_selections").css("paddingLeft")) || 0;
            W -= parseInt(jQuery(".region_selections").css("paddingRight")) || 0;

            jQuery(".region_selections a").each(function()
            {


                var w = W;

                w -= parseInt(jQuery(this).css("paddingLeft")) || 0;
                w -= parseInt(jQuery(this).css("paddingRight")) || 0;


                jQuery(this).css({
                    width: w + "px"
                });
            });
            jQuery(".region_selections").hide();
        }

    };

    /* default text */
    function init_def_text()
    {
        var changedClass = "jDefText_changed";

        jQuery(".jDefText[type='text']").each(function()
        {
            var onFocus = false;
            var elem = this;
            jQuery(this).bind("focus.jDefText", function()
            {
                onFocus = true;
                if (this.value == this.defaultValue)
                {
                    this.value = "";
                }
                jQuery(this).addClass(changedClass);
            });
            jQuery(this).bind("blur.jDefText", function()
            {
                onFocus = false;
                if (this.value == "")
                {
                    this.value = this.defaultValue;
                    jQuery(this).removeClass(changedClass);
                }
            });
            jQuery(this).bind("change.jDefText", function()
            {
                if (!onFocus)
                {
                    jQuery(this).triggerHandler("focus");
                    jQuery(this).triggerHandler("blur");
                }
            });
            //form reset
            if (jQuery(this).parents("form").length)
            {
                jQuery(this).parents("form").bind("reset.jDefText", function()
                {
                    elem.value = elem.defaultValue;
                    jQuery(elem).removeClass(changedClass);
                });
            }
            if (this.value == this.defaultValue)
            {
                jQuery(this).removeClass(changedClass);
            } else
            {
                jQuery(this).addClass(changedClass);
            }

        });
    };

    /* LEFT NAVIGATION */
    function init_left_nav()
    {

        var shared = {
            leftNav_onClick: function()
            {
                var self = this;

                jQuery(".subLeftNav_expanded", jQuery(self.elem).parents(".leftNavItem")).removeClass("subLeftNav_expanded");

                if (jQuery(self.link).is(".expanded"))
                {
                    jQuery(self.link).removeClass("expanded");
                    jQuery(self.subMenu.elem).hide().find(".expanded").removeClass("expanded").end().find(".subLeftNav").hide();
                    jQuery(self.subMenu.elem).parents("li:first").parents("li:first").find("ul.subLeftNav").addClass("subLeftNav_expanded");
                } else
                {
                    jQuery(self.link).addClass("expanded");
                    jQuery(self.subMenu.elem).show().addClass("subLeftNav_expanded");
                }
            }
        };

        var leftNav = function(elem, parent)
        {
            var self = this;
            self.elem = elem;
            self.parent = parent;
            self.link = jQuery(">a", self.elem);
            self.hasSubMenu = (jQuery(">ul.subLeftNav", self.elem).length > 0);

            self.subMenu = undefined;
            if (jQuery(".span", self.link).length < 1)
            {
                jQuery(self.link).wrapInner(jQuery("<span />").addClass("span"));
            }


            if (self.hasSubMenu)
            {
                self.subMenu = new leftNavGroup(jQuery(">ul.subLeftNav", self.elem)[0], self);
                jQuery(self.link).addClass("expanded");
                jQuery(">ul.subLeftNav", self.elem).show();

                /*
                jQuery(self.link).bind("click.leftNav", function(){
                shared.leftNav_onClick.apply(self, []);
                this.blur();
                return false;
                });
                */
            }

            return this;
        };

        var leftNavGroup = function(elem, parent)
        {
            var self = this;
            self.parent = parent;
            self.elem = elem;
            self.menuItems = [];

            jQuery(">li", self.elem).each(function()
            {
                (self.menuItems).push(new leftNav(this, self));
            });

            return this;
        };

        var init = function()
        {

        };

        jQuery(".leftNav").each(function()
        {
            var elem = this;

            var topBorder = jQuery(elem).next();
            if (!topBorder.is(".leftNav_top"))
            {
                topBorder = jQuery("<div />").addClass("leftNav_top").insertAfter(jQuery(elem));

                if (jQuery.browser.msie && jQuery.browser.version < 7)
                {
                    jQuery(elem).next(".leftNav_top").pngfix();
                }
            }
            jQuery(elem).wrap(jQuery("<div />").addClass("leftNavWrapper"));
            jQuery(elem).parent().css({ position: "relative" }).append(topBorder);

            jQuery("ul.subLeftNav", elem).hide().removeClass("subLeftNav_expanded");
            jQuery(".expanded", elem).removeClass("expanded");

            if (jQuery(".selected", elem).length > 0)
            {
                if (jQuery(".selected", elem).length > 1)
                {
                    jQuery(".selected", elem).not(":last").removeClass("selected");
                }

                /* 2010 Feb 02 */
                var p = jQuery(".selected", elem).parents("ul.subLeftNav:eq(0)");
                while (1)
                {
                    if (p.length > 0)
                    {
                        p.parents("li:eq(0)").find(">a").addClass("expanded");
                        p.show();
                        p = p.parents("ul.subLeftNav:eq(0)");
                    } else
                    {
                        break;
                    }
                }

                p = jQuery(".selected", elem).parents("li:eq(0)");
                if (jQuery(">ul.subLeftNav", p).length > 0)
                {
                    jQuery(".selected", elem).addClass("expanded");
                    jQuery(">ul.subLeftNav", p).show();
                }
                /* ------ */
            }


            if (jQuery(".expanded", elem).length > 0)
            {
                jQuery(".expanded", elem).filter(":last").parents("li:first").find(">ul.subLeftNav").addClass("subLeftNav_expanded");
                if (jQuery(".expanded", elem).filter(":last").parents("li:first").find(">ul.subLeftNav").length < 1)
                {
                    jQuery(".expanded", elem).parents("ul.subLeftNav").filter(":last").addClass("subLeftNav_expanded");
                }
            }


            if (jQuery.browser.msie)
            {
                jQuery(elem).css("zoom", 1);
                jQuery(".leftNavItem, .subLeftNav, .subLeftNavItemm", elem).css("zoom", 1);
            }

            var menu = new leftNavGroup(elem, null);
        });
    };

    /* CAROUSEL */
    function init_carousel(options)
    {
        options = options || {};

        /* Change Options here */
        var animateSlideDuration = options.animateSlideDuration || 1000;
        var hideNavOnSingleSlide = options.hideNavOnSingleSlide == undefined ? true : options.hideNavOnSingleSlide;

        var autoMode = options.autoMode == undefined ? true : options.autoMode;
        var autoMode_autoStart = options.autoMode_autoStart || 5000; //wait before start on page load
        var autoMode_timeout = options.autoMode_timeout || 3000; //wait before show next slide
        var autoMode_pauseAfterUserAction = options.autoMode_pauseAfterUserAction || 8000; //after user click (manual slide select), wait before start automode again

        var getSlideID = (function()
        {
            var i = 0;
            return (function()
            {
                return "slide" + (i++);
            });
        })();

        var baseurl = jQuery('script[src*=javascripts/]:first').attr('src');
        // The baseurl is the src up until the start of our js file
        baseurl = baseurl.substring(0, baseurl.indexOf("javascripts/"));

        var centerSlideContent = function(elem)
        {
            var wrapper = jQuery(".slide_content_wrapper", elem);
            if (wrapper.length > 0)
            {
                var H = jQuery(elem).innerHeight();
                H -= parseInt(jQuery(elem).css("paddingTop")) || 0;
                H -= parseInt(jQuery(elem).css("paddingBottom")) || 0;

                var h = jQuery(wrapper).outerHeight();
                h -= parseInt(jQuery(wrapper).css("paddingTop")) || 0;
                h -= parseInt(jQuery(wrapper).css("paddingBottom")) || 0;

                var y = (H - h) / 2;
                if (y < 0) y = 0;
                var h = parseInt(jQuery(wrapper).css("paddingTop")) || 0;
                var p = h + y - 10;
                if (p > 0)
                {
                    jQuery(wrapper).css("paddingTop", p + "px");
                }
            }
        };

        jQuery(".carousel").each(function()
        {
            var elem = this;
            var currentIndex = 0;
            var slidesCount = jQuery(".carousel_slide", elem).length;
            var slideWidth = jQuery(".carousel_slide:eq(0)", elem).outerWidth(true);


            if (slidesCount > 1 || !hideNavOnSingleSlide)
            {
                var nav = jQuery("<div />").addClass("carousel_nav")
					.append(jQuery("<div />").addClass("carousel_nav_buttons"))
					.append(jQuery("<div />").addClass("carousel_nav_taglines"))
					.wrapInner(jQuery("<div />").addClass("carousel_nav_wrapper"));

                nav.appendTo(elem).show();
                jQuery(nav).append(jQuery("<div />").addClass("carousel_nav_edge"));

                var contents = jQuery("<div />").addClass("slide_content");
                contents.append(jQuery("<div />").addClass("slide_content_wrapper"));
                contents.insertAfter(jQuery(".carousel_slides", elem));
            }

            tagLineWidth = 0;
            jQuery(".carousel_slide", elem).each(function()
            {
                var slide = this;
                var slideTag = jQuery(".slide_tagline", slide);
                var slideImage = jQuery(".slide_image", slide);
                var slideContent = jQuery(".slide_content", slide);

                var slideID = jQuery(this).attr("id") || getSlideID();

                if (slideTag.length > 0)
                {
                    slideTag = slideTag.html() || "";
                } else
                {
                    slideTag = "";
                }

                if (slideContent.length > 0)
                {
                    //centerSlideContent(slideContent);
                }

                if (slidesCount > 1 || !hideNavOnSingleSlide)
                {
                    jQuery("<a />").attr({
                        href: "#" + slideID,
                        title: slideTag
                    }).addClass("carousel_nav_button").show().appendTo(jQuery(".carousel_nav_buttons", nav));

                    var tagline = jQuery("<span />").addClass("carousel_nav_tagline").html(slideTag);
                    tagline.appendTo(jQuery(".carousel_nav_taglines", nav));

                    if (tagline.outerWidth(true) > tagLineWidth)
                    {
                        tagLineWidth = tagline.outerWidth(true);
                    }

                    var content = jQuery("<div />").addClass("slide_content_inner");
                    jQuery("<div />").addClass("slide_content_helper").html(jQuery(".slide_content_wrapper", slide).html()).appendTo(content);

                    content.appendTo(jQuery(".slide_content_wrapper", contents));
                }

                var more = jQuery(".more", slide);
                if (more.length > 0)
                {
                    var slide_link = more.clone(true);
                    slide_link.html("").removeClass("more").addClass("slide_link");

                    if (slidesCount > 1 || !hideNavOnSingleSlide)
                    {
                        slide_link.appendTo(content);
                    } else
                    {
                        slide_link.appendTo(jQuery(".slide_content", slide));
                    }

                    //.insertAfter(jQuery(slide).parent()).show();

                    if (jQuery.browser.msie && jQuery.browser.version < 8)
                    {
                        slide_link.append(jQuery("<img />").attr({
                            src: baseurl + "images/x.gif",
                            width: slide_link.outerWidth(),
                            height: slide_link.outerHeight(),
                            alt: ""
                        }));
                    }
                }

                jQuery(this).bind("click.carousel", function()
                {
                    moveTo(currentIndex + 1, true, autoMode_pauseAfterUserAction);
                });
            });

            if (slidesCount > 1 || !hideNavOnSingleSlide)
            {
                contents.insertAfter(jQuery(".carousel_slides", elem));
            }

            if (slidesCount > 1 || !hideNavOnSingleSlide)
            {
                jQuery(".carousel_nav_taglines, .carousel_nav_tagline", nav).css({
                    width: (tagLineWidth + 5) + "px"
                });
                jQuery(".carousel_nav_tagline", elem).hide();

                jQuery(".carousel_slide", elem).hide();
                jQuery(".carousel_slide .slide_content", elem).hide();

                var H = contents.innerHeight();
                jQuery(".slide_content_helper", contents).each(function()
                {
                    var h = jQuery(this).innerHeight();
                    var y = (H - h) / 2;
                    if (y > 0)
                    {
                        jQuery(this).parent().css("top", y + "px");
                    }

                    if (slidesCount > 1 || !hideNavOnSingleSlide)
                    {
                        if (jQuery(this).next().is(".slide_link"))
                        {
                            jQuery(jQuery(this).next()).css({
                                top: -y + "px"
                            });
                        }
                    }
                });

                contents.show();
                jQuery(".slide_content_inner", contents).hide();
            }


            if (jQuery(".carousel_slide_current", elem).length > 0)
            {
                currentIndex = jQuery(".carousel_slide", elem).index(jQuery(".carousel_slide_current", elem));
            } else
            {
                jQuery(".carousel_slide:eq(0)", elem).addClass("carousel_slide_current");
            }


            var fadeIn = function(obj, onComplete)
            {
                var obj = jQuery(obj);
                var visible = obj.css("display") != "none";
                var opacity = obj.css("opacity");

                obj.stop();
                if (!visible && (!opacity || opacity == 1))
                {
                    obj.css({
                        opacity: 0,
                        display: "block"
                    });
                } else if (!visible && opacity < 1)
                {
                    obj.css({
                        display: "block"
                    });
                }

                obj.animate({ opacity: 1 }, { queue: false, duration: 1000, complete: function()
                {
                    jQuery(this).css({
                        opacity: "",
                        display: "block"
                    });
                    if (jQuery.isFunction(onComplete))
                    {
                        onComplete();
                    }
                }
                });
            };

            var fadeOut = function(obj, onComplete)
            {
                jQuery(obj)
					.stop()
					.animate({ opacity: 0 }, { queue: false, duration: 1000, complete: function()
					{
					    jQuery(this).css({
					        opacity: "",
					        display: "none"
					    });
					    if (jQuery.isFunction(onComplete))
					    {
					        onComplete();
					    }
					}
					});
            };

            var moveTo = function(i, anim, nextTimeout)
            {
                if (i < 0 || i >= slidesCount) i = 0;
                resetAutoTimeout();

                anim = anim || false;
                if (currentIndex >= 0 && currentIndex < slidesCount)
                {
                    jQuery(".carousel_slide:eq(" + currentIndex + ")", elem).removeClass("carousel_slide_current");
                    if (slidesCount > 1 || !hideNavOnSingleSlide)
                    {
                        jQuery(".carousel_nav_button:eq(" + currentIndex + ")", elem).removeClass("carousel_nav_button_current");
                        jQuery(".carousel_nav_tagline:eq(" + currentIndex + ")", elem).hide();
                    }
                    if (anim)
                    {
                        fadeOut(jQuery(".carousel_slide:eq(" + currentIndex + ")", elem));

                        if (slidesCount > 1 || !hideNavOnSingleSlide)
                        {
                            fadeOut(jQuery(".slide_content_inner:eq(" + currentIndex + ")", contents));
                        }
                    } else
                    {
                        jQuery(".carousel_slide:eq(" + currentIndex + ")", elem).hide();
                        jQuery(".slide_content_inner:eq(" + currentIndex + ")", contents).hide();
                    }
                }

                currentIndex = i;

                if (currentIndex >= 0 && currentIndex < slidesCount)
                {
                    jQuery(".carousel_slide:eq(" + currentIndex + ")", elem).addClass("carousel_slide_current");

                    if (slidesCount > 1 || !hideNavOnSingleSlide)
                    {
                        jQuery(".carousel_nav_button:eq(" + currentIndex + ")", elem).addClass("carousel_nav_button_current");
                        jQuery(".carousel_nav_tagline:eq(" + currentIndex + ")", elem).show();
                    }

                    if (anim)
                    {
                        fadeIn(jQuery(".carousel_slide:eq(" + currentIndex + ")", elem), function()
                        {
                            if (autoMode && slidesCount > 1)
                            {
                                setAutoTimeout(nextTimeout, autoMode_timeout);
                            }
                        });
                        if (slidesCount > 1 || !hideNavOnSingleSlide)
                        {
                            fadeIn(jQuery(".slide_content_inner:eq(" + currentIndex + ")", contents));
                        }
                    } else
                    {
                        jQuery(".carousel_slide:eq(" + currentIndex + ")", elem).show();
                        if (slidesCount > 1 || !hideNavOnSingleSlide)
                        {
                            jQuery(".slide_content_inner:eq(" + currentIndex + ")", contents).show();
                        }
                        if (autoMode && slidesCount > 1)
                        {
                            setAutoTimeout(nextTimeout, autoMode_timeout);
                        }
                    }
                }

            };

            if (slidesCount > 1 || !hideNavOnSingleSlide)
            {
                jQuery(".carousel_nav_button", elem).bind("click.carousel", function()
                {
                    var idx = jQuery(".carousel_nav_button", elem).index(this);
                    moveTo(idx, true, autoMode_pauseAfterUserAction);
                    this.blur();
                    return false;
                });
            }

            var autoModeTimeout = 0;
            var resetAutoTimeout = function()
            {
                if (autoMode_timeout > 0)
                {
                    window.clearTimeout(autoModeTimeout);
                    autoModeTimeout = 0;
                }
            }

            var setAutoTimeout = function(timeout, nextTimeout)
            {
                resetAutoTimeout();
                autoModeTimeout = window.setTimeout(function()
                {
                    moveTo(currentIndex + 1, true, nextTimeout);
                }, timeout);
            }

            currentIndex = -1;
            moveTo(0, false, autoMode_autoStart);
        });
    };

    function init_side_carousel(options)
    {
        options = options || {};
        /* Change Options here */
        var animateSlideDuration = options.animateSlideDuration || 1000;
        var hideNavOnSingleSlide = options.hideNavOnSingleSlide == undefined ? true : options.hideNavOnSingleSlide;

        var autoMode = options.autoMode == undefined ? true : options.autoMode;
        var autoMode_autoStart = options.autoMode_autoStart || 5000; //wait before start on page load
        var autoMode_timeout = options.autoMode_timeout || 3000; //wait before show next slide
        var autoMode_pauseAfterUserAction = options.autoMode_pauseAfterUserAction || 8000; //after user click (manual slide select), wait before start automode again

        jQuery(".sideCarousel").each(function()
        {
            var elem = this;
            var slidesCount = jQuery(".sideCarousel_content", elem).length;
            var nav = jQuery(".sideCarousel_nav", elem);
            var currentIndex = 0;
            var slideWidth = 0;

            if (!jQuery(".sideCarousel_contents", elem).parent().is(".sideCarousel_contents_container"))
            {
                jQuery(".sideCarousel_contents", elem).wrap(jQuery("<div />").addClass("sideCarousel_contents_container"));
            }


            var maxH = 0;
            jQuery(".sideCarousel_content", elem).each(function()
            {
                if (jQuery(this).outerHeight(true) > maxH)
                {
                    maxH = jQuery(this).outerHeight(true);
                }
            });

            slideWidth = jQuery(".sideCarousel_content:eq(0)", elem).outerWidth(true);

            jQuery(".sideCarousel_contents_container", elem).css({
                height: maxH + "px"
            });
            jQuery(".sideCarousel_contents", elem).css({
                width: (slideWidth * slidesCount) + "px"
            });

            jQuery(".prev", nav).bind("click.sideCarousel", function()
            {
                moveTo(currentIndex - 1, true, autoMode_pauseAfterUserAction);
                this.blur();
                return false;
            });
            jQuery(".next", nav).bind("click.sideCarousel", function()
            {
                moveTo(currentIndex + 1, true, autoMode_pauseAfterUserAction);
                this.blur();
                return false;
            });

            var initNavState = function()
            {
                if (currentIndex <= 0)
                {
                    currentIndex = 0;
                    jQuery(".prev", nav).addClass("prev_disabled");
                } else
                {
                    jQuery(".prev", nav).removeClass("prev_disabled");
                }

                if (currentIndex >= slidesCount)
                {
                    currentIndex = slidesCount;
                    jQuery(".next", nav).addClass("next_disabled");
                } else
                {
                    jQuery(".next", nav).removeClass("next_disabled");
                }
            };

            var moveTo = function(i, anim, nextTimeout)
            {
                if (i < 0 || i >= slidesCount) i = 0;
                resetAutoTimeout();

                anim = anim || false;
                if (currentIndex >= 0 && currentIndex < slidesCount)
                {
                    jQuery(".sideCarousel_content:eq(" + currentIndex + ")", elem).removeClass("sideCarousel_content_current");
                }

                currentIndex = i;

                if (currentIndex >= 0 && currentIndex < slidesCount)
                {
                    if (anim)
                    {
                        jQuery(".sideCarousel_contents", elem).stop();
                        jQuery(".sideCarousel_contents", elem).animate({ left: -(currentIndex * slideWidth) + "px" }, { queue: false, duration: animateSlideDuration, easing: "easeInOutExpo", complete: function()
                        {
                            if (autoMode && slidesCount > 1)
                            {
                                setAutoTimeout(nextTimeout, autoMode_timeout);
                            }
                        }
                        });
                    } else
                    {
                        jQuery(".sideCarousel_contents", elem).css({
                            left: -(currentIndex * slideWidth) + "px"
                        });

                        if (autoMode && slidesCount > 1)
                        {
                            setAutoTimeout(nextTimeout, autoMode_timeout);
                        }
                    }

                    jQuery(".sideCarousel_content:eq(" + currentIndex + ")", elem).addClass("sideCarousel_content_current");
                }

                initNavState();
            };

            var autoModeTimeout = 0;
            var resetAutoTimeout = function()
            {
                if (autoMode_timeout > 0)
                {
                    window.clearTimeout(autoModeTimeout);
                    autoModeTimeout = 0;
                }
            }

            var setAutoTimeout = function(timeout, nextTimeout)
            {
                resetAutoTimeout();
                autoModeTimeout = window.setTimeout(function()
                {
                    moveTo(currentIndex + 1, true, nextTimeout);
                }, timeout);
            }

            moveTo(0, false, autoMode_autoStart);
        });
    };

    function init_newsRoller(options)
    {
        options = options || {};
        var animateDuration = options.duration || 1000;
        var animateWaitBeforeNext = options.waitBeforeNext || 8000;

        jQuery(".newsRoller").each(function()
        {
            var elem = this;
            var newsCount = jQuery(".newsRoller_news_item", elem).length;
            var timeout = 0;
            var currentIdx = 0;
            if (newsCount < 2) return;

            var newsHeight = jQuery(".newsRoller_news_item:eq(0)", elem).outerHeight(true);
            var newsWidth = jQuery(".newsRoller_news_item:eq(0)", elem).outerWidth(true);

            /*
            jQuery(".newsRoller_news_item:eq(0)", elem).clone().appendTo(jQuery(".newsRoller_news", elem));
            newsCount++;
            */
            var mouseIn = false;

            jQuery(".newsRoller_news", elem).css({
                height: (newsHeight) + "px",
                width: (newsWidth * newsCount) + "px"
            });

            var moveNext = function()
            {
                var x = -newsWidth;
                jQuery(".newsRoller_news", elem).stop();
                jQuery(".newsRoller_news", elem).animate({ left: x + "px" }, { queue: false, duration: animateDuration, easing: "easeOutExpo", complete: function()
                {
                    jQuery(".newsRoller_news_item:eq(0)", elem).appendTo(jQuery(".newsRoller_news", elem).css({ left: 0 }));
                    setTimeout();
                }
                });
            };

            var setTimeout = function()
            {
                clearTimeout();
                timeout = window.setTimeout(moveNext, animateWaitBeforeNext);
            };

            var clearTimeout = function()
            {
                if (timeout > 0)
                {
                    window.clearTimeout(timeout);
                    timeout = 0;
                }
            };

            jQuery(".newsRoller_news", elem).bind("mouseover.newsRoller", function()
            {
                if (!mouseIn)
                {
                    mouseIn = true;
                    clearTimeout();
                }
            });

            jQuery(".newsRoller_news", elem).bind("mouseout.newsRoller", function()
            {
                if (mouseIn)
                {
                    mouseIn = false;
                    timeout = window.setTimeout(setTimeout, 100);
                }
            });

            jQuery(".newsRoller_news", elem).css({ left: 0 });
            setTimeout();
        });
    };

    function init_homeTabs()
    {
        jQuery(".homeTabs").each(function()
        {
            var elem = this;

        });
    };

    /* needed fix for IE */
    function ie_fix()
    {
        if (jQuery.browser.msie && jQuery.browser.version < 7)
        {
            jQuery("img[src$=png], .leftNav_top, .slide_content, .carousel_nav_edge, .newsRoller_fadeLeft, .newsRoller_fadeRight").pngfix({
                imageFixSrc: baseurl + "images/x.gif"
            });

            jQuery(".searchForm .btnSubmitSearch").each(function()
            {
                jQuery(this).bind("mouseover", function()
                {
                    jQuery(this).addClass("btnSubmitSearch_hover");
                });
                jQuery(this).bind("mouseout", function()
                {
                    jQuery(this).removeClass("btnSubmitSearch_hover");
                });
            });
        }

        if (jQuery.browser.msie && jQuery.browser.version < 8)
        {
            jQuery(".button1, .button2, .button4, .button5").each(function()
            {
                var elem = this;
                var span = jQuery(".span", elem);
                var H = jQuery(elem).innerHeight();
                H -= parseInt(jQuery(elem).css("paddingTop")) || 0;
                H -= parseInt(jQuery(elem).css("paddingBottom")) || 0;

                var h = jQuery(span).innerHeight();
                h -= parseInt(jQuery(span).css("paddingTop")) || 0;
                h -= parseInt(jQuery(span).css("paddingBottom")) || 0;

                var y = (H - h) / 2;
                jQuery(span).css({
                    paddingTop: y + "px"
                });
            });
        }

        if (jQuery.browser.msie && jQuery.browser.version < 8)
        {
            jQuery(".cyanRoundedBox").each(function()
            {
                var W = jQuery(".boxContent", this).outerWidth();
                var h = jQuery(".boxContent", this).innerHeight();
                var w = W;
                w += parseInt(jQuery(this).css("paddingLeft")) || 0;
                w += parseInt(jQuery(this).css("paddingRight")) || 0;

                jQuery(this).css({
                    width: W + "px",
                    height: h + "px",
                    display: "inline-block",
                    overflow: "hidden"
                });

                jQuery(".boxBorder-t, .boxBorder-b", this).css({
                    width: w + "px"
                });

            });
        }
    };

    function init_text_shadow(selector)
    {
        jQuery(selector).each(function()
        {
            var elem = this;
            var html = jQuery(elem).html();
            var shadow, wrapper;

            if (elem.tagName == "DIV")
            {
                shadow = jQuery("<div />").addClass("shdwC");
                jQuery(elem).wrapInner(jQuery("<div />").addClass("shdwI"));
                wrapper = jQuery(".shdwI", elem);

                if (jQuery(elem).css("display") == "table-cell")
                {
                    jQuery(elem).wrapInner(jQuery("<div />").addClass("shdwD").css("display", "block"));
                    elem = jQuery(".shdwD", elem);
                }

            } else
            {
                shadow = jQuery("<span />").addClass("shdwC");
                jQuery(elem).wrapInner(jQuery("<span />").addClass("shdwI"));
                wrapper = jQuery(".shdwI", elem);

                if (jQuery(elem).css("display") == "table-cell")
                {
                    jQuery(elem).wrapInner(jQuery("<span />").addClass("shdwD").css("display", "block"));
                    elem = jQuery(".shdwD", elem);
                }
            }

            if (jQuery(elem).css("position") != "absolute" && jQuery(elem).css("position") != "relative")
            {
                jQuery(elem).css("position", "relative");
            }

            var o, z, p;
            if (jQuery(elem).css("position") == "absolute")
            {
                o = jQuery(elem).offset();
                z = parseInt(jQuery(elem).css("zIndex")) || 0;
            } else
            {
                o = {
                    left: parseInt(jQuery(elem).css("left")) || 0,
                    top: parseInt(jQuery(elem).css("top")) || 0
                };
                o.left += parseInt(jQuery(elem).css("paddingLeft")) || 0;
                o.top += parseInt(jQuery(elem).css("paddingTop")) || 0;
                z = parseInt(jQuery(elem).css("zIndex")) || 0;
            }

            if (z < 1)
            {
                p = jQuery(elem).parent();
                while (1)
                {
                    if (p.length > 0 && !jQuery(p).is("BODY") && !jQuery(p).is("HTML"))
                    {
                        z = parseInt(jQuery(p).css("zIndex")) || 0;
                        if (z > 0)
                        {
                            break;
                        }
                        p = jQuery(p).parent();
                    } else
                    {
                        break;
                    }
                }
                z++;
                if (z < 10) z = 10;
                //jQuery(elem).css("zIndex", z);
            }

            jQuery(elem).append(shadow);

            wrapper.css({
                position: "relative",
                zIndex: z + 2
            });

            var w, h, padding, margin;
            w = jQuery(elem).innerWidth();
            h = jQuery(elem).innerHeight();

            padding = {
                top: parseInt(jQuery(elem).css("paddingTop")) || 0,
                right: parseInt(jQuery(elem).css("paddingRight")) || 0,
                bottom: parseInt(jQuery(elem).css("paddingBottom")) || 0,
                left: parseInt(jQuery(elem).css("paddingLeft")) || 0
            };
            margin = {
                top: parseInt(jQuery(elem).css("marginTop")) || 0,
                right: parseInt(jQuery(elem).css("marginRight")) || 0,
                bottom: parseInt(jQuery(elem).css("marginBottom")) || 0,
                left: parseInt(jQuery(elem).css("marginLeft")) || 0
            };

            w -= padding.left + padding.right;
            h -= padding.top + padding.bottom;

            if (jQuery.browser.msie)
            {
                if (jQuery.browser.version > 7)
                {
                    if (padding.top > 0)
                    {
                        o.top -= padding.top - 1;
                    }

                } else if (jQuery.browser.version > 6 && jQuery.browser.version < 8)
                {
                    if (jQuery(elem).css("display") == "inline-block")
                    {
                        o.left += padding.left / 4;
                    } else
                    {
                        wrapper.css("width", w + "px");
                        wrapper.css("float", "left");
                    }
                } else if (jQuery.browser.version < 7)
                {
                    if (jQuery(elem).css("display") == "inline-block")
                    {
                        o.left += padding.left / 4;
                    } else
                    {
                        wrapper.css("width", w + "px");

                        wrapper.css("display", "inline-block");

                    }
                }
            } else
            {
                if (padding.top > 0)
                {
                    o.top -= padding.top;
                    if (jQuery.browser.mozilla && parseFloat(jQuery.browser.version) < 1.9)
                    {
                        if (jQuery(elem).css("display") == "inline")
                        {
                            o.top++;
                        }
                    }
                }
            }

            var css = {
                position: "absolute",
                left: (o.left + 1) + "px",
                top: (o.top + 1) + "px",
                textAlign: jQuery(elem).css("textAlign") || "",
                verticalAlign: jQuery(elem).css("verticalAlign") || "",
                display: jQuery(elem).css("display") || "",
                width: w + "px",
                height: h + "px",
                lineHeight: jQuery(elem).css("lineHeight") || "",
                zIndex: z + 1
            };

            shadow.html(html).css(css);

            // to replace contained image with blank image.
            shadow.html(html).children().filter("img").each(function()
            {
                var w = jQuery(this).innerWidth();
                var h = jQuery(this).innerHeight();
                jQuery(this).css({
                    width: w + "px",
                    height: h + "px",
                    overflow: "hidden"
                }).attr({
                    width: w,
                    height: h,
                    src: "images/x.gif"
                });
            });
        });
    };

    function init_image_gallery()
    {
        jQuery(".imageGallery").each(function()
        {

        });
    };

    /* onload initialization */
    jQuery(document).ready(function()
    {
        ie_fix();

        //make text shadow
        //put all selector here -- more info about jQuery selector can be found here: http://docs.jquery.com/Selectors
        //Suki: add '.barkerBox .hover_content' selector (June 07, 2010) 
        init_text_shadow(".mainMenu>li>a, .sideCarousel_title a, .scrollBox_title, .leftBox_title, .homeTabs_tabs a, .newsRoller_title .span, .button1 .span, .button2 .span, .button3 .span, .articleUtility a, .button4 .span, .button5 .span, .barkerBox .hover_content");

        init_menu(); //menu
        init_left_nav();
        init_def_text(); //def text

        //text input
        jQuery(".scfSingleLineTextBox, .scfEmailTextBox").addClass("customInput");
        if (jQuery.fn.InputBox)
        {
            jQuery(".customInput").InputBox();

        }

        //textarea
        jQuery(".scfMultipleLineTextBox").addClass("customTextarea");
        if (jQuery.fn.TextareaBox)
        {
            jQuery(".customTextarea").TextareaBox();
        }

        //checkboxes
        jQuery(".scfCheckbox input[type='checkbox']").addClass("customCheckbox");
        if (jQuery.fn.Checkbox)
        {
            jQuery(".customCheckbox").Checkbox();
        }

        //dropdown
        jQuery("select.scfDropList").addClass("customDropdown");
        if (jQuery.fn.dropDownMenu)
        {
            jQuery(".customDropdown").dropDownMenu({
                scrollPaneOptions: {
                    scrollbarWidth: 14,
                    showArrows: false,
                    arrowSize: 0,
                    dragMinHeight: 57,
                    dragMaxHeight: 57,
                    maintainPosition: true
                }
            });
        }

        //carousel
        init_carousel({
            animateSlideDuration: 1000,
            hideNavOnSingleSlide: true,
            autoMode: true,
            autoMode_autoStart: 5000,
            autoMode_timeout: 5000,
            autoMode_pauseAfterUserAction: 8000
        });
        jQuery(".carousel_nav_edge").pngfix();

        //side carousel
        init_side_carousel({
            animateSlideDuration: 1000,
            autoMode: false,
            autoMode_autoStart: 8000,
            autoMode_timeout: 8000,
            autoMode_pauseAfterUserAction: 8000
        });

        //rolling news
        init_newsRoller({
            duration: 800, //in ms
            waitBeforeNext: 8000 //in ms, wait before next news
        });

        //tabs
        if (jQuery.fn.tabs)
        {
            jQuery(".homeTabs_tabs").tabs();
        }

        //gallery
        if (jQuery.fn.gallery)
        {
            jQuery(".imageGallery").gallery();
        }

        //scrollbox
        if (jQuery.fn.jScrollPane)
        {
            jQuery(".scrollBox .scrollBox_content").jScrollPane({
                scrollbarWidth: 14,
                showArrows: false,
                arrowSize: 0,
                dragMinHeight: 57,
                dragMaxHeight: 57,
                maintainPosition: true
            });

            jQuery(".jScrollPane").jScrollPane({
                scrollbarWidth: 14,
                showArrows: false,
                arrowSize: 0,
                dragMinHeight: 57,
                dragMaxHeight: 57,
                maintainPosition: true
            });
        }

        //accordion
        if (jQuery.fn.accordion)
        {
            jQuery(".accordion").accordion();
        }

        //advanced search filter checkboxes
        if (jQuery(".searchFilters .lblFilter :checkbox").length > 0)
        {
            new function()
            {
                var checkboxes = jQuery(".searchFilters .lblFilter").not(".lblFilterAll").find(":checkbox");
                var checkAll = jQuery(".searchFilters .lblFilterAll :checkbox");

                var checkAllChanged = function()
                {
                    if (jQuery(this).is(":checked"))
                    {
                        jQuery(checkboxes).each(function()
                        {
                            if (!jQuery(this).is(":checked"))
                            {
                                jQuery(this).attr("checked", "checked").triggerHandler("change");
                            }
                        });
                    } else
                    {
                        if (jQuery(checkboxes).not(":checked").length < 1)
                        {
                            jQuery(checkboxes).each(function()
                            {
                                jQuery(this).removeAttr("checked").triggerHandler("change");
                            });
                        }
                    }
                };

                var checkboxChanged = function()
                {
                    if (!jQuery(this).is(":checked"))
                    {
                        if (jQuery(checkAll).is(":checked"))
                        {
                            jQuery(checkAll).removeAttr("checked").triggerHandler("change");
                        }
                    }
                };

                if (checkboxes.length > 0 && checkAll.length > 0)
                {
                    jQuery(checkAll).bind("change.advancedSearchFilters", function()
                    {
                        checkAllChanged.apply(this, []);
                    });
                    jQuery(checkboxes).each(function()
                    {
                        jQuery(this).bind("change.advancedSearchFilters", function()
                        {
                            checkboxChanged.apply(this, []);
                        });
                    });
                }

                jQuery(document).ready(function()
                {
                    checkAllChanged.apply(jQuery(checkAll)[0], []);
                });
            };
        }

        //image gallery
        init_image_gallery();

        //press release table
        jQuery("table.pressRelease_list").each(function()
        {
            jQuery("tr:first", this).addClass("first");
        });

        //executive bio page
        //auto Ellipsis
        if (jQuery.fn.autoEllipsis)
        {
            jQuery(".autoEllipsis").ellipsis();
        }


        //download brochure
        jQuery(".brochureDownload, .checknet_solution").each(function()
        {
            var h, w, d;
            var elem = this;
            var img = jQuery(".image", elem), imgW = 0, imgH = 0;
            if (img.length)
            {
                imgW = jQuery(img).outerWidth();
                imgH = jQuery(img).outerHeight();
                if (jQuery(elem).outerHeight() < imgH)
                {
                    h = jQuery(elem).outerHeight(), d;

                    h -= parseInt(jQuery(elem).css("paddingTop")) || 0;
                    h -= parseInt(jQuery(elem).css("paddingBottom")) || 0;
                    h -= parseInt(jQuery(elem).css("borderTopWidth")) || 0;
                    h -= parseInt(jQuery(elem).css("borderBottomWidth")) || 0;

                    d = imgH - h;
                    if (d > 0)
                    {
                        jQuery(elem).css({
                            height: (h + d) + "px"
                        });
                    }
                }
            }

            jQuery(elem).append("<span class='bdr_tl'></span><span class='bdr_tr'></span><span class='bdr_bl'></span><span class='bdr_br'></span>");

            if (jQuery.browser.msie && jQuery.browser.version < 7)
            {
                h = jQuery(elem).outerHeight();
                if (h % 2 != 0)
                {
                    jQuery(".bdr_bl", elem).css("marginBottom", "-1px");
                    jQuery(".bdr_br", elem).css("marginBottom", "-1px");
                }
                w = jQuery(elem).outerWidth();
                if (h % 2 != 0)
                {
                    jQuery(".bdr_br", elem).css("marginRight", "-1px");
                    jQuery(".bdr_tr", elem).css("marginRight", "-1px");
                }

                jQuery(".bdr_tl, .bdr_tr, .bdr_bl, .bdr_br", elem).pngfix({
                    imageFixSrc: baseurl + "images/x.gif"
                });
            }
        });

        //color box
        if (jQuery.fn.colorbox)
        {
            jQuery(".colorbox").not(".cboxelement").colorbox({
                iframe: true,
                width: 540,
                height: 480,
                title: false,
                opacity: 0.66,
                close: "close window"
            });

            jQuery(".video_overlay").not(".cboxelement").colorbox({
                iframe: true,
                innerWidth: 740,
                innerHeight: 334,
                title: false,
                opacity: 0.66,
                close: "close window"
            });
        }

        //barkerBoxes  
        //Suki: add 'last' class to last box of barker boxes collection (June 07, 2010) 
        jQuery(".barkerBoxes").each(function()
        {
            jQuery(">.barkerBox:last", this).addClass("barkerBox-last");
        });

        //fix Mac FF
        var isMac = (navigator.platform && navigator.platform.toLowerCase().indexOf("mac") >= 0);
        if (isMac && jQuery.browser.mozilla)
        {
            jQuery(".inputBox-container .customInput").css({ top: "-1px" });
        }
    });
})(jQuery);

/**** COUNTDOWN ***/
(function($)
{
    function sprintf()
    {
        // http://kevin.vanzonneveld.net
        // +   original by: Ash Searle (http://hexmen.com/blog/)
        // + namespaced by: Michael White (http://getsprink.com)
        // +    tweaked by: Jack
        // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
        // +      input by: Paulo Freitas
        // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
        // +      input by: Brett Zamir (http://brett-zamir.me)
        // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
        // *     example 1: sprintf("%01.2f", 123.1);
        // *     returns 1: 123.10
        // *     example 2: sprintf("[%10s]", 'monkey');
        // *     returns 2: '[    monkey]'
        // *     example 3: sprintf("[%'#10s]", 'monkey');
        // *     returns 3: '[####monkey]'

        var regex = /%%|%(\d+\$)?([-+\'#0 ]*)(\*\d+\$|\*|\d+)?(\.(\*\d+\$|\*|\d+))?([scboxXuidfegEG])/g;
        var a = arguments, i = 0, format = a[i++];

        // pad()
        var pad = function(str, len, chr, leftJustify)
        {
            if (!chr) { chr = ' '; }
            var padding = (str.length >= len) ? '' : Array(1 + len - str.length >>> 0).join(chr);
            return leftJustify ? str + padding : padding + str;
        };

        // justify()
        var justify = function(value, prefix, leftJustify, minWidth, zeroPad, customPadChar)
        {
            var diff = minWidth - value.length;
            if (diff > 0)
            {
                if (leftJustify || !zeroPad)
                {
                    value = pad(value, minWidth, customPadChar, leftJustify);
                } else
                {
                    value = value.slice(0, prefix.length) + pad('', diff, '0', true) + value.slice(prefix.length);
                }
            }
            return value;
        };

        // formatBaseX()
        var formatBaseX = function(value, base, prefix, leftJustify, minWidth, precision, zeroPad)
        {
            // Note: casts negative numbers to positive ones
            var number = value >>> 0;
            prefix = prefix && number && { '2': '0b', '8': '0', '16': '0x'}[base] || '';
            value = prefix + pad(number.toString(base), precision || 0, '0', false);
            return justify(value, prefix, leftJustify, minWidth, zeroPad);
        };

        // formatString()
        var formatString = function(value, leftJustify, minWidth, precision, zeroPad, customPadChar)
        {
            if (precision != null)
            {
                value = value.slice(0, precision);
            }
            return justify(value, '', leftJustify, minWidth, zeroPad, customPadChar);
        };

        // doFormat()
        var doFormat = function(substring, valueIndex, flags, minWidth, _, precision, type)
        {
            var number;
            var prefix;
            var method;
            var textTransform;
            var value;

            if (substring == '%%') { return '%'; }

            // parse flags
            var leftJustify = false, positivePrefix = '', zeroPad = false, prefixBaseX = false, customPadChar = ' ';
            var flagsl = flags.length;
            for (var j = 0; flags && j < flagsl; j++)
            {
                switch (flags.charAt(j))
                {
                    case ' ': positivePrefix = ' '; break;
                    case '+': positivePrefix = '+'; break;
                    case '-': leftJustify = true; break;
                    case "'": customPadChar = flags.charAt(j + 1); break;
                    case '0': zeroPad = true; break;
                    case '#': prefixBaseX = true; break;
                }
            }

            // parameters may be null, undefined, empty-string or real valued
            // we want to ignore null, undefined and empty-string values
            if (!minWidth)
            {
                minWidth = 0;
            } else if (minWidth == '*')
            {
                minWidth = +a[i++];
            } else if (minWidth.charAt(0) == '*')
            {
                minWidth = +a[minWidth.slice(1, -1)];
            } else
            {
                minWidth = +minWidth;
            }

            // Note: undocumented perl feature:
            if (minWidth < 0)
            {
                minWidth = -minWidth;
                leftJustify = true;
            }

            if (!isFinite(minWidth))
            {
                throw new Error('sprintf: (minimum-)width must be finite');
            }

            if (!precision)
            {
                precision = 'fFeE'.indexOf(type) > -1 ? 6 : (type == 'd') ? 0 : undefined;
            } else if (precision == '*')
            {
                precision = +a[i++];
            } else if (precision.charAt(0) == '*')
            {
                precision = +a[precision.slice(1, -1)];
            } else
            {
                precision = +precision;
            }

            // grab value using valueIndex if required?
            value = valueIndex ? a[valueIndex.slice(0, -1)] : a[i++];

            switch (type)
            {
                case 's': return formatString(String(value), leftJustify, minWidth, precision, zeroPad, customPadChar);
                case 'c': return formatString(String.fromCharCode(+value), leftJustify, minWidth, precision, zeroPad);
                case 'b': return formatBaseX(value, 2, prefixBaseX, leftJustify, minWidth, precision, zeroPad);
                case 'o': return formatBaseX(value, 8, prefixBaseX, leftJustify, minWidth, precision, zeroPad);
                case 'x': return formatBaseX(value, 16, prefixBaseX, leftJustify, minWidth, precision, zeroPad);
                case 'X': return formatBaseX(value, 16, prefixBaseX, leftJustify, minWidth, precision, zeroPad).toUpperCase();
                case 'u': return formatBaseX(value, 10, prefixBaseX, leftJustify, minWidth, precision, zeroPad);
                case 'i':
                case 'd':
                    number = parseInt(+value, 10);
                    prefix = number < 0 ? '-' : positivePrefix;
                    value = prefix + pad(String(Math.abs(number)), precision, '0', false);
                    return justify(value, prefix, leftJustify, minWidth, zeroPad);
                case 'e':
                case 'E':
                case 'f':
                case 'F':
                case 'g':
                case 'G':
                    number = +value;
                    prefix = number < 0 ? '-' : positivePrefix;
                    method = ['toExponential', 'toFixed', 'toPrecision']['efg'.indexOf(type.toLowerCase())];
                    textTransform = ['toString', 'toUpperCase']['eEfFgG'.indexOf(type) % 2];
                    value = prefix + Math.abs(number)[method](precision);
                    return justify(value, prefix, leftJustify, minWidth, zeroPad)[textTransform]();
                default: return substring;
            }
        };

        return format.replace(regex, doFormat);
    }

    function updateTimer(elem)
    {
        var diff, d, h, m;
        diffOffset = -60 - (new Date()).getTimezoneOffset();

        //event date/time : Oct 17, 2011 12:00 am
        //note that in javascript, months is start from 0 (January) to 11 (December)
        diff = ((new Date(2011, 9, 18, 6, 0, 0, 0)).getTime() + (diffOffset * 60 * 1000) - (new Date()).getTime()) / 1000;
        
        if (diff >= 0)
        {
            d = h = m = 0;
            if (diff > 86400)
            {
                d = Math.floor(diff / 86400);
                diff = diff - (d * 86400);
            }
            if (diff > 3600)
            {
                h = Math.floor(diff / 3600);
                diff = diff - (h * 3600);
            }
            m = Math.floor(diff / 60) + 1;

            if (m >= 60)
            {
                h++;
                m -= 60;
            }

            $(".countdown-day", elem).text(sprintf("%02d", d));
            $(".countdown-hour", elem).text(sprintf("%02d", h));
            $(".countdown-minute", elem).text(sprintf("%02d", m));

        } else
        {
            $(".countdown-day", elem).text("40	");
            $(".countdown-hour", elem).text("00");
            $(".countdown-minute", elem).text("00");

        }
    }

    $(function()
    {
        $(".countdownBox").each(function()
        {
            var el = $(this), t;
            updateTimer(this);

            //get current second to have the timer update more exact with user's computer time
            //the first timer (timeout)
            t = (60 - (new Date()).getSeconds()) * 1000;

            window.setTimeout(function()
            {
                updateTimer(el);
                window.setInterval(function()
                {
                    updateTimer(el);
                }, 60000);
            }, t);
        });
    });
})(jQuery);

