﻿/*=========================================================================
|
|	file:			bkh.js
|	site:			www.bulgarische-kinderheime.de
|	descr:		JS-Sammlung
|	version:	1.2 - 2008/02/28 22:51
|
|	------------------------------------------------------------------------
|
|	author:			Christoph Schüßler
|	author url:	http://herr-schuessler.de
|
==========================================================================*/


/* 
|
|	unmask e-mail-addresses
|
--------------------------------------------------------------------------*/

function noSpamLink(name,domain,tld,id) {
	var link = '<a href="mailto:' + name + '@' + domain + '.' + tld + '">' + name + '@' + domain + '.' + tld +'</a>';
	document.getElementById(id).innerHTML = link;
}

/* 
|
|	turn off image flicker in ie6
| see http://www.mister-pixel.com/#Content__state=is_that_simple
--------------------------------------------------------------------------*/
try {
  document.execCommand("BackgroundImageCache", false, true);
} catch(err) {}


/* 
|
|	Fx.Morph
| see http://demos.mootools.net/Fx.Morph
--------------------------------------------------------------------------*/
Fx.Morph = Fx.Styles.extend({
 
	start: function(className){
 
		var to = {};
 
		$each(document.styleSheets, function(style){
			var rules = style.rules || style.cssRules;
			$each(rules, function(rule){
				if (!rule.selectorText.test('\.' + className + '$')) return;
				Fx.CSS.Styles.each(function(style){
					if (!rule.style || !rule.style[style]) return;
					var ruleStyle = rule.style[style];
					to[style] = (style.test(/color/i) && ruleStyle.test(/^rgb/)) ? ruleStyle.rgbToHex() : ruleStyle;
				});
			});
		});
		return this.parent(to);
	}
 
});

Fx.CSS.Styles = ["backgroundColor", "backgroundPosition", "color", "width", "height", "left", "top", "bottom", "right", "fontSize", "letterSpacing", "lineHeight", "textIndent", "opacity"];
Fx.CSS.Styles.extend(Element.Styles.padding);
Fx.CSS.Styles.extend(Element.Styles.margin);
Element.Styles.border.each(function(border){
	['Width', 'Color'].each(function(property){
		Fx.CSS.Styles.push(border + property);
	});
});


/* 
|
|	ajax form processing
| 
--------------------------------------------------------------------------*/

