///////////////////////////////////////////////////////////////////////////////
//////////////////// Lightbox  ////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

/*
	Lightbox für Inhalte jeder Art

	benötigte Bilder befinden sich in /intergator2/img
	benötigte CSS befindet sich in /intergator2/js/style/js
	ifp-lightbox muss in der HTML Seite oder in einer externen JS-Datei initialisiert werden
	Beispiel:
	--------
	$(document).ready(function() {
		$('#link-id').ifpLightbox({
			'contentbox' : '.contentbox',
			'inputfocus' : '#input_id'
			});
	});
	Ein Link (oder anderes HTML-Element) mit der ID "link-id" ruft die Box mit der class "contentbox" auf.
	Für IE 7 muss die Contenbox mit CSS eine feste Breite bekommen
*/

$.fn.ifpLightbox = function(options) {

	var closebutton_img  = "/intergator2/img/close.png";
	var menu_height      = 30;

	var link             = this;     // Link-Objekt

	var settings = $.extend({        // Default-Settings
		'contentbox'      : 'ifpContent', // Box, die aufgerufen werden soll
		'closebutton'     : 'default',    // bei default wird ein Close-Button eingefügt, sonst id oder Klasse angeben
		'border_width'    : '11',         // Breite des Rahmens
		'content_padding' : '10',         // Padding für die Inhaltsbox
		'width'           : '500',        // Breite des Contents
		'height'          : '500',        // Höhe des Contents
		'klasse'          : 'default'     // bei mehreren Lightboxen pro Seite müssen die Boxen variiert werden
	}, options);

	var contentbox  = settings.contentbox;
	var closebutton = settings.closebutton;
	var border      = parseInt(settings.border_width);
	var padding     = parseInt(settings.content_padding);
	var width       = parseInt(settings.width)  + ( 2 * padding );
	var height      = parseInt(settings.height) + ( 2 * padding );
	var klasse      = settings.klasse;

	$(link).hover(function() {
		$(this).addClass("hover");
	}, function() {
		$(this).removeClass("hover");
	});

	$(link).click(function(e) {

		$("<div class='opacity_overlay'></div>").appendTo($("body"));

		var lightbox  = "<div class='lightbox " + klasse + "'>";
		lightbox     += "<div>";
		lightbox     += "<div class='ol'></div>";
		lightbox     += "<div class='om'></div>";
		lightbox     += "<div class='or'></div>";
		lightbox     += "</div>";
		lightbox     += "<div class='clear'>";
		lightbox     += "<div class='ml'></div>";
		lightbox     += "<div class='mm'>";

		if (settings.closebutton == "default") {
			lightbox   += "<div class='menu' style='height:" + menu_height + "px'><a class='close'><img src='" + closebutton_img + "'/> Schließen</a></div>";
			closebutton = "div.lightbox." + klasse + " div.menu a.close";
			height     = parseInt(settings.height) + menu_height;
		}

		lightbox     += "<div class='content' style='padding:" + padding + "px'>";
		lightbox     += $(contentbox).html();
		lightbox     += "</div>";

		lightbox     += "</div>";
		lightbox     += "<div class='mr'></div>";
		lightbox     += "</div>"
		lightbox     += "<div class='clear'>";
		lightbox     += "<div class='ul'></div>";
		lightbox     += "<div class='um'></div>";
		lightbox     += "<div class='ur'></div>";
		lightbox     += "</div>";

		$(lightbox).css({
			'display':'none',
			'width':  width  + ( 2 * border ),
			'height': height + ( 2 * border )
		}).appendTo($("body"));

		// Höhe bzw Breite der mittigen Randboxen
		$("div.lightbox." + klasse + " div.om").css('width',width);
		$("div.lightbox." + klasse + " div.um").css('width',width);
		$("div.lightbox." + klasse + " div.ml").css('height',height);
		$("div.lightbox." + klasse + " div.mr").css('height',height);
		$("div.lightbox." + klasse + " div.mm").css({
			'height': height,
			'width' : width
		});
		// Box mittig und einblenden
		var lightbox_width  = $("div.lightbox." + klasse).width();
		var lightbox_height = $("div.lightbox." + klasse).width();
		var window_width    = $(window).width();
		var window_height   = $(window).height();

		var left = Math.ceil((window_width-lightbox_width)/2) + $(window).scrollLeft();
		var top  = Math.ceil((window_height-lightbox_height)/2) + $(window).scrollTop();

		if (left < 0) left = 0;
		if (top  < 0) top = 0;

		$("div.lightbox." + klasse).css({
			'top' : top,
			'left': left
		}).fadeIn("slow");

		$(window).resize(function(){
			window_width   = $(window).width();
			window_height  = $(window).height();
			left = Math.ceil((window_width-lightbox_width)/2) + $(window).scrollTop();
			top  = Math.ceil((window_height-lightbox_height)/2) + $(window).scrollLeft();
			if (left < 0) left = 0;
			if (top  < 0) top  = 0;
			$("div.lightbox." + klasse).css({
				'top' : top,
				'left': left
			}).fadeIn("slow");
		});

		$(closebutton).click(function(){
			reset();
		});
	});

	function reset() {
		$("div.lightbox." + klasse).remove();
		$(".opacity_overlay").remove();
	}
};

