/**
 * Form JS Klasse die die neuen Formularfunktionalität abbildet
 */
var Form = new Class({
	
	/*Variablen für IE-Hack Selectbox DropDown Beginn*/
	
	/*Beinhaltet das Element mit der Id Land (Länderauswahl Schnellsuche)*/
	land: null,
	
	/*Dient der Festlegung ob blur gestattet ist oder nicht.*/
	blur: null,
	
	/*Dient der Festlegung ob focus gestattet ist oder nicht.*/
	focus: null,
	
	/*Dient der Festlegung ob schon einmal geklickt wurde oder nicht.*/
	firstClick: null,
	
	/*Variablen für IE-Hack Selectbox DropDown Ende*/
	
	multiselectControl: function(element, maxNum) {
		if(element == undefined) { return; }
		
		// IE Hack weil element durch this übergeben wird!
		if (Browser.Engine.trident)
			element = $(element);
		
		if(maxNum == undefined) {
			maxNum = 3;
		}
		
		var counter = 0;
		if(element.type == 'select' || element.type == 'select-multiple') {
			var options = element.options;
			for(var i = 0; i < element.options.length; i++) {
				if(element.options[i].selected == true) {
					counter++;
				}
				
				if(counter > maxNum) {
					element.options[i].selected = false;
				}
			}
		}else if(element.type == 'checkbox') {
			/* 
			 * Für All Check Option
			 * Diese Sorgt dafür, dass wenn "allCheck" angeklickt wird, nur "allCheck" ausgewählt wird und alle andwren deaktiviert werden, ebenso andersrum
			 * wird ein element angleklickt iund ist "allCheck" aktiv, wird der Haken bei "allCheck" entfernt
			 */
			if (element.hasClass('allCheck') && true == element.checked) {
				var elements = element.getParent().getParent().getParent().getElements('input[type=checkbox]');
				elements.each(function(el) {
					if(true == el.checked && !el.hasClass('allCheck')) {
						el.checked = false;
					}
				});
			}
			var elements = element.getParent().getParent().getParent().getElements('input[type=checkbox]');
			elements.each(function(el) {
				if(true == el.checked) {
					/* 
					 * Für All Check Option
					 * Diese Sorgt dafür, dass wenn "allCheck" angeklickt wird, nur "allCheck" ausgewählt wird und alle andwren deaktiviert werden, ebenso andersrum
					 * wird ein element angleklickt iund ist "allCheck" aktiv, wird der Haken bei "allCheck" entfernt
					 */
					
					if (el.hasClass('allCheck') && el.id != element.id) {
						el.checked = false;
					} else {
						counter++;
					}
				}
			});
			if (counter > maxNum) {
				element.checked = false;
			}
			
		}
		
	},
	
	/**
	 * Kontrolliert das Anchecken von Checkboxen, das es reagiert wie ein Radio Button.
	 */
	allowOneChoice: function(element) {
		if(element == undefined) { return; }
		
		// IE Hack weil element durch this übergeben wird!
		if (Browser.Engine.trident)
			element = $(element);
		
		if(element.type == 'checkbox') {
			
			var elements = element.getParent().getParent().getParent().getElements('input[type=checkbox]');
			elements.each(function(el) {
				if(true == el.checked) {
					el.checked = false;
				}
			});
			element.checked = true;
		}
		
	},
	
	/**
	 * Kontrolliert das Anchecken von Checkboxen, wo es eine Auswahl "alle" gibt.
	 * Wenn Alle angehakt wird, werden andere deaktiviert, ebenso ist es andersrum
	 * 
	 * Die definition der "All-Checkbox" wird über die klasse AllCheck definiert!
	 */
	checkControllAll: function(field) {
		
		var aList = $$('form input[name^="' + field + '"]');
		
		aList.each(function(el) {
			el.addEvent('click', function() {
				if (this.hasClass('allCheck') && true == this.checked) {
					 $$('form input[name^=' + field + ']').each(function(el) {
						if (!el.hasClass('allCheck') && true == el.checked) {
							el.checked = false;
						}
					 });
				} else if(true == this.checked) {
					if (Browser.Engine.trident) {
						// SCHEISS IEEEEE
						// Dieser Hack is dazu notwendig da die getParent124 nicht geht
						$$('form input[name^=' + field + ']').each(function(el) {
							if (el.hasClass('allCheck')) {
								el.checked = false;
							}
						});
					} else {
						if (this.getParent('fieldset').getElement('input.allCheck')) {
							this.getParent('fieldset').getElement('input.allCheck').checked = false;
						}
					}
					
				}
			});		
		});
	},
	
	addThreadControll: function(element) {
		element = $(element);
		
		var form = element.getParent().getParent();
		var aHideFields = new Array();
		var field;
		
		if (field = form.getElement('select[name=status_id]')) {
			aHideFields.push(field.getParent());
		}
		if (field = form.getElement('select[name=status_id2]')) {
			aHideFields.push(field.getParent());
		}
		if (field = form.getElement('input[name=alternative_statusname]')) {
			aHideFields.push(field.getParent());
		}
		if (field = form.getElement('input[name=prize_money]')) {
			aHideFields.push(field.getParent());
		}
		if (field = form.getElement('select[name=currency]')) {
			aHideFields.push(field.getParent());
		}
		
		aHideFields.each(function(field) {
			if ('null' == element.getValue()) {
				field.removeClass('hidden');
			} else {
				field.addClass('hidden');
			}
		});
		
	},
	
	checkboxAsRadioByName: function (name) {
		var aList = $$('input[name^="' + name + '"]');
		
		aList.each(function(el) {
			el.addEvent('click', function() {
				var aList2 = $$('input[name^="' + name + '"]');
				aList2.each(function(ele) {
					ele.checked = false;
				});
				el.checked = true;
			}.bind(name, el));
		});
	},
	
	
	/*IE-Hack Länderauswahl Drop-Down Bug*/
	
	ieDropDown: function() {
		
		this.land = $('land');
		
		if(!this.land) {
			return;
		}
		
		var form = this;
		this.firstClick = false;
		this.blur = true;
		this.focus = false;
		
		this.ieDropDownInit = true;
			
		this.land.addEvent('focus', function() {
			
			if(!this.land.hasClass('ieDropDown')) {
				$('ort0').getParent().addClass('selectDistance');
				this.land.addClass('ieDropDown');
				this.clickEvent();
			}
		}.bind(form));
		
		this.land.addEvent('mouseover', function() {
			
			this.land.focus();	
		}.bind(form));
		
		this.land.addEvent('mouseout', function() {
			
			if(this.blur) {
				this.land.blur();
			}
		}.bind(form));
		
		
		
		this.land.addEvent('blur', function() {
			this.focus = false;
			this.blur = true;
			if(this.land.hasClass('ieDropDown')) {
				$('ort0').getParent().removeClass('selectDistance');
				this.land.removeClass('ieDropDown');
				this.land.removeEvents('click');
			}
		}.bind(form));
			
	},

	clickEvent: function() {
		
		var form = this;
		
		if('click' == window.event.type || !this.focus) {
			if('focus' == window.event.type) {
				this.focus = true;
			}
			this.land.addEvent('click', function() {
				
				if(this.firstClick) {
					
					//alert(blur);
					this.secondclick();
				}
				else {
					
					this.firstclick();
				}
			
			}.bind(form));
		}
	},

	firstclick: function() {
		//alert("firstclick");
		this.blur = false;
		this.firstClick = true;
		this.land.removeEvents('click');
		this.clickEvent();
	},

	secondclick: function () {
		//alert("secondclick");
		this.firstClick = false;
		this.land.removeEvents('click');
		this.land.blur();
	}
});
