/**
 * Links in neuem Fenster/Tab öffnen
 * 
 * Anwendung: dem <a>-Tag wird die unten angegebene Klasse zugewiesen, damit der Link in neuem Fenster geöffnet wird
 * <a href="http://www.google.de/" class="external_link">Google (öffnet in neuem Fenster)</a>
 */
jQuery.external_links = {
	
	// VARIABLEN
	triggerClass: 'external_link', // Klassenname für Links, die in neuem Fenster geöffnet werden sollen
	addTitle: '(öffnet in neuem Fenster)', // Hinweis der dem title Attribut des Links angefügt wird
	
	init: function() {
		var links = jQuery('.'+jQuery.external_links.triggerClass);
		if(links) {
			links.each(function() {
				jQuery(this).attr({target: "_blank"});
				jQuery(this).attr({title: jQuery(this).attr('title')+" "+jQuery.external_links.addTitle});
			});
		}
	}
}

/**
 * Allen Popup Links ein Overlay hinzufügen, damit sichtbar ist, dass bei Klick ein Popup geöffnet wird
 * 
 * Anwendung: dem <a>-Tag wird die unten angegebene Klasse zugewiesen, damit der Link in Popup geöffnet wird
 * <a href="http://www.google.de/" class="popup">Google (öffnet in Popup)</a>
 */
jQuery.popup = {
	
	// VARIABLEN
	triggerClass: 'popup', // Klassenname für Links, die in Popup geöffnet werden sollen
	imgClass: 'image', // Zusätzlicher Klassenname der Links die Bild beinhalten angefügt wird
	overlayImgClass: 'popup_overlay', // Klassenname Overlay, dass über Link (Bild) gelegt wird
	
	init: function() {
		var links = jQuery('.'+jQuery.popup.triggerClass);
		if(links) {
			for(var i = 0; i < links.length; i++) {
				jQuery(links[i]).addClass(jQuery.popup.imgClass);
				
				// overlay for images
				if(jQuery(links[i]).children("img").first().val() != null) {
					jQuery("<span/>", {
						"class": jQuery.popup.overlayImgClass
					}).appendTo(links[i]);
				}
			}
		}
	}
}

/**
 * Default-Werte der Formularfelder leeren, wenn Nutzer ins Feld klickt
 */
jQuery.clearDefaultsOnFields = {

	// VARIABLEN
	fieldIDs: new Array('SearchForm_SearchForm_Search'), // IDs der Formularfelder die geleert werden sollen
	defaultValues: new Array(), // Array that stores the default values of the given

	init: function() {

		// lopp throug all IDs
		var IDCount = jQuery.clearDefaultsOnFields.fieldIDs.length;
		for(var i=0; i < IDCount; i++ ) {
			// if field exists
			if(jQuery('#'+jQuery.clearDefaultsOnFields.fieldIDs[i]).val() != null) {
				var formField = jQuery('#'+jQuery.clearDefaultsOnFields.fieldIDs[i]);
				// store default value
				jQuery.clearDefaultsOnFields.defaultValues[i] = jQuery(formField).attr('value');
				// store internal id to element to be able to read out the default value later on
				jQuery(formField).data('ID', i);

				// add focusin event handler to each field
				jQuery(formField).focusin(function(){
					// if value is default value -> clear it
					if(jQuery(this).attr('value') == jQuery.clearDefaultsOnFields.defaultValues[jQuery(this).data('ID')]) {
						jQuery(this).attr('value', '');
					}
				});

				// add focusout event handler to each field
				jQuery(formField).focusout(function(){
					// if value is empty -> restore it
					if(jQuery(this).attr('value') == '') {
						jQuery(this).attr('value', jQuery.clearDefaultsOnFields.defaultValues[jQuery(this).data('ID')]);
					}
				});

			}
		}
	}
}


/**
 * Funktion zum gleichzeitigen Ausblenden und Sliden von Elementen
 * (z.B. kleiner sliden und ausfaden ODER größer sliden und einfaden)
 */
