// JavaScript Document

function buildParams(){
	this.updateURL=gsa.updateURL;
	this.insertURL=gsa.insertURL;
	this.titlesURL=gsa.titlesURL;
	this.delURL =  gsa.delURL;
	this.infoURL = gsa.infoURL;
	this.tagname='';
	this.params='';
	this.paramct=0;
	this.z;
	this.verifyx=[];
	this.verifyresult=true;
	this.ckverify=[];
	this.verifythem=false;
	this.errormess=[];
	this.errors='';
	this.finalmessage='';
	this.table='';
	var keyid;
	var multipleForms = false;
	var multipleFormVal = 0;
	////  setup ////
	this.setup = function(tablex,key,tagnamex,insertMultiple,multipleValue){
		if(key)keyid=key; 
		if(tablex)this.table=tablex;
		this.tagname = tagnamex;
		var elem; var i=0; var ix=0;
		if(insertMultiple){
			//  multiple forms
			if(!multipleValue) { alert('5th parameter is missing. How many forms are there'); return; }
			multipleForms = true;
			multipleFormVal = multipleValue;
			for(ix=0;ix<multipleValue.length;ix++){
				this.z[ix] = [];
				if(!document.getElementsByName(tagnamex+"_"+ix)){ alert('tag not found '+tagnamex+"_"+ix); return; }
				this.z[ix] = document.getElementsByName(tagnamex+"_"+ix);
				for(i=0;i<this.z[ix].length;i++){
					elem = this.z[ix][i];
					var shortId = elem.id.replace(this.table+"_",'');
					if(this.paramct==0){
						if(elem.value){
							if(elem.id!=keyid)this.params = this.params+ix+"_"+shortId+"="+elem.value;
						}
					}else{
						if(elem.value){ if(elem.id!=keyid)this.params = this.params+"&"+ix+"_"+shortId+"="+elem.value; }
					}
					var elemShortArray = elem.id.split('_');
					var elemShort = elemShortArray[1];
					if(this.ckverify[elemShort] && elem.value=='')this.verifyx.push(elem.id);
					this.paramct++;
				}
			}//  //  multiple forms
		}else{
			//  one form
			if(tagnamex){
				this.z = document.getElementsByName(tagnamex);
				for(i=0;i<this.z.length;i++){
					elem = this.z[i];
					var shortId = elem.id.replace(this.table+"_",'');
					if(this.paramct==0){
						if(elem.value){
							if(elem.id!=keyid)this.params = this.params+shortId+"="+elem.value;
						}
					}else{
						if(elem.value){ if(elem.id!=keyid)this.params = this.params+"&"+shortId+"="+elem.value; }
					}
					if(this.ckverify[elem.id] && elem.value=='')this.verifyx.push(elem.id);
					this.paramct++;
				}
			}
			//  //  one form
		}
		
	}//  //  setup
	this.addParam = function(x,y){
		var shortId = x.replace(this.table+"_",'');
			if(this.paramct==0){
				this.params = this.params+shortId+"="+y;
				
			}else{
				this.params = this.params+"&"+shortId+"="+y;
			}
			this.paramct++;
	}//  //  addParams
	this.getParam = function(x){
		if(this.paramct==0){
				var z = getValue(x);
				this.params = x+"="+z;
				
			}else{
				this.params = this.params+"&"+x+"="+z;
			}
			this.paramct++;
	}
	////  reset forms  ////
	this.resetForm=function(){
		var i=0; var ix=0;
		if(multipleForms){
			for(ix=0;ix<this.multipleFromVal.length;ix++){
				for(i=0;i<this.z[ix].length;i++){
					elem = this.z[ix][i];
					elem.value='';
				}
			}
		}else{
			for(i=0;i<this.z.length;i++){
				elem = this.z[i];
				elem.value='';
			}
		}
	}//  //  resetForm
	////  insert  ////
	this.insert = function(willreset,cb,finmess,usePost,cblater){
		//  verify
		if(this.verifyx.length>0){
			for(i=0;i<this.verifyx.length;i++){
				var er = document.getElementById(this.verifyx[i]);
				er.style.borderColor='#FF0000';
				er.style.borderStyle='solid 1px';
			}
			return;
		}//  //  verify
		//  orient
		this.addParam('table',this.table);
		//  //  orient
		//  after action
		if(finmess)gsa.passval.done=finmess;
		if(willreset)this.resetForm();
		if(cb) gsa.passval.callback = cb;
		//  //  after action
		//  action
		if(usePost){
			if(cblater){
				gsa.passval.callback=cblater;
				ajax.post(this.insertURL,this.params,gsa.callback.crap);
			}else{
				gsa.passval.callback='';
				ajax.post(this.insertURL,this.params,gsa.callback.crap);
			}
		}else{
			var url = this.insertURL+"?"+this.params;
			if(cblater){
				gsa.passval.callback=cblater;
				ajax.get(url,gsa.callback.crap);
			}else{
				gsa.passval.callback='';
				ajax.get(url,gsa.callback.crap);
			}
		}
		//  //  action
	}	//  //  insert
	////  update  ////
	this.update = function(willreset,cb,finmess,usePost,keyisval,cblater,testit){
		if(cblater)gsa.passval.callback=cblater;
		//  verify
		if(this.verifyx.length>0){
			for(i=0;i<this.verifyx.length;i++){
				var er = document.getElementById(this.verifyx[i]);
				er.style.borderColor='#FF0000';
				er.style.borderStyle='solid 1px';
			}
			return;
		}//  //  verify
		//  orient
		
		var shortId = keyid.replace(this.table+"_",'');
		this.addParam('table',this.table);
		this.addParam('where1',shortId);
		if(keyisval){
			this.addParam('where2',keyisval);
		}else{
			this.addParam('where2',document.getElementById(keyid).value);
		}
		//  //  orient
		//  action
		if(testit){
			setError(this.updateURL+' '+this.params); cblater('|x|done|x|'); return;
		}
		if(usePost){
			ajax.post(this.updateURL,this.params,gsa.callback.crap);
		}else{
			var url = this.updateURL+"?"+this.params;
			if(cblater){
				ajax.get(url,cblater);
			}else{
				ajax.get(url,gsa.callback.crap);
			}
		}
		//  //  action
		//  after action
		if(finmess)gsa.passval.done=finmess;
		if(willreset)this.resetForm();
		if(cb) cb();
		//  //  after action	
	}//  //  update
	////  delete  ////
	this.del = function(willreset,cb,finmess){
		//  orient
		var shortId = keyid.replace(this.table+"_",'');
		this.addParam('table',this.table);
		this.addParam('where1',shortId);
		if(!document.getElementById(keyid).value || document.getElementById(keyid).value==''){
			alert('keyid missing'); return;
		}else{
			this.addParam('where2',document.getElementById(keyid).value);
		}
		//  //  orient
		//  after action
		if(finmess)gsa.passval.done=finmess;
		if(willreset)this.resetForm();
		if(cb) gsa.passval.callback = cb;
		//  //  after action
		//  action
		ajax.post(this.delURL,this.params,gsa.callback.crap);
		//  //  action
		
	}//  //  delete
	
		
	//// set verify ////
	this.setVerify=function(x){
		this.ckverify[x]=true;
	}//  //  set verify
}//  //  buildParams
function sqlAction(table,key){
	if(!gsa.sqlActions)gsa.sqlActions=[];
	if(!gsa.sqlActionCt)gsa.sqlActionCt=0;
	this.table = table;
	this.key='';
	if(key)this.key=key;
	this.params=[];
	this.addParam = function(x,val){
		var result = x+"="+val;
		this.params.push(result);
	}//  //  addParam
	this.update = function(id,cb,where1,where2){
		var cbval = -1;
		this.params.push("set="+this.table);
		if(cb){
			cbval = 'x'+gsa.sqlActionCt;
			gsa.sqlActionCt++;
			gsa.sqlActions[cbval]=cb;
		}
			
		if(id) {
			this.params.push("where1="+this.key);
			this.params.push("where2="+id);
		}else{
			if(where1){
				this.params.push("where1="+where1);
				this.params.push("where2="+where2);
			}else return;
		}
		var url = '../Scripts/update.php?';
		ajax.get(url+this.params.join("&"),gsa.callback.sql,cbval);
		delete this.params;
		this.params=[];
	}//  //  update
	this.insert = function(cb){
		var url = '../Scripts/insert.php?';
		var cbval = -1;
		if(cb){
			cbval = 'x'+gsa.sqlActionCt;
			gsa.sqlActionCt++;
			gsa.sqlActions[cbval]=cb;
			this.params.push("callback="+cb);
		}
		this.params.push("table="+this.table);
		
		gsa.cbval = cbval;
		ajax.get(url+this.params.join("&"),gsa.callback.sql);
		delete this.params;
		this.params=[];
	}//  //  insert
	this.deleteEntry = function(id,cb,where1,where2){
		var cbval = 'none';
		this.params.push("set="+this.table);
		if(cb){
			cbval = 'x'+gsa.sqlActionCt;
			gsa.sqlActionCt++;
			gsa.sqlActions[cbval]=cb;
		}
			
		if(id) {
			this.params.push("field="+this.key);
			this.params.push("id="+id);
		}else{
			if(where1){
				this.params.push("field="+where1);
				this.params.push("id="+where2);
			}else return;
		}
		var url = '../Scripts/delete2.php?';
		ajax.get(url+this.params.join("&"),gsa.callback.sql,cbval);
		delete this.params;
		this.params=[];
	}
	
}
gsa.callback.sql = function(x){

	if(x.indexOf('|x|')!=-1){
		var c = x.split('|x|');
		var call = trim(c[1]);
		alert(call);
		var z = call+"(\""+x+"\")";
		eval(z);
	}

}	

	
gsa.callback.crap = function(x){
	
	if(gsa.passval.callback) {gsa.passval.callback(x); }
	gsa.passval.callback='';
}
//  //  sql actions

