
$F = (function(){
	var dataBrowser = [
				{string: navigator.userAgent, subString: "OmniWeb", versionSearch: "OmniWeb/", identity: "OmniWeb"},
				{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: "FF", versionSearch: "Firefox"}, 
				{string: navigator.vendor, subString: "Camino", identity: "Camino"}, 
				{/* for newer Netscapes (6+) */ string: navigator.userAgent, subString: "Netscape", identity: "NS"}, 
				{string: navigator.userAgent, subString: "MSIE", identity: "MSIE", 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: "Win"}, 
			{string: navigator.platform, subString: "Mac", identity: "Mac"}, 
			{string: navigator.platform, subString: "Linux", identity: "Linux"}
			],
		psTempVersion = 0,
		oBrowser = {
				browser : "unknown",
				version : "unknown",
				os : "unknown"
			};

		function psSearchString (aData)
			{
				var oData, dataString, dataProp;
				for (var i=0, L=aData.length; i<L; i++)
					{
						oData = aData[i];
						dataString = oData.string;
						dataProp = oData.prop;
						psTempVersion = oData.versionSearch || oData.identity;
						if (dataString)
							{
								if (dataString.indexOf(oData.subString) != -1)
								return oData.identity;
							}
						else
							if (dataProp)
								return oData.identity;
					}
			}

		function psSearchVersion(sDataString)
			{
				var index = sDataString.indexOf(psTempVersion);
				if (index == -1) return;
				return parseFloat(sDataString.substring(index + psTempVersion.length + 1));
			}

		oBrowser.browser = psSearchString(dataBrowser) || "unknown";
		oBrowser.version  = psSearchVersion(navigator.userAgent) || psSearchVersion(navigator.appVersion) || "unknown";
		oBrowser.os = psSearchString(dataOS) || "unknown";
		oBrowser["is"+oBrowser.browser] = true;
		if (oBrowser.version != "unknown")
			oBrowser["is"+oBrowser.browser+parseInt(oBrowser.version)] = true;
		oBrowser["is"+oBrowser.os] = true;
		
	return {
		browserInfo : oBrowser,
		loadSequence : function()
			{
				var aSequence = arguments;
				//TODO 
			},

		getFirstElementChild : function(oObject)
			{
				/*@cc_on @if (@_win32)
					return oObject.firstChild;
				/*@else @*/
					var i=-1, L=oObject.childNodes.length;
					while(i < L)
						if (oObject.childNodes[++i].nodeType == 1)
							return oObject.childNodes[i];
				/*@end @*/
				return null;
			},
		getLastElementChild : function(oObject)
			{
				/*@cc_on @if (@_win32)
					return oObject.lastChild;
				/*@else @*/
					var i=oObject.childNodes.length;
					while(i > 0)
						if (oObject.childNodes[--i].nodeType == 1)
							return oObject.childNodes[i];
				/*@end @*/
				return null;
			},

		getParent : function (oObject)
			{
				/*@cc_on @if (@_win32)
					return oObject.parentElement;
				/*@else @*/
					return oObject.parentNode;
				/*@end @*/
			},

		getGlobalXY: function(oObject)
			{
				var oTemp = oObject, nX =0, nY = 0;
				while(oTemp)
					{
						/*@cc_on @if (@_win32)
							nX += oTemp.offsetLeft;
							nY += oTemp.offsetTop;
						/*@else @*/
							nX += oTemp.offsetLeft;
							nY += oTemp.offsetTop;
						/*@end @*/
						oTemp = oTemp.offsetParent;
					}
				return {x : nX, y : nY};
			},
		
		setGlobalXY : function(oObject, x, y)
			{
				if (oObject)
					{
						if ( ! (x === undefined || x === null))
							{
								/*@cc_on @if (@_win32)
									oObject.style.posLeft = x;
								/*@else @*/
									oObject.style.left = x+'px';
								/*@end @*/
							}
						if ( ! (y === undefined || y === null))
							{
								/*@cc_on @if (@_win32)
									oObject.style.posTop = y;
								/*@else @*/
									oObject.style.top = y+'px';
								/*@end @*/
							}
					}
			},

		setGlobalCenter : function(oObject)
			{
//				if (oObject && oObject.style.position == 'absolute')
					{
						var
							//nWidth = parseInt(document.body.clientWidth),
							//nHeight = parseInt(document.body.clientHeight),
							nWidth = parseInt(
								/*@cc_on @if (@_win32) 
									document.body.clientWidth
								/*@else @*/
									window.innerWidth
								/*@end @*/
								),
							nHeight = parseInt(
								/*@cc_on @if (@_win32) 
									document.body.clientHeight
								/*@else @*/
									window.innerHeight
								/*@end @*/
							),
							
							nObjWidth = parseInt(oObject.clientWidth ? oObject.clientWidth : 
								/*@cc_on @if (@_win32) 
									oObject.style.posWidth
								/*@else @*/
									oObject.style.width
								/*@end @*/
								),
							nObjHeight = parseInt(oObject.clientHeight ? oObject.clientHeight :
								/*@cc_on @if (@_win32)
									oObject.style.posHeight
								/*@else @*/
									oObject.style.height
								/*@end @*/
							);
						this.setGlobalXY(oObject, (nWidth - nObjWidth) / 2, (nHeight- nObjHeight) / 2);
					}
			},

		attachEvent: function(oObject, sEvent, fHandler, bState)
			{
				bState = bState ? false : true;
				/*@cc_on @if (@_win32)
					if (oObject.attachEvent)
						{
							return oObject.attachEvent('on'+sEvent, fHandler);
						}
				/*@else @*/
					if (oObject.addEventListener)
						return oObject.addEventListener(sEvent, fHandler, bState);
				/*@end @*/
				return false;
			},

		detachEvent: function(oObject, sEvent, fHandler, bState)
			{
				bState = bState ? false : true;
				/*@cc_on @if (@_win32)
					if (oObject.detachEvent)
						{
							return oObject.detachEvent('on'+sEvent, fHandler);
						}
				/*@else @*/
					if (oObject.removeEventListener)
						return oObject.removeEventListener(sEvent, fHandler, bState);
				/*@end @*/
				return false;
			},
		
		stopEvent : function (oEvent)
			{
						/*@cc_on @if (@_win32)
							if (!oEvent)
								oEvent = window.event;
							if (oEvent);
								{		
									oEvent.cancelBubble = true;
									oEvent.returnValue = false;
								}
						/*@else @*/
							if (oEvent)
								{
									oEvent.preventDefault();
									oEvent.stopPropagation();
								}
						/*@end @*/
			},

		contains: function(oElement, oChild)
			{
				if (!oChild || !oElement || oElement === oChild)
					return false;
				/*@cc_on @if (@_win32)
					return oElement.contains(oChild);
				/*@else @*/
					var oTemp = oChild;
					while (oTemp && oTemp.parentNode && oTemp !== document.body)
						{
							if (oTemp === oElement)
								break;
							oTemp = oTemp.parentNode;
						}
					return oTemp === oElement;
				/*@end @*/
			},



		onLoad : function(oFunction)
			{
				if (window)
					{
						this.attachEvent(window, 'load', oFunction);
					}
			}
	}})();
	
