document.onmousemove = mouseMove;

var mouseObject = null;
var serverRoot = "http://" + window.location.hostname + "/clients/rac-hotel/";
var timestampObject = new Date();
var uploadField;
var ie = false;
var FUNCTIONS = new functions();

String.prototype.replaceAll = function(
	strTarget, // The substring you want to replace
	strSubString // The string you want to replace in.
 ){
 var strText = this;
 var intIndexOfMatch = strText.indexOf( strTarget );
  
 // Keep looping while an instance of the target string
 // still exists in the string.
 while (intIndexOfMatch != -1){
 // Relace out the current instance.
 strText = strText.replace( strTarget, strSubString )
  
 // Get the index of any next matching substring.
 intIndexOfMatch = strText.indexOf( strTarget );
 }
  
 // Return the updated string with ALL the target strings
 // replaced out with the new substring.
 return( strText );
 }

function getElementsByClassName(classname, node){
      if(!node) node = document.getElementsByTagName("body")[0];
      var a = [];
      var re = new RegExp('\\b' + classname + '\\b');
      var els = node.getElementsByTagName("*");
      
      for(var i=0,j=els.length; i<j; i++)

      if(re.test(els[i].className))a.push(els[i]);

      return a;
}
 function createWindow(windowSettings)
	{
		var obj = new Object();
		
		var defaultWidth = "600px";
		var defaultHeight = "400px";
		var defaultLeft = "300px";
		var defaultTop = "300px";
		var defaultID = "newWindow";
		var defaultTitle = "New Window";
		
		if(windowSettings && !empty(windowSettings))
		{
			if(!windowSettings.width || empty(windowSettings.width)) windowSettings.width = defaultWidth;
			if(!windowSettings.height || empty(windowSettings.height)) windowSettings.height = defaultHeight;
			if(!windowSettings.left || empty(windowSettings.left)) windowSettings.left = defaultLeft;
			if(!windowSettings.top || empty(windowSettings.top)) windowSettings.top = defaultTop;
			if(!windowSettings.id || empty(windowSettings.id)) windowSettings.id = defaultID;
			if(!windowSettings.title || empty(windowSettings.title)) windowSettings.title = defaultTitle;
			
			
		}
		else
		{
			windowSettings = new Object({
							width	:	defaultWidth,
							height	:	defaultHeight,
							left	:	defaultLeft,
							top	:	defaultTop,
							id	:	defaultID,
							title	:	defaultTitle
						    });
		}
		var mainDiv = $c("div");
		mainDiv.className = "divWindow";
		mainDiv.style.width = windowSettings.width;
		mainDiv.style.height = windowSettings.height;
		mainDiv.style.left = windowSettings.left;
		mainDiv.style.top = windowSettings.top;
		mainDiv.id = windowSettings.id;
		
		var headerDiv = $c("div");
		headerDiv.className = "windowHeader";
		headerDiv.style.width = windowSettings.width;
		headerDiv.style.marginBottom = "20px";
		
			var titleDiv = $c("div");
			titleDiv.style.width = (windowSettings.width * 0.80) + "px";
			titleDiv.style.cssFloat = "left";
			titleDiv.style.textAlign = "center";
			titleDiv.appendChild(domCreateText(windowSettings.title));
			titleDiv.onmousedown = function(){setMoveableObject(mainDiv.id); return false;};
			
			headerDiv.appendChild(titleDiv);
			
			var closeDiv = $c("div");
			closeDiv.style.width = (windowSettings.width * 0.20) + "px";
			closeDiv.style.cssFloat = "right";
			closeDiv.style.textAlign = "right";
			
			var closeA = $c("a");
			var closeFunction = function(){document.body.removeChild(mainDiv);};
			
			closeA.href="javascript:;";
			closeA.onclick = closeFunction;
			closeA.appendChild(domCreateText("x"));
			closeDiv.appendChild(closeA);
			
			var clearDiv = $c("div");
			clearDiv.style.clear = "both";
			
			headerDiv.appendChild(closeDiv);
			headerDiv.appendChild(clearDiv);
		
		var bodyDiv = $c("div");
		bodyDiv.style.width = windowSettings.width;
		mainDiv.appendChild(headerDiv);
		mainDiv.appendChild(bodyDiv);
		document.body.appendChild(mainDiv);
		
		obj.body = bodyDiv;
		obj.header = headerDiv;
		obj.closeFunction = closeFunction;
		obj.main = mainDiv;
		
		return obj;
		
	}
 

function functions()
{
	this.objectArray = new Array();
	
	
	this.functionObjectToString = function(functionObject)
	{
		var returnString = "";	
		var id;		
		if(functionObject)
		{
			returnString += functionObject.id + "@:@";
			returnString += URLEncode(functionObject.name) + "@:@";
			returnString += URLEncode(functionObject.module) + "@:@";
			argumentString = "";
			if(!empty(returnObject.arguments))
			{
				for(var x in returnObject.arguments)
				{
					id = returnObject.arguments[x][0];
					argumentString += id + "@:@" + returnObject.arguments[x][1] + "@:@" + URLEncode(returnObject.arguments[x][2]) + "@;@";	
				}
			}
			returnString += encode64(argumentString);
		}
		
		return returnString;
	}
	
	this.stringToFunctionObject = function(functionString)
	{
		functionObject = new Object();
		
		if(!empty(functionString))
		{
			var functionArray = functionString.split("@:@");
			if(functionString != functionArray)
			{
				
				functionObject.id = functionArray[0];
				functionObject.name = URLDecode(functionArray[1]);
				functionObject.module = URLDecode(functionArray[2]);
				functionObject.arguments = new Array();
				if(!empty(functionArray[3]))
				{
					
					functionArray[3] = decode64(functionArray[3]);
					
					var arguments = functionArray[3].split("@;@");
					var argumnt;
					
					for(var x=0;x<arguments.length;x++)
					{
						if(!empty(arguments[x]))
						{
							argument = arguments[x].split("@:@");
							functionObject.arguments[argument[0]] = new Array(argument[0],argument[1],URLDecode(argument[2]));		
						}
					}
				}
			}
		}
		return functionObject;
	}
	
	this.createArgumentWindow = function(windowName,windowWidth,windowHeight,windowTitle,parentID)
	{
		var parentID = parentID;
		var div = document.getElementById("windowName");
		if(!div)
		{
			var divName = windowName;
			div = $c("div");
			div.className = "divWindow";
			div.style.width = windowWidth + "px";
			div.style.height = windowHeight + "px";
			div.id = windowName;
			
			var headerTable = domCreateTable();
			headerTable.cellSpacing = "0";
			headerTable.cellPadding = "0";
			headerTable.style.width = windowWidth + "px";
				var tr = domCreateTR();
				tr.className ="windowHeader";
				var td = domCreateTD();
				
				td.style.width = "100%";
				
				td.onmousedown = function(){setMoveableObject(divName); return false;};
				td.appendChild(domCreateText(windowTitle));
				tr.appendChild(td);
				
				td = domCreateTD();
				td.style.textAlign="right";
				td.style.paddingRight = "4px";
				
				var a = domCreateLink("javascript:;","X");
				a.windowObj = div;
				a.onclick = function(){document.body.removeChild(this.windowObj);}
				td.appendChild(a);	
				tr.appendChild(td);
				
			headerTable.appendChild(tr);
			div.appendChild(headerTable);
			
			var objectDiv = $c("div");
			objectDiv.style.marginTop = "15px";
			div.objectDiv = objectDiv;
			div.appendChild(objectDiv);
		}
		else{clearInnerHTML(div.objectDiv);}
		return div;
	}
	
	this.getObject = function(objectName)
	{
		if(this.objectArray[objectName]){return this.objectArray[objectName];}
		else{return false;}
	}
	
	this.addObject = function(object)
	{
		if(!this.getObject(object.ID)){this.objectArray[object.ID] = object;}
	}
	
	this.getFunction = function(functionID)
	{
		var functionData = new Array();
		var data = sendAjaxGetResponse("POST","index.php?class=MODULES&&page=classfunc&&func=getFunction&&function="+functionID);
		if(!empty(data))
		{
			
			var functionArray = data.split("@:@");
			
			functionData['id'] = functionArray[0];
			functionData['module'] = functionArray[1];
			functionData['name'] = functionArray[2];
			functionData['arguments'] = new Array();
			functionData['returns'] = new Array();
			
			if(!empty(functionArray[3]))
			{
				functionArray[3] = URLDecode(functionArray[3]);
				var argumentData = functionArray[3].split("@;@");
				var argument;
				var inputType = "";
				for(var a=0;a<argumentData.length;a++)
				{
					if(!empty(argumentData[a]))
					{
						argument = argumentData[a].split("@:@");
						
						if(empty(argument[1])){argument[1] = 8;}
						switch(parseInt(argument[1]))
						{
							case 0: inputType = "Boolean (True/False)"; break;
							case 1: inputType = "Float (IE. 1234.10)"; break;
							case 2: inputType = "Double (IE. 1234.10)"; break;
							case 3: inputType = "Integer (IE. 1234)"; break;
							case 4: inputType = "String (IE. \"This is a string\")"; break;
							case 5: inputType = "Character (IE. 'c')"; break;																						
							case 6: inputType = "Array (IE. array(\"item1\",\"item2\",\"item3\"))"; break;
							case 7: inputType = "Object"; break;
							default: inputType = "Other / Unknown"; break;
						}
						functionData['arguments'][functionData['arguments'].length] = Array(argument[0],parseInt(argument[1]),inputType);
						
					}
				}
			}
			
			if(!empty(functionArray[4]))
			{
				functionArray[4] = URLDecode(functionArray[4]);
				var returnData = functionArray[4].split("@;@");
				var returned;
				var returnType = "";
				for(var a=0;a<returnData.length;a++)
				{
					if(!empty(returnData[a]))
					{
						returned = returnData[a];
						switch(parseInt(returned))
						{
							case 0: returnType = "Boolean (True/False)"; break;
							case 1: returnType = "String (IE. \"This is a string\")"; break;
							case 2: returnType = "Integer (IE. 1234)"; break;
							case 3: returnType = "Double (IE. 1234.10)"; break;
							case 4: returnType = "Database data"; break;
							case 5: returnType = "Display output"; break;
							case 6: returnType = "Display Redirects"; break;
							case 7: returnType = "Results of another function"; break;
							case 8: returnType = "Variable"; break;
							case 9: returnType = "Other / Unknown"; break;
						}
						functionData['returns'][functionData['returns'].length] = Array(returned,returnType);
						
					}
				}
			}
		}
		return functionData;	
	}

}






