/*
* FancyForm 0.94
* By Vacuous Virtuoso, lipidity.com
* ---
* Checkbox and radio input replacement script.
* Toggles defined class when input is selected.
*/

var Gesch = new Array();
var Gesch_count=Gesch.length;
var Gesch_max = 1;
var Gesch_lastElementInsert=0;

var Alter = new Array();
var Alter_count=Alter.length;
var Alter_max = 2;
var Alter_lastElementInsert=0;

var Farbe = new Array();
var Farbe_count=Farbe.length;
var Farbe_max = 2;
var Farbe_lastElementInsert=0;
	


function fields_funct(c, feldgruppe){

	var inside = 0;	
	var tmp = new Array();
	var feld = c.id.split("_");
	var myVar = feld[1];

	switch (feldgruppe) {
	 case "Cat3":
			
			/* Gesch anzahl ist erreicht */
			Gesch_lastElementInsert=0;
			/* wenn der aul schon drin ist -nicht nochmal reintun sondern raustun*/
			for (var i = 0; i < Gesch.length; ++i)
			{
				if(Gesch[i] == myVar){
					inside = 1;
				}else{
					tmp.push(Gesch[i]);
				}
			}
			//* aktuelles element ist bereichts im array*/
			if(inside){
				Gesch = tmp;	
				Gesch_count--; 
			}else{
				if(Gesch.length < Gesch_max)
				{
					Gesch.push(myVar);
					Gesch_count++; 
					if(Gesch_count == Gesch_max) Gesch_lastElementInsert = 1;
				}			
			}
		break;
	   case "Cat4":
		
			/* Alter anzahl ist erreicht */
			Alter_lastElementInsert=0;
			/* wenn der aul schon drin ist -nicht nochmal reintun sondern raustun*/
			for (var i = 0; i < Alter.length; ++i)
			{
				
				if(Alter[i] == myVar){
					inside = 1;
				}else{
					tmp.push(Alter[i]);
				}
			}
			//* aktuelles element ist bereichts im array*/
			if(inside){
				Alter = tmp;	
				Alter_count--; 
			}else{
				if(Alter.length < Alter_max)
				{
					Alter.push(myVar);
					Alter_count++; 
					if(Alter_count == Alter_max) Alter_lastElementInsert = 1;
				}			
			}
		break;
	   case "Cat5":
			
			/* Farbe anzahl ist erreicht */
			Farbe_lastElementInsert=0;
			/* wenn der aul schon drin ist -nicht nochmal reintun sondern raustun*/
			for (var i = 0; i < Farbe.length; ++i)
			{
				if(Farbe[i] == myVar){
					inside = 1;
				}else{
					tmp.push(Farbe[i]);
				}
			}
			//* aktuelles element ist bereichts im array*/
			if(inside){
				Farbe = tmp;	
				Farbe_count--; 
			}else{
				if(Farbe.length < Farbe_max)
				{
					Farbe.push(myVar);
					Farbe_count++; 
					if(Farbe_count == Farbe_max) Farbe_lastElementInsert = 1;
				}			
			}
			
		break;
	    default:
		break;
	}

	
}
var FancyForm = {
	start: function(elements, options){
		FancyForm.initing = 1;
		if($type(elements)!='array') elements = $$('input');
		if(!options) options = [];
		FancyForm.onclasses = ($type(options['onClasses']) == 'object') ? options['onClasses'] : {
			checkbox: 'checked2',
			checkboxx: 'checked3',
			radio: ''
		}
		FancyForm.offclasses = ($type(options['offClasses']) == 'object') ? options['offClasses'] : {
			checkbox: 'unchecked2',
			checkboxx: 'checked3',
			radio: ''
		}
		if($type(options['extraClasses']) == 'object'){
			FancyForm.extra = options['extraClasses'];
		} else if(options['extraClasses']){
			FancyForm.extra = {
				checkbox: 'e1_checkbox',
				radio: '',
				on: 'on',
				off: 'off',
				all: 'fancy'
			}
		} else {
			FancyForm.extra = {};
		}
		FancyForm.onSelect = $pick(options['onSelect'], function(el){});
		FancyForm.onDeselect = $pick(options['onDeselect'], function(el){});
		var keeps = [];
		FancyForm.chks = elements.filter(function(chk){
			if( $type(chk) != 'element' ) return false;
			if( chk.get('tag') == 'input' && (FancyForm.onclasses[chk.getProperty('type')]) ){
				var el = chk.getParent();
				if(el.getElement('input')==chk){
					el.type = chk.getProperty('type');
					el.inputElement = chk;
					this.push(el);
				} else {
					chk.addEvent('click',function(f){
						if(f.event.stopPropagation) f.event.stopPropagation();
					});
				}
			} else if( (chk.inputElement = chk.getElement('input')) && (FancyForm.onclasses[(chk.type = chk.inputElement.getProperty('type'))]) ){
				return true;
			}
			return false;
		}.bind(keeps));
		FancyForm.chks = FancyForm.chks.combine(keeps);
		keeps = null;
		FancyForm.chks.each(function(chk){
			var c = chk.inputElement;
			c.setStyle('position', 'absolute');
			c.setStyle('left', '-9999px');
			chk.addEvent('selectStart', function(f){f.stop()});
			chk.name = c.getProperty('name');
			FancyForm.update(chk);
		});
		FancyForm.chks.each(function(chk){
			var c = chk.inputElement;
			chk.addEvent('click', function(f){
				f.stop(); f.type = 'prop';
				c.fireEvent('click', f, 1);
			});
			chk.addEvent('mousedown', function(f){
				if($type(c.onmousedown) == 'function')
					c.onmousedown();
				f.preventDefault();
			});
			chk.addEvent('mouseup', function(f){
				if($type(c.onmouseup) == 'function')
					c.onmouseup();
			});
			c.addEvent('focus', function(f){
				if(FancyForm.focus)
					chk.setStyle('outline', '1px dotted');
			});
			c.addEvent('blur', function(f){
				chk.setStyle('outline', 0);
			});
			c.addEvent('click', function(f){
										 
						
				var tmp = c.id.split("_");
				var doit = 0;
			
				fields_funct(c, tmp[0]);

				switch (tmp[0]) 
				{
				
					case "Cat3":			
					if( (Gesch_count < Gesch_max) || (Gesch_lastElementInsert == 1) )
					{ 
						doit = 1;
					}
					break;
					case "Cat4":			
					if( (Alter_count < Alter_max) || (Alter_lastElementInsert == 1) )
					{ 
						doit = 1;
					}
					break;
					case "Cat5":			
					if( (Farbe_count < Farbe_max) || (Farbe_lastElementInsert == 1) )
					{ 
						doit = 1;
					}
					break;
				
				}
				
				if(doit == 1 ){
				
					if(f.event.stopPropagation) f.event.stopPropagation();
					if(c.getProperty('disabled')) // c.getStyle('position') != 'absolute'
						return;
					if (!chk.hasClass(FancyForm.onclasses[chk.type]))
						c.setProperty('checked', 'checked');
					else if(chk.type != 'radio')
						c.setProperty('checked', false);
					if(f.type == 'prop')
						FancyForm.focus = 0;
					FancyForm.update(chk);
					FancyForm.focus = 1;
					if(f.type == 'prop' && !FancyForm.initing && $type(c.onclick) == 'function')
						 c.onclick();
				
				}						 
										 
				
			});
			c.addEvent('mouseup', function(f){
				if(f.event.stopPropagation) f.event.stopPropagation();
			});
			c.addEvent('mousedown', function(f){
				if(f.event.stopPropagation) f.event.stopPropagation();
			});
			if(extraclass = FancyForm.extra[chk.type])
				chk.addClass(extraclass);
			if(extraclass = FancyForm.extra['all'])
				chk.addClass(extraclass);
		});
		FancyForm.initing = 0;
		$each($$('form'), function(x) {
			x.addEvent('reset', function(a) {
				window.setTimeout(function(){FancyForm.chks.each(function(x){FancyForm.update(x);x.inputElement.blur()})}, 200);
			});
		});
	},
	update: function(chk){
		if(chk.inputElement.getProperty('checked')) {
			chk.removeClass(FancyForm.offclasses[chk.type]);
			chk.addClass(FancyForm.onclasses[chk.type]);
			if (chk.type == 'radio'){
				FancyForm.chks.each(function(other){
					if (other.name == chk.name && other != chk) {
						other.inputElement.setProperty('checked', false);
						FancyForm.update(other);
					}
				});
			}
			if(extraclass = FancyForm.extra['on'])
				chk.addClass(extraclass);
			if(extraclass = FancyForm.extra['off'])
				chk.removeClass(extraclass);
			if(!FancyForm.initing)
				FancyForm.onSelect(chk);
		} else {
			chk.removeClass(FancyForm.onclasses[chk.type]);
			chk.addClass(FancyForm.offclasses[chk.type]);
			if(extraclass = FancyForm.extra['off'])
				chk.addClass(extraclass);
			if(extraclass = FancyForm.extra['on'])
				chk.removeClass(extraclass);
			if(!FancyForm.initing)
				FancyForm.onDeselect(chk);
		}
		if(!FancyForm.initing)
			chk.inputElement.focus();
	},
	all: function(){
		FancyForm.chks.each(function(chk){
			chk.inputElement.setProperty('checked', 'checked');
			FancyForm.update(chk);
		});
	},
	none: function(){
		FancyForm.chks.each(function(chk){
			chk.inputElement.setProperty('checked', false);
			FancyForm.update(chk);
		});
	}
};

window.addEvent('domready', function(){
	FancyForm.start();
});