$U = ( function(){

		function pCreateFlashObject(sSource, oInitObject)
			{
				var 
					pnHeight = 0,
					pnWidth = 0,
					psClassId = 'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000',
					paParams = [],
					paArgs = [],
					poVars = oInitObject.vars,
					that = this;

				this.height = oInitObject.height || 0;
				this.width = oInitObject.width || 0;
				this.quality = oInitObject.quality || 'high';
				this.wmode = oInitObject.transparent ? 'transparent' : 'window';
				this.vars = oInitObject.vars || [];
				this.loop = (oInitObject.loop === false || oInitObject.loop == 'false') ? 'false' : 'true';
				this.id = (oInitObject.id ? oInitObject.id : "swf"+Math.round(Math.random()*1000)+(t=new Date).getTime());
				this.allowScriptAccess = oInitObject.allowScriptAccess || 'sameDomain';
				this.allowFullScreen = oInitObject.allowFullScreen ? 'true' : 'false';
				this.menu = (oInitObject.menu === false || oInitObject.menu == 'false') ? 'false' : 'true';
				this.bgcolor =  oInitObject.bgcolor || '#ffffff';
				this.scale = 'showall';
				this.play = (oInitObject.play === false || oInitObject.play == 'false') ? 'false' : 'true';
				this.align = oInitObject.align || 'middle';
				this.pluginspage = 'http://www.adobe.com/go/getflashplayer';
				this.classid = psClassId;
				this.movie = sSource;
				this.src = sSource;
				this.devicefont = oInitObject.devicefont ? 'true' : 'false';
				this.codebase = 'http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0';
				this.type = 'application/x-shockwave-flash';
				this.href = oInitObject.href ? oInitObject.href : null;
				this.object = null;

				this.getHtml = function()
					{
						var sArgs = '', sParams='', sHtml='', sFlashVars = '';
						if ($F.browserInfo.isMSIE)
							{
								paParams = ['movie', 'quality', 'wmode', 'loop', 'allowScriptAccess', 'allowFullScreen', 'menu', 'bgcolor', 'play', 'scale', 'align', 'pluginspage'];
								paArgs = ['id', 'width', 'height', 'classid', 'codebase', 'align'];
							}
						else
							{
								paArgs = ['id', 'src', 'quality', 'bgcolor', 'width', 'height', 'align', 'name', 'align', 'allowScriptAccess', 'wmode', 'type', 'pluginspage', 'loop', 'play'];
							}

						if (poVars)
							for(var sVar in poVars)
								sFlashVars+='&'+sVar+'='+poVars[sVar];
								
						for(var i=0, L=paArgs.length; i<L; i++)
							{
								if (this[paArgs[i]])
									sArgs+=' '+paArgs[i]+'="'+this[paArgs[i]]+'"';
							}

						for(var i=0, L=paParams.length; i<L; i++)
							{
								if (this[paParams[i]])
									sParams+='<PARAM name="'+paParams[i]+'" value="'+this[paParams[i]]+'" />';
							}
						if ($F.browserInfo.isMSIE)
							{
								if (sFlashVars)
									sParams+='<PARAM name="flashVars" value="'+sFlashVars+'" />';
								sHtml = '<OBJECT '+sArgs+'>'+sParams+'</OBJECT>';
							}
						else
							{
								if (sFlashVars)
									sArgs+=' flashVars="'+sFlashVars+'"';
								sHtml = '<EMBED '+sArgs+'></EMBED>';
							}
						//TODO : swf object as JS-object with methods;
						return sHtml;
					}

				this.render = function()
					{
						if (document.readyState!='complete')
							{
								document.write(that.getHtml());
								that.object = document.getElementById(that.id);
							}
						return false;
					}
				return this;
			}

		return {
			getSwfObject : function(sSource, oInitObject)
				{
					return new pCreateFlashObject(sSource, oInitObject);
				},

			renderSwfObject : function(sSource, oInitObject)
				{
					var oObject = new pCreateFlashObject(sSource, oInitObject);
					oObject.render();
					return oObject;
				},

			setCookie : function(sName, sValue, nTime, nSecondsTime)
				{
					var sExpires = '';
					if (nTime)
						{
							var nDate = new Date();
							var nRealTime = nSecondsTime ? nSecondsTime * 1000 : (nTime ? nTime * 60*60*1000 : 0);
							nDate.setTime(nDate.getTime() + nRealTime);
							sExpires = "; expires="+nDate.toGMTString();
						}
					/*@cc_on @if (!@_win32) @*/
						sValue = encodeURI(sValue);
					/*@end @*/
					document.cookie = sName+"="+sValue+sExpires+"; path=/";
				},
			
			getCookie : function(sName)
				{
					var
						NE = sName + "=",
						aCookies = document.cookie.split(';');
					for(var i=0; i < aCookies.length; i++)
						{
							var sElem = aCookies[i];
							while(sElem.charAt(0)==' ')
								sElem = sElem.substring(1, sElem.length);
							if (sElem.indexOf(NE) == 0)
								{
								/*@cc_on @if (@_win32)
									return sElem.substring(NE.length, sElem.length);
								@else @*/
									return decodeURI(sElem.substring(NE.length, sElem.length));
								/*@end @*/
								}
						}
					return null;
				},
	
			removeCookie : function(sName)
				{
					this.setCookie(sName, "", -1);
				},

			getSearchField : function(oInput, sValue, sCssFilled, sCssEmpty)
				{
					var
						that = this,
						pbSaveOriginal = (oInput && oInput.value == sValue),
						psValue = sValue,
						poInput = oInput,
						psCssFilled = sCssFilled,
						psCssEmpty = sCssEmpty;

					function pOnFocus()
						{
							if (!pbSaveOriginal && poInput.value == psValue)
								{
									poInput.value = '';
									poInput.className = psCssFilled;
								}
						}
					
					function pOnBlur()
						{
							if (poInput.value == '' || poInput.value == psValue)
								{
									poInput.value = psValue;
									poInput.className = psCssEmpty;
								}
							else
								poInput.className = psCssFilled;
						}
					if (poInput)
						{
							$F.attachEvent(poInput, 'focus', function() {
										return pOnFocus()
									});
					
							$F.attachEvent(poInput, 'blur', function() {
										return pOnBlur()
									});
					
							$F.attachEvent(poInput, 'keydown', function() {
										//return pOnBlur()
									});
							pOnBlur();
						}
				}
		}
	})();