function useFunction(parentObject,ID,functionID,savedData,callBack)
{
	if(empty(ID)){this.ID = Math.random();}
	else{this.ID = ID;}
	
	this.useWindow = null; 
	this.useDiv = null; 
	this.functionID = functionID;
	this.functionData = null;
	this.parentObject = parentObject;
	this.callBack = callBack;
	
	this.focus = function(){/*this.useWindow.style.zIndex = 100;*/}
	this.close = function(){document.body.removeChild(this.useWindow); if(this.parentObject && this.parentObject.functionWindow){this.parentObject.functionWindow = new Object();}}
	this.hide = function(){this.useWindow.style.display = "none";}
	this.show = function(){this.useWindow.style.display = "";}
	this.savedData = savedData;
	
	
	this.refreshWindow = function(id)
	{
		this.functionData = FUNCTIONS.getFunction(id);
		
			if(this.parentObject){var parentID = this.parentObject.ID;}
		
			
			clearInnerHTML(this.useDiv);
			
			var mainTable = domCreateTable();
			mainTable.cellSpacing = "0";
			mainTable.cellPadding = "0";
			mainTable.style.width = "800px";
				var tr = domCreateTR();
				var td = domCreateTD();
				
				td.appendChild(domCreateText("Function name"));
				td.className = "rowHeader";
				td.style.width = "150px";
				td.style.verticalAlign = "top";
				tr.appendChild(td);
				
				var td = domCreateTD();
				
				td.appendChild(domCreateText(this.functionData['name']));
				td.style.verticalAlign = "top";
				tr.appendChild(td);
				mainTable.appendChild(tr);
				this.useDiv.appendChild(mainTable);
				
				var argumentTable = domCreateTable();
				
				var returnTable = domCreateTable();
				
				if(!empty(this.functionData))
				{
					
					tr = domCreateTR();
					td = domCreateTD();
					td.appendChild(domCreateText("Argument"));
					td.className = "colHeader";
					td.style.width = "200px";
					tr.appendChild(td);
					
					//tr2 = domCreateTR();
					td = domCreateTD();
					td.appendChild(domCreateText("Expected"));
					td.className = "colHeader";
					td.style.width = "200px";
					tr.appendChild(td);
					
					var argDiv = $c("div");
					argDiv.style.width = "800px";
					argDiv.style.height = "150px";
					argDiv.style.overflow = "auto";
					
					argumentTable.appendChild(tr);
					var selectBox;
					var opt;
					var x=0;
					if(!empty(this.functionData['arguments']))
					{
						for(var argument in this.functionData['arguments'])
						{
							
							selectBox = $c("select");
							opt = $c("option");
							opt.text = "Do not provide argument";
							opt.value = -1;
							selectBox.appendChild(opt);
							
							opt = $c("option");
							opt.text = "True/False";
							opt.value = 0;
							selectBox.appendChild(opt);	
							
							opt = $c("option");
							opt.text = "Number";
							opt.value = 1;
							selectBox.appendChild(opt);	
							
							opt = $c("option");
							opt.text = "Precision number";
							opt.value = 2;
							selectBox.appendChild(opt);	
							
							opt = $c("option");
							opt.text = "Text";
							opt.value = 3;
							selectBox.appendChild(opt);
							
							opt = $c("option");
							opt.text = "Array";
							opt.value = 4;
							selectBox.appendChild(opt);
							
							opt = $c("option");
							opt.text = "Return from function";
							opt.value = 5;
							selectBox.appendChild(opt);	
							
							opt = $c("option");
							opt.text = "Internal Data (IE. URL Data)";
							opt.value = 6;
							selectBox.appendChild(opt);	
							
							selectBox.id = "argument"+ this.ID.toString() + x;
							selectBox.master = this.ID.toString() + x;
							
							selectBox.onchange = function()
							{
								var box = $("argumentCol" + this.master);
								if(this.value == -1){box.style.display = "none";}
								else{box.style.display = "";}
							}
							
							tr = domCreateTR();
							td = domCreateTD();
							td.appendChild(domCreateText(this.functionData['arguments'][argument][0]));
							tr.appendChild(td);
							
							//tr2 = domCreateTR();
							td = domCreateTD();
							td.appendChild(domCreateText(this.functionData['arguments'][argument][2]));
							tr.appendChild(td);
							
							td = domCreateTD();
							td.appendChild(selectBox);
							tr.appendChild(td);
							
							
							
							td = domCreateTD();
							td.style.display = "none";
							td.id = "argumentCol"+ this.ID.toString() + x;
							
							var hiddenValue = $c("input");
							hiddenValue.type = "hidden";
							hiddenValue.id = "argumentHidden"+ this.ID.toString() + x;
							td.appendChild(hiddenValue);
							
							if(this.savedData && !empty(this.savedData))
							{
								if(this.savedData.arguments[x])
								{
									selectBox.selectedIndex = parseInt(this.savedData.arguments[x][1]) + 1;
									hiddenValue.value = this.savedData.arguments[x][2];
									
									if(this.value == -1){td.style.display = "none";}
									else{td.style.display = "";}
									
								}
							}
							
							
							var image = $c("img");
							image.rowID = this.ID.toString() + x;
							image.windowID = this.ID.toString();
							image.src="skins/default/images/file.png";
							image.hidden = hiddenValue;
							image.id = this.ID.toString() + x;
							image.dropdown = selectBox;
							
							
							image.onclick = function()
							{
								var dropdown = this.dropdown;
								var save = $c("input");
								
								save.type = "button";
								save.value = "Save";
								
								var close = $c("input");
								close.type = "button";
								close.value = "Close";
								
								var hiddenType = "";
								var hiddenValue = "";
								
								if(!empty(this.hidden.value))
								{
									var dataSplit = this.hidden.value.toString().split("@:@");
									hiddenType = parseInt(dataSplit[0]);
									if(!empty(dataSplit[1]))
									{
										hiddenValue = decode64(dataSplit[1]);
									}
								}
								
								if(dropdown.value == 0)
								{
									var div = FUNCTIONS.createArgumentWindow("argumentWindow" + this.rowID,200,150,"Set Boolean value",parentID);
									var selectBox = $c("select");
									div.style.textAlign = "center";
									opt = $c("option");
									opt.text = "True";
									opt.value = 1;
									selectBox.appendChild(opt);
									
									opt = $c("option");
									opt.text = "False";
									opt.value = 0;
									selectBox.appendChild(opt);
									
									div.objectDiv.appendChild(selectBox);
									
									save.div = div;
									save.hidden = this.hidden;
									save.dropdown = selectBox;
									save.onclick = function()
									{
										
										this.hidden.value = 0 + "@:@" + encode64(this.dropdown.value);
										document.body.removeChild(this.div);
									}
									
									
									if(hiddenType == 0 && !empty(hiddenValue))
									{
										if(parseInt(hiddenValue) == 1){selectBox.selectedIndex = 0;}
										else{selectBox.selectedIndex = 1;}
									}
									
								}
								if(dropdown.value == 1)
								{
									var div = FUNCTIONS.createArgumentWindow("argumentWindow" + this.rowID,400,150,"Set Integer value",parentID);
									div.style.textAlign = "center";
									var inputBox = $c("input");
									inputBox.type = "text";
									inputBox.style.width = "250px";
									div.objectDiv.appendChild(inputBox);
									
									save.div = div;
									save.hidden = this.hidden;
									save.inputBox = inputBox;
									save.onclick = function()
									{
										this.hidden.value = 1 + "@:@" + encode64(this.inputBox.value);
										document.body.removeChild(this.div);
									}
									if(hiddenType == 1 && !empty(hiddenValue)){inputBox.value = hiddenValue;}
									
								
								}
								
								if(dropdown.value == 2)
								{
									var div = FUNCTIONS.createArgumentWindow("argumentWindow" + this.rowID,400,150,"Set Float / Double value",parentID);
									div.style.textAlign = "center";
									var inputBox = $c("input");
									inputBox.type = "text";
									inputBox.style.width = "250px";
									div.objectDiv.appendChild(inputBox);
									
									save.div = div;
									save.hidden = this.hidden;
									save.inputBox = inputBox;
									save.onclick = function()
									{
										this.hidden.value = 2 + "@:@" + encode64(this.inputBox.value);
										document.body.removeChild(this.div);
									}
									if(hiddenType == 2 && !empty(hiddenValue)){inputBox.value = hiddenValue;}
								
								}
								
								if(dropdown.value == 3)
								{
									var div = FUNCTIONS.createArgumentWindow("argumentWindow" + this.rowID,400,275,"Set Text value",parentID);
									div.style.textAlign = "center";
									var inputBox = $c("textarea");
									inputBox.cols = "50";
									inputBox.rows = "10";
									div.objectDiv.appendChild(inputBox);
									save.div = div;
									save.hidden = this.hidden;
									save.inputBox = inputBox;
									save.onclick = function()
									{
										this.hidden.value = 3 + "@:@" + encode64(this.inputBox.value);
										document.body.removeChild(this.div);
									}
									if(hiddenType == 3 && !empty(hiddenValue)){inputBox.value = hiddenValue;}
								
								}
								
								if(dropdown.value == 4)
								{
									var div = FUNCTIONS.createArgumentWindow("argumentWindow" + this.rowID,600,350,"Set array value",parentID);
									div.style.textAlign = "center";
									div.dataArray = new Array();
									div.currentItem = -1;
									
									var table = domCreateTable();
									var tr = domCreateTR();
									var td = domCreateTD();
									
									td.appendChild(domCreateText("Key"));									
									var keyInput = $c("input");
									keyInput.type = "text";
									keyInput.id = "argumentKey" + this.rowID;
									td.appendChild(keyInput);
									tr.appendChild(td);
									
									
									td = domCreateTD();
									td.appendChild(domCreateText("Value"));									
									var valueInput = $c("input");
									valueInput.type = "text";
									valueInput.id = "argumentValue" + this.rowID;
									td.appendChild(valueInput);
									tr.appendChild(td);
									
									td = domCreateTD();
									
									var saveFunction = new Object();
									saveFunction.keyInput = keyInput;
									saveFunction.valueInput = valueInput;
									saveFunction.master = this.rowID;
									saveFunction.div = div;
									
									saveFunction.save = function(evt,keyValue,valueValue)
									{
										
										var table = $("arrayArguments" + this.master);
										if(!table && this.table){table = this.table;}
										
										if(table)
										{
											var key = "";
											var value = "";
											var keyInput = this.keyInput;
											var valueInput = this.valueInput;
											
											
											if(keyValue == undefined){key = keyInput.value;}
											else{key = keyValue;}
											if(valueValue == undefined){value = valueInput.value;}
											else{value = valueValue;}
											
											var ID,td;
											
											if(this.div.currentItem != -1)
											{
												if(this.div.dataArray[this.div.currentItem])
												{
													ID = this.div.currentItem;
													tr = $("arrayArgumentRow" + ID);
													clearInnerHTML(tr);
													
												}
												else{this.div.currentItem = -1;}
											}
											if(this.div.currentItem == -1)
											{
												var ID = this.div.dataArray.length;
												var tr = domCreateTR();
												tr.id = "arrayArgumentRow" + ID;
											}
											
												
												td = domCreateTD();
												td.appendChild(domCreateText(key));
												td.style.width = "200px";
												td.style.textAlign = "left";
												tr.appendChild(td);
												
												td = domCreateTD();
												td.appendChild(domCreateText(value));
												td.style.width = "200px";
												td.style.textAlign = "left";
												tr.appendChild(td);
												
												td = domCreateTD();
												
												var link = $c("a");
												link.href="javascript:;";
												link.appendChild(domCreateText("Edit"));
												link.itemID = ID;
												link.master = this.master;
												link.keyInput = keyInput;
												link.valueInput = valueInput;
												link.div = this.div;
												
												
												link.onclick = function()											
												{
													if(this.div.dataArray[this.itemID])
													{
														this.keyInput.value = this.div.dataArray[this.itemID][0];
														this.valueInput.value = this.div.dataArray[this.itemID][1];
														this.div.currentItem = this.itemID;
														
													}
												
												};
												td.appendChild(link);
												td.appendChild(domCreateText(" | "));
												
												link = $c("a");
												link.href="javascript:;";
												link.appendChild(domCreateText("Delete"));
												link.currentObject = this;
												link.itemID = ID;
												link.master = this.master;
												link.table = table;
												link.row = tr;
												link.div = this.div;
												
												link.onclick = function()
												{
													if(this.div.dataArray[this.itemID])
													{
														
														if(confirm("are you sure you wish to delete this item?"))
														{
															
															this.div.dataArray[this.itemID] = null;
															this.table.removeChild(this.row);
														}
													}
												}
												td.appendChild(link);
												
												tr.appendChild(td);
												table.appendChild(tr);
												
												this.div.dataArray[ID] = new Array(key,value);
												
												keyInput.value = "";
												valueInput.value = "";
												this.div.currentItem = -1;
										}
									};
									
									var saveBtn = $c("input");
									saveBtn.type = "button";
									saveBtn.value = "Save";
									saveBtn.master = this.rowID;
									saveBtn.div = div;
									saveBtn.keyInput = keyInput;
									saveBtn.valueInput = valueInput;
									saveBtn.onclick = saveFunction.save;
									
									td.appendChild(saveBtn);
									
									var cancel = $c("input");
									cancel.type = "button";
									cancel.value = "Cancel";
									cancel.div = div;
									cancel.keyInput = keyInput;
									cancel.valueInput = valueInput;
									cancel.onclick = function()
									{
										this.keyInput.value = "";
										this.valueInput.value = "";
										this.div.currentItem = -1;
									}
									
									
									td.appendChild(cancel);
									tr.appendChild(td);
									
									table.appendChild(tr);
									div.objectDiv.appendChild(table);
									var divTable = $c("div");
									divTable.style.overflow = "auto";
									divTable.style.height = "200px";
									
									table = domCreateTable();
									tr = domCreateTR();
									
									td = domCreateTD();
									td.appendChild(domCreateText("Key"));
									td.className = "adminColHeader";
									td.style.width = "200px";
									tr.appendChild(td);
									
									td = domCreateTD();
									td.appendChild(domCreateText("Value"));
									td.className = "adminColHeader";
									td.style.width = "200px";
									tr.appendChild(td);
									
									table.appendChild(tr);
									
									var tBody = $c("tbody");
									tBody.id = "arrayArguments" + this.rowID;
									table.appendChild(tBody);
									
									divTable.appendChild(table);
									
									div.objectDiv.appendChild(divTable);
									save.div = div;
									save.hidden = this.hidden;
									save.onclick = function()
									{
										if(!empty(this.div.dataArray))
										{
											saveString = "";
											
											for(x in this.div.dataArray)
											{
												if(!empty(this.div.dataArray[x]))
												{
													saveString += URLEncode(this.div.dataArray[x][0]) + "@:@" +  URLEncode(this.div.dataArray[x][1]) + "@;@";
												}
											}
											
											if(!empty(saveString)){this.hidden.value = 4 +"@:@" + encode64(saveString);}
										}
										
										document.body.removeChild(this.div);
										
									}
									
									
									if(hiddenType == 4 && !empty(hiddenValue))
									{
										saveFunction.table = tBody;
										var hiddenArray = hiddenValue.split("@;@");
										
										for(var x=0;x<hiddenArray.length;x++)
										{
											if(!empty(hiddenArray[x]))
											{
												var hidden = hiddenArray[x].split("@:@");
												saveFunction.save(null,URLDecode(hidden[0]),URLDecode(hidden[1]));
											}
										}
									}
									
								}
								if(dropdown.value == 5)
								{
									var hidden = this.hidden;
									
									
									var callBack = function(object)
									{
										hidden.value = 5 + "@:@" + encode64(FUNCTIONS.functionObjectToString(object));
										
									};
									
									if(!empty(hiddenValue) && hiddenType == 5)
									{
										var functionData = FUNCTIONS.stringToFunctionObject(hiddenValue);
										new useFunction(null,null,functionData.id,functionData,callBack);	
									}
									else
									{
										new functionSearch(null,null,callBack);
									}
									
								}
								if(dropdown.value == 6)
								{
									var div = FUNCTIONS.createArgumentWindow("argumentWindow" + this.rowID,400,275,"Select input data",parentID);
									div.style.textAlign = "center";
									
									var selectBox = $c("select");
									div.style.textAlign = "center";
									opt = $c("option");
									opt.text = "GET (From URL bar)";
									opt.value = 0;
									selectBox.appendChild(opt);
									
									opt = $c("option");
									opt.text = "POST (From posted form)";
									opt.value = 1;
									selectBox.appendChild(opt);
									
									opt = $c("option");
									opt.text = "COOKIE (From Cookies)";
									opt.value = 2;
									selectBox.appendChild(opt);
									
									opt = $c("option");
									opt.text = "SESSION (From current session)";
									opt.value = 3;
									selectBox.appendChild(opt);
									
									opt = $c("option");
									opt.text = "SERVER (From PHP Server)";
									opt.value = 4;
									selectBox.appendChild(opt);
									
									opt = $c("option");
									opt.text = "ENV (From PHP Environment)";
									opt.value = 5;
									selectBox.appendChild(opt);
									
									opt = $c("option");
									opt.text = "REQUEST (From URL Bar and Posted Form)";
									opt.value = 6;
									selectBox.appendChild(opt);
									
									div.objectDiv.appendChild(selectBox);
									
									
									var inputBox = $c("input");
									inputBox.type = "text";
									inputBox.style.width = "250px";
									
									div.objectDiv.appendChild(inputBox);
									
									save.div = div;
									save.hidden = this.hidden;
									save.inputBox = inputBox;
									save.selectBox = selectBox;
									save.onclick = function()
									{
										this.hidden.value = 6 + "@:@" + encode64(this.selectBox.value + "@:@" + this.inputBox.value);
										document.body.removeChild(this.div);
									}
									if(hiddenType == 6 && !empty(hiddenValue))
									{
										var hiddenValue = hiddenValue.split("@:@");
										selectBox.selectedIndex = parseInt(hiddenValue[0]);
										inputBox.value = hiddenValue[1];
									}
								
								}
								
								
								if(div)
								{
									close.windowObj = div;
									close.onclick = function(){document.body.removeChild(this.windowObj);}
									div.appendChild($c("br"));
									var buttonDiv = $c("div");
									buttonDiv.style.marginTop = "15px";
									
									buttonDiv.appendChild(save);
									buttonDiv.appendChild(close);
									div.appendChild(buttonDiv);
									document.body.appendChild(div);
								}
							
							}
							td.appendChild(image);
							tr.appendChild(td);
							
							argumentTable.appendChild(tr);
							x++;
						}
					}
					else
					{
						tr = domCreateTR();
						td = domCreateTD();
						td.colSpan="2";
						td.appendChild(domCreateText("This function does not take any arguments"));
						tr.appendChild(td);
						argumentTable.appendChild(tr);	
					}
					
					
					var returnDiv = $c("div");
					returnDiv.style.width = "600px";
					returnDiv.style.height = "100px";
					returnDiv.style.overflow = "auto";
					
					var span = $c("span");
					span.className = "rowHeader";
					span.appendChild(domCreateText("Possible Return Values"));
					
					
					
					if(!empty(this.functionData['returns']))
					{
						for(var returnvalue in this.functionData['returns'])
						{
							
							tr = domCreateTR();
							td = domCreateTD();
							td.appendChild(domCreateText(this.functionData['returns'][returnvalue][1]));
							tr.appendChild(td);
							
							
							returnTable.appendChild(tr);
						}
					}
					else
					{
						tr = domCreateTR();
						td = domCreateTD();
						td.colSpan="2";
						td.appendChild(domCreateText("This function does not return anything"));
						tr.appendChild(td);
						returnTable.appendChild(tr);	
					}
				}
				
				
				
			
			argDiv.appendChild(argumentTable);
			argDiv.style.marginTop = "10px";
			argDiv.style.marginBottom = "20px";
			this.useDiv.appendChild(argDiv);
			
			this.useDiv.appendChild(span);
			returnDiv.appendChild(returnTable);
			this.useDiv.appendChild(returnDiv);
			
			var buttonDiv = $c("div");
			buttonDiv.style.width = "100%";
			buttonDiv.style.textAlign = "center";
			buttonDiv.style.marginTop = "15px";
			
			var save = $c("input");
			save.type = "button";
			save.value = "Save";
			save.style.marginRight = "15px";
			save.obj = this;
			
			save.onclick = function()
			{
				returnObject = new Object();
				returnObject.id = this.obj.functionData['id'];
				returnObject.name = this.obj.functionData['name'];
				returnObject.module = this.obj.functionData['module'];
				returnObject.arguments = new Array();
				
				if(!empty(this.obj.functionData['arguments']))
				{
					var x=0;
					
					for(var argument in this.obj.functionData['arguments'])
					{
						var ID = this.obj.ID.toString() + x;
						var argumentHidden = $("argumentHidden" + ID);
						var argumentDropdown = $("argument" + ID);
						
						if(argumentHidden && argumentDropdown)
						{
							if(argumentDropdown.value != -1)
							{
								returnObject.arguments[x] = new Array(x,argumentDropdown.value,argumentHidden.value);
							}
						}
						x++;
					}
				}
				
				if(this.obj.callBack){this.obj.callBack(returnObject);}
				
				this.obj.close();
			}
			
			var close = $c("input");
			close.type = "button";
			close.value = "Close";
			close.object = this;
			close.onclick = function(){this.object.close();}
			buttonDiv.appendChild(save);
			
			var closeW = $c("input");
			closeW.type = "button";
			closeW.value = "Change function";
			closeW.object = this;
			closeW.style.marginRight = "15px";
			if(this.parentObject){closeW.parentObject = this.parentObject;}
			
			closeW.onclick = function()
			{
				if(this.parentObject){this.parentObject.show();}
				else{new functionSearch(null,null,this.object.callBack);}
				
				this.object.close();
			}
			
			buttonDiv.appendChild(closeW);
			buttonDiv.appendChild(close);
			
			
			
			this.useDiv.appendChild(buttonDiv);
			
			this.useWindow.style.display = "";
			
			
	}
	this.createObject = function()
	{
		var useDiv = $("functionUse" + this.ID);
		var divName = "functionUse"  + this.ID;
		if(this.parentObject){var parentID = this.parentObject.ID;}
		
		if(!useDiv)
		{
			var divName = "functionUse"  + this.ID;
			var div = $c("div");
				div.className = "divWindow";
				div.style.width = "800px";
				div.style.height = "500px";
				div.id = "functionUse"  + this.ID;
				
				var headerTable = domCreateTable();
				headerTable.cellSpacing = "0";
				headerTable.cellPadding = "0";
				headerTable.style.width = "800px";
					var tr = domCreateTR();
					tr.className ="windowHeader";
					var td = domCreateTD();
					
					td.style.width = "100%";
					
					td.onmousedown = function(){setMoveableObject(divName); return false;};
					td.appendChild(domCreateText("Use Function"));
					tr.appendChild(td);
					
					td = domCreateTD();
					td.style.textAlign="right";
					td.style.paddingRight = "4px";
					
					var a = domCreateLink("javascript:;","X");
					a.divWindow = this;
					a.onclick = function(){a.divWindow.close();}
					td.appendChild(a);	
					tr.appendChild(td);
					
				headerTable.appendChild(tr);
				div.appendChild(headerTable);
			this.useWindow = div;
			
			div = $c("div");
			this.useWindow.appendChild(div);
			this.useDiv = div;
			this.useWindow.style.display = "";
			document.body.appendChild(this.useWindow);
			if(this.parentObject){this.parentObject.hide();}
		}
			this.refreshWindow(this.functionID);
			
			
			
		
	}
	
	this.createObject();
	this.focus();


}

