var CustomCallback;
var AJAXCallback
var GLOBAL_OBJS = {};
var currentPage;
if(currentPage == undefined){
	currentPage = false;
}

if(typeof(YAHOO) != "undefined"){
	YAHOO.util.Event.onAvailable('page_loaded',setupSubGenreFunctionality);
}

function debug(msg){
	if(window.location.search.indexOf("debug") == -1)return;
	if(byid("debugwindow") == undefined){
		var div = document.createElement("div");
		div.id = "debugwindow";
		div.style.background = "white";
		div.style.width = "200px";
		div.style.textAlign="left";
		div.style.padding="5px";
		div.style.border="solid 2px green";
		div.style.position="absolute";
		div.style.top="0px";
		div.style.left="0px";
		document.body.appendChild(div);
	}
	byid("debugwindow").innerHTML+=msg+"<br>";
}

function disableEnterKey(e)
{
     var key;

     if(window.event)
          key = window.event.keyCode;     //IE
     else
          key = e.which;     //firefox

     if(key == 13)
          return false;
     else
          return true;
}

function TokenError(){
	alert("AJAX error: you have no ajax token!");
}

function getDelButton(id,func){
	return "<a href='javascript:"+func+"(\""+id+"\");'><img src='images/delete.png' /></a>";
}

function setupSubGenreFunctionality(){
	var el_array = [document.getElementsByName("genre"),document.getElementsByName("filter_genre")];
	
	for(var elements in el_array){
		for(var elid in el_array[elements]){
			var el = el_array[elements][elid];
			if(typeof(el) == "object"){
				if(el.onchange){
					YAHOO.util.Event.addListener(el,"change",function(){filterSubGenre(this.value,true);});
				}
				else{
					el.onChange = function(){alert(1234);filterSubGenre(this.value,true);};
				}
				
			}
		}
	}
}

function filterSubGenre(genre,resetSelected){
	
	/*
	var el_subgenres = byid('sub_genre');
	if(typeof(el_subgenres) == 'undefined')return;
	if(el_subgenres == undefined)return;
	*/
	
	var arr_subgenres = [document.getElementsByName('sub_genre'), document.getElementsByName('filter_sub_genre')];
	
	if(typeof(genre) == 'undefined' || genre == undefined){
		var el_genres = byid('genre');
		if(typeof(el_genres) == 'undefined')return;
		genre = el_genres.value;
	}
	
	for(var arr in arr_subgenres){
		el_subgenres = arr_subgenres[arr];
		for(var element in el_subgenres){
			var el = el_subgenres[element];
			
			if(typeof(el) != "object")continue;
			
			opts = el.options;
			for(var opt in opts){
				var o = opts[opt];
				if(typeof(o) != "object" || o.value.indexOf(sub_genre_seperator) < 0){
					continue;
				}
				var parent_genre = o.value.split(sub_genre_seperator);
				if(parent_genre[0] == genre || o.value == ""){
					o.className="";
				}
				else{
					o.className="hidden";
				}
			}
			
			if(resetSelected){
				el.selectedIndex = 0;
			}
		}
	}
}

function AJAXResponseError(a){
	//alert("AJAX error: general error!");
}

function getAjaxResponseObj(responseText){
	responseText = responseText.split("AJAX OBJ:");
	responseText = responseText[1];
	responseObj = YAHOO.lang.JSON.parse(responseText);
	return responseObj;
}

function timeSub(time, time2, returnstr){
	time = timeToMinutes(time);
	time2 = timeToMinutes(time2);
	
	time3 = (time - time2);
	
	if(returnstr === false){
		return time3;
	}
	
	return timeToString(time3);
}

function copyToClipBoard(rSource){ 
	rSource.select();
	if(window.clipboardData){ 
		var r=clipboardData.setData('Text',rSource.value); 
		return 1; 
	} 
	else return 0 
} 

function timeAdd(time, time2, returnstr){
	
	time = timeToMinutes(time);
	time2 = timeToMinutes(time2);
	
	time3 = time + time2;
	
	
	
	if(returnstr === false){
		return time3;
	}
	
	return timeToString(time3);
	
}

function timeToMinutes(time){
	//alert("original time : " + time);
	var ampm="";
	if(time.length > 6){ampm = time.substr(5);ampm = ampm.replace(" ","")};
	time = time.substr(0,5);
	time = time.split(":");
	if(ampm == "pm" || ampm=="PM"){time[0] = parseInt(time[0],10) + 12};
	time = (parseInt(time[0],10)*60) + parseInt(time[1],10);
	//alert("new time : " + time);
	return parseInt(time);
}