function buildForm(){
	this.table = '';
	this.formName='';
	this.showList=[];
	this.values=[];
	this.fieldType=[];
	this.result='';
	this.button = '';
	this.tag='';
	var itemct=0;
	this.selectInfo=[];
	//  //  variables
	this.setup=function(tablex,buttonx,namex,tagname){
		this.table = tablex;
		this.tag = tagname;
		this.button = buttonx;
		this.formName=namex;
		gsa.passval.formName = namex;
	}//  //  setup
	this.getTitles = function(){
		ajax.get(titlesURL+'?table='+this.table,gsa.callback.getTitles,this.formName);
	}//  //  gettitles
	this.display = function(orig,typex,dis,value,infox){
		if(infox)this.selectInfo[orig]=infox;
		if(dis)  this.showList[orig]=dis;
		if(typex)this.fieldType[orig]=typex;
		if(value)this.values[orig]=value;
	}//  //  display
	this.createForm=function(infox){
		var clearStart = [];var info = []; var i=0;
		if(!infox)return;
		if(infox=='')return;
		clearStart = infox.split('|start|');
		if(clearStart[1]=='error'){ alert('no table'); return; }
		info = clearStart[1].split('|x|');
		this.result="<table><tr><td><table>";
		for(i=0;i<info.length-1;i++){
			var val = info[i];
			var id = this.table+"_"+val;
			var setval = '';
			var setType = this.fieldType[val];
			var displayName = val;
			if(this.showList[val]) displayName = this.showList[val];
			if(this.values[val]) setval = this.values[val];
				if(i!=0){ 
					if(setType!='exclude'){
						switch(setType){
							case 'textarea':  	this.addTextArea(id,setval,displayName); break;
							case 'date':  		this.addDate(id,setval,displayName); break;
							case 'select':		this.addSelect(this.selectInfo[val],id,setval,displayName); break;
							default: 			this.addInput(setType,id,setval,displayName); break;
						}
					}
				}else{
					this.result=this.result+"<input type='hidden' id='"+id+"' />";
				}
				if(itemct>=10){
					this.result=this.result+"</table></td><td><table>";
					itemct=0
				}
		}
		this.result=this.result+"</td></tr></table></td></tr><tr><td><input type='button' onclick='"+this.button+"' value='Save' /></td></tr></table>";
		showm(this.result);
	}//  //  create form
	this.addInput = function(type,id,value,show){
		itemct++;
		if(type=='hidden'){
			this.result = this.result+"<input type='hidden' id='"+id+"' value='"+value+"' name='"+this.tag+"' />";
		}else{
			this.result = this.result+"<tr align='left'><td>"+show+": </td><td><input type='text' id='"+id+"' value='"+value+"' name='"+this.tag+"'/></td></tr>";
		}
	}//  //  add input
	this.addTextArea = function(id,setval,displayName){
		this.result = this.result+"<tr><td>"+displayName+"</td></tr><tr><td colspan='2'><textarea id='"+id+"' cols='30' rows='10'  name='"+this.tag+"'>"+id+"</textarea></td></tr>";
		itemct=itemct+3;
	}//  //  add textarea
	this.create=function(){
		this.getTitles();
	}//  //  create
	this.addSelect = function(info,id,selected,show){
		itemct++;
		this.result = this.result+"<tr align='left'><td>"+show+": </td><td><select id='"+id+"'  name='"+this.tag+"'>";
		for(i=0;i<info.length;i++){
			var selectOption='';
			//if(selected) { if(selected==info[i].val) selectOption=" selected=selected "; }
			this.result = this.result+"<option value='"+info[i].val+"' "+selectOption+" >"+info[i].name+"</option>";
		}
		this.result = this.result+"</select></td></tr>";
	}//  //  add select
	this.addDate = function(id,value,show){
		itemct++;
		this.result = this.result+"<tr align='left'><td>"+show+": </td><td><input type='text' id='"+id+"' value='"+value+"' name='"+this.tag+"'/>";
		this.result = this.result+"<a href=\"javascript:NewCal('"+id+"','MMddyyyy')\"><img src=\"mylibrary/cal.gif\" width=\"16\" height=\"16\" border=\"0\" alt=\"Pick a date\"></a></td></tr>";
		
	}//  //  add date
}//  //  buildform

