/**
    TP-Ajax v0.2a - Testversion
    
    Autor:  Thomas Puttkamer | tvp1981 (at) gmx (dot) de
    Erstellung: 01.08.2009
	Überarbeitung: 10.05.2010
    (c) 2009-2010 by Thomas Puttkamer
    
    Implementierung der Updater-Engine
    Benötigt jQuery ab Version 1.4.0

	Hinweis:
	Da das Prototype-Framework derzeit inkompatibel zu Microsoft-Produkten schein und sich diese Probleme nicht beheben ließen,
	wurde Dieses mit der aktuellen Version ersetzt. Derzeit kommt jQuery zum Einsatz.
	
	Implementierung:
	
	- navigation
	Bietet ein verzögertes PullDown-Menu
	Main-Target: #id
	Sub-Target:	sub_#id
	
	Funktionen
		addNavigation	-	Fügt ein Navigationselement hinzu
		setDelay		-	Bestimmt die Dauer des Fade-In/-Out Effekts
		setFadeDelay	-	Bestimmt die Dauer des Fade-Out Starts beim Verlassen der Navigation
**/

/*
 * Message - jQuery Plugin
 * The Message-Plugin is a simple Plugin to show Messages. 
 * Two Messagetypes (ok & error) will be implemented by Scriptrun
 *
 * Examples and documentation at: http://tp-software.eu
 * 
 * Copyright (c) 2010 Thomas Puttkamer
 *
 * Version: 0.8.0 (20/08/2010)
 * Requires: jQuery v1.3+
 *
 * Licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
 * http://creativecommons.org/licenses/by-nc-sa/3.0/
 * 
 * This software is provided "as is", without any guarantee made as to its
 * suitability or fitness for any particular use. It may contain bugs, so use of
 * this tool is at your own risk. This Software was tested thoroughly to
 * bring you a version which is stable and (we hope) bug free. However, we take
 * no responsibility for any damage that may be unintentionally caused through
 * its use.

 * I does not take any responsibility for the possible damage of
 * any software or hardware (including any files and directories) on your computer that may be caused by
 * using this application or one of its components. 
 *
 */