function timeToString(time){
	var min = time%60;
	var hour = Math.floor(time/60)
	var ampm = "am";
	if(hour >= 24){
		hour -= 12;
		ampm = "am";
	}
	while(hour > 12){
		var h = hour;
		hour -= 12;
		if(ampm == "am")ampm = "pm";
		else ampm = "am";
	}
	
	if(min < 10)min = "0"+min;
	if(hour < 10)hour = "0"+hour;
	
	return hour+":"+min+" "+ampm;
}

function populateTable(table,query){
	//alert("POPTAB");
	table.getDataSource().liveData = query;
	table.getDataSource().sendRequest("&rand="+Math.random(), {success:emptyTable.onDataReturnInitializeTable, failure:emptyTable.onDataReturnInitializeTable, scope:emptyTable});
}

function populateHTMLElement(el,vals){
	if(typeof(el) == "string")el = byid(el);
	if(typeof(vals) == "string")vals = YAHOO.lang.JSON.parse(vals);
	var nodes = el.childNodes;

	for(var node in nodes){
		var n = nodes[node];
		if(n.title && vals[n.title]){
			n.innerHTML = vals[n.title];
		}
		if(n.childNodes != undefined && n.childNodes.length > 0){
			populateHTMLElement(n,vals);
		}
	}
	
}

function truncURLLink(url){
	var webprefix = "";
	if(url.indexOf("http://") == -1)webprefix = "http://";
	url = "<a target='_blank' href='"+webprefix+url+"'>"+url.substr(0,15)+"...</a>";
	return url;
}

function stripHTML(str){
	var re= /<\S[^><]*>/g;
	return str.replace(re,"");
}

function populateForm(form, vals, strip){
	var values;
		
	if(typeof(vals) != "object")var values = YAHOO.lang.JSON.parse(vals);
	else values = vals;
	
	var s = "";
	for(var val in values){
		if(values[val] ==null)continue;
		//alert(val+" "+values[val]);
		if(form.elements[val] != undefined){
			var element = form.elements[val];
			//if element is a SELECT input
			if(element.options != undefined){
				//loop through select options to look for the matching value
				for(var option in element.options){
					var opt = element.options[option];
					//look for a match
					
					if((opt.value == values[val] || (!values[val].toString().indexOf(":") && parseInt(opt.value,10) == parseInt(values[val],10)))){
						element.selectedIndex = opt.index;
						//if(element.onchange)element.onchange(null);
						break;
					}
				}
			}
			
			else if(element.type == "checkbox"){
				if (values[val] == 1 || values[val] == "1" || values[val] == "on" || values[val] == true || values[val] == "true"){
					element.checked = true;
				}
				else{
					element.checked = false;
				}
			}
			else{
				element.value = htmlUnescape(values[val]);
				if(strip)element.value = stripHTML(element.value);
			}
		}
	}
	//alert(s);
}

function clearForm(form){
		for(var el in form.elements){
			var element = form.elements[el];
			if(element.type == "button" || element.type == "hidden")continue;
			//if element is a SELECT input
			if(element.type == "checkbox"){
				element.checked = false;
			}
			else if(element.options != undefined){
				//loop through select options to look for the matching value
				element.selectedIndex = 0;
			}
			else{
				element.value = "";
			}
		}
}

function dropRow(row,table){
	table.deleteRow(row);
}
function RefreshTable(table, args){
	//alert("REFTAB");
	if(typeof(args) == undefined || args == null){args="";}
	var ds = table.getDataSource();
	var initreq = table.configs.initialRequest;
	
	var req = "";
	if(GLOBAL_OBJS[table.getId()+"_lastRequest"])req = GLOBAL_OBJS[table.getId()+"_lastRequest"];
	if(req == "" && initreq != undefined)req = initreq;
	
	ds.sendRequest(req+"&rand="+Math.random()+"&"+args, {success:table.onDataReturnInitializeTable, failure:table.onDataReturnInitializeTable, scope:table});
}
function fail(o,a){
	alert("NO!");
	alert(YAHOO.lang.JSON.stringify(a));
	this.onDataReturnInitializeTable(o,a);
}
function test(o,a){
	alert("YES!");
	alert(YAHOO.lang.JSON.stringify(a));
	this.onDataReturnInitializeTable(o,a);
}

