// some common form actions

// sets errors, either at an element, or at the top of the form
/*
 * takes as its argument an associative array in the following format:
 * var errs = {
 * 	0 : {
 * 		'element' : 'nameORid',
 * 		'message' : 'messageTOdisplay'
 * 	},
 * 	....
 * }
 * 
 */
function setFormErrors(errs){
	var errlen=errs.length;
	for(var i=0; i < errs.length; i++){
		var message = errs[i].message;
		if(errs[i].element){
			var elem = errs[i].element;
			if(elem=='formMismatch'){
				var errspan = document.createElement("span");
				errspan.className = 'formError';
				errspan.style.width='90%';
				errspan.style.paddingRight='15px';
				errspan.style.margin='auto';
				errspan.style.marginBottom='10px';
				errspan.innerHTML = message;
				document.getElementById('page_top_error_msg').appendChild(errspan);
				//errs.splice(i,1);//delete element: we don't want to see the form error notice, if we don't have any form errors.
				errlen--;
			} else {
				// now, set an error message immediately after the element that has been given an error state
				// create span for the error message
				var errspan = document.createElement("span");
				errspan.className = 'error';
				errspan.innerHTML = message;
				
				// right now, we are appending at the end, which isn't quite right, but will be quick
				if(document.getElementById(elem)==undefined){
					//formelement does not exist (anymore)
					errlen--;
				} else {
					var appendhere = document.getElementById(elem).parentNode;
					appendhere.appendChild(errspan);
				}
			}
		}else{
			// get error message
			var errspan = document.createElement("span");
			errspan.className = 'formError';
			errspan.innerHTML = errs[i].message;
			// insert the errors just before the first child of the form element
			//var appendhere = document.getElementsByTagName('form').item(0);
			//appendhere.insertBefore(errspan, appendhere.firstChild);
			document.getElementsByTagName('form').item(0).appendChild(errspan);
		}
	}
	if(errlen>0){
		var errspan = document.createElement("span");
		errspan.className = 'formError';
		errspan.style.width='90%';
		errspan.style.paddingRight='15px';
		errspan.style.margin='auto';
		errspan.style.marginBottom='10px';
		errspan.innerHTML = 'Beim Absenden Ihrer Anfrage gab es Probleme.<br />Bitte korrigieren Sie die hervorgehobenen Formularfelder.';
		document.getElementById('page_top_error_msg').appendChild(errspan);
	}
}

var formHelpRules = {
	'.tooltip_link' : function(el){
		// find which tooltip we need to make appear / disappear
		var tip_node = document.getElementById(el.rel);
		el.onclick = function(){
			if(tip_node.style.display == 'block'){
				tip_node.style.display='none';
			}else{
				tip_node.style.display='block';
			}
		}
	},
	
	'.explain_popup' : function(el){
		el.onclick = function(){
			var hiddenText = $(el.id + '_popup').innerHTML;
			//alert(hiddenText);
			// position in the middle of the screen
			var popup = document.createElement('div');
			popup.id = 'explain_popup';// this id is important, so the 'popup' can be removed!
			popup.innerHTML = hiddenText;
			popup.style.position = 'absolute';
			setViewport();
			setOffset();
			// FIXME: these styles should be grabbed from the existing styles from the site
			var p_padding = 100;
			var p_margin = 50;
			popup.style.width = (viewportwidth - 2*(p_padding + p_margin)) + 'px';
			popup.style.height = (viewportheight - 2*(p_padding + p_margin)) + 'px';
			popup.style.backgroundColor = '#666666';
			popup.style.padding = p_padding + 'px';
			popup.style.left= (p_margin + offsetX) + 'px';
			popup.style.top = (p_margin + offsetY) + 'px';
			popup.style.display = 'none';
			document.body.appendChild(popup);
			new Effect.Appear(popup);
			hideSelects();
			Behaviour.apply();
		}
	},
	
	'#explain_popup' : function(el){
		el.onclick = function(){
			new Effect.Fade(el);
			window.setTimeout('var rem = document.getElementById(\'explain_popup\'); rem.parentNode.removeChild(rem);showSelects();', 900);
		}
	}
}
Behaviour.register(formHelpRules);

// FOR HACKING AROUND IE'S SELECT SHOWING
function hideSelects(){
	var selectList = document.getElementsByTagName('select');
	for(var i in selectList){
		if(!selectList[i].style) continue;
		selectList[i].style.visibility = 'hidden';
	}
}

function showSelects(){
	var selectList = document.getElementsByTagName('select');
	for(var i in selectList){
		if(!selectList[i].style) continue;
		selectList[i].style.visibility = 'visible';
	}
}

// positioning functions
var viewportwidth;
var viewportheight;
function setViewport(){
	if(typeof window.innerWidth != 'undefined'){
		viewportwidth = window.innerWidth,
		viewportheight = window.innerHeight
	}else if(typeof document.documentElement != 'undefined'
		&& typeof document.documentElement.clientWidth !=
		'undefined' && document.documentElement.clientWidth != 0){
			viewportwidth = document.documentElement.clientWidth,
			viewportheight = document.documentElement.clientHeight
	}else{
	 viewportwidth = document.getElementsByTagName('body')[0].clientWidth,
	 viewportheight = document.getElementsByTagName('body')[0].clientHeight
	}
}


var offsetX, offsetY;
function setOffset(){
	if (self.pageYOffset) // all except Explorer
	{
		offsetX = self.pageXOffset;
		offsetY = self.pageYOffset;
	}
	else if (document.documentElement && document.documentElement.scrollTop)
		// Explorer 6 Strict
	{
		offsetX = document.documentElement.scrollLeft;
		offsetY = document.documentElement.scrollTop;
	}
	else if (document.body) // all other Explorers
	{
		offsetX = document.body.scrollLeft;
		offsetY = document.body.scrollTop;
	}
}