function functionSearch(ID,searchDiv,callBack)
	{
		if(empty(ID)){this.ID = Math.random();}
		else{this.ID = ID;}
		this.functionWindow = null;
		this.searchTable = null;
		this.searchTypeDropdown  = null;
		this.searchField = null;
		this.callBack = callBack;
		
		this.getSearchTable = function(){return this.searchTable;}
		this.getTypeDropdown = function(){return this.searchTypeDropdown;}
		this.getSearchField = function(){return this.searchField;}
		
		
		this.close = function(){document.body.removeChild(this.searchDiv);}
		this.hide = function(){this.searchDiv.style.display = "none";}
		this.show = function(){this.searchDiv.style.display = "";}
		this.focus = function(){/*this.searchDiv.style.zIndex = 100;*/}
		this.createObject = function()
		{
			
			var searchDiv = $("functionSearch" + this.ID);
			var divName = "functionSearch"  + this.ID;
			var ID = this.ID;
			
			
			if(searchDiv){searchDiv.style.display = "";}
			else
			{
				var div = $c("div");
				div.className = "divWindow";
				div.style.width = "800px";
				div.style.height = "400px";
				div.id = "functionSearch"  + this.ID;
				div.onclick = function(){FUNCTIONS.getObject(ID).focus();}
				
				var headerTable = domCreateTable();
				headerTable.cellSpacing = "0";
				headerTable.cellPadding = "0";
				headerTable.style.width = "800px";
					var tr = domCreateTR();
					tr.className ="windowHeader";
					var td = domCreateTD();
					
					td.style.width = "100%";
					
					td.onmousedown = function(){setMoveableObject(divName); return false;};
					td.appendChild(domCreateText("Function search"));
					tr.appendChild(td);
					
					td = domCreateTD();
					td.style.textAlign="right";
					td.style.paddingRight = "4px";
					var a = domCreateLink("javascript:;","X",function(){FUNCTIONS.getObject(ID).close();});
					td.appendChild(a);	
					tr.appendChild(td);
					
				headerTable.appendChild(tr);
				div.appendChild(headerTable);
				
				var searchTable = domCreateTable();
				searchTable.cellSpacing = "0";
				searchTable.cellPadding = "0";
				searchTable.style.width = "800px";
					tr = domCreateTR();
					td = domCreateTD();
					td.style.textAlign = "center";
					
					var functionSearch = $c("input");
					functionSearch.type = "text";
					functionSearch.size = "25";
					functionSearch.id = "functionSearchField" + this.ID;
					td.appendChild(functionSearch);
					
					this.searchField = functionSearch;
					
					var functionType = $c("select");
					functionType.id = "functionType" + this.ID;
					functionType.add(new Option("All", -1),  null);
					functionType.add(new Option("Built In", 1),  null);
					functionType.add(new Option("Modules", 2),  null);
					td.appendChild(functionType);
					
					this.searchTypeDropdown = functionType;
					
					var searchButton = $c("input");
					searchButton.type = "button";
					searchButton.value = "Search";
					searchButton.onclick = function()
					{
						sendAjaxWithCallBack("POST","index.php?class=MODULES&&page=classfunc&&func=getFunctions",
						function(returnObject)
						{
							if(typeof(returnObject.responseText)!="unknown" && returnObject.readyState == 4 && returnObject.status == 200)
							{
								if(!empty(returnObject.responseText))
								{
									var table = FUNCTIONS.getObject(ID).getSearchTable();
									clearInnerHTML(table);
									var data = returnObject.responseText;
									var tr;
									var td;
									
									
									functionArray = data.split("@;@");
									
									for(var x=0;x<functionArray.length;x++)
									{
										if(!empty(functionArray[x]))
										{
											var func = functionArray[x].split("@:@");
											
											tr = domCreateTR();
											td = domCreateTD();
											
											td.style.width = "100px";
											td.appendChild(domCreateText(func[1]));
											tr.appendChild(td);
											
											td = domCreateTD();
											td.style.width = "150px";
											td.appendChild(domCreateText(func[2]));
											tr.appendChild(td);
											
											td = domCreateTD();
											td.style.width = "100px";
											td.appendChild(domCreateText(func[3]));
											tr.appendChild(td);
											
											td = domCreateTD();
											//td.style.width = "200px";
											
											var a = $c("a");
											a.href="javascript:;";
											a.functionID = func[0];
											a.onclick = function(){
												
												var functionData = sendAjaxGetResponse("POST","index.php?class=MODULES&&page=classfunc&&func=getFunction&&function="+this.functionID);
												if(!empty(functionData))
												{
													
													var functionArray = functionData.split("@:@");
													var functionData = new Array();
													
													functionData['id'] = functionArray[0];
													functionData['module'] = functionArray[1];
													functionData['name'] = functionArray[2];
													
													
													var div = $c("div");
													div.className = "divWindow";
													div.style.width = "600px";
													div.style.height = "400px";
													div.id = "functionView";
													
													var headerTable = domCreateTable();
													headerTable.cellSpacing = "0";
													headerTable.cellPadding = "0";
													headerTable.style.width = "600px";
														var tr = domCreateTR();
														tr.className ="windowHeader";
														var td = domCreateTD();
														
														td.style.width = "100%";
														
														td.onmousedown = function(){setMoveableObject("functionView"); return false;};
														td.appendChild(domCreateText(functionArray[2] + " information"));
														tr.appendChild(td);
														
														td = domCreateTD();
														td.style.textAlign="right";
														td.style.paddingRight = "4px";
														var a = domCreateLink("javascript:;","X",function(){$("functionView").style.display = "none";});
														
														
														td.appendChild(a);	
															
														tr.appendChild(td);
													headerTable.appendChild(tr);
													div.appendChild(headerTable);
													
													var mainTable = domCreateTable();
													mainTable.cellSpacing = "0";
													mainTable.cellPadding = "0";
													
													mainTable.style.width = "600px";
													mainTable.style.padding = "20px";
														
														tr = domCreateTR();
														td = domCreateTD();
														td.style.verticalAlign = "top";
														td.style.width = "50px";
														td.className = "colHeader";
														td.appendChild(domCreateText("Function name"));
														tr.appendChild(td);
														
														td = domCreateTD();
														td.style.width = "100px";
														td.style.verticalAlign = "top";
														td.appendChild(domCreateText(functionArray[2]));
														tr.appendChild(td);
														mainTable.appendChild(tr);
														
														tr = domCreateTR();
														td = domCreateTD();
														td.style.verticalAlign = "top";
														td.style.width = "50px";
														td.className = "colHeader";
														td.appendChild(domCreateText("Possible return values"));
														tr.appendChild(td);
														
														td = domCreateTD();
														td.style.width = "100px";
														td.style.verticalAlign = "top";
														if(!empty(functionArray[4]))
														{
															functionArray[4] = URLDecode(functionArray[4]);
															var returnValues = functionArray[4].split("@;@");
															var returnType = "";
															for(var rv=0;rv<returnValues.length;rv++)
															{
																if(returnValues[rv] !== 0 && !empty(returnValues[rv]))
																{
																	returnValues[rv] = parseInt(returnValues[rv]);
																	
																	switch(returnValues[rv])
																	{
																		case 0: returnType = "Boolean (True/False)"; break;
																		case 1: returnType = "String (IE. \"This is a string\")"; break;
																		case 2: returnType = "Integer (IE. 1234)"; break;
																		case 3: returnType = "Double (IE. 1234.10)"; break;
																		case 4: returnType = "Database data"; break;
																		case 5: returnType = "Display output"; break;
																		case 6: returnType = "Display Redirects"; break;
																		case 7: returnType = "Results of another function"; break;
																		case 8: returnType = "Variable"; break;
																		case 9: returnType = "Other / Unknown"; break;
																	}
																	
																	td.appendChild(domCreateText(returnType));
																	td.appendChild($c("br"));
																}
															}
														}
														else{td.appendChild(domCreateText("Doesn't return a value"));}
														
														tr.appendChild(td);
														mainTable.appendChild(tr);
														
														tr = domCreateTR();
														td = domCreateTD();
														td.style.verticalAlign = "top";
														td.style.width = "50px";
														td.className = "colHeader";
														td.appendChild(domCreateText("Possible input values"));
														tr.appendChild(td);
														
														td = domCreateTD();
														td.style.width = "100px";
														td.style.verticalAlign = "top";
														if(!empty(functionArray[3]))
														{
															functionArray[3] = URLDecode(functionArray[3]);
															var inputValues = functionArray[3].split("@;@");
															var inputType = "";
															
															for(var iv=0;iv<inputValues.length;iv++)
															{
																if(inputValues[iv] !== 0 && !empty(inputValues[iv]))
																{
																	inputValue = inputValues[iv].split("@:@");
																	
																	
																	switch(parseInt(inputValue[1]))
																	{
																		case 0: inputType = "Boolean (True/False)"; break;
																		case 1: inputType = "Float (IE. 1234.10)"; break;
																		case 2: inputType = "Double (IE. 1234.10)"; break;
																		case 3: inputType = "Integer (IE. 1234)"; break;
																		case 4: inputType = "String (IE. \"This is a string\")"; break;
																		case 5: inputType = "Character (IE. 'c')"; break;																						
																		case 6: inputType = "Array (IE. array(\"item1\",\"item2\",\"item3\"))"; break;
																		case 7: inputType = "Object"; break;
																		case 8: inputType = "Other / Unknown"; break;
																	}
																	
																	td.appendChild(domCreateText(inputValue[0] + " (" + inputType + ")"));
																	td.appendChild($c("br"));
																}
															}
														}
														else{td.appendChild(domCreateText("Doesn't take an input"));}
														
														tr.appendChild(td);
														mainTable.appendChild(tr);
													
													
													
													div.appendChild(mainTable);	
													document.body.appendChild(div);
												}
												else{alert("Could not locate data for this function");}
											
											
											};
											a.appendChild(domCreateText("Information"));
											td.appendChild(a);
											td.appendChild(domCreateText(" | "));
											
											var a = $c("a");
											a.href="javascript:;";
											a.functionID = func[0];
											a.onclick = function()
											{
												var object = FUNCTIONS.getObject(ID);
												
												if(empty(object.functionWindow))
												{
														object.functionWindow = new useFunction(object,null,this.functionID,null,object.callBack);
												}
												else{object.functionWindow.refreshWindow(this.functionID);}
											}
											
											
											a.appendChild(domCreateText("Use function"));
											td.appendChild(a);
											tr.appendChild(td);
											
											table.appendChild(tr);
										}
									}
								
								}
							}
							
						});
					};
					td.appendChild(searchButton);
					tr.appendChild(td);
				searchTable.appendChild(tr);
				
				div.appendChild(searchTable);
				
				var mainTable = domCreateTable();
				mainTable.cellSpacing = "0";
				mainTable.cellPadding = "0";
				mainTable.style.paddingTop = "10px";
				mainTable.style.width = "800px";
					tr = domCreateTR();
					td = domCreateTD();
					td.colSpan = "2";
				
					var searchDiv = $c("div");
					searchDiv.style.overflow = "auto";
					searchDiv.style.height = "350px";
					
					var resultsTable = domCreateTable();
					resultsTable.cellSpacing = "0";
					resultsTable.cellPadding = "0";
					resultsTable.style.width = "700px";
					
					var th = $c("th");
					th.className = "adminColHeader";
					th.style.width = "100px";
					th.appendChild(domCreateText("Function name"));
					
					resultsTable.appendChild(th);
					
					th = $c("th");
					th.className = "adminColHeader";
					th.style.width = "150px";
					th.appendChild(domCreateText("Class"));					
					resultsTable.appendChild(th);
					
					th = $c("th");
					th.className = "adminColHeader";
					th.style.width = "100px";
					th.appendChild(domCreateText("Type"));					
					resultsTable.appendChild(th);
					
					th = $c("th");
					resultsTable.appendChild(th);
					
					
					var resultsBody = $c("tbody");
					resultsBody.id = "functionSearchTable" + this.ID;
					resultsBody.style.width = "800px";
					resultsTable.appendChild(resultsBody);
					
					searchDiv.appendChild(resultsTable);
					td.appendChild(searchDiv);
					tr.appendChild(td);
					
					this.searchTable = resultsBody;
					mainTable.appendChild(tr);
				
				div.appendChild(mainTable);
				
				
				
				div.style.display = "";
				this.searchDiv = div;
				document.body.appendChild(div);
				
				FUNCTIONS.addObject(this);
			}
		}
		if(empty(searchDiv) || !searchDiv){this.searchDiv = null; this.createObject(); this.focus();}
		else{this.searchDiv = searchDiv;}
	}