function createSelect(){
	this.result=[];
	this.display=[];
	this.show=[];
	var ct = 0;
	this.add = function(valx,namex){
		this.result[ct]=[];
		this.result[ct].val=valx;
		if(namex){
			this.result[ct].name = namex;
			this.display.push("<option value='"+valx+"' >"+namex+"</option>");
		}else{
			this.result[ct].name = valx;
			this.display.push("<option value='"+valx+"' >"+valx+"</option>");
		}
		ct++;
	}//  //  add
	this.preset = function(table,theitem,name){
		var url = "functions/catagory.php?table="+table+"&theitem="+theitem;
		ajax.get(url,gsa.callback.selectPreset,name);
	}//  //  preset
	this.create = function(wht,emptyVal){
		var x = [];
		if(emptyVal) x.push("<option value=''></option>");
			
		for(var i=0; i<this.result.length; i++){
			if(wht){
				if(this.result[i].val==wht && wht!=''){
					x.push("<option value='"+this.result[i].val+"' selected='selected' >"+this.result[i].name+"</option>");
				}else{
					x.push("<option value='"+this.result[i].val+"' >"+this.result[i].name+"</option>");
				}
			}else{
				x.push("<option value='"+this.result[i].val+"' >"+this.result[i].name+"</option>");
			}
		}
		return x.join("");
	}//  //  create

}//  //  create select
gsa.callback.selectPreset = function(x,name){
		var info = []; info = x.split('|x|');
		for(i=1;i<info.length;i++){
			gsa.selectPresets[name].add(info[i],info[i]);
		}
		gsa.selectionPresets[name]=gsa.selectPresets[name].create();
	
}//  //  presets callback
//  //  create select