function Insert2(func,obj,callback,args,debug){
	ShowLoadingPanel();
	if(debug == undefined)debug=""
	var aToken = GetCookie("atoken");
	var JSONObj2="";
	var JSONObj =  YAHOO.lang.JSON.stringify(obj.obj1);
	if(obj.obj2 != undefined)JSONObj2 = "&obj2="+YAHOO.lang.JSON.stringify(obj.obj2);
	AJAXCallback.custom = callback;
	AJAXCallback.argument = args;
	if(aToken != null){
		var transaction = YAHOO.util.Connect.asyncRequest('POST', 'ajax_'+func+'.php', AJAXCallback, debug+"atoken="+aToken+"&obj="+JSONObj+""+JSONObj2); 
		DeleteCookie("atoken");
	}
	else{
		TokenError();
	}
}

function InsertForm(form, table, func, obj2){
		ShowLoadingPanel();
		var aToken = GetCookie("atoken");
		var formValues = ParseForm(form);
		var obj = new Object();
		obj = formValues;
		var JSONForm = YAHOO.lang.JSON.stringify(obj);
		var JSONObj2 = YAHOO.lang.JSON.stringify(obj2);
		
		AJAXCallback.custom = func;
				
		if(aToken != null){
			var transaction = YAHOO.util.Connect.asyncRequest('POST', 'ajax_'+table+'_insert.php', AJAXCallback, "atoken="+aToken+"&obj="+JSONForm+"&obj2="+JSONObj2); 
			DeleteCookie("atoken");
		}
		else{
			TokenError();
		}
	}
function InsertObj(table, func, obj, args){
	ShowLoadingPanel();
	var aToken = GetCookie("atoken");
	var JSONObj =  YAHOO.lang.JSON.stringify(obj);
	AJAXCallback.custom = func;
	AJAXCallback.argument = args;
	if(aToken != null){
		var transaction = YAHOO.util.Connect.asyncRequest('POST', 'ajax_'+table+'_insert.php', AJAXCallback, "atoken="+aToken+"&obj="+JSONObj); 
		DeleteCookie("atoken");
	}
	else{
		TokenError();
	}
}


AJAXCallback = {
	success: function(o){
		if(o.responseText.indexOf("error") != -1){this.failure(o)}
		else{
			loadingPanel.hide();
			this.custom(o.argument);
		}
	},
	failure: function(o){
		PanelError(o.responseText);
		AJAXResponseError();
	},
	custom: function(o){return;}
}

function print_r(el){
	var s=""
	for(var item in el){
		s+=item+" : " + el[item] + "\n";
	}
	return s;
}

function ParseHTMLElement(el, tostring){
	var nodes = el.childNodes;
	//alert(print_r(nodes));
	items = new Array();
	for(var node in nodes){
		var n = nodes[node];
		if(n.childNodes.length > 0){
			n = ParseHTMLElement(n,false);
		}
		items.push(n.innerHTML);
	}
	if(tostring)return YAHOO.lang.JSON.stringify(items);
	else return items;
}

function ParseForm(form){
	var formValues = new Object();
	for (var i=0;i<form.length;i++)
	{
		formValues[form.elements[i].name] = form.elements[i].value;
	}
	return(formValues);
}

function ParseTable(table){
	var rs = table.getRecordSet();
	var records = rs.getRecords(0,rs.getLength());
	var r2 = new Array();
	var last="";
	for(var record in records){
		var d = records[record].getData();
		r2.push(d);
	}
	return r2;
}

function ParseTableToString(table){
	var rs = table.getRecordSet();
	var records = rs.getRecords(0,rs.getLength());
	var r2 = "";
	var last="";
	for(var record in records){
		var d = records[record].getData();
		for(var i in d){
			r2+="&"+i+"="+d[i];
		}
	}
	return r2;
}

function byid(id){
	return document.getElementById(id);
}

function GetCookie(sName)
	{
	  // cookies are separated by semicolons
	  var aCookie = document.cookie.split("; ");
	  for (var i=0; i < aCookie.length; i++)
	  {
		// a name/value pair (a crumb) is separated by an equal sign
		var aCrumb = aCookie[i].split("=");
		if (sName == aCrumb[0]) 
		  return unescape(aCrumb[1]);
	  }
	  // a cookie with the requested name does not exist
	  return null;
	}
function DeleteCookie(sName)
{
  document.cookie = sName + "=; expires=Fri, 31 Dec 1999 23:59:59 GMT;";
}

function AjaxRequest(postvars,token,callback){
	var transaction = YAHOO.util.Connect.asyncRequest('POST', 'ajax.php', AjaxCallback, "atoken="+token+"&"+postvars); 
	CustomCallback = callback;
}