window.addEvent('domready', function(){
	
	//if there is an ajaxForm
	if ($('ajaxForm') != undefined) {
		
		//preload images
		ajaxPreloads = new Object();
		ajaxPreloads[0] = new Image(); ajaxPreloads[0].src = "http://bulgarische-kinderheime.de/gfx/bg-opac-70.png";
		ajaxPreloads[1] = new Image(); ajaxPreloads[1].src = "http://bulgarische-kinderheime.de/gfx/ajax-loader.gif";
	
		//add behaviour
		$('ajaxForm').addEvent('submit', function(e) {
		
			// stop form from reloading window
			new Event(e).stop();
			
			//create div #systemResponse
			if($('systemResponse') == undefined) {
				var systemResponse = document.createElement("div");
				systemResponse.id = 'systemResponse';
				$('ajaxForm').insertBefore(systemResponse,$('ajaxForm').firstChild);
			}
			else {
				var systemResponse = $('systemResponse');
				systemResponse.innerHTML = '';
			}
		
			// add loading gfx
			$('systemResponse').addClass('ajax-loading');
			var loader =  document.createElement("img");		
			loader.src = 'http://bulgarische-kinderheime.de/gfx/ajax-loader.gif';
			$('systemResponse').appendChild(loader);
			
			window.location = '#systemResponse';
			
			//identify check-field
			var systemResponseChecked 				= $('form-checked');
					 
			// send form content
			this.send({
				onSuccess: function() {

					//process xml-reply
					var responseType 				= this.response.xml.getElementsByTagName('response')[0].getAttribute('type');
					var responseTarget 				= this.response.xml.getElementsByTagName('response')[0].getAttribute('target');
					
					//IE doesn't recognize XML as what it is, so we better check for its stupidity
					if(this.response.xml.getElementsByTagName('responseHTML')[0].textContent) {
						var responseHTML = this.response.xml.getElementsByTagName('responseHTML')[0].textContent;
					}
					else {
						var responseHTML = this.response.xml.getElementsByTagName('responseHTML')[0].text;
					}
								
					var systemResponseDiv 			= document.createElement("div");
					var systemResponseCloseButton 	= document.createElement("p");
					var systemResponseCloseButtonA 	= document.createElement("a");
					
					//since IE7 doesn't recognize the DOM-Elements yet, detour has to be made by calling these elements by their IDs
					systemResponseDiv.id 			= 'systemResponseDiv';
					systemResponseCloseButton.id 	= 'systemResponseCloseButton';	
					systemResponseCloseButtonA.id 	= 'systemResponseCloseButtonA';
					
					//insert Overlay in DOM
					$('systemResponse').appendChild(systemResponseDiv);
					
					//Insert System Response Text in Overlay
					systemResponseDiv.innerHTML 			= responseHTML;
					
					//Add Close Button
					$('systemResponseDiv').appendChild(systemResponseCloseButton);
					$('systemResponseCloseButton').appendChild(systemResponseCloseButtonA);
					systemResponseCloseButtonA.href	= 'index.html';
					
					//Add Styles
					$('systemResponseDiv').addClass('systemResponseStart');
					$('systemResponseCloseButton').addClass('button-link');
					
					//close button should close systemResponse, not reload page
					$('systemResponseCloseButtonA').addEvent('click', function(e) {	
						new Event(e).stop();
						$('ajaxForm').removeChild(systemResponse);
						systemResponseChecked.setAttribute('value', 'false');
					});
					
					//reset labels
					var labels	= document.getElementsByTagName('label');
					for(j=0; j<labels.length; j++) {
						if(labels[j].parentNode.className.match('missing')) {
							labels[j].parentNode.removeClass('missing');
						}
					}

					//do stuff for error, check or success
					if(responseType == 'neg') {
							
							systemResponseCloseButtonA.innerHTML = 'weiter &raquo;&raquo;';
							
							//mark missing form fields
							var errors 	= this.response.xml.getElementsByTagName('errors')[0].getElementsByTagName('error');
							var labels	= document.getElementsByTagName('label');
							
							for(i=0; i<errors.length; i++) {
								for(j=0; j<labels.length; j++) {
									if(errors[i].textContent) {
										if(labels[j].htmlFor == errors[i].textContent) {
											labels[j].parentNode.addClass('missing');
										}
									}
									else {
										if(labels[j].htmlFor == errors[i].text) {
											//Another IE detour...
											labels[j].parentNode.id = 'labcon' + j;
											$('labcon'+j).addClass('missing');
										}
									}
								}
							}
							
					} else if(responseType == 'check') {
						
							//list name-value-pairs in a table
							var checks 					= this.response.xml.getElementsByTagName('checks')[0].getElementsByTagName('check');
							
							//DOM
							var systemResponseCheckContainer	= document.createElement("div");
							var systemResponseSubmitButton 			= document.createElement('input');
							systemResponseSubmitButton.setAttribute('type', 'submit');	
							
							systemResponseCheckContainer.id 		= 'systemResponseCheckContainer';
							systemResponseSubmitButton.id 			= 'systemResponseSubmitButton';
							
							systemResponseDiv.appendChild(systemResponseCheckContainer);
							
							for(i=0; i<checks.length; i++) {
								
								var checkDiv  = document.createElement("div");
								var checkName  = document.createElement("span");
								var checkValue  = document.createElement("span");
								
								checkName.innerHTML = checks[i].getAttribute('name');
								
								if(checks[i].textContent) {
									checkValue.innerHTML = checks[i].textContent;
								}
								else {
									checkValue.innerHTML = checks[i].text;
								}

								systemResponseCheckContainer.appendChild(checkDiv);
								checkDiv.appendChild(checkName);
								checkDiv.appendChild(checkValue);
								
								if(i % 2 != 0) {
									checkDiv.id = 'checkDiv' + i;
									$('checkDiv' + i).addClass('odd');
								}
								else {
									checkDiv.id = 'checkDiv' + i;
									$('checkDiv' + i).addClass('even');
								}
								checkName.id = 'checkName' + i;
								$('checkName' + i).addClass('checkName');
								checkValue.id = 'checkValue' + i;
								$('checkValue' + i).addClass('checkValue');
								
							}
							
							systemResponseDiv.appendChild(systemResponseSubmitButton);
							systemResponseDiv.appendChild(systemResponseCloseButton);
							
							$('systemResponseCheckContainer').addClass('check-table');
							$('systemResponseSubmitButton').addClass('button-link');

							systemResponseChecked.setAttribute('value', 'true');
							systemResponseCloseButtonA.innerHTML = 'Ich möchte die Angaben verändern&hellip;';
							systemResponseSubmitButton.setAttribute('value', 'Die Angaben sind korrekt!');

					}
					
					else if(responseType == 'pos') {
							systemResponseCloseButtonA.innerHTML = 'OK!';
							//reset form
							$('ajaxForm').reset();
					}

					
					//clean up html
					$('systemResponse').removeClass('ajax-loading');
					$('systemResponse').removeChild(loader);
					
					// start morph that inserts neg or pos class
					var myMorph = new Fx.Morph(systemResponseDiv, {wait: false, duration: 500});
					myMorph.start(responseType);					
						
				}
				
			});
		});
	}
});