function createFrom(){
	this.table = '';
	this.name = '';
	this.button = '';
	this.tagname = '';
	this.col = 0;
	this.result="<table>";
	var colct = 0;
	this.setup = function(tablex,buttonx,namex,tagnamex,columns){
		this.table = tablex;
		this.button = buttonx;
		this.name = namex;
		this.tagname = tagnamex;
		this.col = columns;
	}//  //  setup
	this.add = function(nameField,type,dis,setval,selectInfo,size,columns,rows){
		if(colct==0){
			this.result=this.result+"<tr>";
		}else{
			this.result=this.result+"<td style='width:10px;'></td>";
		}
		var displayName = nameField;
		if(dis)displayName = dis;
		var id = this.table+"_"+nameField;
		switch(type){
			case 'textarea':  	this.addDate(id,setval,displayName,columns,rows); break;
			case 'date':  		this.addTextArea(id,setval,displayName); break;
			case 'select':		this.addSelect( selectInfo[setval],id,setval,displayName); break;
			default: 			this.addInput(type,id,setval,displayName); break;
		}//  //  type dispatcher
		colct++;
		if(colct==this.col || type=='textarea'){
			colct=0;
			this.result=this.result+"</tr>";
		}//  //  after
		
	}//  //  add
	this.addInput = function(type,id,setval,displayName){
		this.result=this.result+"<td>"+displayName+"</td><td><input type='"+type+"' value='"+val+"' id='"+id+"' name='"+this.tagname+"' /></td>";
	}//  //  add input
	this.addTextArea = function(id,setval,displayName,columns,rows){
		if(colct!=0)this.result=this.result+"</tr>";
		var c='30'; var r='10';
		if(columns)c=columns;
		if(rows)r=rows;
		this.result = this.result+"<tr><td>"+displayName+"</td></tr><tr><td colspan='"+this.col+"'>";
		this.result = this.result+"<textarea id='"+id+"' cols='"+c+"' rows='"+r+"'  name='"+this.tag+"'>"+id+"</textarea></td>";
	}//  //  add textarea
	this.addSelect = function(info,id,selected,show){
		this.result = this.result+"<tr align='left'><td>"+show+": </td><td><select id='"+id+"'  name='"+this.tag+"'>";
		for(i=0;i<info.length;i++){
			var selectOption='';
			if(selected) { if(selected==info[i].val) selectOption=" selected=selected "; }
			this.result = this.result+"<option value='"+info[i].val+"' "+selectOption+" >"+info[i].name+"</option>";
		}
		this.result = this.result+"</select></td></tr>";
	}//  //  add select
	this.create = function(){
		this.result=this.result+"</table>";
		return this.result;
	}//  //  create
}//  //  create form