///////////////////////////////////////////////////////////////////////////////
//////////////////// Accordion-Funktion ///////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

$.fn.ifpAccordion = function(options) {
	var settings = $.extend({            //Default-Settings
		'accordion'    : 'div.accordion',  //Accordion Box
		'head'         : 'div.head',       //Überschrift, bei Klick geht die Box auf
		'content'      : 'div.middle'      //Inhalt
	}, options);


	$(settings.accordion + ' ' + settings.head).hover(function () {
			$(this).addClass("hover");
		}, function () {
			$(this).removeClass("hover");
		});

	//Anker lesen
	var anker;
	var url = document.location.toString();
	if (url.match('#')) { // Anker vorhanden
		anker = '#' + url.split('#')[1];
		// Box, welche zum Anker gehört öffnen
		if($(settings.accordion).is(anker)){
			$(settings.accordion).each(function(){
				if ($(this).is(anker)) $(this).addClass('open');
				else $(this).removeClass('open');
			});
		}
	}

	//Accordion
	$(settings.accordion + ' ' + settings.head).click(function() {
		if ($(this).parent().hasClass('open')) {
			$(this).next().slideUp('slow', function() {
				$(this).parent().removeClass('open');
				$(this).prev().removeClass('line');
			});
		} else {
			// Alle geöffnetten schließen
			$(settings.accordion + '.open ' + settings.content).slideUp('slow', function() {
				$(this).parent().removeClass('open');
				$(this).prev().removeClass('line');
			});
			// angeklickte Box öffen
			$(this).addClass('line');
			$(this).next().slideDown('slow', function() {
				$(this).parent().addClass('open');
			});
		}
	});
};

///////////////////////////////////////////////////////////////////////////////
//////////////////// Banner Rotation //////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

/*
	Banner werden fortlaufend durchgescrollt.
	Banner können manuell durchgescrollt werden.
	Baanner starten von links mit der Position 0.
	Bei Scrollen gibt es immer ein Element im Negativen Bereich
	(außerhalb der Slidebox).

	benötigte Bilder befinden sich in /intergator2/img
	benötigte CSS befindet sich in /intergator2/js/style/js

*/

