(function($){
    /***********************************************************************************************************************
     *
     **********************************************************************************************************************/
    var _CssGab = function(o, gap, array){
        var value = 0;
        gap = $.isArray(gap) ? gap : [gap];
        for(var index in array){
            value = parseInt(o.css(array[index]));
            value = isNaN(value) ? 0 : value;
            o.css(array[index], value+gap[index%gap.length]+'px');
        }
        return o;
    }

    $.fn.cssMarginGap = function(gap){
        return $(this).each(_CssGab,[$(this), gap, ['margin-top','margin-right','margin-bottom','margin-left']]);
    }

    $.fn.cssPaddingGap = function(gap){
        return $(this).each(_CssGab,[$(this), gap, ['padding-top','padding-right','padding-bottom','padding-left']]);
    }

    $.fn.cssBorderGap = function(gap){
        return $(this).each(_CssGab,[$(this), gap, ['border-top-width','border-right-width','border-bottom-width','border-left-width']]);
    }
})(jQuery);

/**
 * MESSAGE-BOX
 */
(function($){
    $.fn.messagebox=function(options){
        var defaults = {
            fadeIn: 500,
            fadeOut: 300,
            delay: 6000
        };

        options = $.extend(defaults, options);

        $(this).each(function(){
            $(this).find('p').text($(this).find('p').html().toString().replace(/<!--\[CDATA\[(.*)\]\]-->/, '$1'));
            $(this).fadeIn(options.fadeIn).not('.noclickable').css('cursor', 'pointer').click(function(){
                $(this).stop().fadeOut(options.fadeOut, function(){
                    $(this).remove();
                });
            }).delay(options.delay).fadeOut(options.fadeOut, function(){
                $(this).remove()
            });
        });
    }
})(jQuery);

$(function(){
    $('.message').messagebox();
});

/**
 * Copyright Sven Schraps
 *
 * Collapse und Accordion - Plugin
 *
 */
(function($) {
    var collapseAndAccordion = function(obj, collapse, options){

        //Standard-Einstellungen
        var defaults = {
            body: $(".body"),   //Elemente des Körpers
            head: $(".head"),   //Elemente des Kopfes
            slideTime: 300,     //Zeit des Auf- und Zuschiebens
            //CSS-Eigenschaften
            cssClassHeader: 'ui-accordion-header ui-helper-reset ui-state-default ui-corner-all',
            cssHeadOpened: 'openedHead ui-corner-top',
            cssHeadCollapsed: 'collapsedHead ui-corner-all',
            cssHeadMouseover: 'mouseoverHead ui-state-hover',
            //Parameter gelten nur für Accordion
            opened: 0,           //geöffneter Schieber (nur bei Accordion gültig)
            collapsible: false,
            selector : null
        };

        /**
         * Defaults werden mit den Optionen (aus Parameter) verknüpft
         * d.h. in der Regel müssen keine Optionen angegeben werden
         */
        options = $.extend(defaults, options);
        options.selector = obj;

        this.mouseenter = function(obj){
            $(obj).addClass(options.cssHeadMouseover);
        }

        this.mouseleave = function(obj){
            $(obj).removeClass(options.cssHeadMouseover).addClass(options.cssHeadOpened);
            //Wenn Körper zugeschoben
            if($(obj).next(options.body).css('height') == 'auto'){
                $(obj).removeClass(options.cssHeadOpened).addClass(options.cssHeadCollapsed);
            }
        }

        this.click = function(obj){    //mit anschließenden click-Funktion setzen
            var body = $(obj).nextUntil(options.head);  //Den jeweiligen Body des geklickten Kopfes
            var head = $(obj); //Der geklickte Kopf

            //Entweder wird Funktion .collapse() aufgerufen, oder Accordion ist collapsible
            if(collapse == true || options.collapsible == true){
                //Auf und Zu schieben im Wechsel mit Callback-Funktion
                body.slideToggle(options.slideTime, function(){
                    //Nur wenn Callback-Funktion aufgerufen und der Körper zugeschoben
                    if(body.css('height') == 'auto')
                        head.removeClass(options.cssHeadOpened).addClass(options.cssHeadCollapsed);
                });
            }else{
                //Nur Aufschieben
                body.slideDown(options.slideTime, function(){
                    //Nur wenn Callback-Funktion aufgerufen und der Körper zugeschoben
                    if(body.css('height') == 'auto')
                        head.removeClass(options.cssHeadOpened).addClass(options.cssHeadCollapsed);
                });
            }


            //Der Kopf bekommt eine andere CSS-Eigenschaft
            head.removeClass(options.cssHeadCollapsed).addClass(options.cssHeadOpened);

            //Wenn nicht Collapse -> Accordion
            if(collapse != true){
                //Alle Bodys, außer den des geklickten Kopfes zuschieben
                $(options.selector).find(options.body).not(body).slideUp(options.slideTime);
                //CSS-Eigenschaft aller Köpfe, außer den geklickten, rücksetzen
                $(options.selector).find(options.head).not(head).removeClass(options.cssHeadOpened).addClass(options.cssHeadCollapsed);
            }
        }

        /**
         * für alle ausgewählte Mengen wird eine Funktion zurückgegeben,
         * hierbei muss der Scope übergeben werden, da die Funktion von 2 anderen
         * Funktionen referenziert wird, daher der Scope this nichtmehr gültig ist
         */
        return obj.each(function() {
            //Verstecken aller Körper
            $(obj).find(options.head).addClass(options.cssClassHeader).append("<span class=\"accordioHead\"></span>");
            $(obj).find(options.body).hide();

            //Setzen der CSS-Eigenschaften für die Köpfe
            $(options.head).css('cursor', 'pointer').removeClass(options.cssHeadOpened).addClass(options.cssHeadCollapsed)
            .mouseenter(function(){
                mouseenter(this);
            })   //OnMouseEnter (wird nur 1 mal gefeuert)
            .mouseleave(function(){
                mouseleave(this);
            })   //OnMouseLeave (wird nur 1 mal gefeuert)
            .click(function(){
                click(this);
            });

            if (collapse != true){
                click($(obj).find(options.head)[options.opened]);
            }

        });
    }

    //Plugin Collapse
    $.fn.collapse = function(options) {
        collapseAndAccordion(this, true, options);
    }

    //Plugin Accordion
    $.fn.accordio = function(options){
        collapseAndAccordion(this, false, options);
    }

})(jQuery);


