var Closeable = Class.create();
Closeable.prototype = {
	initialize : function(parent, callback) {
		this.parent = parent;		
		this.callback = callback;

		this.trigs = Array();
		this.targs = Array();
		this.actuators = Array();

		this.trigs = this.childrenWith(parent, "ClTrig");

		for(var i=0; i< this.trigs.length; i++){
			this.actuators[i] = this.trigs[i].getElementsByTagName("input")[0];		
			if(this.actuators[i].type == "checkbox"){
				this.targs[i] = this.childrenWith(parent, "ClTarg");
			}else{
				this.targs[i] = document.getElementsByClassName(this.actuators[i].value);
			}
			Event.observe(this.trigs[i], "click", this.update.bindAsEventListener(this));
		}
		this.update(null);
	},

	update : function(e) {
		var c = 0;

		if(this.trigs.length == 1){
			if (this.actuators[0].checked) {			
				this.parent.addClassName("optopen");
				this.targs[0][0].removeClassName("closed");
			} else {				
				this.parent.removeClassName("optopen");
				this.targs[0][0].addClassName("closed");			
				this.clearInnerFields($A(this.targs[0][0].getElementsByTagName("input")));
			}

		}else {
			this.parent.removeClassName("optopen");
			for(var i=0; i<this.trigs.length; i++){				
				for(var j=0; j<this.targs.length; j++){
					if(this.targs[i][j]){
						this.targs[i][j].addClassName("closed");
					}
				}
			}
			for(var i=0; i<this.trigs.length; i++){
				for(var j=0; j<this.targs.length; j++){
					if(this.actuators[i].checked && this.targs[i] && this.targs[i][j]){
						this.parent.addClassName("optopen");
						this.targs[i][j].removeClassName("closed");
						c = i;
					}
				}
			}			
		}
		// var $content = $("outer").innerHTML;
		// $("outer").innerHTML = $content;
		// if ($blah) alert($content);
		if(this.callback){
			this.callback(this.actuators[c]);

		}

	},

	clearInnerFields: function(arr){
		for(var i=0; i<arr.length; i++){
			if(arr[i].hasClassName("CloseablePreserve")){
				continue;
			}
			if(arr[i].type == "checkbox"){
				arr[i].checked = false;
			}else if(arr[i].type == "text"){
				arr[i].value = "";
			}
		}
	},



	// fixes for broken scriptaculous functions
	// (childrenWith at least is fixed in latest version, not part of jslib)
	childrenWith : function(element, className) {

		var children = $(element).getElementsByTagName('*');
		var elements = new Array();
	
		for (var i = 0; i < children.length; i++) {
					
			if (Element.hasClassName(children[i],className)){
				elements.push(children[i]);
			}
		}
		return elements;
	}

}



var ChboxMultiselect = Class.create();
ChboxMultiselect.prototype = {
	initialize : function(trig) {
		this.trig = trig;

		Event.observe(this.trig, "click", this.update.bindAsEventListener(this));
		this.chboxes = this.trig.parentNode.getElementsByTagName("input");
		this.update();
	},


	update: function(){

		for(var i=1; i< this.chboxes.length; i++){
			var chbox = this.chboxes[i];

			if(this.trig.checked){
				chbox.checked = true;
			}else {
				chbox.checked = false;
			}
			
		}
	}

}

function initChboxMultiselect() {
	var elements = document.getElementsByClassName("ChboxMultiselect");
	for (i = 0 ; i < elements.length ; i++) {
		new ChboxMultiselect(elements[i]);
	}
}


function initCloseable() {
	var elements = document.getElementsByClassName("Closeable");
	for (i = 0 ; i < elements.length ; i++) {
		new Closeable(elements[i]);
	}
}


function handleSpectralBands(){



	if($("c_scan_length2").checked){
		$("o_spectral_bands").value = "1:246";
	}else {
		$("o_spectral_bands").value = "1:143";
	}
	if($("o_spectral_bands_all").checked){
		Form.Element.disable($("o_spectral_bands"))
	}else{
		Form.Element.enable($("o_spectral_bands"))
	}
}

function handleIrtmBands(all){
	if($("o_irtm").checked){
		$("o_irtm_bands_cnt").removeClassName("hidden");
	}else{
		$("o_irtm_bands_cnt").addClassName("hidden");
	}

	$("o_irtm_bands").value = "1:5";

	if($("o_irtm_bands_all").checked){
		Form.Element.disable($("o_irtm_bands"))
	}else{
		Form.Element.enable($("o_irtm_bands"))
	}
}

function init() {
	initCloseable();
	initChboxMultiselect();

	Event.observe($("o_spectral_bands_all"), "click", handleSpectralBands);
	Event.observe($("o_irtm_bands_all"), "click", handleIrtmBands);
	Event.observe($("o_irtm"), "click", handleIrtmBands);


	if($("o_spectral_bands").value == ""){
		handleSpectralBands();
	}
	if($("o_irtm_bands").value == ""){
		handleIrtmBands();
	}
}

window.onload = init;