$.fn.ifpCarousel = function(options) {
	var settings = $.extend({           // Default-Settings
		'container'    : 'div.middle',    // Container für Slider
		'content'      : 'div.content',   // Box, die alle Logos enthält
		'box'          : 'div.referenz',  // Einzelne Boxen, die gescrollt werden
		'next'         : 'div.right img', // Button für nächste Box
		'prev'         : 'div.left img',  // Button für zurück
		'content_width': '620',           // Breite des Layers, der die Boxen enthält
		'slider_hold'  : '1000',          // Intervallzeit
		'slider_speed' : '3000',          // Geschwindigkeit
		'manual_speed' : '500'            // Geschindigkeit beim manuellen scrollen
	}, options);

	var running = false;

	var next_img       = "/intergator2/img/slider-right.png";
	var prev_img       = "/intergator2/img/slider-left.png";
	var next_img_hover = "/intergator2/img/slider-right-hover.png";
	var prev_img_hover = "/intergator2/img/slider-left-hover.png";
	var content_width  = parseInt(settings.content_width);

	var slide;        //Slideshow
	var slider_speed  = parseInt(settings.slider_speed);
	var slider_hold   = parseInt(settings.slider_hold);
	var manual_speed  = parseInt(settings.manual_speed);

	var slider        = $(this);

	//Position der Logos und der Contentbox setzen (nur zu Beginn)
	var last_element       = slider.find(settings.content + " " + settings.box+ ":last");
	// letztes Element entfernen und vorn wieder anfügen (im negativen Bereich)
	last_element.remove();
	slider.find(settings.content + " " + settings.box+ ":first").before(last_element);

	slider.find(settings.container).css({
		'position' : 'relative',
		'overflow' : 'hidden'
	}).find(settings.content).css({
		'position' : 'absolute',
		'top'      : 0,
		'left'     : -last_element.width(),
		'width'    : content_width*2
	});

	// Button animieren
	$(settings.next).hover(function() {
		$(this).attr('src', next_img_hover);
	}, function() {
		$(this).attr('src', next_img);
	});
	$(settings.prev).hover(function() {
		$(this).attr('src', prev_img_hover);
	}, function() {
		$(this).attr('src', prev_img);
	});

	//start_sliding(slider_speed, slider_hold);
	forward(slider_speed);

	slider.find(settings.next).click(function(){
		//stop_sliding(slide);
		forward(manual_speed);
	});

	slider.find(settings.prev).click(function(){
		//stop_sliding(false);
		backward(manual_speed);
	});

	function forward(speed) {
		if (running == false) {
			running = true;
			var first_element = slider.find(settings.content + " " + settings.box+ ":first");
			//Erstes Element (negativ) entfernen und hinten wieder anfügen
			first_element.remove();
			slider.find(settings.content).css('left',0).find(settings.box+ ":last").after(first_element);
			//neues erstes Element, welches in den negativen Bereich nachrutscht
			first_element = slider.find(settings.content + " " + settings.box+ ":first");

			slider.find(settings.content).stop().animate({left: (-first_element.width())}, speed, function() {
				running = false;
			});
		}
	}

	function backward(speed) {
		if (running == false) {
			running == true;
			var first_element = slider.find(settings.content + " " + settings.box+ ":first");
			var last_element  = slider.find(settings.content + " " + settings.box+ ":last");

			//Letztes Element entfernen und vorn (neg) wieder anfügen
			last_element.remove();
			var left = parseInt(slider.find(settings.content).css('left'))-first_element.width();
			slider.find(settings.content).css('left',left).find(settings.box+ ":first").before(last_element);

			slider.find(settings.content).stop().animate({left: (left+first_element.width())}, speed, function() {
				running = false;
			});
		}
	}

	function start_sliding(speed, timeout) {
		slide = setInterval(function() {
				forward(speed);
			}, timeout);
	}

	function stop_sliding() {
		clearInterval(slide);
	}
};

///////////////////////////////////////////////////////////////////////////////
//////////////////// Webinar Rotation //////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

$.fn.ifpVcarousel = function(options) {
	var settings = $.extend({           // Default-Settings
		'content'      : 'div.container', // Container für einzelne Boxen, die gescrollt werden
		'box'          : 'div.element',   // Einzelne Boxen, die gescrollt werden
		'box_height'   : 29,              // Höhe der einzelnen Boxen
		'button'       : 'div.button'     // Button zum scrollen
	}, options);

	var slider      = $(this);

	var box_height  = parseInt(settings.box_height);

	//Position der Logos und der Contentbox setzen (nur zu Beginn)
	// top = box_height -> außerhalb der Anzeige
	slider.find(settings.content).css('position','relative').find(settings.box).css({
			position: "absolute",
			top:  box_height
	});

	//aktuell wird angezeigt mit top = 0
	var actuell = slider.find(settings.content).css('position','relative').find(settings.box + ":first");
	actuell.css('top',0);

	// wenn es einen nächsten Punkt gibt, dann kann nach unten gescrollt werden
	// sonst wird der Button gelöscht
	var direction;
	if (actuell.next().is(settings.box)) direction = "down";
	else slider.find(settings.button).remove();

	// Button animieren
	slider.find(settings.button).hover(function() {
		$(this).addClass('hover');
	}, function() {
		$(this).removeClass('hover');
	});

	slider.find(settings.button).click(function() {

			if (direction == "down") {
				if (actuell.next().is(settings.box)) {
					actuell.css('top',box_height);
					actuell = actuell.next();
					actuell.css('top',0);
					if (!actuell.next().is(settings.box)) {
						direction = "up";
						$(this).removeClass('down').addClass('up');
					}
				}
			} else if (direction == "up") {
				if (actuell.prev().is(settings.box)) {
					actuell.css('top',box_height);
					actuell = actuell.prev();
					actuell.css('top',0);
					if (!actuell.prev().is(settings.box)) {
						direction = "down";
						$(this).removeClass('up').addClass('down');
					}
				}
			}
	});
};