(function($) {
	
	msgTimeout = {}, 
	msgCreated = [],
	autoPos = 50,
	autoZIndex = 1001,
	
	message_create = function(Element,options) {
		if ($('#'+Element+'.message').is('div'))
			return message_read(Element,options);
			
		var msgOpt = $.extend({},$.fn.message.defaults,options);
			if (msgOpt['positionTop']=='auto') {
				msgOpt['positionTop'] = this.autoPos;
				this.autoPos = this.autoPos + (parseInt($('#'+Element).attr('height')) || 50);
			}
		
		/** Nachrichtenfenster erstellen **/
			$('<div class="message cf" />')
				.appendTo(document.body)
				.attr({'id'	:	Element})
				.css({
					'width'	:	msgOpt['width'] || 400,
					'height': 	msgOpt['height'] || 100,
					'top'	:	msgOpt['positionTop']=='auto' ? this.autoPos : msgOpt['positionTop'],
					'left'	:	msgOpt['positionLeft'] == 'center' ? 300 : msgOpt['positionLeft'],
					'display':	'none',
					'z-index':	this.autoZIndex
				})
				.data(msgOpt)
					.append('<div class="message-head cf" />')
					.children('.message-head')
						.append('<h2 class="message-title" />')
							.children('h2')
							.text(msgOpt['title'] || 'No Title')
						.end()
						.append('<span class="message-button-close" />')
					.end()
					.append('<div class="message-content cf" />')
						.children('.message-content')
						.append('<ul />')
					.end()
				.end()
			.end()
			.hide();
			this.msgCreated.push(Element);
			this.autoZIndex++;
	},
	
	message_read= function(Element,options) {
		var ex = $('#'+Element+'.message');
		var msg = [];
		ex.find('.message-content ul li').each(function(i,e) {
			msg.push($(e).text());
		});
		var msgOpt = {
			'title'		:	ex.find('.message-title').text(),
			'message'	:	msg
		};
		ex.data($.extend({},$.fn.message.defaults,options,msgOpt));
		this.msgCreated.push(Element);
		message_options(Element,ex.data());
		message_show(Element,msg);
	},
	
	message_options = function(type,options) {
		if (!$.inArray(type,this.msgCreated)>=0)
			return;
		msgOpt = ('#'+type).data();
		$.extend(msgOpt,options);
		('#'+type).data(msgOpt);
		$('#'+type)
			.css({
				'width'	:	msgOpt['width'] || 400,
				'height': 	msgOpt['height'] || 100,
				'top'	:	msgOpt['positionTop']=='auto' ? this.autoPos : msgOpt['positionTop'],
				'left'	:	msgOpt['positionLeft'] == 'center' ? 300 : msgOpt['positionLeft']
			})
				.children('h2.message-title')
				.text(msgOpt['title'] || 'No Title')
			.end()
	},
	
	message_show = function(type,msg) {
		if ($.inArray(type,this.msgCreated)<0)
			return;
		var tmp =	$('#'+type)
						.find('.message-content ul');
		tmp
			.find('li')
			.remove()
		if ($.isArray(msg))
			$(msg).each(function(index,msgText) {
				$('<li />')
					.text(msgText)
					.appendTo(tmp);
			});
		else
			$('<li />')
				.text(msg)
				.appendTo(tmp);

		var msgOpt = $('#'+type).data();
		$('#'+type)
			.css({
				'width'	:	msgOpt['width'] || 400,
				'height': 	msgOpt['height'] || 100

			})
				.children('h2.message-title')
				.text(msgOpt['title'] || 'No Title')
			.end()
			.show();

		if (msgOpt['autoClose'] && msgOpt['closeAfter']>0) {
			if (this.msgTimeout[type])
				window.clearTimeout(this.msgTimeout[type]);
			this.msgTimeout[type] = window.setTimeout(function() { message_hide(type); },msgOpt['closeAfter']);
		}
	},
	
	message_hide = function(type) {
		$('#'+type).hide();
		this.msgTimeout[type] = null;
	},
		
	$.fn.message = function(action,type,options) {
		if (action=='init') {
			$('div.messages').each(function(i,Element) {
				$().message('create',$(Element).attr('id'),options || {});
			});
			return this;
		}
		if (action=='create' && $.inArray(type,msgCreated)>-1) {
			message_options(type,options);
			return this;
		}
		if (action!='create' && $.inArray(type,msgCreated)<0) {
			message_create(type,type=='show' ? {} : options);
		}
		switch (action) {
			case 'show'		:	message_show(type,options); break;
			case 'options'	:	message_options(type,options); break;
			case 'create'	:	message_create(type,options); break;
		}
		return this;
	};

    $.fn.message.defaults = {
		width				:	400,
		height				:	100,
		
		title				:	'Message',
		message				:	'no Message available',
		
		autoClose			:	true,
		closeAfter			:	5000,
		positionTop			:	'auto',
		positionLeft		:	'center'
	};

	$(document).ready(function() {
		$('.message-button-close').live('click',function() { $(this).parents('.message').hide(); });
		$().message('init');
	});
}(jQuery));

