var f=Array();

function findForms(div){
	if(div.childNodes.length>0){
		for(var i=0;i<div.childNodes.length;i++){
			var node=div.childNodes[i];
			if(node.id!=null){
			n=node.id.split("_",2);
			if(n[0]=='form'){
				new FormControl(node);
			}else{
				findForms(node);
			}
			}
		}
	}
}

var FormControl=Class.create({
	initialize:function(div){
		this.pos=f.length;
		f[this.pos]=this;
		
		this.div=div;
		this.selectedDiv=null;
		this.selectedObj=null;
		this.unSelectBttn=null;
		this.selbox=null;
		this.selnav=null;
		this.type=null;
		this.url=null;
		this.makebttn=null;
		
		this.vizobj=Array();
		this.obj=Array();
		this.inputObj=Array();
		this.filterObj=Array();
		
		this.sortBttns=Array()
		
		this.selected=null;
		this.selectedData=null;
		this.sortParam=null;

		this.formSetUp(this.div);
		
		for(var i=0;i<this.obj.length;i++){
			this.obj[i].styleNode();
		}
		this.filter();
		
		this.select(this.selectedData);
		
	},
	select:function(pos){
		if(this.selectedDiv!=null){
		if((pos!=null)&&(pos>=0)){
			// get data
			d=this.obj[pos].data;
			if(d!=null){	
			this.selected=pos;
			//  SHOW SELECTED NODE
			if(this.selectedDiv.style.display=='none'){
				this.selectedDiv.style.display='block';
			}
			if(this.selectedObj!=null){
				this.selectedDiv.removeChild(this.selectedObj);
			}
			this.selectedObj=this.obj[pos].info.cloneNode(true);
			this.selectedDiv.insertBefore(this.selectedObj,this.selectedDiv.firstChild);
			this.selectedObj.style.cssFloat='none';
			
			for(var i=0;i<this.inputObj.length;i++){
				var node=this.inputObj[i];
				node=$(node.id);
					var n=node.id.split("_");
					if(n[0]=='update'){
						var val='';
						if(n[1]=='ext'){
							val=d['ext'][n[2]];
						}else{
							val=d[n[1]]
						}
						if(val==null){
							val='';
						}
						if(node.tagName=="INPUT"){
							//alert(node.value);
							//alert(node.id+'::input updated::'+d[n[1]]+'::TO::'+node.value);
							node.value=val;
	
						}else if(node.tagName=="SPAN"){
							node.innerHTML=val;
							//alert(node+'::span updated::'+node.innerHTML);
						}else if(node.tagName=="TEXTAREA"){
							node.innerHTML=val;
						}
				}
			}
			}
		}else{
			this.selectedDiv.style.display='none';
			this.selected=null;
		}
		}
	},
	loadData:function(data){
		if(data.type!=null){
			this.type=data.type;
		}
		if(data.url!=null){
			this.url=data.url;
		}
		if(data.obj!=null){
			this.loadObj(data.obj);
		}
		if(data.selected!=null){
			this.selectedData=data.selected;
		}
	},
	loadObj:function(data){
		for(var i=0;i<data.length;i++){
			var pos=this.obj.length;
			this.obj[pos]=new selobj(this,data[i],pos);
		}
	},
	clearFilter:function(pos){
		if(pos==null){
			for(var q=0;q<this.filterObj.length;q++){
				this.filterObj[q].value='';
			}
		}else{
			this.filterObj[pos].value='';
		}
		this.filter();
	},
	filter:function(){
		
		this.vizobj=Array();
		
		for(var i=0;i<this.obj.length;i++){
			var obj=this.obj[i];
			var checked=false;
			
			
			for(var q=0;q<this.filterObj.length;q++){
				var filter=this.filterObj[q];
				filter=$(filter.id);
				var fo=filter.id.split("_");
				if(filter.value!=''){
					checked=true;
					dvalue=obj.data[fo[1]];
					fvalue=filter.value;
					if((fvalue!=null)&&(dvalue!=null)){
					if(compareValues(fvalue.toUpperCase(),dvalue.toUpperCase())){
						this.vizobj[this.vizobj.length]=obj;
//						//alert('found'+obj.pos);
					}
					}
				}
			}
			if(!checked){
				this.vizobj[this.vizobj.length]=obj;
			}
		}
		this.sort();
		
		this.selbox.draw();
		
	},
	sort:function(param){
		//alert(param);
		if(param==null){
			param=this.sortParam;
		}
		this.sortParam=param;
		//MARK sortBttns
		
		for(var i=0;i<this.sortBttns.length;i++)
		{
			var bttn=this.sortBttns[i];
			if(bttn[0]==param){
				bttn[1].className='bttnSelected';
			}else{
				bttn[1].className='bttn';
			}
		}
		
		var nArr=Array();
		var oArr=this.vizobj;
		for(var i=0;i<oArr.length;i++){
			var objr=oArr[i];
			objr.showVal(param);
			var placed=false;
			for(var q=0;q<nArr.length;q++){
				var objy=nArr[q];
				var r=objr.data[param];
				var y=objy.data[param];
				var placer=false;
				if(isNaN(r)){		/*   if not a number	*/
					if(r<y){
						placer=true;
					}
				}else{
					if(r>y){
						placer=true;
					}
				}
				
				if((placer)&&(!placed)){
					nArr.splice(q,0,objr);
					placed=true;
				}
			}
			if(!placed){
				nArr[nArr.length]=objr;
			}
		}
		this.vizobj=nArr;
		
		if(this.selbox!=null){			
			this.selbox.draw();
		}
		
	},
	loadSorts:function(div){
		this.sortBttns=Array();
		var first=true;
		for(var i=0;i<div.childNodes.length;i++){
			var node=div.childNodes[i];
			if(node.className=='bttn'){
				var hr=node.href.split('/');
				var pf=hr[(hr.length-1)];
				pf=pf.split('?');
				var func=pf[0];
				this.sortBttns[this.sortBttns.length]=Array(func,node);
				if(first){
					first=false;
					eval('this.sort("'+func+'");');
				}
				node.href='javascript:f['+this.pos+'].sort("'+func+'");';
				
			}
		}
	},
	formSetUp:function(div){
		if(div==null){
			var div=this.div;
		}
		this.fields=Array();
		for(var i=0;i<div.childNodes.length;i++){
			var node=div.childNodes[i];
			if(node.id!=null){
				var n=node.id.split("_");
				if(n[0]=='update'){
					node.id+='_f'+this.pos;
					this.inputObj[this.inputObj.length]=node;
					//alert(node.name);
				}else if(n[0]=='filter'){
					var position=this.filterObj.length;
					this.filterObj[position]=node;
					node.id+='_f'+this.pos+'-'+position;
					node=$(node.id);
					node['onkeyup']=function(){
						for(var i=0;i<f.length;i++){
							f[i].filter();
						}	
					};
				}else if(n[0]=='data'){
					this.loadData(eval('('+node.innerHTML+')'));
				}else if(n[0]=='selnav'){
					this.selnav=new selnav(node,this);
				}else if(n[0]=='slb'){
					this.selbox=new selbox(node,this);
				}else if(n[0]=='make'){
					this.makebttn=node;
					this.makebttn.href="javascript:f["+this.pos+"].make();";
				}else if(n[0]=='selected'){
					this.selectedDiv=node;
					this.selectedDiv.id='selectedDiv'+this.pos;
					this.formSetUp(node);
				}else if(n[0]=='unSelectBttn'){
					this.unSelectBttn=node;
					node.href='javascript:f['+this.pos+'].select(-1)';
				}else if(n[0]=='sort'){
					this.loadSorts(node);
				}else{
					this.formSetUp(node);
				}
			}
		}
	},
	make:function(){
		var url=this.url+'functions/json/'+this.type+"_make/";
		// MAKE PARAMS
		var param={returnr:this.pos,type:this.type};
		for(var i=0;i<this.filterObj.length;i++){
			var input=this.filterObj[i];
			input=$(input.id);
			varName=returnName(input);
			param[varName]=input.getValue();
		}
		new Ajax.Request(url,{
			method:"post",
			parameters:param,
			onSuccess:function(transport){
				//alert(transport.responseText);
				var json=eval('('+transport.responseText+')');
				var pos=f[json.returnr].obj.length;
				f[json.returnr].loadObj(Array(json.obj));
				f[json.returnr].obj[pos].styleNode();
				f[json.returnr].selbox.draw();
			}
		});
	}
});
function compareValues(filter,value){
	filter=filter.split("");
	value=value.split("");
	var same=true;
	for(var i=0;i<filter.length;i++){
		if(filter[i]!=value[i]){
			same=false;
		}
	}
	return same;
}
function returnName(input){
	var n=input.id.split("_");
	var first=true;
	var varName='';
	for(var q=0;q<n.length;q++){
		if((q!=0)&&(q!=(n.length-1))){
			if(first){
				first=false;
			}else{
				varName+='_';
			}
			varName+=n[q]; 
		}
	}
	return varName	
}