/*
 * menuBox plugin pour jQuery dÃ©veloppÃ© par Mandchou
 * http://www.mandchou.com/
 *
 * Copyright (c) 2009 Charly BELLE
 * Dual licensed under the MIT and GPL licenses.
 * http://docs.jquery.com/License
 *
 * Date: 2010-01-13 13:45:21 -0500 (Wed, 13 Jan 2010)
 * Revision: 1
 */

(function($) {  
    $.fn.menuBox = function (options){ // rÃ©glages par dÃ©faut
        options = jQuery.extend({
            speedIn:400, 
            speedOut:200, 
            menuWi:200,
            align:'horizontal'
        },options);	
        $.fn.findPos = function() {
            obj = jQuery(this).get(0);
            var curleft = obj.offsetLeft || 0;
            var curtop = obj.offsetTop || 0;
            while (obj = obj.offsetParent) {
                curleft += obj.offsetLeft
                curtop += obj.offsetTop
            }
            return {
                x:curleft,
                y:curtop
            };
        }
        this.each(function(){
            var _self = $(this);
            //var globalWi = parseInt($('html').width());
            _self.find('ul').css({
                width:options.menuWi+'px',
                position:'absolute'
            });
            _self.find('ul').addClass('ulFirstChild');
            _self.find('ul').find('ul').css({
                marginLeft:options.menuWi+'px'
                });
            _self.find('ul').find('ul').removeClass('ulFirstChild');

            if(options.align=='vertical'){
                var firstAlign = parseInt(_self.width());
                var debugAlign = 10;
            }

            else

            {
                var firstAlign = 0;
                var debugAlign = 5;
            }

            $(this).find('.ulFirstChild').css({
                marginLeft:firstAlign+'px'
                });

            $(this).find('ul').hide();
            $(this).find('li').bind('mouseenter',function(){
                var curObj = $(this).find('ul:first');
                var globalWi = parseInt($('html').width());
                var pos = $(this).findPos();
                if((globalWi - pos.x)-options.menuWi < options.menuWi){
                    var curMargin = parseInt(curObj.css('marginLeft'));
                    if(curMargin !=0){
                        curObj.css({
                            marginLeft:'-'+options.menuWi+'px'
                            });	
                    }
	
                    var diffMargin = (globalWi - pos.x)-options.menuWi;
	
                    if((globalWi - pos.x) < options.menuWi){
                        $(this).find('.ulFirstChild').css({
                            marginLeft:diffMargin-firstAlign-debugAlign+'px'
                            });
                    }	
                }
                else
                {
                    var curMargin = parseInt(curObj.css('marginLeft'));
                    if(curMargin !=0){
                        curObj.css({
                            marginLeft:options.menuWi+'px'
                            });
                        $(this).find('.ulFirstChild').css({
                            marginLeft:firstAlign+'px'
                            });
                    }
                }
                curObj.stop();
                curObj.css({
                    opacity:1
                });
                curObj.fadeIn(options.speedIn);
            });
            $(this).find('li').bind('mouseleave',function(){
                var curObj = $(this).find('ul:first');
                curObj.stop();
                curObj.fadeOut(options.speedOut);
            });
        });
    }
})(jQuery);

	


