// JavaScript Document

var admin_mode = false;
var content_cache = "";
var historyData2 = new Array();

$().ready(function(){
	ajaxInit();
});

function ajax_get(url, savetype)
{
	if (ajax || savetype == "init")
	{
		if (savetype == null)
		{
			$.history.load(url);
		}
		else
		{
			url = setGlobal(
				"ajax",
				(savetype == "init" ? "init" : "get"),
				url
			);
			
			if (!savetype || savetype == "init")
			{
				contentElement = "ajax_content";
			}
			else
			{
				contentElement = savetype;
				url = setGlobal("ajax_content", contentElement, url);
			}
			
			if (savetype != "init")
			{
				content_cache = $("#" + contentElement).html();
				$("#" + contentElement).html('<div class="ajax_loader"> </div>');
			}
	
			$.get(
				url,
				function (text, status, xhr)
				{
					if (savetype == "init")
					{
						ajax = (xhr.responseText == "ajax-activated") ? true : false;
						ajaxInit();
					}	
					else
					{
						_gaq.push(['_trackPageview', url]);
						setXmlData(xhr.responseXML, contentElement);								
					}
				}
			);
		}
	} else {
		location.href = url;
	}
}

function ajax_add(name)
{
	if (!ajax_exists(name))
	{
		$('#dialog_base').append('<div id="' + name + '"></div>');
	}
	
	return $('#' + name);
}

function ajax_exists(name)
{
	var e = $('#' + name);
	
	return (e.length != 0);
}

function ajax_dialog(name, options, loadUrl)
{
	var dialog = $('#' + name);
	
	if (dialog.length == 0)
	{
		ajax_add(name);
		
		dialog = $('#' + name);
		dialog.dialog(options);
	}
	else
	{
		dialog.dialog('option', options);
		dialog.dialog('open');
	}	
	
	if (loadUrl) 
	{
		ajax_get(loadUrl, name);
	}
}

function setGlobal(key, value, url)
{
	if (!url)
	{
		if (typeof(key) == 'object' && value)
		{
			url = value;
		}
		else
		{
			url = window.location.href;
		}
	}
	
	var url_arr = url.split("?");
	var globals = new Object();

	url = (url_arr.length < 2 ? null : url_arr[1]);

	if (url != null)
	{
		var arr = url.replace("&amp;", "&").split("&");
		
		for (var i = 0; i < arr.length; i++)
		{
			var row = arr[i].split("=");

			globals[row[0]] = row[1];
		}
	}
	
	if (typeof(key) == 'string' && value)
	{
		globals[key] = value;
	}
	else if (typeof(key) == 'object')
	{
		for (var x in key)
		{
			globals[x] = key[x];
		}
	}
	
	url = "";
	for (var x in globals)
	{
		if (typeof(x) == 'string')
		{
			url += (url == "" ? "?" : "&") + x + "=" + globals[x];
		}
	}
	
	return url_arr[0] + url;
}

function setContent(data, contentElement)
{
	var content_change = false;
	contentElement = contentElement || "ajax_content";
	
	for ( var key in data) {
		var content = data[key];
		
		switch (key) {
			case "mainbg":
				try {
					$("#ajax_mainbg").css("backgroundimage", content);
				} catch (e) {
				}
				break;
			case "title":
				document.title = unescapeString(content);
				break;
			case "script":
				eval(content);
				break;
			default:				
				if (key == "content" && content != "")
				{
					content_change = true;
					$('#' + contentElement).html(content);
				}
				else
				{
					$("#ajax_" + key).html(content);
				}
				break;
		}
	}
	
	if (content_change == false)
	{
		$("#" + contentElement).html(content_cache);
	}
	
	return true;
}

function setXmlData(xml, contentElement)
{
	contentElement = contentElement || "ajax_content";
	var Nodes = xml.getElementsByTagName("content");
	var new_data = new Object();
	
	for (var i = 0; i < Nodes.length; i++) {
		var Node = Nodes[i];
		
		var att_tag = Node.tagName;
		if (att_tag == "content") {
			var att_id = Node.attributes[0].nodeValue;

			if (Node.childNodes.length != 0) { var Node = Node.childNodes[0]; }
			var att_content = Node.nodeValue;
		}
		
		new_data[att_id] = att_content;
	}
	
	setContent(new_data, contentElement);
}

function ajaxInit()
{
	if (ajax) {
		$.history.init(function(url) {
			if (!url) {
				//url = "?" + location.href.split("?")[1];
				return;
			}

			ajax_get(url, false);
		});
	}
	else if (ajax == null)
	{
		ajax_get("?ajax=init", "init");
	}	
}

function unescapeString(str) {
	var div = document.createElement('div');
	div.innerHTML = str;
	return div.firstChild.data;
}

function popup_open(url, settings) {
	popup = window.open(url, "name_xxx", settings);
	popup.focus;
}

function form_submit(form_id, contentElement)
{
	var form = $('#' + form_id);
	contentElement = contentElement || "ajax_content";
	
	$.post(
		setGlobal('ajax', 'get', form.attr('action')),
		form_data(form),
		function (data) {
			setXmlData(data, contentElement);
		}
	);
	
	return false;
}

function form_output()
{
	ajax_dialog(
		'dialog_saved',
		{
			resizable: false,
			height:140,
			modal: true,
			buttons: {
				"Schliesen": function() {
					$(this).dialog("close");
				}
			}
		}
	);
	$('#dialog_saved').html('Die Daten wurden erfolgreich an den Server gesendet.');	
}

function form_data(form)
{
	var data = new Object();
	
	form.find('input, textarea, select').each(function (index) {
		data[$(this).attr("name")] = $(this).val();
	});	
	
	return data;
}

function form_validation(dom_element)
{
	var element = $(dom_element);
	var name = element.attr('id');
	var element_name = name.split('__')[1];
	var form = element.parents('form').first();
	var form_name = form.attr('id');
	var parent = element.parent().first();
	
	$.ajax({
		type: 'POST',
		url: setGlobal(form_name, element.attr('name'), form.attr('action')),
		data: form_data(form),
		success: function (data) {
			if (data[element_name])
			{
				var content = data[element_name];
				var element2 = parent.children('div#' + name + "__valid");
				
				if (element2.length == 0)
				{
					parent.append('<div id="' + name + '__valid"></div>');
					
					element2 = parent.children('div#' + name + "__valid");
				}
				
				element2.html(content);				
			}
			else
			{
				parent.children('div#' + name + "__valid").css('display', 'none');
			}
		},
		dataType: 'json',
		async: true
	});	
}

function basename (path, suffix) {
    var b = path.replace(/^.*[\/\\]/g, '');
     if (typeof(suffix) == 'string' && b.substr(b.length - suffix.length) == suffix) {
        b = b.substr(0, b.length - suffix.length);
    }
 
    return b;}
