﻿
	if ( !qFlux )
		var qFlux = {};
	qFlux.xmlHttpQueue = [];
	qFlux.wheelQueue = [];
	qFlux.mouseQueue = [];
	qFlux.dragStartX = 0;
	qFlux.dragStartY = 0;
	qFlux.dragOffsetX = 0;
	qFlux.dragOffsetY = 0;
	qFlux.dragElement = null;
	qFlux.dragZ = 0;
	var xmlHttp = null;
	qFlux.isShiftDown = false;
	qFlux.isCtrlDown = false;
	qFlux.isAltDown = false;
	try
		{ xmlHttp = new XMLHttpRequest(); }
	catch (e)
		{
			try
				{ xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); }
			catch (e)
				{ xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); }
		}
	qFlux.smiley = {};
	qFlux.smiley[':-D'] = "<img src=\"transparent.gif\" class=\"icon_grin\"/>";
	qFlux.smiley[':-P'] = "<img src=\"transparent.gif\" class=\"icon_razz\"/>";
	qFlux.smiley[';-\\)'] = "<img src=\"transparent.gif\" class=\"icon_wink\"/>";
	qFlux.smiley[':-\\('] = "<img src=\"transparent.gif\" class=\"icon_sad\"/>";
	qFlux.smiley['8-\\)'] = "<img src=\"transparent.gif\" class=\"icon_cool\"/>";
	qFlux.smiley[':-S'] = "<img src=\"transparent.gif\" class=\"icon_confused\"/>";
	qFlux.smiley['>:\\)'] = "<img src=\"transparent.gif\" class=\"icon_evil\"/>";
	qFlux.smiley['~:\\|'] = "<img src=\"transparent.gif\" class=\"icon_sweat\"/>";
	qFlux.smiley['8-o'] = "<img src=\"transparent.gif\" class=\"icon_wow\"/>";
	qFlux.smiley[']:\\|'] = "<img src=\"transparent.gif\" class=\"icon_doupt\"/>";
	document.write('<style type="text/css">.javascript {display:block;}</style>');

	//####################################################################################################
	
	document.onkeyup = function(event)
		{
			if ( event == null )
				{ event = window.event; }
			if ( typeof(event.keyCode) == 'number'  ) 
				{ event = event.keyCode; }
			else if ( typeof(event.which) == 'number' )
				{ event = event.which; }
			else if ( typeof(event.charCode) == 'number'  )
				{ event = event.charCode; }
			else
				{ return; }
			if ( event == 16 ) 
				{ 
					qFlux.isShiftDown = false;
					return false;
				}
			else if ( event == 17 ) 
				{ 
					qFlux.isCtrlDown = false;
					return false;
				}
			else if ( event == 18 ) 
				{ 
					qFlux.isAltDown = false;
					return false;
				}
		}
	
	//####################################################################################################
	
	document.onkeydown = function(event)
		{
			if ( event == null )
				{ event = window.event; }
			if ( typeof(event.keyCode) == 'number'  ) 
				{ event = event.keyCode; }
			else if ( typeof(event.which) == 'number' )
				{ event = event.which; }
			else if ( typeof(event.charCode) == 'number'  )
				{ event = event.charCode; }
			else
				{ return; }
			if ( event == 16 ) 
				{ 
					qFlux.isShiftDown = true;
					return false;
				}
			else if ( event == 17 ) 
				{ 
					qFlux.isCtrlDown = true;
					return false;
				}
			else if ( event == 18 ) 
				{ 
					qFlux.isAltDown = true;
					return false;
				}
		}
	
	//####################################################################################################

	qFlux.xmlHttpRequest = function(script, parameter, handler)
		{
			qFlux.xmlHttpQueue.push([script, parameter, handler]);
			if ( !qFlux.isRequesting )
				{
					qFlux.isRequesting = true;
					qFlux.xmlHttpSend();
				}
		}
	
	//####################################################################################################

	qFlux.xmlHttpSend = function()
		{
			if ( qFlux.xmlHttpQueue.length <= 0 )
				{
					qFlux.isRequesting = false;
					return;
				}
			var request = qFlux.xmlHttpQueue.shift();
			xmlHttp.open('POST', request[0] + '?' + Math.random(), true);
			xmlHttp.onreadystatechange = eval(request[2]);
			xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			xmlHttp.setRequestHeader("Content-length", request[1].length);
			xmlHttp.setRequestHeader("Connection", "close");
			xmlHttp.send(request[1]);
		}
	
	//####################################################################################################
	
	qFlux.checkCookie = function(name)
		{
			var cookies = document.cookie.split(';');
			for ( i in cookies )
				{ 
					var cookie = cookies[i].split('=');
					if ( cookie[0].match(/qFluxJS/) )
						{ return true; }
				}
			return false;
		}
	
	//####################################################################################################
	
	qFlux.setCookie = function(name, value, isSubOption)
		{
			if ( document.cookie.length == 0 )
				{
					if ( value )
						{ document.cookie = 'qFluxJS=' + name + ":" + value; }
					return;
				}
			var string = "";
			var isUnset = true;
			var cookies = document.cookie.split(';');
			for ( i in cookies )
				{ 
					var cookie = cookies[i].split('=');
					if ( !cookie[0].match(/qFluxJS/) || !cookie[1] )
						{ continue; }
					var values = cookie[1].split('|');
					for ( n in values )
						{
							var data = values[n].split(':');
							if ( data[0] == name )
								{
									if ( !value )
										{ continue; }
									if ( isSubOption )
										{
											var substring = "";
											var isSubUnset = true;
											var options = data[1].split('+');
											for ( u in options )
												{
													if ( options[u] != value )
														{ substring == "" ? substring = options[u] : substring += '+' + options[u]; }
													else
														{ isSubUnset = false; }
												}
											if ( isSubUnset )
												{ substring == "" ? substring = value : substring += '+' + value; }
											if ( substring != "" )
												{ string == "" ? string = name + ':' + substring : string += '|' + name + ':' + substring; }
										}
									else
										{ string == "" ? string = name + ':' + value : string += '|' + name + ':' + value; }
									var isUnset = false;
								}
							else
								{ string == "" ? string = values[n] : string += '|' + values[n]; }
						}
				}
			if ( isUnset && value )
				{ string == "" ? string = name + ':' + value : string += '|' + name + ':' + value; }
			document.cookie = 'qFluxJS=' + string;
		}
	
	//####################################################################################################
	
	qFlux.getCookie = function(name)
		{
			if ( document.cookie.length == 0)
				{ return; }
			var cookies = document.cookie.split(';');
			for ( i in cookies )
				{ 
					var cookie = cookies[i].split('=');
					if ( !cookie[0].match(/qFluxJS/) || !cookie[1] )
						{ continue; }
					var values = cookie[1].split('|');
					for ( n in values )
						{
							var data = values[n].split(':');
							if ( data[0] == name )
								{ return data[1]; }
						}
					return;
				}
		}
	
	//####################################################################################################
	
	qFlux.validateMail = function(mail)
		{
			var isRegExpActive = false;
			if ( typeof(RegExp) == 'function' )
				{
					var regExpTest = new RegExp('abc');
					if ( regExpTest.test('abc') )
						{ isRegExpActive = true; }
				}
			if ( isRegExpActive )
				{
					var mailRegExp = new RegExp('^([a-zA-Z0-9\\-\\.\\_]+)' + '(\\@)([a-zA-Z0-9\\-\\.]+)'+ '(\\.)([a-zA-Z]{2,4})$');
					return mailRegExp.test(mail);
				}
			return ( mail.search('@') >= 1 && mail.lastIndexOf('.') > mail.search('@') && mail.lastIndexOf('.') >= mail.length - 5 );
		}
	
	//####################################################################################################

	qFlux.keyDown = function(event, enterDown) 
		{
			if ( event == null )
				{ event = window.event; }
			if ( typeof(event.keyCode) == 'number'  ) 
				{ event = event.keyCode; }
			else if ( typeof(event.which) == 'number' )
				{ event = event.which; }
			else if ( typeof(event.charCode) == 'number'  )
				{ event = event.charCode; }
			else
				{ return; }
			if ( event == 13 ) 
				{ 
					enterDown();
					return false;
				}
		}
	
	//####################################################################################################
	
	qFlux.mouseDown = function(event)
		{
			if ( qFlux.dragElement != null )
				{ return false; }
			if ( event == null )
				{ event = window.event; }
			var target = ( event.target == null ? event.srcElement : event.target );
			for ( i in qFlux.mouseQueue )
				{
					if ( target[qFlux.mouseQueue[i][0][0]] == qFlux.mouseQueue[i][0][1] )
						{
							if ( qFlux.mouseQueue[i][4] )
								{ target = document.getElementById(qFlux.mouseQueue[i][4]); }
							qFlux.dragElement = target;
							qFlux.dragStartX = event.clientX;
							qFlux.dragStartY = event.clientY;
							qFlux.dragOffsetX = qFlux.parseFloat(target.style.left);
							qFlux.dragOffsetY = qFlux.parseFloat(target.style.top);
							qFlux.dragZ = target.style.zIndex;
							if ( qFlux.mouseQueue[i][1] )
								{ eval(qFlux.mouseQueue[i][1])(event); }
							target.style.zIndex = 9;
							target.ondragstart = function() { return false; };
							document.onmousemove = qFlux.mouseMove;
							document.body.focus();
							document.onselectstart = function () { return false; };
							return false;
						}
				}
		}
	
	document.onmousedown = qFlux.mouseDown;

	//####################################################################################################
	
	qFlux.mouseMove = function(event)
		{
			if ( event == null )
				{ var event = window.event; }
			var left = qFlux.dragOffsetX + event.clientX - qFlux.dragStartX;
			var top = qFlux.dragOffsetY + event.clientY - qFlux.dragStartY;
			for ( i in qFlux.mouseQueue )
				{
					if ( qFlux.dragElement[qFlux.mouseQueue[i][0][0]] == qFlux.mouseQueue[i][0][1] && qFlux.mouseQueue[i][2] )
						{ eval(qFlux.mouseQueue[i][2])(event, left, top); }
				}
		}

	//####################################################################################################
	
	qFlux.mouseUp = function()
		{
			if ( qFlux.dragElement == null )
				{ return; }
			for ( i in qFlux.mouseQueue )
				{
					if ( qFlux.dragElement[qFlux.mouseQueue[i][0][0]] == qFlux.mouseQueue[i][0][1] && qFlux.mouseQueue[i][3] )
						{ eval(qFlux.mouseQueue[i][3])(); }
				}
			qFlux.dragElement.style.zIndex = qFlux.dragZ;
			document.onmousemove = null;
			document.onselectstart = null;
			qFlux.dragElement.ondragstart = null;
			qFlux.dragElement = null;
		}
	
	document.onmouseup = qFlux.mouseUp;
	
	//####################################################################################################
	
	qFlux.mouseWheel = function(event)
		{
			var delta = 0;
			if ( event == null )
				{ event = window.event; }
			if ( event.wheelDelta )
				{
					delta = event.wheelDelta/120;
					if ( window.opera )
						{ delta = -delta; }
				}
			else if (event.detail)
				{ delta = -event.detail/3; }
			if ( delta != 0 )
				{ 
					var target = ( event.target == null ? event.srcElement : event.target );
					for ( i in qFlux.wheelQueue )
						{
							if ( target[qFlux.wheelQueue[i][0][0]] == qFlux.wheelQueue[i][0][1] )
								{
									eval(qFlux.wheelQueue[i][1])(target, delta);
									if ( event.preventDefault )
										{ event.preventDefault(); }
									event.returnValue = false;
								}
						}
				}
		}
	
	document.onmousewheel = qFlux.mouseWheel;
	if ( window.addEventListener )
		{ window.addEventListener('DOMMouseScroll', qFlux.mouseWheel, false); }
	
	//####################################################################################################
	
	qFlux.jsButtonOver = function(button)
		{
			button.style.cursor = 'pointer';
			button.style.background = 'rgb(210,220,255)';
		}
	
	//####################################################################################################
	
	qFlux.jsButtonOut = function(button)
		{ button.style.background = 'rgb(180,200,230)'; }
	
	//####################################################################################################
	
	qFlux.jsLinkOver = function(link)
		{
			link.style.cursor='pointer';
			link.style.textDecoration = 'underline';
		}
	
	//####################################################################################################
	
	qFlux.jsLinkOut = function(link)
		{ link.style.textDecoration = 'none'; }
	
	//####################################################################################################

	qFlux.insertIcon = function(input, icon)
		{
			input.focus();
			if ( typeof document.selection != 'undefined' )
				{
					var range = document.selection.createRange();
					range.text = icon;
				}
			else if ( typeof input.selectionStart != 'undefined' )
				{ input.value = input.value.substr(0, input.selectionStart) + icon + input.value.substr(input.selectionEnd); }
		}

	//####################################################################################################
	
	qFlux.parseFloat = function(value)
		{
			var integer = parseFloat(value);
			return ( integer == null || isNaN(integer) ? 0 : integer );
		}
	
	//####################################################################################################
	
	qFlux.absLeft = function(element)
		{ return (element.offsetParent) ? element.offsetLeft + qFlux.absLeft(element.offsetParent) : element.offsetLeft; }
	
	//####################################################################################################
	
	qFlux.absTop = function(element)
		{ return (element.offsetParent) ? element.offsetTop + qFlux.absTop(element.offsetParent) : element.offsetTop; }