function showFunctionSearch()
{
	
	
	
}



function prefillField(field,value)
	{
		
		if(field.value == value)
		{
			field.value = "";
			field.style.color = "#000000";
		}
		else if(empty(field.value))
		{
			field.value = value;
			field.style.color = "grey";
		}
	}
function rand (min, max) {
    // http://kevin.vanzonneveld.net
    // +   original by: Leslie Hoare
    // +   bugfixed by: Onno Marsman
    // %          note 1: See the commented out code below for a version which will work with our experimental (though probably unnecessary) srand() function)
    // *     example 1: rand(1, 1);
    // *     returns 1: 1
    
    var argc = arguments.length;
    if (argc === 0) {
        min = 0;
        max = 2147483647;
    } else if (argc === 1) {
        throw new Error('Warning: rand() expects exactly 2 parameters, 1 given');
    }
    return Math.floor(Math.random() * (max - min + 1)) + min;
 
}

function $c(element){return document.createElement(element);}
function domCreateTable(){return $c("table");}
function domCreateTR(){return $c("tr");}
function domCreateTD(){return $c("td");}
function domCreateText(textValue){return document.createTextNode(textValue);}
function domCreateLink(url,textValue,onclick)
{
	var returnLink = $c("a");
	returnLink.href= url;
	returnLink.appendChild(domCreateText(textValue));
	if(onclick){returnLink.onclick = function(){onclick();};}
	return returnLink;
	

}