gsa.callback.getTitles = function(x,name){
	//gsa.passval.getTitles(val);
	//showm(gsa.passval.formName);
	//eval(gsa.passval.formName+".createForm("+val+")");
	if(x=='' || !x) {alert('no info returned from ajax '+name); return;}
	gsa.forms[name].createForm(x);
}//  //  get titles

function updateSimple(tableName,keyName,keyVal,url,formName,cblater){
	var elems = [];
	var para = new buildParams();
	para.addParam('table',tableName);
	para.addParam('where1',keyName);
	para.addParam('where2',keyVal);
	if(!document.getElementsByName(formName)){ alert('tag not found '+tagnamex+"_"+ix); return; }
	elems=document.getElementsByName(formName);
	for(var i=0;i<elems.length;i++){
		var elem = elems[i].id.replace(tableName+"_",'');
		para.addParam(elem,Urlset.encode(elems[i].value));
	}
	ajax.get(url+'?'+para.params,gsa.callback.updateSimple);
}
gsa.callback.updateSimple = function(x){
	if(gsa.passval.callback){
		var cb = gsa.passval.callback;
		eval(cb);
	}
}

function insertSimple(tableName,url,formName,cblater,cbdirect){
	var elems = [];
	var para = new buildParams();
	para.addParam('table',tableName);
	if(!document.getElementsByName(formName)){ alert('tag not found '+tagnamex+"_"+ix); return; }
	elems=document.getElementsByName(formName);
	for(var i=0;i<elems.length;i++){
		var elem = elems[i].id.replace(tableName+"_",'');
		para.addParam(elem,Urlset.encode(elems[i].value));
	}
	if(cbdirect)ajax.get(url+'?'+para.params,cbdirect);
	else
	ajax.get(url+'?'+para.params,gsa.callback.insertSimple);
}
gsa.callback.insertSimple = function(x){
	if(gsa.passval.callback){
		var cb = gsa.passval.callback;
		eval(cb);
	}
}





