var debug=false;

function IsNumeric(sText){
   var ValidChars = "0123456789.";
   var IsNumber=true;
   for (i = 0; i < sText.length && IsNumber == true; i++) 
      if (ValidChars.indexOf(sText.charAt(i)) == -1) 
         IsNumber = false;
   return IsNumber;
}

var selects = new Object();
var currentValues = new Object(); 
jQuery(document).ready(function(){
	jQuery("select[@name^='id[']").each(function(){
		selects[this.name] = new Array();
		var opts = this.options;
		for (var i=0,len=opts.length; i<len; i++){
			selects[this.name][i] = new Object();
			selects[this.name][i]['value'] = opts[i].value;
			selects[this.name][i]['text'] = opts[i].text;
			selects[this.name][i]['enabled'] = true;			
			
		}
		currentValues[this.name] = jQuery(this).val();
		jQuery(this).bind("change",changeHandler);
	});
	changeHandler(null);
});

function clearDropDowns() {
	jQuery("select[@name^='id[']").each(function() {
		var opts = this.options;	
		for (var i=opts.length,len=opts.length; i>=0; i--) {
			this.remove(i);
		}
	});
}

function drawDropDowns() {
    jQuery("select[@name^='id[']").unbind("change",changeHandler);
	clearDropDowns();
	var changes = false;
	jQuery("select[@name^='id[']").each(function() {
		var opts = this.options;	
		var foundSelected = false;
		for (var i=0,len=selects[this.name].length; i<len; i++) {
			if (selects[this.name][i]['enabled']) {
				var o = document.createElement("OPTION");
				o.value = selects[this.name][i]['value'];
				o.text = selects[this.name][i]['text'];
				if (currentValues[this.name] == o.value) { 
					o.selected = "selected"; 
					foundSelected = true; 
				}
				try {
					this.add(o, opts[i]); 
				}
				catch(ex) {
					this.add(o,i);
				}
			} 
		}
		
		currentValues[this.name] = jQuery("select[@name='"+this.name+"']").val();
		
		if (foundSelected == false) { 
			changes = true; 
		} 
	});
	return changes;
}


function changeHandler(e) {
	csd=new Date(); 
	sd=new Date();
	
    if (!actions || !conditions) return;
	
	if (e != null) {
		jQuery("select[@name^='id[']").each(function(){
			currentValues[this.name] = jQuery(this).val();
		});											 
	}
							  		
	for (rules_id in conditions) { 			
		var evalStr = '';
		for (var i=0,len=conditions[rules_id].length; i<len; i++) {
			var id = conditions[rules_id][i]['id'];
			var selectedValue = jQuery("#tab_attrib-"+id).val();
			evalStr += '(';
			var started=false;
			for (var ii=0,len2=conditions[rules_id][i]['values'].length; ii<len2; ii++) {
				if (started) evalStr += " || ";
				else started=true;
				evalStr += selectedValue + " == " + conditions[rules_id][i]['values'][ii];
			}
			evalStr += ')';
			if (conditions[rules_id][i]['condition'] == "AND") evalStr += ' && ';
			else if (conditions[rules_id][i]['condition'] == "OR") evalStr += ' || ';
			else break;
		}
		
		//ed = new Date();
		//if (debug){document.getElementById('siteinfoIP').innerHTML=document.getElementById('siteinfoIP').innerHTML+'Time to build eval str: '+((ed.getTime()-sd.getTime())/1000)+'<br />';}
		
		if(eval(evalStr)) {
			//sd=new Date();
			for (var i=0,len=actions[rules_id].length; i < len; i++) {
				$id = 'id['+actions[rules_id][i]['id']+']';				
				
				if (debug){document.getElementById('siteinfoIP').innerHTML=document.getElementById('siteinfoIP').innerHTML+$id;}
				
				if (selects[$id]) {
					for (var iii=0,len3=selects[$id].length; iii<len3; iii++) {
						selects[$id][iii]['enabled'] = true;
					}

					switch (actions[rules_id][i]['action']) {
						case 'REMOVE':	
							//sd1=new Date();
							for (var ii=0,len2=actions[rules_id][i]['values'].length; ii<len2; ii++) {
								for (var iii=0,len3=selects[$id].length; iii<len3; iii++) {
									if (selects[$id][iii]['value'] == actions[rules_id][i]['values'][ii]) {
										selects[$id][iii]['enabled'] = false;
									} 
								}
							}
							//ed1=new Date(); 
							//if (debug){document.getElementById('siteinfoIP').innerHTML=document.getElementById('siteinfoIP').innerHTML+'exe action: '+((ed1.getTime()-sd1.getTime())/1000)+'<br />';}						
							break;
						default:
							break;
					}
				}
			}
			//ed=new Date(); 
			//if (debug){document.getElementById('siteinfoIP').innerHTML=document.getElementById('siteinfoIP').innerHTML+'Time to apply rules: '+((ed.getTime()-sd.getTime())/1000)+'<br />';}
		} 
	}
	if (drawDropDowns()) { // change occured
		changeHandler();
	} 
	jQuery("select[@name^='id[']").trigger("change");
	jQuery("select[@name^='id[']").bind("change",changeHandler);
	ced=new Date();
	if (debug){debugMsg('Total onchange time: '+((ced.getTime()-csd.getTime())/1000)+'<br />');}
}

function debugMsg(msg) {
	document.getElementById('siteinfoIP').innerHTML=document.getElementById('siteinfoIP').innerHTML+msg;
}
