var Status = (function(){
	var _status = {};
	return {
		set : function(name, value){
			_status[name] = value;
		},
		get : function(name){
			return _status[name] || false;
		}
	}
}());

/*
 * by Petko D. Petkov; pdp (architect)
 * http://www.gnucitizen.org
 * http://www.gnucitizen.org/projects/jquery-include/
 */
jQuery.extend({
	isDomLoaded : false
});

$(window).bind("load", function(){
	$.isDomLoaded = true;
});

jQuery.extend({
	/*
	 * included scripts
	 */
	includedScripts: {},

	/*
	 * include timer
	 */
	includeTimer: null,

	/*
	 * include
	 */
	include: function (url, onload) {
		if (jQuery.includedScripts[url] != undefined) {
			return;
		}

		jQuery.isReady = false;

		if (jQuery.readyList == null) {
			jQuery.readyList = [];
		}

		var script = document.createElement('script');

		script.type = 'text/javascript';
		script.onload = function () {
			jQuery.includedScripts[url] = true;

			if (typeof onload == 'function') {
				onload.apply(jQuery(script), arguments);
			}
		};
		script.onreadystatechange = function () {
			if (script.readyState == 'complete') {
				jQuery.includedScripts[url] = true;

				if (typeof onload == 'function') {
					onload.apply(jQuery(script), arguments);
				}
			}
		};
		script.src = url;

		jQuery.includedScripts[url] = false;
		document.getElementsByTagName('head')[0].appendChild(script);

		if (!jQuery.includeTimer) {
			jQuery.includeTimer = window.setInterval(function () {
				jQuery.ready();
			}, 10);
		}
	}
});

/*
 * replacement of jQuery.ready
 */
jQuery.extend({
	/*
	 * hijack jQuery.ready
	 */
	_ready: jQuery.ready,

	/*
	 * jQuery.ready replacement
	 */
	ready: function () {
		isReady = true;

		for (var script in jQuery.includedScripts) {
			if (jQuery.includedScripts[script] == false) {
				isReady = false;
				break;
			}
		}

		if (isReady && $.isDomLoaded) {
			window.clearInterval(jQuery.includeTimer);
			jQuery._ready.apply(jQuery, arguments);
		}
	}
});



/*
*  Verhalten hinzufuegen 
*/

jQuery.extend({
	addBehaviour : function (behaviour, binding){
		for(var selector in behaviour){
			if(selector === "ready"){
				$(document).ready(behaviour[selector]);
			}else if(selector === "layerload"){
				LayerLoader.afterload(behaviour[selector]);
			}else{
				for(var events in behaviour[selector]){
					if(events === "change"){
						$(selector).bind(events, behaviour[selector][events]);
					}else{
						if(config.eventHandling === "bind" && binding !== "live"){
							$(selector).bind(events, behaviour[selector][events]);
						}else{
							$(selector).live(events, behaviour[selector][events]);
						}
					}
				}
			}
		}
	}
});

var LayerLoader = (function(){
	var _loadEvents = [];
	var _fireEvent = function(loaded){
		for(var i = 0; i < _loadEvents.length; i++){
			_loadEvents[i](loaded);
		}
	}
	return {
		fireonload : function(loaded){
			_fireEvent(loaded);
		},
		afterload : function(callback){
			_loadEvents.push(callback);
		}
	}
}());

jQuery.extend({
	
});


/*
* Info I Mechanismus
*/

var InfoI = (function(){
	var _element = null;
	var _oldScreenSize = 0;
	var _create = function(size, arrowPosition, content, position){
		//"arrow-top
		var layerMarkup = "<div class=\"infolayer "+size+"\" style=\"left:"+position.left+"px;top:"+position.top+"px;\">";
		layerMarkup += "<div class=\"layer-arrow arrow-"+arrowPosition+"\">&nbsp;</div>";
		layerMarkup += "<div class=\"layer-header\"></div>";
		layerMarkup += "<div class=\"layer-content\">";
		layerMarkup += "<div class=\"layer-content-inner\">";
		layerMarkup += "<a href=\"#\" class=\"layer-close\" title=\"Schlie&szlig;en\" >Schlie&szlig;en</a>";
		layerMarkup += content;
		layerMarkup += "</div>";
		layerMarkup += "</div>";
		layerMarkup += "<div class=\"layer-footer\"> </div>";
		layerMarkup += "</div>";
		return $(layerMarkup);
	};
	
	var _getTipType = function(left){
		_oldScreenSize = $("body").innerWidth();
		
	};
	
	var _getContent = function(linkelement){
		return $($(linkelement).attr("href")).html();
	};
	
	var _getSize = function(linkelement){
		return $($(linkelement).attr("href")).attr("class");
	};
	
	var _getWidth = function(linkelement){
		return {
			"layer-s" : 244,
			"layer-l ": 356
		}[_getSize(linkelement)];
	};
	
	return {
		close : function(){
			$('.infolayer').remove();
		},
		open : function(linkelement, event, options){
			var content =  _getContent(linkelement);
			_getTipType(event.pageX);
			if($(linkelement).attr("href") !== "#" && content){
				$('.infolayer').remove();
				var leftPos = event.pageX;
				
				if(options.position === "right"){
					leftPos = leftPos - _getWidth(linkelement);
				}
				_element = _create(_getSize(linkelement) , options.position,  content, { left : leftPos, top : (event.pageY - options.topdifferenz) });
				$("body").append(_element);
				if( typeof options.load === "function" ){
					options.load( linkelement );
				}
				$(_element).find(".layer-close").bind("click", function(e){
					InfoI.close();
					return false;
				});
			}
		}
	}
	
})();


jQuery.fn.extend({
	infoI : function (options){
		var _options = options;
		return this.each(function(){
			$(this).bind("click", function(e){
				InfoI.open($(this), e, _options);
				return false;
			});
		});
	}
});

jQuery.fn.extend({
	submitForm : function(options){
		var _options = options;
		var _form = $(this);
		if(_options){
			for(var param in _options){
				_form.append($("<input type=\"hidden\" name=\""+param+"\" value=\""+_options[param]+" />"));
			}
		}
		_form.trigger("submit");
	}
});