///////////////////////////////////////////////////////////////////////////////
//////////////////// Box Rotation /////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

$.fn.ifpBoxCarousel = function(options) {
	var settings = $.extend({             // Default-Settings
		'content'      : 'div.scroll',      // Wrapper
		'container'    : 'div.container',   // Container für einzelne Boxen, die gescrollt werden
		'item'         : 'div.element',     // Einzelne Boxen, die gescrollt werden
		'box_width'    : 195,               // Höhe der einzelnen Boxen
		'prev'         :'div.buttons div.prev',       // Button zum scrollen
		'next'         :'div.buttons div.next'
	}, options);

	var slider      = $(this);

	// richtige Größe für Container ermitteln (Breite x Anzahl)
	var box_width   = parseInt(settings.box_width);
	var anz_items   = slider.find(settings.item).size();
	slider.find(settings.container).css('width', box_width * anz_items);

	slider.find(settings.prev).addClass('grey');

	// Button animieren
	$(settings.next).hover(function() { $(this).addClass('hover'); },
												 function() { $(this).removeClass('hover');});
	$(settings.prev).hover(function() { $(this).addClass('hover');},
												 function() { $(this).removeClass('hover');});

	function doBefore (e, elem, $pane, $items, pos) {
		// pos ist immer die Position wo es hingeht von 0 - (anz_items - 1))
		if (anz_items == 1) {
			slider.find(settings.next).addClass('grey');
			slider.find(settings.prev).addClass('grey');
		} else {
			if (pos == 0) {
				slider.find(settings.prev).addClass('grey');
				slider.find(settings.next).removeClass('grey');
			}
			else if (pos == (anz_items - 1)) {
				slider.find(settings.next).addClass('grey');
				slider.find(settings.prev).removeClass('grey');
			}
			else {
				slider.find(settings.prev).removeClass('grey');
				slider.find(settings.next).removeClass('grey');
			}
		}
	}

	slider.find(settings.content).serialScroll({
		items:slider.find(settings.item),
		prev:slider.find(settings.prev),
		next:slider.find(settings.next),
		duration:1200,
		start: 0,
		force: true,
		stop:true,
		lock:false,
		cycle:false,
		jump: true,
		onBefore: doBefore
	});
};

///////////////////////////////////////////////////////////////////////////////
//////////////////// Kategorieauswahl /////////////////////////////////////////
// Es werden alle Elemente ein- bzw. ausgeblendet, welche den Klassennamen   //
// der ID des Buttons haben.                                                 //
// Mit hide_object kann bestimmt werden ob das gesammte Element ausgeblendet //
// wird 'default' oder die Kinder des Objektes 'children'.                   //
// Mit effect kann der Effekt festegelgt werden (default, slide oder fade)   //
///////////////////////////////////////////////////////////////////////////////

$.fn.ifpCategories = function(options) {
	var settings = $.extend({             // Default-Settings
		'hide_object'  : 'default',         // Was soll versteckt werden
		'effect'       : 'default'          // Effekt
	}, options);

	var cat_container  = $(this);

	check_active(cat_container)

	jQuery(cat_container).children().click(function(){
		// bei Klick Status ändern
		if (jQuery(this).is('.active')) jQuery(this).removeClass('active');
		else jQuery(this).addClass('active');

		check_active(cat_container)
	});

	// Kategorien ein- und ausblenden
	function check_active(cat_container) {
		jQuery(cat_container).children().each(function(){
			var id = jQuery(this).attr('id');
			var object = jQuery('.' + id);
			if (settings.hide_object == 'children') object = jQuery('.' + id).children();
			if (jQuery(this).is('.active')) {
				if (settings.effect == 'slide') object.slideDown();
				else if (settings.effect == 'fade') object.fadeIn();
				else object.show();
			} else {
				if (settings.effect == 'slide') object.slideUp();
				else if (settings.effect == 'fade') object.fadeOut();
				else object.hide();
			}
		});
	}
};


