/*#####################################################################
	VALIDATOR 19.05.09 (rs)
#####################################################################*/

/***	Manual => manual.txt	***/

/*#####################################################################
	Element
#####################################################################*/

Element.implement({
	getLabel: function()
	{
		if(this.label===undefined) {
			this.label = $$('label[for='+this.id+']')[0] || this.getParent('label');
		}
		return this.label;
	}
});

/*#####################################################################
	validator
#####################################################################*/

validator = {
	
	form:null,
	
	//-----------------------------------------------------------------
	
	init:function(form)
	{
		var elementsFalse;
		
		form.addEvent("submit",function(e)
		{
			elementsFalse = validator.check(form);
			if(elementsFalse.length > 0) {
				validator.handleError(form,elementsFalse);
				e.stop();
			}
		});
		
		if(form.getElement(".validate_submit"))
		{
			var button = form.getElement(".validate_submit");
			button.addEvent("click",function(e)
			{
				elementsFalse = validator.check(form);
				if(elementsFalse.length > 0) { validator.handleError(form,elementsFalse); }
				else { validator.send(form); }
				e.stop();
			});
		}
		return this;
	},
	
	//-----------------------------------------------------------------
	
	send:function(form)
	{
		form.submit();
	},
	
	//-----------------------------------------------------------------
	
	check:function(form)
	{
		var elementsFalse = new Array();
		$A(form.elements).each(function(el){
			if(el.className.indexOf("validate") > -1 && el.className.indexOf("validate_submit") == -1)
			{
				if(validator.checkElement(el)) { elementsFalse.push(el); }
			}
		});
		return elementsFalse;
	},
	
	//-----------------------------------------------------------------
	
	checkElement:function(el)
	{
		var type = validator.getElementType(el);
		var error = false;
		type.each(function(t) {
			if(validator.handler[t])
			{
				var result = "";
				switch(el.type.toLowerCase())
				{
					case "radio":
						var radios = validator.getRadioButtons(el);
						$A(radios).each(function(ra){ if(ra.checked) { result = ra.value; } });
					break;
					case "select-one":
						result = $(el).get('value');
					break;
					case "checkbox":
						result = (el.checked) ? el.value : "";
					break;
					default:
						result = el.value;
					break;
				}
				if(!result.match(validator.handler[t].check)) { error = true; }
			}
		});
		
		switch(el.type.toLowerCase())
		{
			case "radio": validator.styleRadio(el,error); break;
			case "checkbox": validator.styleCheckbox(el,error); break;
			default: validator.styleInput(el,error); break;
		}
		
		return error;
		
	},
	
	//-----------------------------------------------------------------
	
	onSubmitError:function(elementsFalse)
	{
		// --> overlay.show($('errorBox'));
	},
	
	//-----------------------------------------------------------------
	
	getRadioButtons:function(el)
	{
		return el.form.elements[el.name];
	},
	
	//-----------------------------------------------------------------
	
	styleRadio:function(el,error)
	{
		var radios = validator.getRadioButtons(el);
		var labels = el.form.getElements("label");
		$A(radios).each(function(ra) {
			if($(ra).getLabel())
			{
				if(error) { ra.getLabel().addClass("validate_false"); }
				else { ra.getLabel().removeClass("validate_false"); }
			}
		});
	},
	
	//-----------------------------------------------------------------
	
	styleCheckbox:function(el,error)
	{
		if($(el).getLabel())
		{
			if(error) { el.getLabel().addClass("validate_false"); }
			else { el.getLabel().removeClass("validate_false"); }
		}
	},
	
	//-----------------------------------------------------------------
	
	styleInput:function(el,error)
	{
		if(error) { $(el).addClass("validate_false"); }
		else { $(el).removeClass("validate_false"); }
	},
	
	//-----------------------------------------------------------------
	
	getElementType:function(el)
	{
		var type = el.className;
		type = type.substr(type.indexOf("validate"),type.length);
		var end = (type.indexOf(" ") > -1) ? type.indexOf(" ") : type.length; 
		type = type.substr(0,end);
		type = type.split("_");
		type.shift();
		return type;
	},
	
	//-----------------------------------------------------------------
	
	handler:{
		trim:		{ check:/^$|^[^\s]$|^[^\s].*[^\s]$/ },
		required:	{ check : /^.+/ },
		numeric:	{ check : /^$|^[^\,\.]*[\,\.]{0,1}[^\,\.]+$/ },
		integer:	{ check : /^$|^[0-9]+$/ },
		phone:		{ check : /^$|^.{7,20}$/ },
		email:		{ check : /^$|^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/ },
		string:		{ check : /.+/ },
		url:		{ check : /^$|^http[s]{0,1}:\/\/[^\s]+$/ }
	},
	
	//-----------------------------------------------------------------
	
	handleError:function(form,elementsFalse)
	{
		(form.onSubmitError) ? form.onSubmitError(elementsFalse) : validator.onSubmitError(elementsFalse);
	}
	
	//-----------------------------------------------------------------
	
};

window.addEvent("load",function(){
	$$("form.validate").each(function(form){ validator.init(form); });
});

//-----------------------------------------------------------------


/*#####################################################################
	Overlay
#####################################################################*/

function Overlay()
{
	//-----------------------------------------------------------------
	
	var bodyCt;
	var overlay;
	var overlayIframe;
	var overlayMessageBox;
	
	//-----------------------------------------------------------------
	
	this.createOverlay = function()
	{
		bodyCt = document.getElements("BODY")[0];
		overlay = new Element('div');
		overlayIframe = new Element('iframe');
		overlayMessageBox = null;
		
		overlay.id = "overlay";
		overlay.setOpacity(0.8);
		overlayIframe.id	= 'overlayIframe';
		overlayIframe.setOpacity(0.001);
		
		bodyCt.appendChild(overlay);
		bodyCt.appendChild(overlayIframe);
	}
	
	//-----------------------------------------------------------------
	
	this.show = function(content)
	{
		if(!overlay) { this.createOverlay(); }
		var w = window.getSize().x;
		var h =  window.getSize().y;
		overlay.style.width = w + "px";
		overlay.style.height = h + "px";
		
		overlayIframe.style.width = w + "px";
		overlayIframe.style.height = h + "px";
		
		overlayIframe.style.display = "block";
		overlay.style.display = "block";
		
		if(content)
		{
			overlayMessageBox = content;
			content.oldStyle = content.style.textCss;
			content.style.display = "block";
			content.style.left = (w/2) - (content.offsetWidth/2) + "px";
			content.style.top = (h/2) - (content.offsetHeight/2) + "px";
		}
	}
	
	//-----------------------------------------------------------------
	
	this.hide = function()
	{
		overlayMessageBox.style.textCss = overlayMessageBox.oldStyle;
		overlayMessageBox.style.display = "none";
		overlay.style.display = "none";
		overlayIframe.style.display = "none";
	}
}



/*#####################################################################
	Initialisierung
#####################################################################*/


var overlay = new Overlay();


//-----------------------------------------------------------------


