<!--
	
	var Site = {
		
		displayRegister: new Number(),
		displayUnRegister: new Number(),
		
		config: {
			
			user_registered: false,
			user_role: new String(),
			module: new String(),
			page: new String()
			
		},
		
		init: function()
		{
			Environment.init();
			Effects.init();
			Forms.init();
		},
		
		logout: function()
		{
			var conn = new AjaxConnection("/server/actions/action_logout.php");
			conn.successFunction = new Function("document.location.reload()");
			conn.execute();
		},
		
		showlogin: function()
		{
			var loginscreen = document.getElementById('loginscreen');
			
			if(BrowserDetect.browser == "Explorer")
			{
				loginscreen.style.width = document.body.currentStyle.width;
				loginscreen.style.height = document.body.clientHeight + document.body.scrollTop + "px";
			}
			else
			{
				loginscreen.style.width = document.defaultView.getComputedStyle(document.body, null).getPropertyValue('width');
				loginscreen.style.height = document.defaultView.getComputedStyle(document.body, null).getPropertyValue('height');
			}
			
			loginscreen.style.display = 'inline';
			loginscreen.scrollIntoView();
			document.getElementById('loginusername').focus();
		},
		
		hidelogin: function()
		{
			document.getElementById('loginscreen').style.display = 'none';
		},
		
		add_onregister_block: function(blockname)
		{
			GlobalVars.addVariable("register_block_" + (this.displayRegister++), blockname);
		},
		
		add_onunregister_block: function(blockname)
		{
			GlobalVars.addVariable("unregister_block_" + (this.displayUnRegister++), blockname);
		},
		
		show_register_blocks: function()
		{
			var blocks = GlobalVars.searchByPrefix("register_block_");
			
			for(var i=0;i<blocks.length;i++)
			{
				document.getElementById(blocks[i]).style.display = 'inline';
			}
		},
		
		hide_unregister_blocks: function()
		{
			var blocks = GlobalVars.searchByPrefix("unregister_block_");
			
			for(var i=0;i<blocks.length;i++)
			{
				document.getElementById(blocks[i]).style.display = 'none';
			}
		}
		
	};
	
	var Forms = {
		
		init: function()
		{
			for(var k in this)
			{
				var obj = eval("this." + k);
				
				if(obj.init)
				{
					obj.init();
				}
			}
		},
		
		validation: {
			
			validate: function(formid)
			{
				var form = document.getElementById(formid);
				
				var found = false;
				
				var inputs = form.getElementsByTagName("input");
				for(var i=0;i<inputs.length;i++)
				{
					if(inputs[i].hasAttribute)
					{
						if(inputs[i].hasAttribute("minlength"))
						{
							if(parseInt(inputs[i].getAttribute("minlength")) > inputs[i].value.length)
							{
								found = true;
							}
						}
					}
					else
					{
						if(inputs[i].getAttribute("minlength"))
						{
							if(parseInt(inputs[i].getAttribute("minlength")) > inputs[i].value.length)
							{
								found = true;
							}
						}
					}
					
					if(inputs[i].getAttribute("type") == "submit")
					{
						submitbutton = inputs[i];
					}
				}
				
				if(found == false)
				{
					submitbutton.disabled = false;
				}
				else
				{
					submitbutton.disabled = true;
				}
			}
			
		},
		
		autoComplete: {
			
			updateInterval: 10,
			
			enableOn: function(obj)
			{
				var suggestbox = document.createElement("div");
				suggestbox.className = 'autoCompleteSuggestBox';
				suggestbox.setAttribute("id", obj.getAttribute("id") + "_suggestBox");
				document.body.appendChild(suggestbox);
				
				if(BrowserDetect.browser == "Explorer")
				{
					Extend.addEvent(obj, "keydown", Forms.autoComplete.actIE);
					Extend.addEvent(obj, "keyup", Forms.autoComplete.suggestIE);
				}
				else
				{
					Extend.addEvent(obj, "keydown", Forms.autoComplete.actFF);
					Extend.addEvent(obj, "keyup", Forms.autoComplete.suggestFF);
				}
			},
			
			actIE: function()
			{
				if(event.keyCode == 13)
				{
					var element = event.srcElement;
					var words = element.value.split(" ");
					
					var suggestion = element.getAttribute("suggestedItem");
					
					if(suggestion != null)
					{
						var suggestbox = document.getElementById(element.getAttribute("id") + "_suggestBox");
						suggestbox.style.display = 'none';
						
						words[words.length - 1] = suggestion;
						
						element.value = words.join(" ");
					}
					
					return false;
				}
			},
			
			actFF: function(e)
			{
				if(e.keyCode == 13)
				{
					var element = e.target;
					var words = element.value.split(" ");
					
					var suggestion = element.getAttribute("suggestedItem");
					
					if(suggestion != null)
					{
						var suggestbox = document.getElementById(element.getAttribute("id") + "_suggestBox");
						suggestbox.style.display = 'none';
						
						words[words.length - 1] = suggestion;
						
						element.value = words.join(" ");
					}
					
					return false;
				}
			},
			
			suggestIE: function()
			{
				var element = event.srcElement;
				
				var words = element.value.split(" ");
				
				if(event.keyCode == 13)
				{
					return;
				}
				
				if(words[words.length - 1].length == 0)
				{
					var suggestbox = document.getElementById(element.getAttribute("id") + "_suggestBox");
					
					if(suggestbox)
					{
						suggestbox.style.display = 'none';
					}
					
					return;
				}
				
				var conn = new AjaxConnection(element.getAttribute("autocomplete"));
				conn.addVariable('activeObject', element.getAttribute("id"));
				conn.addVariable('suggestWord', words[words.length - 1]);
				conn.successFunction = 	function(domEl)
										{
											var activeobject = domEl.getElementsByTagName("activeObject")[0].childNodes[0].nodeValue;
											var suggestbox = document.getElementById(activeobject + "_suggestBox");
											var activeobjectobj = document.getElementById(activeobject);
											
											if(suggestbox.getAttribute("abspos") == null)
											{
												suggestbox.style.left = Extend.findPos(activeobjectobj)["left"] + "px";
												suggestbox.style.top = Extend.findPos(activeobjectobj)["top"] + suggestbox.offsetHeight + 10 + "px";
												
												suggestbox.setAttribute("abspos", "true");
											}
											
											var suggestions = domEl.getElementsByTagName("suggestion");
											
											if(suggestions.length > 0)
											{
												suggestbox.innerHTML = '';
												suggestbox.style.display = 'block';
												
												for(var i=0;i<suggestions.length - 1;i++)
												{
													suggestbox.innerHTML += suggestions[i].childNodes[0].nodeValue + ", ";
												}
												
												suggestbox.innerHTML += suggestions[suggestions.length - 1].childNodes[0].nodeValue;
												
												activeobjectobj.setAttribute("suggestedItem", suggestions[0].childNodes[0].nodeValue);
											}
											else
											{
												suggestbox.style.display = 'none';
												
												activeobjectobj.removeAttribute("suggestedItem");
											}
										}
				conn.execute();
			},
			
			suggestFF: function(e)
			{
				var element = e.target;
				
				var words = element.value.split(" ");
				
				if(e.keyCode == 13)
				{
					return;
				}
				
				if(words[words.length - 1].length == 0)
				{
					var suggestbox = document.getElementById(element.getAttribute("id") + "_suggestBox");
					
					if(suggestbox)
					{
						suggestbox.style.display = 'none';
					}
					
					return;
				}
				
				var conn = new AjaxConnection(element.getAttribute("autocomplete"));
				conn.addVariable('activeObject', element.getAttribute("id"));
				conn.addVariable('suggestWord', words[words.length - 1]);
				conn.successFunction = 	function(domEl)
										{
											var activeobject = domEl.getElementsByTagName("activeObject")[0].childNodes[0].nodeValue;
											var suggestbox = document.getElementById(activeobject + "_suggestBox");
											var activeobjectobj = document.getElementById(activeobject);
											
											if(suggestbox.getAttribute("abspos") == null)
											{
												suggestbox.style.left = Extend.findPos(activeobjectobj)["left"] + "px";
												suggestbox.style.top = Extend.findPos(activeobjectobj)["top"] + suggestbox.offsetHeight + 10 + "px";
												
												suggestbox.setAttribute("abspos", "true");
											}
											
											var suggestions = domEl.getElementsByTagName("suggestion");
											
											if(suggestions.length > 0)
											{
												suggestbox.innerHTML = '';
												suggestbox.style.display = 'block';
												
												for(var i=0;i<suggestions.length - 1;i++)
												{
													suggestbox.innerHTML += suggestions[i].childNodes[0].nodeValue + ", ";
												}
												
												suggestbox.innerHTML += suggestions[suggestions.length - 1].childNodes[0].nodeValue;
												
												activeobjectobj.setAttribute("suggestedItem", suggestions[0].childNodes[0].nodeValue);
											}
											else
											{
												activeobjectobj.removeAttribute("suggestedItem");
												suggestbox.style.display = 'none';
											}
										}
				conn.execute();
			}
			
		},
		
		async: {
			
			forms: Array(),
			
			defaults:
			{
				requiredfields: Array(),
				
				onerror: function()
				{
					
				},
				
				onload: function()
				{
				
				},
				
				onsuccess: function()
				{
				
				},
				
				onfailure: function()
				{
				
				},
				
				onfailedrequirements: function()
				{
				
				}
			},
			
			init: function()
			{
				var docforms = document.getElementsByTagName("form");
				
				for(var i=0;i<docforms.length;i++)
				{
					var doc_id = docforms[i].getAttribute("id");
					
					if(typeof(this.forms[doc_id]) == "undefined")
					{
						this.forms[doc_id] = new Object();
					}
					
					if(typeof(this.forms[doc_id].onerror) == "undefined")
					{
						this.forms[doc_id].onerror = this.defaults.onerror;
					}
					
					if(typeof(this.forms[doc_id].onload) == "undefined")
					{
						this.forms[doc_id].onload = this.defaults.onload;
					}
					
					if(typeof(this.forms[doc_id].onsuccess) == "undefined")
					{
						this.forms[doc_id].onsuccess = this.defaults.onsuccess;
					}
					
					if(typeof(this.forms[doc_id].onfailure) == "undefined")
					{
						this.forms[doc_id].onfailure = this.defaults.onfailure;
					}
					
					if(typeof(this.forms[doc_id].onfailedrequirements) == "undefined")
					{
						this.forms[doc_id].onfailedrequirements = this.defaults.onfailedrequirements;
					}
					
					this.forms[doc_id].clear = this.clear;
					this.forms[doc_id].object = docforms[i];
					
					// Add some validation
					var inputs = docforms[i].getElementsByTagName("input");
					
					for(var j=0;j<inputs.length;j++)
					{
						if(inputs[j].hasAttribute)
						{
							if(inputs[j].hasAttribute("minlength"))
							{
								inputs[j].onkeyup = new Function("Forms.validation.validate('" + doc_id + "')");
							}
							
							if(inputs[j].hasAttribute("autocomplete"))
							{
								Forms.autoComplete.enableOn(inputs[j]);
							}
						}
						else
						{
							if(inputs[j].getAttribute("minlength"))
							{
								inputs[j].onkeyup = new Function("Forms.validation.validate('" + doc_id + "')");
							}
							
							if(inputs[j].getAttribute("autocomplete"))
							{
								Forms.autoComplete.enableOn(inputs[j]);
							}
						}
					}
				}
			},
			
			clear: function()
			{
				this.object.reset();
			},
			
			send: function(formid)
			{
				var theform = document.getElementById(formid);
				var conn = new AjaxConnection(theform.getAttribute("action"));
				
				conn.requestType = (theform.getAttribute("method").toLowerCase() == "post") ? SERVER_POST : SERVER_GET;
				conn.successFunction = this.forms[theform.getAttribute("id")].onsuccess;
				conn.loadingFunction = this.forms[theform.getAttribute("id")].onload;
				conn.setOnError = this.forms[theform.getAttribute("id")].onfailure;
				conn.async = true;
				
				var inputs = theform.getElementsByTagName("input");
				for(var i=0;i<inputs.length;i++)
				{
					if(inputs[i].getAttribute("type") == "checkbox" || inputs[i].getAttribute("type") == "radio")
					{
						if(inputs[i].checked)
						{
							conn.addVariable(inputs[i].getAttribute("name"), inputs[i].getAttribute("value"));
						}
					}
					else if(inputs[i].getAttribute("type") == "text" || inputs[i].getAttribute("type") == "hidden" || inputs[i].getAttribute("type") == "password")
					{
						conn.addVariable(inputs[i].getAttribute("name"), inputs[i].value);
					}
				}
				
				var selects = theform.getElementsByTagName("select");
				for(var i=0;i<selects.length;i++)
				{
					conn.addVariable(selects[i].getAttribute("name"), selects[i].options[selects[i].selectedIndex].value);
				}
				
				var textareas = theform.getElementsByTagName("textarea");
				for(var i=0;i<textareas.length;i++)
				{
					conn.addVariable(textareas[i].getAttribute("name"), textareas[i].value);
				}
				
				conn.execute();
			}
			
		},
		
		sync: {
			
			functions: new Array(),
			
			init: function()
			{
				var docforms = document.getElementsByTagName("form");
				
				for(var i=0;i<docforms.length;i++)
				{	
					// Add some validation
					var inputs = docforms[i].getElementsByTagName("input");
					var doc_id = docforms[i].getAttribute("id");
					
					for(var j=0;j<inputs.length;j++)
					{
						if(inputs[j].hasAttribute)
						{
							if(inputs[j].hasAttribute("minlength"))
							{
								inputs[j].onkeyup = new Function("Forms.validation.validate('" + doc_id + "')");
							}
						}
						else
						{
							if(inputs[j].getAttribute("minlength"))
							{
								inputs[j].onkeyup = new Function("Forms.validation.validate('" + doc_id + "')");
							}
						}
					}
				}
			},
			
			send: function(formid)
			{
				var theform = document.getElementById(formid);
			}
		
		}
		
	};
	
	var Environment = {
		
		url: new String(""),
		getvars: Array(),
		
		init: function()
		{
			this.url = document.location.href;
		},
		
		getparam: function(strParamName)
		{
			var strReturn = "";
			
			if(this.url.indexOf("?") > -1)
			{
				var aQueryString = this.url.split("#")[0].substr(this.url.indexOf("?")).toLowerCase().split("&");
				
				for ( var iParam = 0; iParam < aQueryString.length; iParam++ )
				{
					if(aQueryString[iParam].indexOf(strParamName + "=") > -1 )
					{
						var aParam = aQueryString[iParam].split("=");
						strReturn = aParam[1];
						break;
					}
				}
			}
			
			if(strReturn.length > 0)
			{
				return strReturn;
			}
			else
			{
				return null;
			}
		},
		
		getParamsCustom: function(paramsplit, valuesplit)
		{
			var param = new Array();
			var aQueryString = this.url.split("#")[0].substr(this.url.indexOf("//") + 2).toLowerCase().split(paramsplit);
			
			if(valuesplit.length > 0)
			{
				// aQueryString[0] = host
				for ( var iParam = 1; iParam < aQueryString.length; iParam++ )
				{
					param[param.length] = aQueryString[iParam].split(valuesplit);
				}
				
				return param;
			}
			else
			{
				return aQueryString;
			}
		},
		
		getParamCustom: function(strParamName, paramsplit, valuesplit)
		{
			var strParamName = strParamName.toLowerCase();
			var aQueryString = this.url.split("#")[0].substr(this.url.indexOf("//") + 2).toLowerCase().split(paramsplit);
			
			// aQueryString[0] = host
			if(valuesplit.length > 0)
			{
				for ( var iParam = 1; iParam < aQueryString.length; iParam++ )
				{
					var param = aQueryString[iParam].split(valuesplit);
					
					if(param[0].toLowerCase() == strParamName)
					{
						if(param[1].length > 0)
						{
							return param[1];
						}
						else
						{
							// Parameter exists but it has no value
							
							return true;
						}
					}
				}
			}
			else
			{
				for ( var iParam = 1; iParam < aQueryString.length; iParam++ )
				{
					if(aQueryString[iParam].toLowerCase() == strParamName)
					{
						return true;
					}
				}
			}
			
			// No parameter found
			return null;
		}
	};
	
	var GlobalVars = {
		
		variablesArray: Array(),
		
		addVariable: function(varname, varvalue)
		{
			this.variablesArray[varname] = varvalue;
		},
		
		removeVariable: function(varname)
		{
			this.variablesArray[varname] = null;
		},
		
		getVariable: function(varname)
		{
			return this.variablesArray[varname];
		},
		
		searchByPrefix: function(prefix)
		{
			var returnarray = Array();
			
			for(var i in this.variablesArray)
			{
				if(i.indexOf(prefix) == 0)
				{
					returnarray[returnarray.length] = this.variablesArray[i];
				}
			}
			
			return returnarray;
		},
		
		getFirstVar: function(prefix)
		{
			for(var i in this.variablesArray)
			{
				if(i.indexOf(prefix) == 0)
				{
					return this.variablesArray[i];
				}
			}
			
			return null;
		}
		
	};
	
	var BrowserDetect = {
		
		init: function ()
		{
			this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
			this.version = this.searchVersion(navigator.userAgent)
				|| this.searchVersion(navigator.appVersion)
				|| "an unknown version";
			this.OS = this.searchString(this.dataOS) || "an unknown OS";
		},
		
		searchString: function (data)
		{
			for (var i=0;i<data.length;i++)	{
				var dataString = data[i].string;
				var dataProp = data[i].prop;
				this.versionSearchString = data[i].versionSearch || data[i].identity;
				if (dataString) {
					if (dataString.indexOf(data[i].subString) != -1)
						return data[i].identity;
				}
				else if (dataProp)
					return data[i].identity;
			}
		},
		
		searchVersion: function (dataString)
		{
			var index = dataString.indexOf(this.versionSearchString);
			if (index == -1) return;
			return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
		},
		
		dataBrowser:
		[
			{
				string: navigator.vendor,
				subString: "Apple",
				identity: "Safari"
			},
			{
				prop: window.opera,
				identity: "Opera"
			},
			{
				string: navigator.vendor,
				subString: "iCab",
				identity: "iCab"
			},
			{
				string: navigator.vendor,
				subString: "KDE",
				identity: "Konqueror"
			},
			{
				string: navigator.userAgent,
				subString: "Firefox",
				identity: "Firefox"
			},
			{	// for newer Netscapes (6+)
				string: navigator.userAgent,
				subString: "Netscape",
				identity: "Netscape"
			},
			{
				string: navigator.userAgent,
				subString: "MSIE",
				identity: "Explorer",
				versionSearch: "MSIE"
			},
			{
				string: navigator.userAgent,
				subString: "Gecko",
				identity: "Mozilla",
				versionSearch: "rv"
			},
			{ 	// for older Netscapes (4-)
				string: navigator.userAgent,
				subString: "Mozilla",
				identity: "Netscape",
				versionSearch: "Mozilla"
			}
		],
		
		dataOS : 
		[
			{
				string: navigator.platform,
				subString: "Win",
				identity: "Windows"
			},
			{
				string: navigator.platform,
				subString: "Mac",
				identity: "Mac"
			},
			{
				string: navigator.platform,
				subString: "Linux",
				identity: "Linux"
			}
		]
	
	};
	
	BrowserDetect.init();

//-->