function boolToInt(value)
{
	if(value){return 1;}
	else{return 0;}

}

function intToBool(value)
{
	if(value == 1){return true;}
	else{return false;}
}
function swapBool(value)
{
	if(value){return false;}
	else{return true;}
}
function enableDisableField(value,field)
{
	if(value){$(field).disabled = false;}
	else{$(field).disabled = true;}

}
function $(field)
{
	var domObject = document.getElementById(field);
	return domObject;
}
function formatField(field,formatting,additionalValue,callBack)
{
	
	var fieldObj = document.getElementById(field);
	if(fieldObj)
	{
		switch(formatting)
		{
			case 0: if(fieldObj.style.fontWeight == "bold") fieldObj.style.fontWeight = ""; else fieldObj.style.fontWeight = "bold";
				break;
			case 1: if(fieldObj.style.fontStyle == "italic") fieldObj.style.fontStyle = ""; else fieldObj.style.fontStyle = "italic";
				break;
			case 2: fieldObj.style.textDecoration = additionalValue;
				break;
			case 3: fieldObj.style.color = additionalValue;
				break;
		}
	
		if(callBack){eval(callBack);}
	}
	fieldObj = null;
	

}

function locationRedirect(url){setTimeout(function(){window.location = url;},0);}

function toggleFieldsWithCheckBox(checkBox,fieldArray,direction)
{
	if(direction != false && empty(direction)){direction = true;}
	for(var x=0;x<fieldArray.length;x++)	
	{
		var element = document.getElementById(fieldArray[x]);
		
		if(checkBox.checked)
		{
			
			if(direction){element.disabled = true;}
			else{element.disabled = false;}
		}
		else
		{
			if(direction){element.disabled = false;}
			else{element.disabled = true;}
		}
		
		element = null;
	}

}