(function($) {
	var options = {},
	/*
	*	Simple Layout-Updater
	*
	*/
	updateLayout = function(layout) {
		layout = layout || {};
		for (lid in layout) 
			$('#'+lid).html(layout[lid]);
	},
	/*
	* Function to update Select-Lists
	* These function should also Update OptGroup Lists. But how could that work?
	*/
	updateLists = function(lists) {
		var wert,selects,optgrp,jqElement,optElement,optWerte;
		lists 	= lists || {};
		selects = lists['selects'] || {};
		optgrp  = lists['optgrp'] || null;
		for (ind1 in selects) {
			jqElement = $('#'+ind1);
			wert = $('#'+ind1).val();
			jqElement.find('option[class!=dont-delete]').remove();
			jqElement.find('optgrp[class!=dont-delete]').remove();
			if (!optgrp) {
				/*
				*	Werte ohne Optionsgruppe einfach einsetzen.
				*/
				for (ind2 in selects[ind1]) {
					$('<option />')
						.attr('value',selects[ind1][ind2])
						.text(ind2)
						.appendTo(jqElement);
				}
			} else {
				for (ind2 in optgrp) {
					/*
					*	OptGroup erstellen und mit Werten aus Select füllen.
					*/
					optElement = $('<optgroup />')
									.attr('label',ind2);
					optWerte = jQuery.makeArray(optgrp[ind2]);
					optWerte.each(function(index,Element) {
						if (!selects[Element])
							return;
						$('<option />')
							.attr('value',Element)
							.text(selects[Element] || '')
							.appendTo(optElement);
					});
					optElement.appendTo(jqElement);
				}
			}
			if (wert)
				jqElement.val(wert);
		}
		
	},
	/*
	*	Core-Process for Updating TPA-Data
	*
	*/
	updateTPA	= function(data) {
		data = data || {};
		var code,msg,dit,msgid,forms;
		
		for (dit in data) 
			switch	(dit) {
				case 'layout'	: updateLayout(data[dit] || {});
									break;
				case 'lists'	: updateLists(data[dit] || {});
									break;
				case 'forms'	: forms = data[dit] || {};
									for (fid in forms)
										$('#'+fid).val(forms[fid] || null);
									break;
				/*
				* Code Processing
				* Eval-sended Code. Code can be send in Array or as String  
				*/
				case 'code'		: code = data[dit] || [];
									if (!$().isArray(code))
										code = $().makeArray(code);
									$(code).each(function(i,Element) {
										if (typeof(Element)=='string' && isNaN(Element))
											eval(code);
									});
									break;
				/*
				* Message Processing
				* If the Ajax-Api send a Message, it will be displayed with the Message-Plugin.
				*/
				case 'msg'		: msg = data[dit] || {};
									for (msgid in msg) {
										$().message('create',msgid,{title: msg[msgid]['title'] || ''});
										$().message('show',msgid,msg[msgid]['message'] || []);
									}
									break;
									
			}
	};
	
	$.fn.tpa = function(params) {
		var params = $.extend({}, $.fn.tpa.defaults.parameters, options, arguments[0]);
		var updateFunction = null;
		if (arguments[1] && jQuery.isFunction(arguments[1])) 
			updateFunction = arguments[1];
		$.ajax({
			type		: 'POST',
			url			: $.fn.tpa.defaults['file'],
			data		: params,
			success		: function(msg) {
							// Convert
							msg = msg || {};
							updateTPA(msg);
							if (updateFunction) 
				    	        updateFunction(msg['data'] || {});
						}
		});
		
		return this;
	};

	$.fn.tpa.options = function(myopt) {
		myopt = myopt || {};
		$.extend(options,myopt);
	}

	$.fn.tpa.defaults = {
        'file'      	:   '/ajax.php',
		'onloadshow'	:	true,
   	    'method'        :   'post',
        'parameters'    :   {}
	};

	$(document).ready(function() {
		if (!jQuery('#tpa').is('div'))
			jQuery('<div />')
				.attr('id','tpa')
				.addClass('tpa-status')
				.hide()
				.appendTo(document.body);
		$(document).ajaxStart(function() {
			$('#tpa').show();
		});
		$(document).ajaxComplete(function() {
			$('#tpa').hide();			   
		});
	});
}(jQuery));


if(typeof(JSON) == "undefined"){
	var JSON = {
			parse: function(parseText) {
				parseText = 'parseText = ' + parseText;
				eval(parseText);
				return parseText;
			}
	}
}