var AjaxCallback = {
			cache: false,
			success: function(o){
				var result = YAHOO.lang.JSON.parse(o.responseText);
				CustomCallback(result);
			},
			failure: function(o){
				alert("ajax failure!");
			}
			//argument: ['arg1','arg2'];
		}

function GetAToken(){
	if (window.XMLHttpRequest)
	{
	   var oReq = new XMLHttpRequest();
	   if (oReq) {
		  oReq.open("GET", "ajax.php?query=newtoken");
		  oReq.send("");
	   }
	}
}

function newDynamicObj(domobj,url,ufields,buildfunc){
	var dynobj = new Object();
	dynobj.buildfunc = buildfunc;
	dynobj.domobj = domobj;
	dynobj.oldHTML = dynobj.domobj.innerHTML;
	dynobj.ds = new YAHOO.util.XHRDataSource(url);
	dynobj.oldval = 0;
	dynobj.ds.responseType = YAHOO.util.DataSource.TYPE_JSON; 
	dynobj.ds.responseSchema = {
		resultsList: "results", 
		fields: ufields
	};
	dynobj.refresh = function(){
		if(this.buildfunc == buildSelect){
			this.oldval = this.domobj.selectedIndex;
		}
		this.ds.sendRequest("",this.cb);
		this.domobj.innerHTML="loading...";
	}
	dynobj.query = function(params){
		this.ds.sendRequest(params,this.cb);
		this.domobj.innerHTML="loading...";
	}
	dynobj.cb = {
		success : function(r,pr,c){
			var s="";
			for(var v in pr.results){
				var p = pr.results[v];
				s+=dynobj.buildfunc(p);
			}
			dynobj.domobj.innerHTML = dynobj.oldHTML + s;
			if(dynobj.buildfunc == buildSelect){
				dynobj.domobj.selectedIndex = dynobj.oldval;
			}
		},
		failure : function(o){
			dynobj.domobj.innerHTML = "error";
		},
		scope : dynobj.ds
	}
	dynobj.ds.sendRequest("&test=1",dynobj.cb);
	return dynobj;
}

function ParseFormToGetString(form){
	var f = byid(form);
	var s = "";
	var nodes = f.childNodes;
	s += ParseNodes(nodes);
	
	/*
	for(var i=0;i<nodes.length;i++){
		//alert(nodes[i]);
		//if(nodes[i].childNodes != undefined)s+=ParseFormToGetString(nodes[i]);
		if(nodes[i].name != undefined)s+=nodes[i].name+"="+nodes[i].value+"&";
	}
	alert(s);
	*/
	return(s);
}

function ParseNodes(nodes){
	var s = "";
	for(var i=0;i<nodes.length;i++){
		if(nodes[i].childNodes != undefined && nodes[i].childNodes.length > 0){
			s+=ParseNodes(nodes[i].childNodes);
		}
		if(nodes[i].name != undefined && nodes[i].value != "--" && nodes[i].value != "'--'" && nodes[i].value != "" && nodes[i].value != undefined)s += nodes[i].name+"="+nodes[i].value+"&";
	}
	return s;
}

function SearchForm(form,name){
	var f = byid(form);
	var nodes = f.childNodes;
	for(var i=0;i<nodes.length;i++){
		if(nodes[i].name == name)return nodes[i];
	}
}

function Search(form,table,filters,e){
	//alert("SEARCH");	
	
	var t = (GLOBAL_OBJS[table]);
	
	var searchval = SearchForm(form,"search").value;
	var searchcol = SearchForm(form,"column").value;
	var searchstr = "";
	if(searchval != undefined && searchcol != undefined)searchstr = "&search="+searchval+"&col="+searchcol+"&";
	
	if(filters != undefined){
		var querystring = "&"+ParseFormToGetString(filters)+"&";
	}
	GLOBAL_OBJS[table+"_lastFilter"] = querystring+searchstr;
	
	t.getDataSource().sendRequest(t.configs.initialRequest+querystring+searchstr,{success:t.onDataReturnInitializeTable, failure:t.onDataReturnInitializeTable, scope:t});

	if(typeof(e) != "undefined" && !disableEnterKey(e))return false;
	else return true;
}

function Filter(form,table){
	//alert("FILTER");
	var t = GLOBAL_OBJS[table];
	var querystring = "&"+ParseFormToGetString(form);
	var req = t.configs.initialRequest;
	//if(GLOBAL_OBJS[t.getId()+"_lastRequest"])req = GLOBAL_OBJS[t.getId()+"_lastRequest"];
	//alert("http://localhost/redhouse/booking/ajax_bands.php?"+req+querystring);
	t.getDataSource().sendRequest(req+querystring,{success:t.onDataReturnInitializeTable, failure:t.onDataReturnInitializeTable, scope:t});
}