function checkboxBoolValue(checkbox)
{
	if(checkbox.checked){return true;}
	else{return false;}

}

function showHideElement(obj)
{
	var element  = document.getElementById(obj);
	if(element.style.display == ""){element.style.display = "none";}
	else{element.style.display = "";}
	element = null;
}

function uploadFile(fileFolder,fileUpload,waitingElement,generateFolder,encodeFilename,callBackFunction,returnData,generateDataFile)
{
	
	var timestamp = timestampObject.getTime();

	if(uploadWindow && !uploadWindow.closed)
	{
		var oldFileUpload = document.getElementById(fileUpload);
		var windowDocument = uploadWindow.document;
		var submitForm = uploadWindow.document.getElementById("Form");
		
		windowDocument.body.appendChild(submitForm);
		
		if(submitForm)
		{
			if(!empty(callBackFunction)){callBackFunction = "&&callback=" + callBackFunction;}
			else{callBackFunction = "";}
			
			if(generateFolder==true){generateFolder = "&&generateFolder=1";}
			else{generateFolder = "";}
			
			if(encodeFilename==true){encodeFilename = "&&encodeFilename=1";}
			else{encodeFilename = "";}
			
			if(returnData==true){encodeFilename = "&&returnData=1";}
			else{returnData = "";}
			
			if(generateDataFile==true){generateDataFile = "&&generateDataFile=1";}
			else{generateDataFile = "";}
			
			submitForm.action = serverRoot + "upload.php?uploadFile=1&&folder="+ fileFolder + callBackFunction + generateFolder + encodeFilename + returnData + generateDataFile;
			submitForm.encoding = "multipart/form-data";
			submitForm.method = "POST";
			submitForm.target = "uploadWindow"+timestamp;
			
			var newFileUpload = oldFileUpload.cloneNode(true);
			newFileUpload.name = "uploadFile" + timestamp;
			submitForm.appendChild(newFileUpload);
			if(!empty(waitingElement))
			{
				waitingElement = document.getElementById(waitingElement);
				if(waitingElement){waitingElement.innerHTML = "Uploading file<img src=\"skins/default/images/ajax-loader.gif\" style=\"vertical-align: middle;\">";}
			}
			
			submitForm.submit();
			
			newFileUpload = null;
			
			
		}
		else{alert("Could not find upload form");}
		
		oldFileUpload = null;
		windowDocument = null;
		submitForm = null;
	}
	else{alert("Please disable popup blockers to upload");}
	
	timestamp = null;
	uploadWindow = null;
	waitingElement = null;
	
	
}