jQuery.fn.slideFadeToggle  = function(speed, easing, callback) {
	return this.animate({opacity: 'toggle', height: 'toggle'}, speed, easing, callback);
};

/*
 * ACCORDION: Toggle content via link
 * slide container in/out
 * trigger link needs class "toggle" and href="#idOfTargetElement"
 *
 * Example HTML:
 * <h4><a href="#konditionen-1" title="" class="toggle">Konditionen</a></h4>
 * <div id="konditionen-1">
 *     ...
 * </div>
 *
 * @param Integer	openElem	Number of Element, that is open by default (default: 0 - first Element)
 *
 */
jQuery.accordion = {

	toggleClass: 'trigger',
	openClass: 'current',
	slideSpeed: 500,

	init: function(openElem) {

		if(jQuery("a."+jQuery.accordion.toggleClass)) {

			openElem = (openElem) ? openElem : 0;

			// hide all target elements when page loads, show only first one
			jQuery("a."+jQuery.accordion.toggleClass).each(function(i) {
				// get target id of link
				var target = jQuery(this).attr("href").split("#");
				jQuery("#"+target[target.length-1]).css({
					overflow: 'hidden'
				});
				// hide target item with given ID, except first one
				if(target[target.length-1]) {
					// hide target <div>
					jQuery("#"+target[target.length-1]).hide();
				}
				/*
				// add "open" class to first toggle
				if(i == openElem) {
					jQuery(this).addClass(jQuery.accordion.openClass);
					jQuery("#"+target[target.length-1]).css({
						display: 'block'
					});
				}
				*/

				// add click event
				jQuery(this).click(function(e){
					e.preventDefault();
					var target = jQuery(e.target).attr("href").split("#");
					// open target item with given ID
					if(target[target.length-1]) {
						jQuery(e.target).toggleClass(jQuery.accordion.openClass);
						jQuery("#"+target[target.length-1]).slideToggle(jQuery.accordion.slideSpeed);
					}
				});
			});
		}
	},

	toggleItem: function(e) {		

		// check if current element is NOT open -> close all elements, open the current one
		// elde do nothing
		if(!jQuery(e.target).hasClass(jQuery.accordion.openClass)) {

			// hide current open element
			jQuery("a."+jQuery.accordion.toggleClass).each(function(i) {

				if(jQuery(this).hasClass(jQuery.accordion.openClass)) {
					// hide target <div>
					var closeTarget = jQuery(this).attr("href").split("#");
					jQuery("#"+closeTarget[closeTarget.length-1]).slideToggle(jQuery.accordion.slideSpeed);
					// remove "open" class
					jQuery(this).removeClass(jQuery.accordion.openClass);
				}
			});

			var target = jQuery(e.target).attr("href").split("#");
			// open target item with given ID
			if(target[target.length-1]) {
				// add "open" class to clicked element
				jQuery(e.target).addClass(jQuery.accordion.openClass);
				jQuery("#"+target[target.length-1]).slideToggle(jQuery.accordion.slideSpeed);
			}
		}
		e.preventDefault();
	}

}


/**
 * JQUERY INITIALISATION WHEN DOCUMENT READY
 *
 * @author Sebastian Dubbel
 *
 * @requires 
 *		jQuery library v 1.2.6+: http://jquery.com
 * @encoding UTF-8
 *
 */ 
// start required scripts when DOM is loaded
jQuery(document).ready(function(){
	
	// open external links in seperate window
	jQuery.external_links.init();
	
	// add overlays to images with popup links
	jQuery.popup.init();

	// clear default values on formfields on focus
	jQuery.clearDefaultsOnFields.init();

	// init accordion
	jQuery.accordion.init();
	
	// add fancybox to links
	// @requires Fancybox Plug-In from http://fancybox.net/
	jQuery('.'+jQuery.popup.triggerClass).fancybox({
		'autoScale'		:	'true',
		'centerOnScroll':	'true',
		'overlayOpacity':	0.6,
		'overlayColor'	:	'#000', 
		'titlePosition'	:	'inside'
	});

});

