function Filter( frm ) {
	this.appliedFilter = [];
	this.controlList = [];
	this.form = frm;
	
	Event.observe(window,"load", this.init.bindAsEventListener(this));
}

Filter.prototype.init = function() {
	this.controlList = $(this.form).getElements();
	//this.controlList = document.forms[this.form].getElements(); 
}

Filter.prototype.getControl = function( name ) {
	var entry; 
	
	for ( var i=0; i < this.controlList.length; i++ ) {
		if ( this.controlList[i].name == name ) {
			if ( (this.controlList[i].type != "") && (this.controlList[i].type != null) ) {		
				entry = this.controlList[i].type.toLowerCase();		
				switch ( entry ) {
					case "radio":
						if ( !this.controlList[i].checked ) continue;
					break;
				}
			}
		
		
			return this.controlList[i];
		}
	}
	
	return null;
}


Filter.prototype.isFilterForQuestion = function( F, name ) {
	for ( var i=0; i < F.Criteria.length; i++ ) {

		if ( F.Criteria[i].Inputname[0] == name ) {   
			return true;
		}
	}
	return false;
}

Filter.prototype.filterMods = function( name ) { 
	if ( name == "" ) return;
	var F = null;
	
	for (var i=0; i < FilterData.length; i++ ) {
		F = FilterData[i];
		
		
		if ( this.isFilterForQuestion(F,name) ) {
			if ( this.checkcondition(F) ) {
				this.appliedFilter.push(F);
				
				this.doAction(F, "DO");
			} else {
				for ( c=0; c < this.appliedFilter.length; c++ ) {
					if ( this.appliedFilter[c] == F ) {
						this.doAction(F, "UNDO");
						
						this.appliedFilter.splice(c,1);
						break;
					}
				}
			}
		}
	}
}

Filter.prototype.doAction = function( F, mode ) {
	if (!mode) mode = "DO";
	var ctrl = null;
	var f = null;
	
	switch( F.Action ) {
		case "HIDE":
			for (i=0; i < F.Targets.length; i++ ) {
			     f = document.getElementById("QID"+F.Targets[i]);
				if ( f != null) {
					if ( mode == "DO" ) {
						f.style.display = "none"; 
						
					} else {
						f.style.display = "block"; 
						
					}
				}
			}
		break;
		
		default:
		break;
	}	
}

Filter.prototype.checkcondition = function( F ) {
	var ret = null
	var Crit = null;
	var cRet = null;
	

	
	for (var i = 0; i < F.Criteria.length; i++) {
		Crit = F.Criteria[i];
		ctrl = this.getControl(Crit.Inputname[0]);
		if (!ctrl) {
			if (Crit.Link == "AND") 
				return false;
			continue;
		}
		
		

		if($(ctrl.id).getAttribute('answer') && $(ctrl.id).checked==true)
		{
			var value = $(ctrl.id).getAttribute('answer');
		}
		else
		{
			var value = $F(ctrl);
		}
		
	

		
		
		
		switch (Crit.Operator) {
			case "=":
				cRet = ( value == Crit.Value );
			break;
			
			case ">":
				cRet = ( value > Crit.Value );
			break;
			
			case "<":
				cRet = ( value < Crit.Value );
			break;
			
			case "enthält":
				//ret &= ( asdfsadf = Crit.Value );
			break;
		}		

		if (Crit.Link == "AND") {
			if ( ret == null ) ret = cRet; else ret &= cRet;
			if ( !ret ) return false;
			
		} else if (Crit.Link == "OR" ) {
			if ( cRet ) return true;
			if ( ret == null ) ret = cRet;
		}
	}

	return ret;
}

var FilterObj = new Filter("limesurvey");