function uploadFailed()
{
	
}

function mouseMove(e)
{
	mouseObject = e;

}


function getTopPos(inputObj)
	{
	
		var returnValue = inputObj.offsetTop;
		while((inputObj = inputObj.offsetParent) != null){
			returnValue += inputObj.offsetTop;
		}
		return returnValue;
	}
function setMoveableObject(obj)
{
	WindowDrag.init(obj);
	return false;

}

function ObjectPosition(obj) {
    var curleft = 0;
      var curtop = 0;
      if (obj.offsetParent) {
            do {
                  curleft += obj.offsetLeft;
                  curtop += obj.offsetTop;
            } while (obj = obj.offsetParent);
      }
      return [curleft,curtop];
}

var WindowDrag = 
	{
		windowObj : null,
		
		init : function(obj,minX,minY,maxX,maxY,callback)
		{
			
			obj = document.getElementById(obj);
			//obj.style.display = "none";
			obj.minX = empty(minX) ? minX : null;
			obj.maxX = empty(maxX) ? maxX : null;
			obj.minY = empty(minY) ? minY : null;
			obj.maxY = empty(maxY) ? maxY : null;
			
			obj.onMoveEnd = new Function();
			obj.onMove = new Function();
// 			obj.style.position = "absolute";
			
			
			//console.debug("%s",obj.style.left);
// 			obj.style.left = obj.offsetLeft + "px";
// 			obj.style.top = obj.offsetTop + "px";
			
			var objOffset = ObjectPosition(obj);
			obj.parentOffsetLeft = objOffset[0];// - obj.offsetWidth;
			obj.parentOffsetTop = objOffset[1];// - obj.offsetHeight;
			
			document.onmousemove = WindowDrag.windowMove;	
			document.onmouseup = WindowDrag.end;
			windowObj = obj;
			window.status = "(" + windowObj.parentOffsetTop + ")";
			document.body.style.cursor = "move";
			return false;
		
		},
		
		windowMove : function(e)
		{
			
			window.status = "";
			
			windowObj.style.top = (e.clientY - 100) + "px";
			windowObj.style.left = (e.clientX - 300) + "px";
			//windowObj.onMove(windowObj.style.top,windowObj.style.left);
			document.body.style.cursor = "move";
			return false;
		},
		
		
		end : function()
		{
		
			document.onmousemove = null;
			document.onmouseup = null;
			document.body.style.cursor = "default";
			//windowObj.style.display = "";
			return false;
			
		}
		
		
		
		
	
	
	}
	