function RequestBuilder(oState, oSelf) {
    // Get states or use defaults
    oState = oState || {pagination:null, sortedBy:null};
    var sort = (oState.sortedBy) ? "&sort="+oState.sortedBy.key : "";
	var dir = (oState.sortedBy) ? "&dir="+oState.sortedBy.dir : "";
    var startIndex = (oState.pagination) ? oState.pagination.recordOffset : 0;
    var results = (oState.pagination) ? oState.pagination.rowsPerPage : 10;
    
    // Build custom request
	
	var initRequest = oSelf.configs.initialRequest;
	
	//if(initRequest.indexOf("dir=")){
	//	initRequest = initRequest.substr(0,initRequest.indexOf("dir="))+initRequest.substr(initRequest.indexOf("dir=")+9);
	//}
	
	if(dir.indexOf("desc") > -1){dir = "&dir=desc";}
	else {dir="&dir=asc";}
	
	//alert(dir.indexOf("desc")+" "+dir);
	
	var filters="";
	if(GLOBAL_OBJS[oSelf.getId()+"_lastFilter"])filters = GLOBAL_OBJS[oSelf.getId()+"_lastFilter"];
	
    var req=  initRequest + sort +
            dir +
            "&startIndex=" + startIndex +
            "&results=" + (startIndex + results - 1) + 
			filters;
	
	
	return req;
};

function getNumericRatingDD(rating){
	var html = "";
	for(var i = 0; i <= 5; i++){
		
		display = i;
		if (i == 0){
			display = "--";
		}
		
		selected = "";
		if (rating == i){
			selected = "selected";
		}
		
		
		html += "<option value='"+i+"' "+selected+">"+display+"</option>";
	}
	return html;
}

function getTimeDD(){
	var times = new Array();
	for(j=0;j<2;j++){
		for(i=12;i<24;i++){
			var ampm = "pm";
			if(j > 0)ampm = "am";
			h=i;
			if(h > 12)h-=12;
			var h=new String(h);
			if(h < 10)h="0"+h;
			for(c=0;c<60;c+=15){
				var m = new String(c);
				if(m < 10)m="0"+m;
				times.push(h+":"+m+" "+ampm);
			}
		}
	}
	return(times);
}

function SimpleTable(tablecontainer,dataurl,columns, sortby, pagination, rowsPerPage){
	
	var dataSource = new YAHOO.util.XHRDataSource(dataurl);
	dataSource.responseType = YAHOO.util.DataSource.TYPE_JSON; 
	var cfields = Array();
	for(var i in columns){
		if(columns[i].field != undefined){
			cfields.push({"key" : columns[i].field});
		}
		else{
			cfields.push({"key" : columns[i].key});
		}
	}
	
	dataSource.responseSchema = {
		resultsList: "results", 
		metaFields: {totalRecords : "meta.total"},
		fields: cfields
	};
	
	
	byid(tablecontainer).innerHTML = "<table><tr><td><div align='right' id='"+tablecontainer+"_pagination' style='width:90px;'></div></td></tr><tr><td><div id='"+tablecontainer+"_table'></div></td></tr></table>";
	
	var config = {
		dynamicData : true,
		sortedBy: sortby
	};
	
	if(typeof(rowsPerPage) == "undefined"){
		rowsPerPage = 10;
	}
	//if(sortby)config.sortedBy = sortby;
	if(pagination)config.paginator = BasicPaginator(tablecontainer+"_pagination",rowsPerPage);
	
	var t = new YAHOO.widget.DataTable(tablecontainer+"_table", columns, dataSource, config);
	
	return t;
}

function TableKeyPress(e)
{
     var key;

     if(window.event)
          key = window.event.keyCode;     //IE
     else
          key = e.which;     //firefox

     if(key == 13)
          return false;
     else
          return true;
}