var navigation;
if (!navigation) {
	navigation=(function() {
		var delay 			= 250;
		var fadeDelay		= 1500;
		var aktivElement	= null;
		var fadeTimer		= null;
		var fadeCounter		= 0;
		
		function _addNavigation(element) {
			var eL = $(element);
			if (!eL) 
				return false;
			var eLs = $('#sub_' + eL[0].id);
			if (eLs.length==0)
				return false;
			// Sollte Element oder SubElement nicht exisiteren FALSE
			eL.bind('mouseout',function() {
				navigation.fadeOut();
			});
			eLs.bind('mouseout',function() {
				navigation.fadeOut();
			});
			eL.bind('mouseover',function() {
				navigation.showSub('sub_' + this.id);
			});
			eLs.bind('mouseover',function() {
				navigation.showSub(this.id);
			});
			// FadeOut
		}
		
		function _setDelay(d) {
			if (isNaN(d))
				return false;
			delay = parseInt(d);
		}
		
		function _setFadeDelay(d) {
			if (isNaN(d))
				return false;
			this.fadeDelay = parseInt(d);
		}
		
		function _doFadeOut() {
			if (fadeId==fadeCounter)
				aktivElement.hide(delay);
			aktivElement = null;
		}
		
		function _fadeOut() {
			fadeId = fadeCounter;
			if (fadeTimer)
				clearTimeout(fadeTimer);
			fadeTimer = window.setTimeout(_doFadeOut,fadeDelay);
		}
		function _showSub(id) {
			element = $('#'+id);
			if (element.length==0)
				return;
			fadeCounter++;
			if (aktivElement && element[0]==aktivElement[0])
				return;
			if (fadeTimer)
				clearTimeout(fadeTimer);
			fadeTimer = null;
			if (aktivElement!=null)
				$(aktivElement).hide(delay);
			aktivElement = element;
			element.show(delay);
		}
		
		return {
			addNavigation: function() {
				for (i=0;i<arguments.length;i++)
					_addNavigation(arguments[i]);
				
			},
			showSub: function() {
				if (arguments[0])
					_showSub(arguments[0]);
			},
			/**
			* setDelay 
			*	Bestimmt die FadeIn/-Out-Dauer
			*	@param delay:	Delay in MS
			**/
			setDelay: function() {
				if (arguments[0])
					_setDelay(arguments[0]);
			},
			/**
			* setDelay 
			*	Bestimmt Zeit, die verstreicht, bis ein FadeOut einsetzt
			*	@param delay:	Delay in MS
			**/
			setFadeDelay: function() {
				if (arguments[0])
					_setFadeDelay(arguments[0]);
			},
			fadeOut: function() {
				_fadeOut();
			}
		}
	}());	
}
// WebKFZ Kommunikationsengine
var webkfz;
if (!webkfz) {
	webkfz=(function() {
		var _openLinks = {
			
		};
		var _linkVorschau 	= null;
		var _timeCheck 		= null;
		var _sizeVorschau	= null;
		var _tmpBilder		= {};
		var _vorschauSize	= null;
		var AusdruckSAB 	= /http:\/\/sab24\.de\/asc\/K\/(\w.+)\/images\/small\/(\w.+)\.jpg/;
		
		var _xxl_tmp		= {};
		
		function _init() {
			var suche = $('.wk_search');
			if (suche.length>0) {
				suche.bind('change',_setListe);
			}
			_linkVorschau = $('#wk_bildvorschau').attr('src');
			_sizeVorschau = [$('#wk_bildvorschau').attr('width'),$('#wk_bildvorschau').attr('heigth')];
			$('.wk_picprev').each(function(index,element) {
				var flink = $(element).attr('src');
	            if(AusdruckSAB.exec(flink)) {
	            	flink = 'http://sab24.de/asc/K/' + RegExp.$1 + '/images/medium/' + RegExp.$2 + '.jpg';
					var ximg = new Image();
					ximg.src = flink;
					_tmpBilder[$(element).attr('id')] = ximg;
				}
				
				if (_vorschauSize==null) {
					_vorschauSize = [$(element).attr('width'),$(element).attr('height')];
					return;
				}
				if (_vorschauSize[0]>$(element).attr('width'))
					_vorschauSize[0]=$(element).attr('width')
				if (_vorschauSize[1]>$(element).attr('height'))
					_vorschauSize[1]=$(element).attr('height')
			});
			$('.wk_picprev').each(function(index,element) {
				var down = [$(element).attr('width')/_vorschauSize[0],$(element).attr('height')/_vorschauSize[1]];
				var	pos = (down[0]<down[1]) ? 0 : 1;
				$(element).attr({
					'width'		:	Math.round($(element).attr('width')*down[pos]),
					'height'	:	Math.round($(element).attr('height')*down[pos])
				});
			});
			$('.wk_picprev').bind({
				'mouseover'	:	_setPicPrev,
				'mouseout'	:	function() { _setNormalPic(true); }
			});
			$('.wk_sepwin').each(function(index,element) {
				_openLinks[$(element).attr('id')] = $(element).attr('href');
				$(element).attr('href','javascript:void(0)');
			});
			$('.wk_sepwin').bind({
				'click'		:	_openWin
			});
			if ($('#wk_xxl').length>0)
				_init_xxl();
		}
		
		function _init_xxl() {
			var xxl_mini = $('.wk_xxlmini');
			$('#wk_xxlgesamt').html(xxl_mini.length);
			if (xxl_mini.length==0) 
				return;
			$('#wk_xxlaktuell').text(1);
			xxl_mini.each(function(index,element) {
				var flink = $(element).attr('src');
	            if(AusdruckSAB.exec(flink)) {
	            	flink = 'http://sab24.de/asc/K/' + RegExp.$1 + '/images/' + RegExp.$2 + '.jpg';
					var ximg = new Image();
					ximg.src = flink;
					_xxl_tmp[index] = ximg;
				} else
					return;
				$(element).bind('click',function() {
					$('#wk_xxllargepic').attr('src',_xxl_tmp[index].src);
					$('#wk_xxlaktuell').text(index+1);
				});
			});
			$('#wk_xxlback, #wk_xxlnext').bind('click',function() {
				var aktuell = parseInt($('#wk_xxlaktuell').text());
				var maximum = parseInt($('#wk_xxlgesamt').text());
				aktuell--;
				if ($(this).attr('id') == 'wk_xxlback')
					aktuell--;
				else
					aktuell++;
				if (aktuell<0)
					aktuell = 0;
				if (aktuell>=maximum)
					aktuell = maximum-1;
				$('#wk_xxllargepic').attr('src',_xxl_tmp[aktuell].src);
				$('#wk_xxlaktuell').text(aktuell+1);
			});
		}
		
		function _setPicPrev() {
			window.clearTimeout(_timeCheck);
			if (!_linkVorschau) {
				_linkVorschau = $('#wk_bildvorschau').attr('src');
				_sizeVorschau = [$('#wk_bildvorschau').attr('width'),$('#wk_bildvorschau').attr('heigth')];
			}
            var fid = $(this).attr('id');
            if(_tmpBilder[fid]) {
   				$('#wk_bildvorschau').attr('src',_tmpBilder[fid].src);
				return;
			}
		}
		
		function _setNormalPic() {
			if (!arguments[0]) {
                _timeCheck = window.setTimeout(function() {
                    _setNormalPic(false);
                }, 300);
                return;
			} else {
                window.clearTimeout(_timeCheck);
            }
			$('#wk_bildvorschau').attr({
				'src'	:	_linkVorschau,
				'width'	:	_sizeVorschau[0],
				'heigth':	_sizeVorschau[1]
			});
		}
		
		function _openWin() {
			if (_openLinks[$(this).attr('id')]) {
				var MeinFenster = window.open(_openLinks[$(this).attr('id')], "Fenster", "scrollbars=yes,width=1024,height=720");
				MeinFenster.focus();
			}
		}
		function _setListe() {
			var pdata = $('.wk_search').serializeArray();
			var pparams = {};
			for (i=0;i<pdata.length;i++)
				pparams[pdata[i]['name']] = pdata[i]['value'];
			pparams['action'] = 'liste';
			pparams['wk_liste'] = $('#wk_liste').length;
			$().tpa(pparams);
		}
	
		return {
			init: function() {
				_init();
			}
		}
	}());	
}

var tabmanager;
if (!tabmanager) {
	tabmanager=(function() {
		function _init(element) {
			if (!element == null) 
				element = body;
			$('a').each(function(index,ele) {
				anker = ele.attr('href').split('#');
			});
		}
						 
		return {
			init: function() {
				if (arguments[0])
					_init(arguments[0]);
				else
					_init(null);
			}
		}
	}());	
}

$(document).ready(function() {
	$('.mainNav').each(function(ind,element) {
		navigation.addNavigation(element);
	});
	webkfz.init();
});


