// JavaScript Document

// AJAX	
	
	ajax_targetsIgnored = new Array('_blank','_parent','_self','_top','noAJAX');
	ajax_relsIgnored = new Array('lightbox','noAJAX');
	var ajax_counter = new Array();
	ajax_counter['anchors'] = 0;
	ajax_counter['anchors_images'] = 0;
	ajax_counter['forms'] = 0;
	ajax_counter['fieldsReq'] = 0;
	ajax_referrer = document.location.href;
	var ajax_linkArray = new Array();
	monitorHashTimeout = 0;
	ajax_sent = new Array();
	ajax_sent['anchors'] = new Array();
	
	function ucms_ajax_init(firstLoad,initObj) {	
		initObj = document.getElementById(initObj) || document;
		firstLoad = firstLoad || true;
		
		// Redirect bei Reload oder Direktaufruf mit Hash
		if(firstLoad == true && document.location.hash && document.location.hash.charAt(1) == '/') {
			ucms_ajax_reload_from_hash(document.location.hash);
		}
		// Hash Monitoring für Back & Forward Button
		else {
			ucms_ajax_monitor_hash(document.location.hash,true);
		}
		
		// Hyperlinks
		ucms_ajax_init_anchors(initObj);
		
		// Formulare
		ucms_ajax_init_forms(initObj);
		
		// Formularpflichtfelder
		ucms_ajax_init_fieldsRequired(initObj);
		
		// Imagemaps
		ucms_ajax_init_anchors(initObj,'area');
		
	}
	
	// Initfunktion für Hyperlinks
	function ucms_ajax_init_anchors(initObj,tagName) {
				
		var tagName = tagName || 'a';
		var ajax_popup_init = false;
		if(typeof(initObj) != 'object') initObj = document.getElementById(initObj)
		else initObj = initObj || document;
		
		objPool = initObj.getElementsByTagName(tagName);
		for (var i = 0; i < objPool.length; i++) {
			if(objPool[i].id == '') {
				objPool[i].id = 'ajax_anchor_'+ajax_counter['anchors'];
			}
			else {
				if(objPool[i].id in ajax_linkArray) {
					$(objPool[i].id).stopObserving('click',ucms_ajax_urlrequest_onevent);
				}
				else {
					ajax_linkArray[ajax_counter['anchors']] = objPool[i].id;
				}
			}
			ajax_counter['anchors']++;
			
			objPool[i].rel = objPool[i].getAttribute('rel');
			
			if(!ucms_isInArray(ajax_targetsIgnored,objPool[i].target) && !ucms_isInArray(ajax_relsIgnored,objPool[i].rel) && objPool[i].href.indexOf('javascript:',0) != 0) {
								
				if(objPool[i].rel=='referrer') {
					objPool[i].href = ajax_referrer;
					// DEBUG: alert(objPool[i].protocol + ' - ' + objPool[i].hostname + ' - ' + objPool[i].hash);
					objPool[i].href = objPool[i].protocol + '//' + objPool[i].hostname + objPool[i].hash.replace('#','');
				}
				
				objPool[i].ajaxHref = objPool[i].href;
				var currentLocation = '';
				if(document.location.pathname.charAt(document.location.pathname.length - 1) == '/') currentLocation = document.location.href;
				else  currentLocation = document.location.href+'/';
				currentLocation = currentLocation.replace(document.location.hash,'');
				
				if(objPool[i].pathname.charAt(0) == '/') {
					objPool[i].ajaxHref = objPool[i].ajaxHref.replace(objPool[i].hostname,objPool[i].hostname + '/ajax');
					objPool[i].href = currentLocation+"#"+objPool[i].pathname+objPool[i].search;
				}
				else {
					objPool[i].ajaxHref = objPool[i].ajaxHref.replace(objPool[i].hostname,objPool[i].hostname + '/ajax/');
					objPool[i].href = currentLocation+"#/"+objPool[i].pathname+objPool[i].search;
				}
				
				if(objPool[i].rel.search(/ucms_popup.+/) != -1) {
					ucms_popup_init(objPool[i]);
					ajax_popup_init = true;
					if(document.location.hash) {
						objPool[i].href = document.location.href;
					}
					else {
						objPool[i].href = document.location.href+'#/';
					}
				}
				else {
					$(objPool[i].id).observe('click', ucms_ajax_urlrequest_onevent);
					ajax_popup_init = false;
				}
				
				// Setzen einer individuellen Sende-ID (Vorbeugung für mehrfache Linkaufrufe)
				objPool[i].sentInfo = objPool[i].id+Math.random(1000,10000);
				ajax_sent['anchors'][objPool[i].sentInfo] = false;
				
				//
				// Bilder innerhalb des Ankers
				//
				imgPool = $(objPool[i].id).getElementsByTagName('img');			
				
				for (var j = 0; j < imgPool.length; j++) {
					if(imgPool[j].id == '') {
						imgPool[j].id = 'ajax_anchor_image_'+ajax_counter['anchors_images'];
					}
					imgPool[j].ajaxHref = objPool[i].ajaxHref;
					imgPool[j].sentInfo = objPool[i].sentInfo;
					if(ajax_popup_init == true) {
						ucms_popup_init(imgPool[j]);
					}
					else {
						$(imgPool[j].id).observe('click', ucms_ajax_urlrequest_onevent);
					}
					
					ajax_counter['anchors_images']++;
				}			
			}
		}
	}
	
	// Initfunktion für Formulare
	function ucms_ajax_init_forms(initObj) {
		if(typeof(initObj) != 'object') initObj = document.getElementById(initObj)
		else initObj = initObj || document;
		
		objPool = initObj.getElementsByTagName('form');
		for (var i = 0; i < objPool.length; i++) {
			if(objPool[i].id == '') {
				objPool[i].id = 'ajax_form_'+ajax_counter['forms'];
			}
			else {
				if(!(objPool[i].id in ajax_linkArray)) {
					ajax_linkArray[ajax_counter['forms']] = objPool[i].id;
				}
			}
			ajax_counter['forms']++;
			if(!ucms_isInArray(ajax_targetsIgnored,objPool[i].target)) {				
				
				// Als AJAX-Submit markieren
				targetPool = objPool[i].getInputs('hidden', 'ajaxFormSubmit');	
				if(targetPool.length > 0) {
					targetPool[0].value = 'true';
				}
				if(objPool[i].action.charAt(0) == '/' && objPool[i].action.search('/ajax') != 0) {
					objPool[i].ajaxAction = '/ajax'+objPool[i].action;
				}
				else {
					if(objPool[i].action.search(document.domain + '/ajax') == -1) {
						objPool[i].ajaxAction = objPool[i].action.replace(document.domain,document.domain + '/ajax');
					}
				}
				fileInputPool = objPool[i].getInputs('file');
				// AJAX
				if(fileInputPool.length == 0) objPool[i].action = 'javascript:ucms_ajax_submitform(\''+objPool[i].id+'\')';
				
				// AIM
				else {
					targetPool = objPool[i].getInputs('hidden', 'ajaxTarget');
					if(targetPool.length > 0) {
						ajaxTarget = targetPool[0].value;
					}
					else {			
						ajaxTarget = 'content';
					}
					objPool[i].action = objPool[i].ajaxAction;
					objPool[i].setAttribute('onsubmit',"return AIM.submit(this, {'onStart' : startCallback, 'onComplete' : completeCallback},'"+ajaxTarget+"')");
				}
			}
		}
	}
	
	// Initfunktion für Formularpflichtfelder
	
	function ucms_ajax_init_fieldsRequired(initObj) {
		if(typeof(initObj) != 'object') initObj = document.getElementById(initObj)
		else initObj = initObj || document;
		
		objPool = initObj.getElementsByClassName('input_required');
		for (var k = 0; k < objPool.length; k++) {
			if(objPool[k].id == '') {
				objPool[k].id = 'ajax_fieldReq_'+ajax_counter['fieldsReq'];
			}
			else {
				if(!(objPool[k].id in ajax_linkArray)) {
					ajax_linkArray[ajax_counter['fieldsReq']] = objPool[k].id;
				}
			}
			ajax_counter['fieldsReq']++;
			$(objPool[k].id).observe('blur', ucms_ajax_input_required_onevent);
		}
	}
	
	// Funktion für die URL Anfragen
	
	function ucms_ajax_urlrequest(newURL,containerID,requestMethod,requestParameters,noResponse,loadingMessage) {
		ajax_referrer = document.location.href;
		
		loadingMessage = loadingMessage || '<span id="ajaxLoading"></span>';
		containerID = containerID || 'content';
		requestMethod = requestMethod || 'get';
		noResponse = noResponse || "no response text";
		requestParameters = requestParameters || '';
		new Ajax.Request(newURL, {
			method:requestMethod,
			parameters:requestParameters,
			onSuccess: function(transport){
			var response = transport.responseText || noResponse;
			
			$(containerID).innerHTML = response;
			scripts = $(containerID).getElementsByTagName("script"); 
			for(var i = 0; i < scripts.length;i++) {
				eval(scripts[i].text);
			}
			setTimeout('ucms_ajax_init(\'false\',\''+containerID+'\')',100);
			},
			onLoading: $(containerID).innerHTML = 'Request sent...',
			onLoaded: $(containerID).innerHTML = 'loading',
			onFailure: $(containerID).innerHTML = loadingMessage
		});
	}
	
	// Über Prototype ausgelöste Funktion, die die Anfrage Informationen weiterreicht
	
	function ucms_ajax_urlrequest_onevent(event) {
		window.clearTimeout(monitorHashTimeout); // Automatisch Hashaktivierung unterbrechen
		var element = event.element();
		if(ajax_sent['anchors'][element.sentInfo] == false) {
			ajax_sent['anchors'][element.sentInfo] = true;
			ucms_ajax_urlrequest(element.ajaxHref,'content','get')
			window.setTimeout("ajax_sent['anchors']['"+element.sentInfo+"'] = false",250);
		}
	}
	
	// Absenden eines Formulars per AJAX
	
	function ucms_ajax_submitform(formID) {	
	
		window.clearTimeout(monitorHashTimeout); // Automatisch Hashaktivierung unterbrechen
		
		obj = $(formID);
		
		if(ucms_ajax_submitform_check(obj)) {			
			// Parameter in String umwandeln
			var params = obj.serialize();
			
			// URL Request absetzen
			targetPool = obj.getInputs('hidden', 'ajaxTarget');
			if(targetPool.length > 0) {
				ucms_ajax_urlrequest(obj.ajaxAction,targetPool[0].value,obj.method,params);
			}
			else {			
				ucms_ajax_urlrequest(obj.ajaxAction,'content',obj.method,params);
			}
		}
		else {
			altPool = obj.getElementsByClassName('form_submit_fail');
			if(altPool.length > 0) {
				$(altPool[0].id).show();
			}
			else alert('Sie haben das Formular nicht korrekt ausgefuellt!');
		}
	}
	
	// Überprüfen eines Formulars auf unausgefüllte Felder
	
	function ucms_ajax_submitform_check(form) {
		checkForm = true;
		objPool = form.getElementsByClassName('input_required');
		for (var k = 0; k < objPool.length; k++) {
			if(ucms_ajax_input_required(objPool[k],true) == false) checkForm = false;
		}
		return checkForm;
	}
	
	// Formularfeldüberprüfung über Event ausgelöst
	
	function ucms_ajax_input_required_onevent(event) {
		var element = event.element();
		
		ucms_ajax_input_required(element);
	}
	
	// Steuerung der Prüfung eines einzelnen Feldes und Modifikation der Feldinformationen
	
	function ucms_ajax_input_required(obj,returnResult) {
		
		returnResult = returnResult || false;
		
		if(typeof(obj) != 'object') obj = document.getElementById(obj);
		
		obj.className = obj.className.replace('input_required_fail','');
		obj.className = obj.className.replace('input_required_success','');
		check = ucms_ajax_input_required_check(obj);
		if(check) {
			obj.className = obj.className+' input_required_success';
		}
		else {
			obj.className = obj.className+' input_required_fail';
		}
		if(returnResult) return check;
	}		
	
	// Eigentliche Überprüfung des Feldes
	
	function ucms_ajax_input_required_check(obj) {
		
		if(typeof(obj) != 'object') obj = document.getElementById(obj);
		
		check = false;
		if(obj.className.search('input_mail') >= 0) {
			if(ucms_check_mailadress(obj.value)) check = true;
		}
		else if(obj.className.search('input_number') >= 0) {
			if(!isNaN(obj.value) && obj.value.length > 0) check = true;
		}
		else if(obj.className.search('input_select') >= 0) {
			if(obj.value != "" && obj.value != 0) check = true;
		}
		else {
			if(obj.value.length >= 3) check = true;
		}
		return check;
	}
	
	// Überprüfung ob ein Wert im Array enthalten ist
	
	function ucms_isInArray(array,suche) {
		treffer = false;
		for(x=0;x<array.length;x++) {
			if(array[x] == suche) treffer = true;
		}
		return treffer;
	}
	
	// Mailadresse validieren
	
	function ucms_check_mailadress(mailAdress)
	{
		var checkRegExp = false;
		var check = false;
		if(typeof(RegExp) == 'function') {
			var testExp = new RegExp('uCMS');
			if(testExp.test('uCMS') == true){checkRegExp = true;}
		}
		
		if(checkRegExp == true) {
			testExp = new RegExp('^([a-zA-Z0-9\\-\\.\\_]+)'+
						   '(\\@)([a-zA-Z0-9\\-\\.]+)'+
						   '(\\.)([a-zA-Z]{2,4})$');
			check = (testExp.test(mailAdress));
		}
		else {
			check = (mailAdress.search('@') >= 1 &&
				 mailAdress.lastIndexOf('.') > mailAdress.search('@') &&
				 mailAdress.lastIndexOf('.') >= mailAdress.length-5)
		}
		return(check);
	}
	
	
	// Hash der URL beobachten und bei Änderung ohne vorige Linknutzung einen Reload ausführen
	// -> Fix für Backbutton
	//
	function ucms_ajax_monitor_hash(oldhash,firstRound) {
		
		firstRound = firstRound || true;
		
		// DEBUG: alert(oldhash+' - '+ document.location.hash);
		
		if(oldhash != document.location.hash && firstRound == 'false')  {
			oldhash = document.location.hash;
			ucms_ajax_reload_from_hash(document.location.hash); // Neuer Timeout wird nach Reload gesetzt!
		}
		else {
			monitorHashTimeout = setTimeout("ucms_ajax_monitor_hash('"+oldhash+"','false')",100);
		}
		
	}
	
	// Reload des Inhalts über den Url-Hash
	function ucms_ajax_reload_from_hash(theHash) {
		
		if(theHash != '') var newURL = theHash.replace('#','/ajax');
		else {		
			var newURL = '';
			if(document.location.href.charAt(document.location.href.length - 1) == '/') newURL = document.location.href;
			else  newURL = document.location.href+'/';	
			newURL = newURL.replace(document.domain,document.domain + '/ajax');	
		}
		ucms_ajax_urlrequest(newURL);
	}
	
	/**
	*
	*  AJAX IFRAME METHOD (AIM)
	*  http://www.webtoolkit.info/
	*
	**/
	
	function startCallback(target) {
		document.getElementById(target).innerHTML = '<span id="ajaxLoading"></span>';
		return true;
	}

	function completeCallback(response,target) {
		// make something useful after (onComplete)
		document.getElementById(target).innerHTML = response;
	}	
	 
	AIM = {
	 
		frame : function(c,t) {
	 
			var n = 'f' + Math.floor(Math.random() * 99999);
			var d = document.createElement('DIV');
			d.innerHTML = '<iframe src="about:blank" id="'+n+'" name="'+n+'" onload="AIM.loaded(\''+n+'\',\''+t+'\')"></iframe>';
			document.body.appendChild(d);
	 
			var i = document.getElementById(n);
			if (c && typeof(c.onComplete) == 'function') {
				i.onComplete = c.onComplete;
			}
	 
			return n;
		},
	 
		form : function(f, name) {
			f.setAttribute('target', name);
		},
	 
		submit : function(f, c, t) {
			if(ucms_ajax_submitform_check(f)) {
				AIM.form(f, AIM.frame(c,t));
				if (c && typeof(c.onStart) == 'function') {
					return c.onStart(t);
				} else {
					return true;
				}
			}
			else {
				altPool = f.getElementsByClassName('form_submit_fail');
				if(altPool.length > 0) {
					$(altPool[0].id).show();
				}
				else {
					alert('Sie haben das Formular nicht korrekt ausgefuellt!');
					return false;
				}
			}
		},
	 
		loaded : function(id,t) {
			var i = document.getElementById(id);
			if (i.contentDocument) {
				var d = i.contentDocument;
			} else if (i.contentWindow) {
				var d = i.contentWindow.document;
			} else {
				var d = window.frames[id].document;
			}
			if (d.location.href == "about:blank") {
				return;
			}
	 
			if (typeof(i.onComplete) == 'function') {
				i.onComplete(d.body.innerHTML,t);
			}
		}
	 
	}
	
	Event.observe(window, 'load', function(){
	  ucms_ajax_init();
	});
	