function ExtendedTable(tablecontainer, searchcontainer, dataurl, columns, sortby, pdqs,initialreq,rowsPerPage,paginationcontainer,buttons){
	if(initialreq == undefined)initialreq="";
	if(rowsPerPage == undefined)rowsPerPage=10;
	var dataSource = new YAHOO.util.XHRDataSource(dataurl);
	dataSource.responseType = YAHOO.util.DataSource.TYPE_JSON; 
	var cfields = Array();
	for(var i in columns){
		if(columns[i].field != undefined){
			cfields.push({"key" : columns[i].field});
		}
		else{
			cfields.push({"key" : columns[i].key});
		}
	}
	
	dataSource.responseSchema = {
		resultsList: "results", 
		metaFields: {totalRecords : "meta.total"},
		fields: cfields
	};
	
	buttonshtml="";
	if(buttons){
		buttonshtml = byid(buttons).innerHTML;
		byid(buttons).innerHTML="";
	}
	
	byid(tablecontainer).innerHTML = "<table width='100%'><tr valign='bottom'><td>"+
										"<div width='70%' id="+tablecontainer+"_search></div></td>"+
										"<td align='right' xwidth='10%' style='text-align:right;vertical-align:bottom;'>"+buttonshtml+"</td>"+
										"<td width='80' style='text-align:right;vertical-align:bottom'><div id="+tablecontainer+"_pagination style='width:90px;'></td>"+
										
										"</div></td></tr></table>"+
										"<div id="+tablecontainer+"_table></div>";
	
	if(paginationcontainer == undefined)paginationcontainer = tablecontainer+"_pagination";
	
	var config = {
		paginator : BasicPaginator(paginationcontainer,rowsPerPage),
		initialRequest:"sort="+sortby.key+"&dir="+sortby.dir+"&results="+rowsPerPage+""+initialreq,
		sortedBy : sortby,
		dynamicData : true,
		generateRequest : RequestBuilder
	};

	
	var t = new YAHOO.widget.DataTable(tablecontainer+"_table", columns, dataSource, config);
	dataSource.subscribe("requestEvent",dsRequest,t);
	
	t.handleDataReturnPayload = function(oRequest, oResponse, oPayload) {
		if(oPayload){
			oPayload.totalRecords = oResponse.meta.totalRecords;
			this.configs.paginator.set("totalRecords",parseInt(oPayload.totalRecords));
			return oPayload;
		}
	}

	GLOBAL_OBJS[t.getId()] = t;
	
	var search = "<div class='hidden' id='"+tablecontainer+"_inner'>";
	search += "<div action='javascript:undefined;' id='"+tablecontainer+"_searchform'>"+
				"<INPUT name='search' onkeypress='javascript:return Search(\""+tablecontainer+"_searchform\",\""+t.getId()+"\",\""+tablecontainer+"_filters\",event);'/>"+
				"<SELECT name='column' onchange='javascript:Search(\""+tablecontainer+"_searchform\",\""+t.getId()+"\",\""+tablecontainer+"_filters\")'/>";
	
	var filters = "<div action='javascript:undefined;' id='"+tablecontainer+"_filters'><input type='hidden' name='filter' value='1'><table>";
	var calendars = Array();
	var hasfilters = false;
	
	for(var i in columns){
		var label = columns[i].key;
		if(columns[i].label)label = columns[i].label;
		if(columns[i].sortable){
			
			hasfilters = true;
			
			//NORMAL QUERY
			
			if(columns[i].formatter != "number" &&
			columns[i].formatter != "date" &&
			columns[i].dropDownOptions == undefined){
				
				if(columns[i].multi && columns[i].multi == true){
					filters += "<tr><td align='right'>"+label+" </td><td colspan=3> <input onkeypress='javascript:return Search(\""+tablecontainer+"_searchform\",\""+t.getId()+"\",\""+tablecontainer+"_filters\",event);' name='filter_"+columns[i].key+"'></SELECT>"+
								"</tr>";
				}
				else{
					search += "<OPTION value='"+columns[i].key+"'>"+label+"</OPTION>";
				}
			}
			
			//DROPDOWN SELECT
			
			if(columns[i].dropDownOptions){
				var params = "";
				if(columns[i].selectParams)params = columns[i].selectParams;
				var firstselected = "SELECTED";
				if(columns[i].selected !=undefined){firstselected="";}
				filters += "<tr><td align='right'>"+columns[i].label+" </td>"+
					"<td colspan=3> <SELECT "+params+" onchange='javascript:Search(\""+tablecontainer+"_searchform\",\""+t.getId()+"\",\""+tablecontainer+"_filters\");' name='filter_"+columns[i].key+"'>"+
					"<option "+firstselected+">--</option>";
				
				for(var j in columns[i].dropDownOptions){
					var selected = "";
					if(columns[i].selected != undefined && columns[i].selected == columns[i].dropDownOptions[j]){
						selected = "SELECTED";
						setTimeout("Search('"+tablecontainer+"_searchform','"+t.getId()+"','"+tablecontainer+"_filters')",1000);
					}
					filters += "<option "+selected+" value='"+columns[i].dropDownOptions[j]+"'>"+j+"</option>";
				}
				filters += "</td></tr>";
			}
			
			//NUMBER SELECT
			
			if(columns[i].formatter == "number"){
				var options="";
				var interval = 1;
				if(columns[i].interval)interval = columns[i].interval;
				for(var j=columns[i].min; j<=columns[i].max; j+=interval){
					options += "<OPTION>"+j+"</OPTION>";
				}
				filters += "<tr><td align='right'>"+label+" between</td><td> <SELECT onchange='javascript:Search(\""+tablecontainer+"_searchform\",\""+t.getId()+"\",\""+tablecontainer+"_filters\");' name='min_"+columns[i].key+"'><option SELECTED>--</option>"+options+"</SELECT>"+
								"</td><td>and</td><td> <SELECT onchange='javascript:Search(\""+tablecontainer+"_searchform\",\""+t.getId()+"\",\""+tablecontainer+"_filters\");' name='max_"+columns[i].key+"'>"+options+"<option SELECTED>--</option></SELECT>"+
								"</tr>";
			}
			
			//DATE SELECT
			
			if(columns[i].formatter == "date"){
				var today = new Date();
				var mindate = "1970-01-01";
				var maxdate = today.getFullYear()+"-"+(today.getMonth()+1)+"-"+today.getDate();
				
				filters += "<input onchange='Search(\""+tablecontainer+"_searchform\",\""+t.getId()+"\",\""+tablecontainer+"_filters\");' name='min_"+columns[i].key+"' id='"+label+"_calendar_min_input' value=\"--\" type='hidden'/>";
				filters += "<input onchange='Search(\""+tablecontainer+"_searchform\",\""+t.getId()+"\",\""+tablecontainer+"_filters\");' name='max_"+columns[i].key+"' id='"+label+"_calendar_max_input' value=\"--\" type='hidden'/>";
				
				filters += "<tr><td align='right'>"+label+" between</td><td>"
				filters += "<a "+basicButton+" id='"+label+"_calendar_min_button' onclick='ShowCalendar(\""+label+"_min\");'>"+mindate+"</button><div class='calendar' id='"+label+"_calendar_min_container'><div id='"+label+"_calendar_min'>calendar</div></div>";
				
				filters += "</td><td>and</td><td><a "+basicButton+" id='"+label+"_calendar_max_button' onclick='ShowCalendar(\""+label+"_max\");'>"+maxdate+"</button><div class='calendar' id='"+label+"_calendar_max_container'><div id='"+label+"_calendar_max'>calendar</div></div>";
				filters +="</td></tr>";
				
				
				calendars.push(label);
			}
			
		}
	}
	var queries="";
	if(pdqs != null){
		queries="<div id='"+tablecontainer+"_pdq' action='javascript:undefined;'>";
		queries+="<SELECT onchange='Filter(\""+tablecontainer+"_pdq\",\""+t.getId()+"\");' name='pdq'>";
		for(var i in pdqs){
			queries += "<OPTION value=\""+pdqs[i].value+"\">"+pdqs[i].label+"</OPTION>";
		}
	}
	queries+="</SELECT></div>";
	
	if(hasfilters == true){
		filters += "<tr><td colspan=5 align=right><input type='button' onClick='Search(\""+tablecontainer+"_searchform\",\""+t.getId()+"\",\""+tablecontainer+"_filters\");return false;' value='Search'></tr><td>";
	}
	
	filters += "</table></div>";
	search += "</SELECT>"+
				//"</div>"+
				queries+
				filters+
				"</div></div>";
	
	byid(tablecontainer+"_search").innerHTML="<table><tr valign='top'><td><a href='javascript:ToggleObjVisibility(\""+tablecontainer+"_inner\");'><img src='images/spyglass.gif'></a></td></tr><tr><td>"+search+"</td></tr></table>";
	for(var c in calendars){
		var cal1 = new YAHOO.widget.Calendar(calendars[c]+"_calendar_min",calendars[c]+"_calendar_min",{close:true}); 
		cal1.hide();
		cal1.render();
		GLOBAL_OBJS[calendars[c]+"_min"] = cal1;
		cal1.selectEvent.subscribe(CalendarSelect,cal1,true);
		var cal2 = new YAHOO.widget.Calendar(calendars[c]+"_calendar_max",calendars[c]+"_calendar_max",{close:true}); 
		cal2.hide();
		cal2.render();
		GLOBAL_OBJS[calendars[c]+"_max"] = cal2;
		cal2.selectEvent.subscribe(CalendarSelect,cal2,true);
	}
	
	
	
	return t;
}
function dsRequest(e,obj){
	GLOBAL_OBJS[obj.getId()+"_lastRequest"] = e.request;
}