function strtolower( str ) {return (str+'').toLowerCase();}
function empty( mixed_var ) {
    var key;
    
    if (mixed_var === "" || mixed_var === null || mixed_var === false || mixed_var === undefined){key = null; return true;}
 
    if (typeof mixed_var == 'object') {
        for (key in mixed_var){key = null; return false;}
        key = null; return true;
    }
    key = null;
    return false;
}
function clearInnerHTML(obj){while(obj.firstChild) obj.removeChild(obj.firstChild);}

function str_replace(search, replace, subject) {
    var f = search, r = replace, s = subject;
    var ra = r instanceof Array, sa = s instanceof Array, f = [].concat(f), r = [].concat(r), i = (s = [].concat(s)).length;
 
    while (j = 0, i--) {
        if (s[i]) {
            while (s[i] = (s[i]+'').split(f[j]).join(ra ? r[j] || "" : r[0]), ++j in f){};
        }
    };
	 
	f = null;
	ra = null;	 
    return sa ? s : s[0];
}

function URLEncode (clearString) {
  var output = '';
  var x = 0;
  clearString = clearString.toString();
  var regex = /(^[a-zA-Z0-9_.]*)/;
  while (x < clearString.length) 
  {
	var match = regex.exec(clearString.substr(x));
	if (match != null && match.length > 1 && match[1] != '') 
    	{
		output += match[1];
    		x += match[1].length;
    	} 
	else 
	{
      		if (clearString[x] == ' '){output += '+';}
      		else 
      		{
        		var charCode = clearString.charCodeAt(x);
        		var hexVal = charCode.toString(16);
        		output += '%' + ( hexVal.length < 2 ? '0' : '' ) + hexVal.toUpperCase();
        		
        		charCode = null;
        		hexVal = null;
      		}
      		x++;
    	}
  }
  
  x = null;
  regex = null;
  
  return output;
}


function URLDecode (encodedString) {
  var output = encodedString;
  
  if(!empty(output))
  {
	var binVal, thisString;
	var myregexp = /(%[^%]{2})/;
	while ((match = myregexp.exec(output)) != null
		&& match.length > 1
		&& match[1] != '') {
		
	binVal = parseInt(match[1].substr(1),16);
	thisString = String.fromCharCode(binVal);
	output = output.replace(match[1], thisString);
	}
	output = output.replaceAll("+"," ");
  }
  return output;
}


function trim(stringValue){return stringValue.replace(/(^\s*|\s*$)/, "");}
	
 var keyStr = "ABCDEFGHIJKLMNOP" +
                "QRSTUVWXYZabcdef" +
                "ghijklmnopqrstuv" +
                "wxyz0123456789+/" +
                "=";

function encode64(input) 
{
      var output = "";

	if(!empty(input))
	{
		input = escape(input);
	
		var chr1, chr2, chr3 = "";
		var enc1, enc2, enc3, enc4 = "";
		var i = 0;
		
		do {
			chr1 = input.charCodeAt(i++);
			chr2 = input.charCodeAt(i++);
			chr3 = input.charCodeAt(i++);
		
			enc1 = chr1 >> 2;
			enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
			enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
			enc4 = chr3 & 63;
		
			if (isNaN(chr2)) {
			enc3 = enc4 = 64;
			} else if (isNaN(chr3)) {
			enc4 = 64;
			}
		
			output = output +
			keyStr.charAt(enc1) +
			keyStr.charAt(enc2) +
			keyStr.charAt(enc3) +
			keyStr.charAt(enc4);
			chr1 = chr2 = chr3 = "";
			enc1 = enc2 = enc3 = enc4 = "";
		} while (i < input.length);
		
		chr1 = null;
		chr2 = null;
		chr3 = null;
		enc1 = null;
		enc2 = null;
		enc3 = null;
		enc4 = null;
		i = null;
	}
	
	return output;
}
  
function decode64(input) 
{
	if(!empty(input))
	{
		var output = "";
		var chr1, chr2, chr3 = "";
		var enc1, enc2, enc3, enc4 = "";
		var i = 0;
		
		// remove all characters that are not A-Z, a-z, 0-9, +, /, or =
		var base64test = /[^A-Za-z0-9\+\/\=]/g;
		if (base64test.exec(input)) 
		{
			alert("There were invalid base64 characters in the input text.\n" +
			"Valid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='\n" +
			"Expect errors in decoding.");
		}
		input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
		
		do {
			enc1 = keyStr.indexOf(input.charAt(i++));
			enc2 = keyStr.indexOf(input.charAt(i++));
			enc3 = keyStr.indexOf(input.charAt(i++));
			enc4 = keyStr.indexOf(input.charAt(i++));
		
			chr1 = (enc1 << 2) | (enc2 >> 4);
			chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
			chr3 = ((enc3 & 3) << 6) | enc4;
		
			output = output + String.fromCharCode(chr1);
		
			if (enc3 != 64) {
			output = output + String.fromCharCode(chr2);
			}
			if (enc4 != 64) {
			output = output + String.fromCharCode(chr3);
			}
		
			chr1 = chr2 = chr3 = "";
			enc1 = enc2 = enc3 = enc4 = "";
		
		} while (i < input.length);
		
		chr1 = null;
		chr2 = null;
		chr3 = null;
		enc1 = null;
		enc2 = null;
		enc3 = null;
		enc4 = null;
		i = null;
		
		
	}else{var output = "";}
	
	return unescape(output);
}
   
   
   