function ShowCalendar(id){
	GLOBAL_OBJS[id].show();
}
function CalendarSelect(e,dates,o){
	var d = this.getSelectedDates()[0];
	byid(this.id+"_button").innerHTML=(d.getMonth()+1)+"-"+(d.getDate())+"-"+(d.getFullYear());
	byid(this.id+"_input").value="'"+(d.getFullYear())+"-"+(d.getMonth()+1)+"-"+(d.getDate())+"'";
	byid(this.id+"_input").onchange();
	this.hide();
}

function ToggleObjVisibility(obj,override,group){
	if(group != undefined){
		var els = document.getElementsByName(group);
		for(i=0;i<els.length;i++){
			if(els[i].id != obj){
				HideObj(els[i].id);
			}
		}
	}

	if(override === true)ShowObj(obj);
	else if(override === false)HideObj(obj);
	else if(byid(obj).className=="hidden")ShowObj(obj);
	else HideObj(obj);
}
function HideObj(obj){
	byid(obj).className="hidden";
}
function ShowObj(obj){
	byid(obj).className="visible";
}


function BasicPaginator(container,custRowsPerPage){	
	rowopts = [5,10,15];
	if(custRowsPerPage > 15){rowopts = [5,10,15,custRowsPerPage];}
	else if(custRowsPerPage > 40){rowopts = [25,custRowsPerPage,75,100];}
	var p =  new YAHOO.widget.Paginator({
		rowsPerPage    : custRowsPerPage,
		pageLinks : YAHOO.widget.Paginator.VALUE_UNLIMITED,
		containers : container,
		firstPageLinkLabel : "<img src='images/darrowl.gif'>",
		lastPageLinkLabel : "<img src='images/darrowr.gif'>",
		previousPageLinkLabel : "<img src='images/arrowl.gif'>",
		nextPageLinkLabel : "<img src='images/arrowr.gif'>",
		template : "{RowsPerPageDropdown} {FirstPageLink}&nbsp;{PreviousPageLink}&nbsp;{NextPageLink}&nbsp;{LastPageLink}",
		rowsPerPageOptions : rowopts,
		updateOnChange : "true"
	});
	
	return p;
}
function htmlUnescape(s){
	if(s==undefined)return s;
	return s.split("&apos;").join("'");
}
function htmlEscape(s){
	if(s==undefined)return s;
	var s = s.split("'").join("&apos;");
	return s;
}
function buildSimple(prop){
	var prefix="";
	var suffix=""
	if(prop.isparent == 0){
		prefix+="<div style='margin-left:30px;'><font size=2>";
		suffix+="</font></div>";
	}
	else if(prop.isparent != undefined){
		prefix+="<hr>";
	}
	prop.mode="update";
	if(prop.skills__name)prop.name = prop.skills__name;
	if(prop.skills__description)prop.description = prop.skills__description;
	prop.skills__name = htmlEscape(prop.skills__name);
	prop.skills__description = htmlEscape(prop.skills__description);
	prop.name = htmlEscape(prop.name);
	prop.description = htmlEscape(prop.description);
	if(prop.parent == prop.id){prop.parent="NULL";}
	var name = prop.name;
	return prefix+
			"<a href=\"javascript:LoadItem('"+escape(YAHOO.lang.JSON.stringify(prop))+"','"+prop.id+"');\">"+name+"</a><br>"
			+suffix;
}
function buildSelect(prop){
	return "<option value='"+prop.id+"'>"+prop.name+"</option>";
}

function SimplePanel(id, header){
	var mypanel;
		
	//YAHOO.util.Event.addListener(window, "load", function(){
		mypanel = new YAHOO.widget.Panel(id);
		mypanel.setBody('<form action="index.php" method="post" name="'+id+'_form" id="'+id+'_form">'+document.getElementById(id).innerHTML+'</form>');
		document.getElementById(id).innerHTML="";
		mypanel.render(document.body);
		mypanel.setHeader(header);
		mypanel.cfg.setProperty("visible", false);
		mypanel.cfg.setProperty("modal", true);
		mypanel.cfg.setProperty("underlay", "shadow");
		mypanel.cfg.setProperty("draggable", false);
		mypanel.cfg.setProperty("constraintoviewport", true);
		mypanel.cfg.setProperty("fixedcenter",true);
		mypanel.showme = function(){
			this.render(document.body);
			this.cfg.setProperty("visible", true);		
		}
	//});
	return mypanel;
	
}
