	try 
	{
		document.execCommand("BackgroundImageCache", false, true);
	} catch (e) {  }

	window.domLoadTree = {};

	window.onload = function ()
	{
		window.contentLoaded = true;
		for (var z in window.domLoadTree)
		{
			if ('fn_' == z.substring(0, 3))
				window.domLoadTree[z]();
		}
	};

	window.clearDefaultValue = function(elm){if (elm.defaultValue == elm.value) elm.value = "";};
	window.restoreDefaultValue = function(elm){if (elm.value == "") elm.value = elm.defaultValue;};

	var main_block = 'main_block';
	var __keyCode;
	var cancelBubbling = false;

	document.onkeyup = function ()
	{
		__keyCode = null;
	};

	document.onclick = function ()
	{
		if (false === cancelBubbling)
			ddHandler.removeDataLists();

		cancelBubbling = false;
	};

	document.onmouseup = function ()
	{
		ddHandler.activeScroll = null;
		setTimeout("cancelBubbling = false;", 10);
	};

	document.onkeydown = function (e)
	{
		var keyCode;

		if (window.event) keyCode = window.event.keyCode;
		else if (e) keyCode = e.which;

		__keyCode = keyCode;

		if (27 == keyCode)
		{
			productPictureHandler.destroyGallery();
			ddHandler.removeDataLists();
			noticeLayer.show(null);
		}

		if (13 == keyCode)
		{
			if (false !== ddHandler.openDatalist.active)
				ddHandler.setSelected(ddHandler.openDatalist.elm, false);
		}

		if (40 == keyCode)
		{
			if (false !== ddHandler.openDatalist.active)
			{
				ddHandler.dataOut(ddHandler.openDatalist.elm);
				ddHandler.openDatalist.elm = helper_next_node(ddHandler.openDatalist.elm);
				ddHandler.dataOver(ddHandler.openDatalist.elm);

				return false;
			}
		}
		else if (38 == keyCode)
		{
			if (false !== ddHandler.openDatalist.active)
			{
				ddHandler.dataOut(ddHandler.openDatalist.elm);
				ddHandler.openDatalist.elm = helper_prev_node(ddHandler.openDatalist.elm);
				ddHandler.dataOver(ddHandler.openDatalist.elm);

				return false;
			}
		}
	};

	window.onresize = function ()
	{
		if (!noticeLayer.isHidden())
		{
			noticeLayer.resize();
			noticeLayer.positionContent();
		}
	};

	window.onscroll = function ()
	{
		if (!noticeLayer.isHidden())
		{
			noticeLayer.positionContent();
		}
	};

	function handle (delta)
	{
		var list 	= ddHandler.openDatalist;
		var ID		= list.ID;

		if (false !== list.active && 'undefined' != typeof(ddHandler.dropDowns[ID].scrollBar))
		{
			var datalist 	= document.getElementById(ID + '_datalist');
			var max				= datalist.getAttribute(ddHandler.dListLimitSzAttribute);
			var cScroll		= ddHandler.dropDowns[ID].scrollBar.__cScroll;

			if (delta < 0)
			{
				ddHandler.moveAndScroll(ID, cScroll + 2, max);
			}
			else
			{
				ddHandler.moveAndScroll(ID, cScroll - 2, max);
			}
		}
	};

	function wheel (event)
	{
		var delta = 0;

		if (!event)
			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)
			handle(delta);

		if (false !== ddHandler.openDatalist.active)
		{
			if (event.preventDefault)
				event.preventDefault();

			event.returnValue = false;
		}
	};

	if (window.addEventListener)
		window.addEventListener('DOMMouseScroll', wheel, false);

	window.onmousewheel = document.onmousewheel = wheel;

	Array.prototype.contains = function (val)
	{
		for (var x = 0 ; x < this.length ; x++)
		{
			if (val == this[x])
				return true;
		}

		return false;
	};

	function helper_next_node (obj)
	{
		var parent 	= obj.parentNode;
		var next 		= false;
		var nbeg		= false;

		if (parent)
		{
			for (var x = 0 ; x < parent.childNodes.length ; x++)
			{
				if ('DIV' == parent.childNodes[x].tagName && -1 == parent.childNodes[x].className.indexOf('scroll'))
				{
					if ('none' != parent.childNodes[x].style.display)
					{
						nbeg = true;

						if (next)
							return parent.childNodes[x];

						if (parent.childNodes[x] == obj)
							next = true;
					}
					else
					{
						if (nbeg) return obj;
					}
				}
			}
		}

		return (next) ? obj : false;
	};

	function helper_prev_node (obj)
	{
		var parent 	= obj.parentNode;
		var prev 		= null;
		var nbeg		= false;

		if (parent)
		{
			for (var x = 0 ; x < parent.childNodes.length ; x++)
			{
				if ('DIV' == parent.childNodes[x].tagName && -1 == parent.childNodes[x].className.indexOf('scroll'))
				{
					if ('none' != parent.childNodes[x].style.display)
					{
						nbeg = true;

						if (parent.childNodes[x] == obj && null !== prev)
							return prev;

						prev = parent.childNodes[x];
					}
					else
					{
						if (nbeg) return obj;
					}
				}
			}
		}

		return (prev) ? obj : false;
	};

	var utils =
		{
			number_format : function (integer)
			{
				var number 	= parseInt(integer, 10);
				var string 	= integer.toString();
				var parts		= string.split('.');
				var p_len		= parts[0].length;
				var ret			= new Array();

				if (parts[1])
					parts[1] = parts[1].toString().substring(0, 2);
				else
					parts[1] = '00';

				for (var x = p_len ; x > 0 ; x--)
					if (0 == (p_len - x + 1) % 3 && 1 != x)
						ret[x - 1] = ',' + parts[0].charAt(x - 1);
					else
						ret[x - 1] = parts[0].charAt(x - 1);

				if (1 == parts[1].length)
					parts[1] += '0';

				return ret.join('') + '.' + parts[1];
			},
			mouseCoords : function (e)
			{
				var posx = 0;
				var posy = 0;

				if (!e)
					e = window.event;

				if (e.pageX || e.pageY)
				{
					posx = e.pageX;
					posy = e.pageY;
				}
				else if (e.clientX || e.clientY)
				{
					posx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
					posy = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
				}

				return {'x' : posx, 'y' : posy};
			},
			setVal : function (ID, val)
			{
				document.getElementById(ID).value = val;
			},
			findPos : function (obj)
			{
				var curleft = curtop = 0;

				if (obj.offsetParent)
				{
					do
					{
						if (obj.id == main_block)
						{
							curleft += obj.offsetLeft;
							curtop += obj.offsetTop;
							break;
						}
						curleft += obj.offsetLeft - obj.scrollLeft;
						curtop += obj.offsetTop - obj.scrollTop;
					}
					while (obj = obj.offsetParent);

					return {'x' : curleft, 'y' : curtop};
				}
			},
			elmsByClass : function (cls, tag, elm)
			{
				if (!tag) tag = '*';
				if (!elm) elm = document;

				var retnode = new Array();
				var myclass = new RegExp('\\b' + cls + '\\b');
				var elem 		= elm.getElementsByTagName(tag);

				for (var i = 0 ; i < elem.length ; i++)
				{
					var classes = elem[i].className;

					if (myclass.test(classes))
						retnode.push(elem[i]);
				}

				return retnode;
			},
			handleDefaultVal : function (elm, cond)
			{
				if (!cond) cond = 0;

				switch (cond)
				{
					case 0: if (elm.defaultValue == elm.value) elm.value = ''; break;
					case 1: if ('' == elm.value) elm.value = elm.defaultValue; break;
				}
			},
			showHideElmsID : function ()
			{
				for (var x = 0 ; x < arguments.length ; x++)
				{
					this.showHideElm(document.getElementById(arguments[x]), 'block');
				}
			},
			showHideElms : function ()
			{
				var elms = arguments;

				for (var x in elms)
				{
					this.showHideElm(elms[x], 'block');
				}
			},
			showHideElm : function (elm, visible)
			{
				switch (elm.style.display)
				{
					case visible: elm.style.display = 'none'; break;
					case 'none'	: elm.style.display = visible;
				}
			},
			traverseAndAttach : function (arrElm, arrEv)
			{
				for (var x = 0 ; x < arrElm.length ; x++)
				{
					for (var y = 0 ; y < arrEv.length ; y++)
					{
						this.attach(arrElm[x], arrEv[y]['event'], arrEv[y]['action']);
					}
				}
			},
			attach : function (elm, ev, act)
			{
				switch (ev)
				{
					case 'mousedown':
						elm.onmousedown = function ()
						{
							eval(act); return false;
						};
						break;
					case 'contextmenu':
						elm.oncontextmenu = function ()
						{
							eval(act); return false;
						};
				}
			},
			fetchElmContent : function (ID)
			{
				var elm = document.getElementById(ID);

				if (elm) return elm.innerHTML;
			},
			getSize : function (elm)
			{
				return {'w' : elm.offsetWidth, 'h' : elm.offsetHeight};
			},
			getViewPortSize : function ()
			{
				return {'w' : document.documentElement.clientWidth, 'h' : document.documentElement.clientHeight};
			},
			changeOpac : function (opacity, ID, clause)
			{
				if (clause)
					var obj = ID.style;
				else
					var obj = document.getElementById(ID).style;

				obj.opacity = (opacity / 100);
				obj.MozOpacity = (opacity / 100);
				obj.KhtmlOpacity = (opacity / 100);
				obj.filter = "alpha(opacity=" + opacity + ")";

				if (0 == opacity)
					obj.display = 'none';
				else
					obj.display = 'block';
			},
			getOpac : function (elm)
			{
				return elm.style.opacity;
			},
			fillInput : function (inputID, value)
			{
				var elm = document.getElementById(inputID);

				if (elm)
				{
					elm.value = value;

					return true;
				}

				return false;
			},
			newAjax : function ()
			{
				var xmlHttp;

				try
				{
					xmlHttp = new XMLHttpRequest();
				}
				catch(e)
				{
					var xmlHttpVersions = new Array
						(
							'MSXML2.XMLHTTP',
							'Microsoft.XMLHTTP'
						);

					for (var i = 0; (i < xmlHttpVersions.length) && (!xmlHttp); i++)
					{
						try
						{
							xmlHttp = new ActiveXObject(xmlHttpVersions[i]);
						}
						catch (e) { }
					}
				}

				if (!xmlHttp)
					alert("Error creating the XMLHttpRequest object.");
				else
					return xmlHttp;
			},
			decode : function (obj)
			{
				var ret = '';
				var f = true;

				for (var x in obj)
				{
					ret += ((f) ? '' : '&') + x + '=' + obj[x];

					f = false;
				}

				return ret;
			}
		};

	var storage =
		{
			dataList : new Object(),
			add : function (key, val, cond)
			{
				if ('undefined' == typeof(this.dataList[key]) || true === cond)
				{
					this.dataList[key] = val;

					return true;
				}

				return false;
			},
			get : function (key)
			{
				if ('undefined' != typeof(this.dataList[key]))
				{
					return this.dataList[key];
				}

				return false;
			},
			rem : function (key)
			{
				if ('undefined' != typeof(this.dataList[key]))
				{
					delete this.dataList[key];

					return true;
				}

				return false;
			},
			empty : function ()
			{
				delete this.dataList;

				this.dataList = new Object();
			}
		};

	var ajax = 
		{
			request : function (params, callback, chain)
			{
				var obj = utils.newAjax();

				params	= utils.decode(params);
				url 		= '?ajax=1&timestamp=' + (new Date()).getTime();

				obj.open('POST', url, true);

				obj.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
				obj.setRequestHeader('Content-length', params.length);

				obj.onreadystatechange = function () 
				{
					ajax.response(obj, callback, chain);
				};

				obj.send(params); 
			},
			response : function (obj, callback, chain)
			{
				if
					(
						4 == obj.readyState &&
						200 == obj.status
					)
				{
					if ('function' == typeof(callback)) 			callback(obj.responseText);
					if ('function' == typeof(chain.process)) 	chain.process();
				}
			}
		};

	function requestChain (func)
	{
		this.objRequest = new Object();
		this.requestCnt	= 0;
		this.request 		= 0;
		this.fnRequest	= func;
		this.isBusy			= false;

		this.add = function (obj)
		{
			this.objRequest[this.requestCnt] = obj;

			this.requestCnt++;
		};

		this.process = function ()
		{
			if ('function' != typeof(this.fnRequest))
			{
				alert('No ajax request function defined!'); return false;
			}

			if ('undefined' != typeof(this.objRequest[this.request]))
			{
				this.isBusy = true;

				var request = this.objRequest[this.request];

				delete this.objRequest[this.request];

				this.request++;

				if ('function' == typeof(request.pre_call))
					request.pre_call();

				this.fnRequest(request.params, request.callback, this);
			}
			else
			{
				this.isBusy = false;
			}
		};

		this.flush_mid_section = function ()
		{
			var start = this.request;
			var end		= this.requestCnt - 2;

			this.request = this.requestCnt - 1;

			for (var x = start ; x <= end ; x++)
			{
				if ('undefined' != typeof(this.objRequest[x]))
					delete this.objRequest[x];
			}
		};
	};

	var productTopHandler =
		{
			productClasses : new Object
				({
					'mouseover' : 'productTopOver',
					'mouseout'	: 'productTop',
					'mousedown'	: 'productTopDown',
					'mouseup'	: 'productTopDown'
				}),
			productClassesLast : new Object
				({
					'mouseover' : 'productTopLastOver',
					'mouseout'	: 'productTopLast',
					'mousedown'	: 'productTopLastDown',
					'mouseup'	: 'productTopLastDown'
				}),
			loadAction : 'mouseup',
			productLastAttribute : '__isLast',
			hrefAttribute : '__href',
			receive : function (i, e)
			{
				var event 	= e ? e : window.event;
				this.changeCls(i, event['type']);
			},
			changeCls : function (i, key)
			{
				if (i.getAttribute(this.productLastAttribute) == "1")
					i.className = this.productClassesLast[key];
				else
					i.className = this.productClasses[key];
				if (key == this.loadAction)
				{
					var href = i.getAttribute(this.hrefAttribute);
					if (href != "")
						document.location.href = href;
				}
			}
		};

		var productPictureHandler =
		{
			productClasses : new Object
				({
					'mouseover' : 'subPictureOver',
					'mouseout'	: 'subPicture',
					'mousedown'	: 'subPictureOver',
					'mouseup'	: 'subPictureOver'
				}),
			productClassesLast : new Object
				({
					'mouseover' : 'subPictureLastOver',
					'mouseout'	: 'subPictureLast',
					'mousedown'	: 'subPictureLastOver',
					'mouseup'	: 'subPictureLastOver'
				}),
			loadAction : 'mouseup',
			productLastAttribute : '__isLast',
			parentID : '__parentID',
			isVideo : '__video',
			activeParent : "",
			activeParent2 : "",
			activeThumb : "",
			imageListObj : new Object(),
			imageListArr : new Array(),
			currentBigImage : null,
			receive : function (i, e)
			{
				var event 	= e ? e : window.event;
				this.changeCls(i, event['type']);
			},
			changeCls : function (i, key)
			{
				if (i.getAttribute(this.productLastAttribute) == "1")
					i.className = this.productClassesLast[key];
				else
					i.className = this.productClasses[key];
				if (key == this.loadAction)
				{
					var oldParentPicture = document.getElementById(this.activeParent);
					var oldParentPicture2 = document.getElementById(this.activeParent2);

					var parentPicture = document.getElementById(i.getAttribute(this.parentID));
					var isVideo = i.getAttribute(this.isVideo);

					if (oldParentPicture)
					{
						oldParentPicture.style.display = 'none';
					}
					if (parentPicture)
					{
						parentPicture.style.display = 'block';
						this.activeParent = parentPicture.id;
						this.activeThumb = i.id;

						if (isVideo == "1")
						{
							var parentPicture2 = document.getElementById(i.getAttribute(this.parentID) + '2');
							if (parentPicture2)
							{
								parentPicture2.style.display = 'block';
								this.activeParent2 = parentPicture2.id;
							}
						}
						else
						{
							this.currentBigImage = document.getElementById(this.activeParent);
							this.showCurrentBigImage();
						}
					}
					else if (isVideo == "1")
					{
						var parentPicture = document.getElementById(i.getAttribute(this.parentID) + '2');
						if (parentPicture)
						{
							parentPicture.style.display = 'block';
							this.activeParent = parentPicture.id;
						}
					}
				}
			},
			generateList : function (obj)
			{
				var pos;

				if (obj instanceof Object)
					for (var x in obj)
					{
						pos = this.imageListArr.push(x);

						this.imageListObj[x] = pos - 1;
					}
			},
			getPreviousImage : function ()
			{
				if (this.activeThumb in this.imageListObj)
				{
					var pos 		= this.imageListObj[this.activeThumb];
					var newPos 	= (this.imageListArr.length - 1 + pos) % this.imageListArr.length;

					this.changeCls(document.getElementById(this.imageListArr[newPos]), 'mouseup');
				}
			},
			getNextImage : function ()
			{
				if (this.activeThumb in this.imageListObj)
				{
					var pos 		= this.imageListObj[this.activeThumb];
					var newPos 	= (pos + 1) % this.imageListArr.length;

					this.changeCls(document.getElementById(this.imageListArr[newPos]), 'mouseup');
				}
			},
			toggleOverlay : function (show)
			{
				if (show)
				{
					noticeLayer.resize();
					effects.setQueue(effects.fade(noticeLayer.overlayID, 0, 80, 200),
													 "productPictureHandler.buildGallery();");
				}
				else
				{
					if (!noticeLayer.isHidden())
					{
						this.destroyGallery();

						effects.clearQueue();
						effects.setQueue(effects.fade(noticeLayer.overlayID, 80, 0, 200), "");
					}
				}
			},
			toggleGallery : function (elm)
			{
				this.currentBigImage = elm;

				if (document.getElementById('bigGalleryContainer'))
					this.toggleOverlay(false);
				else
					this.toggleOverlay(true);
			},
			buildGallery : function ()
			{
				if (null !== this.currentBigImage)
				{
					var newSrc 	= this.currentBigImage.getAttribute('big_src');
					var gBG			= document.createElement('div');
					var gN			= document.createElement('div');
					var gP			= document.createElement('div');
					var gIMG		= document.createElement('img');
					var gCL			= document.createElement('div');
					var gIW			= document.createElement('div');
					var gSB			= document.createElement('div');

					gBG.id 				= 'bigGalleryContainer';
					gN.id					= 'bigGalleryNext';
					gP.id					= 'bigGalleryPrevious';
					gN.className 	= 'bigGalleryNext';
					gP.className 	= 'bigGalleryPrevious';
					gIMG.id 			= 'bigGalleryImage';
					gIW.id 				= 'bigGalleryImageWrapper';
					gCL.className = 'bigGalleryCloseButton';
					gSB.className = 'subPictureHolder';

					gN.onmousedown 	= function () { productPictureHandler.getNextBigImage(); return false; };
					gN.onmouseover 	= function () { this.className = 'bigGalleryNextOver'; };
					gN.onmouseout 	= function () { this.className = 'bigGalleryNext'; };
					gP.onmousedown 	= function () { productPictureHandler.getPreviousBigImage(); return false; };
					gP.onmouseover 	= function () { this.className = 'bigGalleryPreviousOver'; };
					gP.onmouseout 	= function () { this.className = 'bigGalleryPrevious'; };
					gCL.onmousedown = function () { productPictureHandler.toggleGallery(null); };
					gCL.onmouseover = function () { this.className = 'bigGalleryCloseButtonOver'; };
					gCL.onmouseout 	= function () { this.className = 'bigGalleryCloseButton'; };

					gBG.style.visibility 	= 'hidden';

					gBG.appendChild(gSB);
					gIW.appendChild(gIMG);
					gIW.appendChild(gCL);
					gIW.appendChild(gN);
					gIW.appendChild(gP);
					gBG.appendChild(gIW);

					this.populateThumbnails(gSB);

					document.getElementById('body_container').appendChild(gBG);

					gIMG.onload = function () { productPictureHandler.reposition(); };

					this.showCurrentBigImage();
				}
				else
				{
					this.toggleOverlay(false);
				}
			},
			reposition : function ()
			{
				var gBG		= document.getElementById('bigGalleryContainer');
				var gN		= document.getElementById('bigGalleryNext');
				var gP		= document.getElementById('bigGalleryPrevious');
				var view 	= utils.getViewPortSize();

				gN.style.top = gBG.offsetHeight / 2 - gN.offsetHeight / 2 + 'px';
				gP.style.top = gBG.offsetHeight / 2 - gP.offsetHeight / 2 + 'px';

				if (gBG.offsetHeight < view.h)
					gBG.style.top = view.h / 2 - gBG.offsetHeight / 2 + (document.documentElement.scrollTop + document.body.scrollTop) + 'px';

				gBG.style.left = view.w / 2 - gBG.offsetWidth / 2 + (document.documentElement.scrollLeft + document.body.scrollLeft) + 'px';

				gBG.style.visibility = 'visible';
			},
			populateThumbnails : function (parent)
			{
				var cl;

				for (var x = 0 ; x < this.imageListArr.length ; x++)
				{
					cl = document.getElementById(this.imageListArr[x]).cloneNode(true);

					cl.className = 'subPicture';
					cl.setAttribute(this.productLastAttribute, 0);

					parent.appendChild(cl);
				}
			},
			destroyGallery : function ()
			{
				var elm = document.getElementById('bigGalleryContainer') || false;

				if (elm)
				{
					this.currentBigImage = null;
					elm.parentNode.removeChild(elm);
				}
			},
			showCurrentBigImage : function ()
			{
				var elm = document.getElementById('bigGalleryImage') || false;

				if (null !== this.currentBigImage && elm)
					elm.src = this.currentBigImage.getAttribute('big_src');
			},
			getNextBigImage : function ()
			{
				this.getNextImage();
				this.currentBigImage = document.getElementById(this.activeParent);

				this.showCurrentBigImage();
			},
			getPreviousBigImage : function ()
			{
				this.getPreviousImage();
				this.currentBigImage = document.getElementById(this.activeParent);

				this.showCurrentBigImage();
			}
		};

	var productListHandler =
		{
			productClasses : new Object
				({
					'mouseover' : 'productListRowOver',
					'mouseout'	: 'productListRow',
					'mousedown'	: 'productListRowDown',
					'mouseup'	: 'productListRowDown'
				}),
			productClassesNotActive : new Object
				({
					'mouseover' : 'productListRowOverNotActive',
					'mouseout'	: 'productListRowNotActive',
					'mousedown'	: 'productListRowDownNotActive',
					'mouseup'	: 'productListRowDownNotActive'
				}),
			loadAction : 'mouseup',
			hrefAttribute : '__href',
			notActiveAttribute : '__notActive',
			receive : function (i, e)
			{
				var event 	= e ? e : window.event;
				this.changeCls(i, event['type']);
			},
			changeCls : function (i, key)
			{
				if (i.getAttribute(this.notActiveAttribute) == "1")
					i.className = this.productClassesNotActive[key];
				else
					i.className = this.productClasses[key];
				if (key == this.loadAction)
				{
					var href = i.getAttribute(this.hrefAttribute);
					if (href != "")
						document.location.href = href;
				}
			},
			showBigPicture : function (i, ID, src, targetHref, up)
			{
				var bigPicture = document.getElementById("bigPicture" + ID) || false;
				if (!bigPicture)
				{
					bigPicture = this.addBigPicture(i, "bigPicture" + ID, src, targetHref);
				}
				
				if (true === up)
				{
					bigPicture.style.display = "block";
					this.checkPosition(i, bigPicture, true);
				}
				else
				{
					this.checkPosition(i, bigPicture, false);
					bigPicture.style.display = "block";
				}
			},
			addBigPicture : function (i, ID, src, targetHref)
			{
				var bigPicture = document.createElement('img');
				bigPicture.setAttribute('src', src);
				bigPicture.className = "productImageBig";
				bigPicture.id = ID;
				if (!document.all)
				{
					bigPicture.setAttribute('onmouseup', "document.location.href='" + targetHref + "';");
					bigPicture.setAttribute('onmouseout', "productListHandler.closeBigPicture(this);");
					bigPicture.setAttribute('onmousedown', "productListHandler.closeBigPicture(this);");
				}
				else
				{
					bigPicture.onmouseup = function(){document.location.href = targetHref;};
					bigPicture.onmouseout = function(){productListHandler.closeBigPicture(this);};
					bigPicture.onmousedown = function(){productListHandler.closeBigPicture(this);};
				}
				document.getElementById(main_block).appendChild(bigPicture);
				return bigPicture;
			},
			checkPosition : function (i, bigPicture, up)
			{
				var position = utils.findPos(i);
				
				if (true === up)
				{
					var oH = bigPicture.offsetHeight;
					
					if (10 > oH)
						oH = 240;
					
					bigPicture.style.top = position.y - (oH - i.offsetHeight) + 'px';
				}
				else
				{
					bigPicture.style.top = position.y + 'px';
				}
				
				bigPicture.style.left = position.x - document.getElementById(main_block).offsetLeft + 'px';
			},
			closeBigPicture : function (i)
			{
				i.style.display = 'none';
			}
		};

	var buttonHandler =
		{
			blueClasses : new Object
				({
					'mouseover' : 'blueButtonOver',
					'mouseout'	: 'blueButton',
					'mousedown'	: 'blueButtonClick',
					'mouseup'	: 'blueButtonClicked'
				}),
			blackClasses : new Object
				({
					'mouseover' : 'blackButtonOver',
					'mouseout'	: 'blackButton',
					'mousedown'	: 'blackButtonClick',
					'mouseup'	: 'blackButtonClicked'
				}),
			buttonBlackAttribute : '__black',
			loadAction : 'mouseup',
			actionAttribute : '__action',
			hrefAttribute : '__href',
			receive : function (i, e)
			{
				var event 	= e ? e : window.event;
				this.changeCls(i, event['type']);
			},
			changeCls : function (i, key)
			{
				if (i.getAttribute(this.buttonBlackAttribute) == "1")
					i.className = this.blackClasses[key];
				else
					i.className = this.blueClasses[key];

				if (key == this.loadAction)
				{
					var action = i.getAttribute(this.actionAttribute);
					var href = i.getAttribute(this.hrefAttribute);
					if (action != "")
						eval(action);
					else if (href != "")
						document.location.href = href;
				}
			}
		};

	var buttonScrollHandler =
		{
			blackClasses : new Object
				({
					'mouseover' : 'blackButtonClick',
					'mouseout'	: 'blackButton'
				}),
			scrollVariants : new Object
				({
					'left' : new Object
							({
								type : 'scrollLeft',
								step : -5
							}),
					'right' : new Object
							({
								type : 'scrollLeft',
								step : 5
							}),
					'top' : new Object
							({
								type : 'scrollTop',
								step : -5
							}),
					'bottom' : new Object
							({
								type : 'scrollTop',
								step : 5
							})
				}),
			startAction : 'mouseover',
			stopAction : 'mouseout',
			scrollTypeAttribute: '__scroll',
			scrollTargetAttribute: '__target',
			receive : function (i, e)
			{
				var event 	= e ? e : window.event;
				this.changeCls(i, event['type']);
			},
			changeCls : function (i, key)
			{
				i.className = this.blackClasses[key];
				if (key == this.startAction)
				{
					this.startScroll(i.getAttribute(this.scrollTargetAttribute), i.getAttribute(this.scrollTypeAttribute));
				}
				else if(key == this.stopAction)
				{
					this.stopScroll(i.getAttribute(this.scrollTargetAttribute));
				}
			},
			startScroll : function (target, direction)
			{
				var obj = document.getElementById(target) || false;
				if (obj)
				{
					var scrollType = this.scrollVariants[direction] || false;
					if (scrollType)
					{
						obj[scrollType.type] = obj[scrollType.type] + scrollType.step;
						window[target + '_.scrolltimer'] = window.setTimeout("buttonScrollHandler.startScroll('"+target+"', '"+direction+"')", 20);
					}
				}
			},
			stopScroll : function(target)
			{
				clearTimeout(window[target + '_.scrolltimer']);
			}
		};

	var cbHandler =
		{
			cbClasses : new Object
				({
					'mouseover' : 'checkboxContainerOver defaultCheckboxContainer',
					'mouseout'	: 'checkboxContainer defaultCheckboxContainer',
					'mousedown'	: 'checkboxContainerDown defaultCheckboxContainer'
				}),
			cbClass : new Object
				({
					'0' : 'checkbox',
					'1' : 'checkboxChecked'
				}),
			cbCheckedStatusAttribute : '__checkboxChecked',
			cbSwitchAction : 'mousedown',
			cbValueAttribute : '__checkboxValue',
			cbDisableValueAttribute : '__checkboxDisabledValue',
			cbMarkRealValueAttribute : '__markReal',
			cbActionAttribute : '__action',
			valDump : '.dump',
			checkbox : '.checkbox',
			realValue : '.realVal',
			receive : function (i, e)
			{
				var event 	= e ? e : window.event;
				this.changeCls(i, event['type']);
			},
			changeCls : function (i, key)
			{
				i.className = this.cbClasses[key];
				if (key == this.cbSwitchAction)
				{
					this.processSwitch(i);
					var action = i.getAttribute(this.cbActionAttribute);
					if (action)
						eval(action);
				}
			},
			processSwitch : function (i)
			{
				if (i.getAttribute(this.cbCheckedStatusAttribute) == 1)
				{
					i.setAttribute(this.cbCheckedStatusAttribute, '0');
					this.setValue(i, i.getAttribute(this.cbDisableValueAttribute));
				}
				else
				{
					i.setAttribute(this.cbCheckedStatusAttribute, '1');
					this.setValue(i, i.getAttribute(this.cbValueAttribute));
				}
				this.processCheckbox(i);
			},
			setValue : function (i, value)
			{
				var varElm = document.getElementById(i.id + '_' + this.valDump) || false;
				if (i.getAttribute(this.cbMarkRealValueAttribute) == 1)
				{
					var varElmReal = document.getElementById(i.id + '_' + this.realValue) || false;
					if (varElmReal)
						varElmReal.value = value;
				}
				if (varElm)
					varElm.value = value;
			},
			getValue : function (ID)
			{
				var varElm = document.getElementById(ID + '_' + this.valDump) || false;
				if (varElm)
					return varElm.value;
			},
			register : function (ID)
			{
				var i = document.getElementById(ID) || false;
				if (i)
				{
					if (i.getAttribute(this.cbCheckedStatusAttribute) == 1)
					{
						this.setValue(i, i.getAttribute(this.cbValueAttribute));
					}
					else
					{
						this.setValue(i, i.getAttribute(this.cbDisableValueAttribute));
					}
					this.processCheckbox(i);
				}
			},
			processCheckbox : function (i)
			{
				var checkbox = document.getElementById(i.id + '_' + this.checkbox) || false;
				if (checkbox)
				{
					checkbox.className = this.cbClass[i.getAttribute(this.cbCheckedStatusAttribute)];
				}
			}
		};

	var ddHandler =
		{
			dropDowns : new Object(),
			dClasses : new Object
				({
					'mouseover' : 'rounded_input_dropdown_button_over',
					'mouseout'	: 'rounded_input_dropdown_button',
					'mousedown'	: 'rounded_input_dropdown_button_down',
					'mouseup'		: 'rounded_input_dropdown_button_over'
				}),
			dListCls : 'dropdown_datalist',
			dListInnerCls : 'dropdown_datalist_inner',
			dListScrollBar : 'dropdown_datalist_scroll_bar',
			dListDefIndex : 50,
			dListActiveIndex : 55,
			dListValDump : '.dump',
			dListActDump : '.action',
			dListValAttribute : '__dropdown_value',
			dListItemValAttribute : '__dropdown_actual_value',
			dListLimitAttribute : '__dropdown_limit_list',
			dListLimitSzAttribute : '__dropdown_limit_size',
			dListSelAttribute : '__dropdown_selected',
			dListUseHTMLAttribute : '__dropdown_use_innerhtml',
			dDownActiveAttribute : '__dropdown_active',
			dDownStaticAttribute : '__dropdown_static',
			dDownLimitAttr : '__dropdown_limitstring',
			dListItemDef : 'dropdown_datalist_item',
			dListItemSel : 'dropdown_datalist_item_selected',
			dDownBody : 'rounded_input_body',
			dDownNotSelectableAttribute : '__dropdown_notSelectable',
			openDatalist : new Object
				({
					'ID' : null,
					'active' : false,
					'elm' : 0
				}),
			activeScroll : null,
			receive : function (i, e)
			{
				var event 	= e ? e : window.event;
				var parent	= i.parentNode;

				this.changeCls(i, event['type']);
			},
			changeCls : function (i, key)
			{
				i.className = this.dClasses[key];
			},
			removeDataLists : function ()
			{
				for (var x in this.dropDowns)
				{
					this.showDataList(document.getElementById(x), true);
				}
			},
			showDataList : function (i, force, delayed)
			{
				if (true !== force && true !== delayed)
					cancelBubbling = true;

				var datalist 	= document.getElementById(i.id + '_datalist');
				var search		= document.getElementById(i.id + '_search');

				if (datalist)
				{
					if ('block' == datalist.style.display || true === force)
					{
						this.openDatalist.active = false;

						if (search)
						{
							search.style.visibility = 'hidden';
							toolTip.hide('spdesc');
						}

						datalist.style.display = 'none';
						i.style.zIndex = this.dListDefIndex;
					}
					else
					{
						if (true === eval(this.dropDowns[i.id].active))
						{	
							this.removeDataLists();

							this.openDatalist.active 	= true;
							this.openDatalist.ID 			= i.id;
							this.openDatalist.elm			= this.dropDowns[i.id].selected;

							datalist.style.display = 'block';
							i.style.zIndex = this.dListActiveIndex;

							if (search)
							{
								search.value = '';
								search.style.visibility = '';
								search.focus();

								this.performSearch(search);

								toolTip.show(i, storage.get('type_here'), 'spdesc', 1);
							}
						}
						/*else
						{
							if ('warehouseType' == i.id)
								spareParts.fetchData('manuId');
						}*/

						this.resizeDataList(datalist);
					}
				}
			},
			scrollContainer : function (i, e, cond)
			{
				var ID 	= i.parentNode.id.split('_datalist')[0];
				var mY 	= utils.mouseCoords(e).y;
				var pY	= utils.findPos(i).y;

				if (ID == this.activeScroll || cond)
				{
					this.dropDowns[ID].scrollBar.focus();

					cancelBubbling 		= true;
					this.activeScroll = ID;

					var pos = mY - (pY + this.dropDowns[ID].scrollBar.offsetHeight / 2);
					var max = document.getElementById(ID + '_datalist').getAttribute(this.dListLimitSzAttribute);

					this.moveAndScroll(ID, pos, max);
				}
			},
			scrollBar : function (i)
			{
				cancelBubbling = true;

				var ID = i.parentNode.parentNode.id.split('_datalist')[0];

				this.activeScroll = ID;
			},
			moveAndScroll : function (ID, pos, max)
			{
				var elm = document.getElementById(ID + '_datalist_inner');

				if (pos <= 0)
					var pos2 = 0;
				else if (pos >= max - this.dropDowns[ID].scrollBar.offsetHeight)
					var pos2 = max - this.dropDowns[ID].scrollBar.offsetHeight;
				else
					var pos2 = pos;

				this.dropDowns[ID].scrollBar.style.top = pos2 + 'px';
				this.dropDowns[ID].scrollBar.__cScroll = pos2;

				elm.scrollTop = (pos / (max - this.dropDowns[ID].scrollBar.offsetHeight)) * (elm.scrollHeight - max);
				elm.style.display = 'none';
				elm.style.display = 'block';
			},
			register : function ()
			{
				if (arguments instanceof Object)
				{
					for (var x = 0 ; x < arguments.length ; x++)
					{
						this.registerDropDown(arguments[x]);
					}
				}
			},
			registerDropDown : function (ID)
			{
				this.dropDowns[ID] = new Object
					({
						'selected' 	: null,
						'active'		: null,
						'_static'		: null,
						'scrollBar'	: null,
						'scrollHeight' : 0,
						'elmCount'	: 0
					});

				var dropdown 	= document.getElementById(ID);
				var datalist 	= utils.elmsByClass(this.dListCls, 'div', dropdown)[0];
				var innerlist = utils.elmsByClass(this.dListInnerCls, 'div', datalist)[0];

				datalist.id 	= ID + '_datalist';
				innerlist.id	= ID + '_datalist_inner';

				this.dropDowns[ID].active 		= dropdown.getAttribute(this.dDownActiveAttribute);
				this.dropDowns[ID].scrollBar 	= utils.elmsByClass(this.dListScrollBar, 'div', datalist)[0];

				document.getElementById(main_block).appendChild(datalist.parentNode.removeChild(datalist));

				var newlist = document.getElementById(ID + '_datalist');
				var parent	= document.getElementById(ID);
				var _parent = utils.findPos(parent);

				newlist.position 		= 'absolute';
				newlist.style.top 	= _parent.y + 23 + 'px';
				newlist.style.left 	= _parent.x - document.getElementById(main_block).offsetLeft + 'px';

				var msize = newlist.getAttribute(this.dListLimitSzAttribute);

				if (null !== msize)
				{
					newlist.style.width		= parent.offsetWidth - 12 + 'px';
					innerlist.style.width	= parent.offsetWidth - 12 + 'px';
				}
				else
				{
					newlist.style.width		= parent.offsetWidth - 32 + 'px';
					innerlist.style.width	= parent.offsetWidth - 32 + 'px';
				}

				for (var x = 0 ; x < innerlist.childNodes.length ; x++)
				{
					if ('DIV' == innerlist.childNodes[x].tagName)
					{
						if (1 == innerlist.childNodes[x].getAttribute(this.dDownStaticAttribute))
						{
							if (null !== msize)
								innerlist.childNodes[x].style.width = parent.offsetWidth - 35 + 'px';

							this.dropDowns[ID]._static = innerlist.childNodes[x];
						}

						if (1 == innerlist.childNodes[x].getAttribute(this.dListSelAttribute))
						{
							this.setSelected(innerlist.childNodes[x], true);

							return true;
						}
					}
				}
			},
			setSelected : function (i, init)
			{
				var val = i.getAttribute(this.dListValAttribute);
				var pID = i.parentNode.id.substring(0, i.parentNode.id.indexOf('_datalist'));

				var prt = document.getElementById(pID);
				var _dp = document.getElementById(pID + '_' + this.dListValDump);
				var act = document.getElementById(pID + '_' + this.dListActDump);

				if (_dp && i.getAttribute(this.dDownNotSelectableAttribute) != 1/*&& (true === init || 1 != i.getAttribute(this.dDownStaticAttribute))*/)
				{
					if (null !== this.dropDowns[pID].selected) this.deselect(prt);

					i.className = this.dListItemSel;
					_dp.value = val;
					i.setAttribute(this.dListSelAttribute, '1');
					this.dropDowns[pID].selected = i;

					var val = (1 == prt.getAttribute(this.dListUseHTMLAttribute)) ? i.innerHTML : i.getAttribute(this.dListItemValAttribute);

					this.setDDValue(prt, val);

					if (act.value && true !== init) eval(act.value);
					if (true !== init) this.showDataList(prt, true);
				}
			},
			deselect : function (i)
			{
				var elm = this.dropDowns[i.id].selected;

				elm.setAttribute(this.dListSelAttribute, '0');
				elm.className = this.dListItemDef;
			},
			setDDValue : function (i, val)
			{
				var elm = utils.elmsByClass(this.dDownBody, 'div', i)[0];

				if (1 == i.getAttribute(this.dDownLimitAttr))
					elm.innerHTML = (20 < val.length) ? val.substring(0, 20) + '..' : val;
				else
					elm.innerHTML = val;
			},
			dataOver : function (i)
			{
				var selected = i.getAttribute(this.dListSelAttribute);

				this.dataOut(this.openDatalist.elm);

				if (1 != selected)
				{
					i.className = this.dListItemSel;
					this.openDatalist.elm = i;
				}
			},
			dataOut : function (i)
			{
				var selected = i.getAttribute(this.dListSelAttribute);

				if (1 != selected)
					i.className = this.dListItemDef;
			},
			getValue : function (ID, cond)
			{
				var val = (1 == document.getElementById(ID).getAttribute(this.dListUseHTMLAttribute)) ? this.dropDowns[ID].selected.innerHTML : this.dropDowns[ID].selected.getAttribute(this.dListItemValAttribute);

				if (true === cond)
				{
					return {'ID' : this.getValue(ID, false), 'value' : val};
				}
				else
				{
					if (this.dropDowns[ID] instanceof Object)
						return this.dropDowns[ID].selected.getAttribute(this.dListValAttribute);
				}
			},
			populate : function (ID, objResponse, sel)
			{
				var arr = eval(objResponse);

				if ('function' == typeof(this['postProcessing_' + ID]))
					arr = this['postProcessing_' + ID](arr);

				var datalist = document.getElementById(ID + '_datalist');
				var innerlist= document.getElementById(ID + '_datalist_inner');
				var cond;
				var child;
				var domd;

				if (arr instanceof Array)
				{
					this.dropDowns[ID].elmCount = arr.length;

					var msize = datalist.getAttribute(this.dListLimitSzAttribute);

					if (null !== msize)
						__width = datalist.style.width.split('px')[0] - 20 + 'px';
					else
						__width = datalist.style.width;

					for (var x = 0 ; x < arr.length ; x++)
					{
						child	= this.createListItem(arr[x], false, __width);

						domd = innerlist.appendChild(child);

						if ('undefined' != typeof(sel))
						{
							if (sel == domd.getAttribute(this.dListValAttribute))
								this.setSelected(domd, ('motor' == ID) ? true : false);
						}
					}
				}
			},
			resizeDataList : function (datalist)
			{
				var msize = datalist.getAttribute(this.dListLimitSzAttribute);

				if (null !== msize)
				{
					if (datalist.offsetHeight > msize)
					{
						var ID = datalist.id.split('_datalist')[0];

						if (0 == this.dropDowns[ID].scrollHeight)
							this.dropDowns[ID].scrollHeight = datalist.offsetHeight;

						document.getElementById(datalist.id + '_inner').style.height = msize + 'px';
						datalist.style.height = msize + 'px';
					}
				}
			},
			resetListScroll : function (datalist)
			{
				var func = function ()
						{
							var parentID 		= datalist.id.split('_datalist')[0];
							var scrollbar		= ddHandler.dropDowns[parentID].scrollBar;
							var scrollarea	= document.getElementById(parentID + '_datalist_inner');
							var maxscroll		= datalist.parentNode.getAttribute(ddHandler.dListLimitSzAttribute);

							scrollbar.style.height = (maxscroll * maxscroll) / scrollarea.scrollHeight + 'px';

							datalist.scrollTop = 0;

							ddHandler.moveAndScroll(parentID, 0, maxscroll);
						};

				setTimeout(func, 2);
			},
			emptyDataList : function (ID)
			{
				var elm 	= document.getElementById(ID + '_datalist_inner');
				var elms 	= new Array(utils.elmsByClass(this.dListItemDef, 'div', elm), utils.elmsByClass(this.dListItemSel, 'div', elm));
				var sbox	= document.getElementById(ID + '_search');

				if (sbox)
					sbox.value = '';

				for (var j = 0 ; j < elms.length ; j++)
				{
					for (var i = 0 ; i < elms[j].length ; i++)
					{
						if (1 != elms[j][i].getAttribute(this.dDownStaticAttribute))
							elm.removeChild(elms[j][i]);
					}
				}
			},
			createListItem : function (obj, cond, _width)
			{
				var item = document.createElement('div');

				item.setAttribute(this.dListSelAttribute, 0);
				item.setAttribute(this.dListValAttribute, obj.ID);
				item.setAttribute(this.dListItemValAttribute, obj.title);

				item.style.width = _width.split('px')[0] - 5 + 'px';

				if (!document.all)
				{
					item.setAttribute('onmouseover', 	'ddHandler.dataOver(this);');
					item.setAttribute('onmouseout', 	'ddHandler.dataOut(this);');
					item.setAttribute('onclick', 			'ddHandler.setSelected(this);');
				}
				else
				{
					item.onmouseover 	= function () { ddHandler.dataOver(this); };
					item.onmouseout 	= function () { ddHandler.dataOut(this); };
					item.onclick 			= function () { ddHandler.setSelected(this); };
				}

				if (cond)
					item.style.display = 'none';

				item.innerHTML = obj.title;
				item.className = this.dListItemDef;

				if ('depth' in obj)
				{
					item.style.marginLeft = obj.depth * 6 + 'px';
					item.style.width			= item.style.width.split('px')[0] - obj.depth * 6 + 'px';
				}

				return item;
			},
			activate : function (ID)
			{
				this.dropDowns[ID].active = true;

				document.getElementById(ID).setAttribute(this.dDownActiveAttribute, true);
			},
			deactivate : function (ID)
			{
				this.setSelected(this.dropDowns[ID]._static, true);
				this.dropDowns[ID].active = false;

				document.getElementById(ID).setAttribute(this.dDownActiveAttribute, false);
			},
			performSearch : function (i)
			{
				if (![38, 40].contains(__keyCode))
				{
					this.dataOut(this.openDatalist.elm);

					var sID 			= i.id.split('_')[0];
					var datalist 	= document.getElementById(sID + '_datalist_inner');
					var string		= new String(i.value);
					var selected	= false;
					var cnt 			= 0;
					var val;

					for (var x = 0 ; x < datalist.childNodes.length ; x++)
					{
						if ('DIV' == datalist.childNodes[x].tagName && [this.dListItemDef, this.dListItemSel].contains(datalist.childNodes[x].className))
						{
							val = datalist.childNodes[x].getAttribute(this.dListItemValAttribute);

							if (val.substring(0, string.length).toLowerCase() == string.toLowerCase())
							{
								datalist.childNodes[x].innerHTML = '<strong>' + val.substring(0, string.length) + '</strong>' + val.substring(string.length);
								datalist.childNodes[x].style.display = 'block';

								if (false === selected)
								{
									this.openDatalist.elm = datalist.childNodes[x];
									this.dataOver(this.openDatalist.elm);
									selected = true;
								}

								if (this.dropDowns[sID].selected == datalist.childNodes[x])
								{
									this.dataOut(this.openDatalist.elm);
									this.openDatalist.elm = datalist.childNodes[x];
									this.dataOver(this.openDatalist.elm);
								}

								cnt++;
							}
							else
							{
								datalist.childNodes[x].innerHTML = datalist.childNodes[x].getAttribute(this.dListItemValAttribute);
								datalist.childNodes[x].style.display = 'none';
							}
						}
					}

					this.resetListScroll(datalist);
				}
			}
		};

	ddHandler.postProcessing_model = function (arr)
	{		
		var arrReturn = new Array();

		if (arr instanceof Array)
		{
			for (var x = 0 ; x < arr.length ; x++)
			{
				arrReturn.push(new Object({'ID' : arr[x].ID, 'title' : arr[x].title, 'depth' : arr[x].depth}));
			}
		}

		return arrReturn;
	};

	var calculator =
		{
			calculatorID : 'calculator',
			resultID : 'calculatorResult',
			resultHolderID: 'resultHolder',
			carCostID: 'calccarCost',
			lisingTypeID: 'calclisingType',
			firstProcID: 'calcfirstProc',
			firstSummID: 'calcfirstSumm',
			lisingPeriodID: 'calclisingPeriod',
			interestID: 'calcintress',
			lastPartID: 'calclastPart',
			calculate : function()
			{
				if (this.initiated)
				{
					var interestVal = parseFloat(this.interest.value);
					var carCost = parseInt(this.carCost.value);
					this.checkAdvance(this.firstSumm);
					this.checkAdvance(this.firstProc);
					var advance = parseInt(this.firstSumm.value);
					var lisingType = parseInt(ddHandler.getValue(this.lisingTypeID));
					var residual = parseInt(ddHandler.getValue(this.lastPartID));
					var period = parseInt(ddHandler.getValue(this.lisingPeriodID));

					if (carCost && lisingType && period)
					{
						if (lisingType == 3)
							interestVal = interestVal * (1/1.18);
						if (interestVal == 0)
							var total = Math.round((carCost - advance - (carCost * residual / 100)) / period);
						else
							var total = Math.round((((interestVal / 100 / 12) * ((carCost - advance) - ((carCost * residual / 100) / (Math.pow((interestVal / 100 / 12) + 1, period)))) / (1 - (1 / Math.pow((interestVal / 100 / 12) + 1, period))))));

						if (total)
							this.showResult(total);
						else
							this.hideResult();
					}
					else
						this.hideResult();
				}
			},
			checkAdvance : function (i)
			{
				if (this.initiated)
				{
					if (i.id == this.firstSummID)
					{
						var value = parseInt(this.firstSumm.value);
						if (value)
							this.firstProc.value = Math.round(this.firstSumm.value / (this.carCost.value / 100)) + '%';
						else
						{
							this.firstProc.value = "0%";
						}
					}
					else
					{
						var value = parseInt(this.firstProc.value);
						if (value)
							this.firstSumm.value = Math.round(this.carCost.value * value / 100);
						else
						{
							this.firstSumm.value = 0;
						}
					}
				}
			},
			checkNumeric : function()
			{

			},
			showResult : function(result)
			{
				if (this.initiated)
				{
					this.result.innerHTML = result;
					this.resultHolder.style.visibility = 'visible';
				}
			},
			hideResult : function()
			{
				if (this.initiated)
				{
					this.result.innerHTML = "";
					this.resultHolder.style.visibility = 'hidden';
				}
			},
			init : function(carInitCost)
			{
				this.calculator = document.getElementById(this.calculatorID);
				this.result = document.getElementById(this.resultID);
				this.resultHolder = document.getElementById(this.resultHolderID);
				this.carCost = document.getElementById(this.carCostID);
				this.firstProc = document.getElementById(this.firstProcID);
				this.firstSumm = document.getElementById(this.firstSummID);
				this.interest = document.getElementById(this.interestID);

				this.interest.value = '7%';
				this.carCost.value = carInitCost;
				this.firstProc.value = '10%';
				this.firstSumm.value = Math.round(carInitCost/10);

				this.initiated = true;
				this.calculate();
			}
		};

	var noticeLayer =
		{
			overlayID : 'transparent_overlay',
			overlayContentID : 'transparent_overlay_content',
			overlayCInnerID : 'transparent_overlay_content_inner',
			mainBlockID : 'main_block',
			show : function (content, width)
			{
				if (content)
				{
					this.resize();
					this.addContent(content, width);

					var qID = effects.fade(this.overlayID, 0, 90, 200);

					effects.setQueue(qID, "noticeLayer.showContent();");
				}
				else
				{
					if (!this.isHidden())
					{
						effects.clearQueue();

						document.getElementById(this.overlayContentID).style.display = 'none';

						var qID = effects.fade(this.overlayID, 90, 0, 200);

						effects.setQueue(qID, "noticeLayer.hideOverlay();");
					}
				}
			},
			resize : function ()
			{
				var main = utils.getSize(document.getElementById(this.mainBlockID));
				var view = utils.getViewPortSize();

				document.getElementById(this.overlayID).style.width 	= ((main.w > view.w) ? main.w : view.w) + 'px';
				document.getElementById(this.overlayID).style.height 	= ((main.h > view.h) ? main.h : view.h) + 'px';
			},
			addContent : function (content, width)
			{
				if (!width)
					width = 175;

				document.getElementById(this.overlayContentID).style.width 	= width + 'px';
				document.getElementById(this.overlayCInnerID).innerHTML 		= content;
			},
			hideOverlay : function ()
			{
				document.getElementById(this.overlayID).style.display = 'none';
			},
			showContent : function ()
			{
				document.getElementById(this.overlayContentID).style.display = 'block';

				this.positionContent();
			},
			positionContent : function ()
			{	
				var clay = document.getElementById(this.overlayContentID);
				var view = utils.getViewPortSize();

				clay.style.top 	= view.h / 2 - clay.offsetHeight / 2 + document.documentElement.scrollTop + 'px';
				clay.style.left = view.w / 2 - clay.offsetWidth / 2 + document.documentElement.scrollLeft + 'px';
			},
			isHidden : function ()
			{
				if (document.getElementById(this.overlayID))
				{
					return ('none' == document.getElementById(this.overlayID).style.display);
				}

				return true;
			}
		};

	var effects =
		{
			queue : new Array(),
			qIntervals : new Object(),
			qCheckInt : 10,
			fade : function (layerID, start, end, timeout)
			{
				if (document.getElementById(layerID))
				{
					this.queue[this.queue.length] = 1;

					var speed = Math.round(timeout / 100);
					var timer = 0;
					var qID 	= (this.queue.length - 1);

					if (start > end)
					{
						//utils.changeOpac(end, layerID);
						document.getElementById(layerID).style.display = 'none';
					}
					else
					{
						utils.changeOpac(end, layerID);
						document.getElementById(layerID).style.display = 'block';
					}

					effects.remove(qID);

					/*utils.changeOpac(start, layerID);
					document.getElementById(layerID).style.display = 'block';

					if (start > end)
					{
						for (var i = start ; i >= end ; i--)
						{
							setTimeout("utils.changeOpac(" + i + ", '" + layerID + "'); if (utils.getOpac('" + layerID + "') == (" + end + " / 100)) { effects.remove(" + qID + "); }", (timer * speed));
							timer++;
						}
					}
					else if (start < end)
					{
						for (var i = start ; i <= end ; i++)
						{
							setTimeout("utils.changeOpac(" + i + ", '" + layerID + "'); if (utils.getOpac('" + layerID + "') == (" + end + " / 100)) { effects.remove(" + qID + "); }", (timer * speed));
							timer++;
						}
					}*/

					return qID;
				}
			},
			smoothFade : function (elmID, start, end, timeout)
			{
				var elm = document.getElementById(elmID);

				if (elm)
				{
					var speed = Math.round(timeout / 100);
					var timer = 0;

					if (start > end)
					{
						utils.changeOpac(start, elmID);
						elm.style.display = 'block';
					}
					else
					{
						utils.changeOpac(start, elmID);
						elm.style.display = 'block';
					}

					if (start > end)
					{
						for (var i = start ; i >= end ; i--)
						{
							setTimeout("utils.changeOpac(" + i + ", '" + elmID + "');", (timer * speed));
							timer++;
						}
					}
					else if (start < end)
					{
						for (var i = start ; i <= end ; i++)
						{
							setTimeout("utils.changeOpac(" + i + ", '" + elmID + "');", (timer * speed));
							timer++;
						}
					}
				}
			},
			setQueue : function (qID, act)
			{
				this.qIntervals[qID] = setInterval("effects.handleQueue(" + qID + ", '" + act + "');", this.qCheckInt);
			},
			handleQueue : function (qID, act)
			{
				if ('undefined' == typeof(this.queue[qID]))
				{
					clearInterval(this.qIntervals[qID]);
					delete this.qIntervals[qID];

					eval(act);
				}
			},
			remove : function (qID)
			{
				delete this.queue[qID];
			},
			clearQueue : function ()
			{
				for (var x in this.qIntervals)
				{
					clearInterval(this.qIntervals[x]);

					delete this.qIntervals[x];
				}

				this.queue = new Array();
			}
		};

	var toolTip =
		{
			layerID 			: 'tooltip_layer',
			lContID 			: 'tooltip_content',
			arrowCls 			: 'tooltip_arrow',
			arrowRightCls : 'tooltip_arrow_right',
			loadingInd 		: 'tooltip_loading_indicator',
			show : function (elm, data, group, appear_right, show_loading)
			{
				if (data)
				{
					layerID = this.layerID + '_' + group;
					lContID = this.lContID + '_' + group;

					if (!document.getElementById(layerID))
						this.createLayers(group, appear_right);

					var layer = document.getElementById(layerID);
					var lcont = document.getElementById(lContID);
					var pos		= utils.findPos(elm);
					var dim		= new Object({'w' : elm.offsetWidth, 'h' : elm.offsetHeight});

					lcont.innerHTML 		= data;
					layer.style.display = 'block';

					if (1 == show_loading)
					{
						utils.elmsByClass(this.loadingInd, 'div', document.getElementById(layerID))[0].style.display = 'block';
						lcont.style.width = '85px';
					}

					layer.style.top = pos.y + dim.h / 2 - (layer.offsetHeight + 10) + 'px';

					if (1 == appear_right)
						layer.style.left = pos.x + elm.offsetWidth - document.getElementById(main_block).offsetLeft + 5 + 'px';
					else
						layer.style.left = pos.x - document.getElementById(main_block).offsetLeft + 5 - (layer.offsetWidth + 16) + 'px';
					if (group == 'formContact')
						layer.style.left = (parseInt(layer.style.left) - 7) + 'px';
				}
			},
			hide : function (group)
			{
				var layer = document.getElementById(this.layerID + '_' + group);

				if (layer)
					layer.style.display = 'none';
			},
			createLayers : function (group, appear_right)
			{
				layerID = this.layerID + '_' + group;
				lContID = this.lContID + '_' + group;

				var newLayer 	= document.getElementById(this.layerID).cloneNode(true);
				newLayer.id 	= layerID;

				document.getElementById(main_block).appendChild(newLayer);
				utils.elmsByClass(this.lContID, 'div', document.getElementById(layerID))[0].id = lContID;

				if (1 == appear_right)
					utils.elmsByClass(this.arrowCls, 'div', document.getElementById(layerID))[0].className = this.arrowRightCls;
			}
		};

	var searchForm =
		{
			selected : null,
			reqChain : null,
			reqChainChildren : null,
			fetchData : function (ID)
			{
				if ('function' == typeof(this['fn_fetch_outer']))
				{
					this['fn_fetch_outer'](ID, this.loadParams(ID));
				}
				else
				{
					alert('JS error, no function defined.');
				}
			},
			loadParams : function (ID)
			{
				var objReturn = new Object();
				var children	= new Array();

				switch (ID)
				{
					case 'md':
						objReturn.mf = ddHandler.getValue('mf');
						children = ['md']
						break;
					case 'addmd':
						objReturn.mf = ddHandler.getValue('addmf');
						children = ['addmd']
						break;
				}

				for (var x = 0 ; x < children.length ; x++)
				{
					ddHandler.emptyDataList(children[x]);
					ddHandler.deactivate(children[x]);
				}

				return objReturn;
			},
			setSelected : function (obj)
			{
				if (obj instanceof Object)
					this.selected = obj;
			},
			getSelected : function (ID)
			{
				if (this.selected instanceof Object)
				{
					if ('undefined' != typeof(this.selected[ID]))
					{
						var ret = this.selected[ID];

						delete this.selected[ID];

						return ret;
					}
				}
			},
			initRequest : function()
			{
				if (null === this.reqChain)
					this.reqChain	= new requestChain(ajax.request);
			},
			sendRequest  : function()
			{
				if (false === this.reqChain.isBusy)
					this.reqChain.process();
				else
					this.reqChain.flush_mid_section();
			},
			changePeriod : function ()
			{
				this.initRequest();
				var productID = storage.get('productID');
				var objParams = new Object();
				objParams.action 	= 'addChangePeriod';
				objParams.period = ddHandler.getValue('duration');
				if (productID)
						objParams.productID = productID;

				var pre_call = function ()
								{
									toolTip.show(document.getElementById('duration'), " ", 'addProductFunctions', 1, 1);
								};
				var callback = function (r)
								{
									var arr = eval(r);
									toolTip.hide('addProductFunctions');
									if (arr.success == "continue")
										location.reload();
									else
										noticeLayer.show(storage.get('productPeriodError'));
								};
				this.reqChain.add
				(
					{
						'pre_call'	: pre_call,
						'params' 		: objParams,
						'callback' 	: callback
					}
				);
				this.sendRequest();
			},
			recalculateSumm : function ()
			{
				var duration = ddHandler.getValue('duration');
				var onfrontpage = cbHandler.getValue("onfrontpage");
				var ontypepage = cbHandler.getValue("ontypepage");
				var onmanufacturerspage = cbHandler.getValue("onmanufacturerspage");
				var totalPrice = document.getElementById("totalPrice");
				var prices = {};
				prices.defaultPrice = storage.get('defaultPrice');
				prices.onfrontpagePrice = storage.get('onfrontpagePrice');
				prices.ontypepagePrice = storage.get('ontypepagePrice');
				prices.manufacturerPrice = storage.get('manufacturerPrice');
				var calculatedPrice = duration * prices.defaultPrice + duration * ontypepage * prices.ontypepagePrice + duration * onmanufacturerspage * prices.manufacturerPrice;
				if(onfrontpage)
				{
					var checkboxes = utils.elmsByClass('defaultCheckboxContainer', 'div', document.getElementById("frontPageDays"));
					if (checkboxes.length)
					{
						var counter = 0
						for (var i = 0 ; i < checkboxes.length; i++)
						{
							var value = cbHandler.getValue(checkboxes[i].id);
							if (value != "" && value != checkboxes[i].getAttribute(cbHandler.cbDisableValueAttribute))
							{
								counter++;
							}
						}
					}
					calculatedPrice = calculatedPrice + counter * prices.onfrontpagePrice;
				}
				totalPrice.innerHTML = calculatedPrice;

				if (0 == calculatedPrice)
				{
					document.getElementById('bankSelectionContainer').style.display = 'none';
				}
				else
				{
					document.getElementById('bankSelectionContainer').style.display = 'block';
				}

				return calculatedPrice;
			},
			changeAdvParams : function (param)
			{
				if (param == "ontypepage" || param == "allow_contact" || param == "onmanufacturerspage" || param == "onfrontpage")
				{
					var value = cbHandler.getValue(param);
					this.initRequest();
					var productID = storage.get('productID');
					var objParams = new Object();
					objParams.action 	= 'changeAdvParams';
					objParams.parameter = param;
					objParams.value = value;
					if (productID)
						objParams.productID = productID;

					var pre_call = function ()
									{
										toolTip.show(document.getElementById(param), " ", 'addProductFunctions', 1, 1);
									};
					var callback = function (r)
									{
										var arr = eval(r);
										toolTip.hide('addProductFunctions');
										if (!arr.success == "continue")
										{
											noticeLayer.show(storage.get('productAddError'));
											location.reload();
										}
									};
					this.reqChain.add
					(
						{
							'pre_call'	: pre_call,
							'params' 		: objParams,
							'callback' 	: callback
						}
					);
					this.sendRequest();
				}
			},
			saveProduct : function (productID)
			{
				this.initRequest();
				var productID2 = storage.get('productID');
				if (productID == productID2 && productID)
				{
					var objParams = new Object();
					objParams.action 	= 'addProduct';
					objParams.productID = productID;

					var pre_call = function ()
									{
										toolTip.show(document.getElementById("addSaveButton"), " ", 'addProductFunctions', 1, 1);
									};
					var callback = function (r)
									{
										var arr = eval(r);
										toolTip.hide('addProductFunctions');
										if (arr.success == "continue")
										{
											location.href = storage.get('formAction_root_self');
										}
										else
										{
											noticeLayer.show(storage.get('productAddError'));
											location.reload();
										}
									};
					this.reqChain.add
					(
						{
							'pre_call'	: pre_call,
							'params' 		: objParams,
							'callback' 	: callback
						}
					);
					this.sendRequest();
				}
			},
			addProductChanges : function (productID)
			{
				this.initRequest();
					var objParams = new Object();
					objParams.action 	= 'addProductChanges';
										objParams.productID = productID;

					var pre_call = function ()
									{
										toolTip.show(document.getElementById("addSaveButton"), " ", 'addProductFunctions', 1, 1);
									};
					var callback = function (r)
									{
										var arr = eval(r);
										toolTip.hide('addProductFunctions');
										if (arr.success == "continue")
										{
											location.href = storage.get('formAction_root_self');
										}
										else
										{
											noticeLayer.show(storage.get('productAddError'));
											location.reload();
										}
									};
					this.reqChain.add
					(
						{
							'pre_call'	: pre_call,
							'params' 		: objParams,
							'callback' 	: callback
						}
					);
					this.sendRequest();
			},
			addProduct: function ()
			{
				var period = ddHandler.getValue('duration');
				if (period && period != "0" && (this.selectedBank || 0 == this.recalculateSumm()))
				{
					this.initRequest();
					var productID = storage.get('productID');
					var objParams = new Object();
					objParams.action 	= 'addProduct';
					if (productID)
						objParams.productID = productID;

					var pre_call = function ()
									{
										toolTip.show(document.getElementById("addSaveButton"), " ", 'addProductFunctions', 1, 1);
									};
					var callback = function (r)
									{
										var arr = eval(r);
										toolTip.hide('addProductFunctions');
										if (arr.success == "continue")
										{
											location.href = storage.get('formAction_root_self');
										}
										else
										{
											noticeLayer.show(storage.get('productAddError'));
											location.reload();
										}
									};
					this.reqChain.add
					(
						{
							'pre_call'	: pre_call,
							'params' 		: objParams,
							'callback' 	: callback
						}
					);
					this.sendRequest();
				}
				else if (!period || period == "0")
					noticeLayer.show(storage.get('productPeriodError'));
				else if (!this.selectedBank)
					noticeLayer.show(storage.get('selectBank'));
			},
			selectDays: function ()
			{
				var duration = ddHandler.getValue('duration');
				if (duration)
				{
					var value = cbHandler.getValue('onfrontpage');
					var target = document.getElementById("frontPageDays");
					if (value == "1" && target)
						target.style.display = "";
					else if (target)
						target.style.display = "none";
					this.changeAdvParams('onfrontpage');
					this.recalculateSumm();
				}
			},
			selectFrontPageTime: function(date)
			{
				var param = "day_" + date;
				var value = cbHandler.getValue(param);
				this.initRequest();
				var productID = storage.get('productID');
				var objParams = new Object();
				objParams.action 	= 'addFrontPage';
				objParams.date = date;
				objParams.value = value;
				if (productID)
						objParams.productID = productID;

				var pre_call = function ()
								{
									toolTip.show(document.getElementById(param), " ", 'addProductFunctions', 1, 1);
								};
				var callback = function (r)
								{
									var arr = eval(r);
									toolTip.hide('addProductFunctions');
									if (arr.success == "continue")
									{
										searchForm.recalculateSumm();
									}
									else if (arr.error)
									{
										noticeLayer.show(storage.get('dayFull'));
										if (arr.date)
										{
											var target = document.getElementById("day_" + arr.date);
											if (target)
												cbHandler.processSwitch(target);
												cbHandler.processCheckbox(target);
										}
									}
									else
									{
										noticeLayer.show(storage.get('productAddError'));
										location.reload();
									}
								};
				this.reqChain.add
				(
					{
						'pre_call'	: pre_call,
						'params' 		: objParams,
						'callback' 	: callback
					}
				);
				this.sendRequest();
			},
			changeBank : function(bankID)
			{
				if (this.selectedBank == bankID)
				{
					cbHandler.processSwitch(document.getElementById("bank" + bankID));
				}
				else
				{
					if (this.selectedBank)
						cbHandler.processSwitch(document.getElementById("bank" + this.selectedBank));

					this.selectedBank = bankID;
					var productID = storage.get('productID');
					this.initRequest();
					var objParams = new Object();
					objParams.action 	= 'changeBank';
					objParams.bankID = this.selectedBank;
					if (productID)
						objParams.productID = productID;

					var pre_call = function ()
									{
										toolTip.show(document.getElementById("bank" + bankID), " ", 'addProductFunctions', 1, 1);
									};
					var callback = function (r)
									{
										var arr = eval(r);
										toolTip.hide('addProductFunctions');
										if (arr.success != "continue")
										{
											noticeLayer.show(storage.get('selectBankError'));
										}
									};
					this.reqChain.add
					(
						{
							'pre_call'	: pre_call,
							'params' 		: objParams,
							'callback' 	: callback
						}
					);
					this.sendRequest();
				}
			},
			submitForm : function (btn, formName)
			{
				if (formName == 'bodyType')
				{
					var bodyType = ddHandler.getValue('bt');
					if (bodyType != 0)
					{
						location.href = storage.get('formAction_root') + '?bt:' + bodyType;
					}
				}
				else if (formName == 'addBack')
				{
					btn = parseInt(btn) - 1;
					location.href = storage.get('currentDir') + '/?add_st:' + btn;
				}
				else if (formName == 'addStep1')
				{
					toolTip.show(document.getElementById(btn), " ", 'addProductFunctions', 1, 1);
					var bodyType = ddHandler.getValue('addbt');
					var offerType = ddHandler.getValue('addof');
					var manufacturer = ddHandler.getValue('addmf');
					var model = ddHandler.getValue('addmd');
										var modeloptional = document.getElementById('addmd-optional');
										var modopt = 0;
										if (modeloptional)
										{
											if (modeloptional.value)
											{
												if (model == 0)
												{
													model = modeloptional.value;
												}
												else
												{
													model = model + '|' + modeloptional.value;
												}
												modopt = 1;
											}
										}
					if (bodyType != 0 && offerType != 0 && manufacturer != 0 && model != 0)
					{
						location.href = storage.get('currentDir') + '/?add_bt:' + bodyType + ',add_of:' + offerType + ',add_mf:' + manufacturer + ',add_mdopt:'+ modopt +  ',add_md:' + model +',add_st:2';
					}
					else
					{
						noticeLayer.show(storage.get('requiredError'));
						toolTip.hide('addProductFunctions');
					}
				}
				else if (formName == 'addStep2')
				{
					var searchContainer = document.getElementById(formName);
					var selects = utils.elmsByClass('default_input_container', 'div', searchContainer);
					var mselects = utils.elmsByClass('multipleSelectField', 'select', searchContainer);
					var checkboxes = utils.elmsByClass('checkboxContainer', 'div', searchContainer);
					var inputs = utils.elmsByClass('inputTextValue', 'input', searchContainer);
					var textareas = utils.elmsByClass('txtAreaTextarea', 'textarea', searchContainer);
					var productID = storage.get('productID');

					var variables = {};
					var counter = 0;
					if (selects.length)
					{
						for (var i = 0 ; i < selects.length ; i++)
						{
							var value = ddHandler.getValue(selects[i].id);
							if (value)
							{
								variables[selects[i].id] = value;
								counter++;
							}
						}
					}

					if (mselects.length)
					{
						for (var i = 0 ; i < mselects.length ; i++)
						{
							variables[mselects[i].id] = '';

							for (var j = 0 ; j < mselects[i].options.length ; j++)
							{
								if (mselects[i].options[j].selected)
									variables[mselects[i].id] += (('' != variables[mselects[i].id]) ? '||' : '') + mselects[i].options[j].value;
							}

							counter++;
						}
					}

					if (checkboxes.length)
					{
						for (var i = 0 ; i < checkboxes.length ; i++)
						{
							var value = cbHandler.getValue(checkboxes[i].id);
							if (value != "" && value != checkboxes[i].getAttribute(cbHandler.cbDisableValueAttribute))
							{
								variables[checkboxes[i].id] = value;
								counter++;
							}
						}
					}

					if (inputs.length)
					{
						for (var i = 0 ; i < inputs.length ; i++)
						{
							var value = inputs[i].value
							if (value != "")
							{
								variables[inputs[i].id] = inputs[i].value;
								counter++;
							}
						}
					}

					if (textareas.length)
					{
						for (var i = 0 ; i < textareas.length ; i++)
						{
							var value = textareas[i].value
							if (value != "")
							{
								variables[textareas[i].id] = textareas[i].value;
								counter++;
							}
						}
					}
					if (counter == 0)
					{
						noticeLayer.show(storage.get('requiredError'));
						return false;
					}
					this.initRequest();

					var objParams = new Object();
					objParams.action 	= 'addProductParams';
					if (productID)
						objParams.productID = productID;

					for(i in variables)
					{
						objParams[i] = variables[i];
					}

					var pre_call = function ()
									{
										toolTip.show(document.getElementById(btn), " ", 'addProductFunctions', 1, 1);
									};
					var callback = function (r)
									{
										var arr = eval(r);
										toolTip.hide('addProductFunctions');
										if (arr.success == "continue")
											location.href = storage.get('currentDir') + '/?add_st:3';
										else if (arr.error)
											noticeLayer.show(arr.error);
										else
											noticeLayer.show(storage.get('productAddError'));
									};
					this.reqChain.add
					(
						{
							'pre_call'	: pre_call,
							'params' 		: objParams,
							'callback' 	: callback
						}
					);
					this.sendRequest();
				}
				else if (formName == "addPictures")
				{
					var formToSubmit = document.getElementById('frmProductPictures');
					if (formToSubmit)
					{
						var dataFound = false;
						var inputs = utils.elmsByClass('realInputFile', 'input', formToSubmit);
						if (inputs.length)
						{
							for (var i = 0 ; i < inputs.length ; i++)
							{
								if (inputs[i].value != "")
								{
									dataFound = true;
									break;
								}
							}
						}
						if (!dataFound)
						{
							var checkboxes = utils.elmsByClass('checkboxContainer', 'div', formToSubmit);
							if (checkboxes.length)
							{
								for (var i = 0 ; i < checkboxes.length ; i++)
								{
									var value = cbHandler.getValue(checkboxes[i].id);
									/*if (value != "" && value != checkboxes[i].getAttribute(cbHandler.cbDisableValueAttribute))
									{
										dataFound = true;
										break;
									}*/
									dataFound = true;
								}
							}
						}
						if (!dataFound)
						{
							var youTubeLink = document.getElementById("youtubeLink");
							if (youTubeLink)
							{
								if (youTubeLink.value != "")
									dataFound = true;
							}
							var googleLink = document.getElementById("googleLink");
							if (googleLink)
							{
								if (googleLink.value != "")
									dataFound = true;
							}
						}
						if (dataFound)
							formToSubmit.submit();
						else
							noticeLayer.show(storage.get('productNoPicture'));
					}
				}
				else if (formName == "addStep3")
				{
					location.href = storage.get('currentDir') + '/?add_st:4';
				}
				else if (formName == 'mainSearch')
				{
					if (arguments[2])
					{
						var selects = new Array();
						var checkboxes = new Array();
						var inputs = new Array();
						for (x=1; x < arguments.length; x++)
						{
							if (x >= 1)
							{
								var searchContainer = document.getElementById(arguments[x]);
								var tmp = utils.elmsByClass('default_input_container', 'div', searchContainer);
								if (tmp.length)
								{
									for (var i=0; i<tmp.length; i++)
									{
										selects.push(tmp[i]);
									}
								}
								var tmp = utils.elmsByClass('checkboxContainer', 'div', searchContainer);
								if (tmp.length)
								{
									for (var i=0; i<tmp.length; i++)
									{
										checkboxes.push(tmp[i]);
									}
								}
								var tmp = utils.elmsByClass('inputTextValue', 'input', searchContainer);
								if (tmp.length)
								{
									for (var i=0; i<tmp.length; i++)
									{
										inputs.push(tmp[i]);
									}
								}
							}
						}
					}
					else
					{
						var searchContainer = document.getElementById('mainSearch');
						var selects = utils.elmsByClass('default_input_container', 'div', searchContainer);
						var checkboxes = utils.elmsByClass('checkboxContainer', 'div', searchContainer);
						var inputs = utils.elmsByClass('inputTextValue', 'input', searchContainer);
					}
					var ValueFrom = storage.get('default_from');
					var ValueTo = storage.get('default_to');
					var bodyType = document.getElementById('bodyType') || false;
					var variables = {};
					if (selects.length)
					{
						for (var i = 0 ; i < selects.length ; i++)
						{
							var value = ddHandler.getValue(selects[i].id);
							if ((value && value != "0") || selects[i].id == "bt" || selects[i].id == "of")
							{
								variables[selects[i].id] = value;
							}
						}
					}

					if (checkboxes.length)
					{
						for (var i = 0 ; i < checkboxes.length ; i++)
						{
							var value = cbHandler.getValue(checkboxes[i].id);
							if (value != "" && value != checkboxes[i].getAttribute(cbHandler.cbDisableValueAttribute))
								variables[checkboxes[i].id] = value;
						}
					}

					if (inputs.length)
					{
						for (var i = 0 ; i < inputs.length ; i++)
						{
							var value = inputs[i].value
							if (value != ValueFrom && value != ValueTo && value != "")
								variables[inputs[i].id] = inputs[i].value;
						}
					}
					var path = storage.get('formAction_root') + '?' + ((bodyType)? "bt:" + bodyType.value + ",": "");
					var path2 = "";
					for (x in variables)
					{
						if (path2 != "")
							path2 = path2 + ','
						path2 = path2 + x + ':' + variables[x];
					}
					location.href = path + path2;
				}
			},
			changeLimit : function (path)
			{
				var value = ddHandler.getValue("lm");
				if (value != "" && path != "")
				{
					location.href = path + 'lm:' + value;
				}
			},
			changeFilter : function (path)
			{
				var value = ddHandler.getValue("flt");
				if (value != "" && path != "")
				{
					location.href = path + 'flt:' + value;
				}
			},
			changeCurrency : function (path)
			{
				var value = ddHandler.getValue("cur");
				if (value != "" && path != "")
				{
					location.href = path + 'cur:' + value;
				}
			}
		};

	var productFunctions =
		{
			functionClasses : new Object
				({
					'mouseover' : 'productFunctionOver',
					'mouseout'	: '',
					'mousedown'	: 'productFunctionOver',
					'mouseup'	: 'productFunctionOver'
				}),
			contactFormFields : new Object
				({
					0 : 'f_name',
					1 : 'f_phone',
					2 : 'f_email',
					3 : 'f_message'
				}),
			friendsFormFields : new Object
				({
					0 : 'f_name',
					1 : 'f_email'
				}),
			reqChain : null,
			loadAction : 'mouseup',
			actionAttribute : '__action',
			receive : function (i, e)
			{
				var event 	= e ? e : window.event;
				this.changeCls(i, event['type']);
			},
			changeCls : function (i, key)
			{
				i.className = this.functionClasses[key];

				if (key == this.loadAction)
				{
					var action = i.getAttribute(this.actionAttribute);
					if (action != "")
						eval(action);
				}
			},
			saveCar : function (elmID, ID)
			{
				this.initRequest();

				var objParams = new Object();
				objParams.action 	= 'saveProduct';
				objParams.ID 		= ID;

				var pre_call = function ()
								{
									toolTip.show(document.getElementById(elmID), " ", 'productFunctions', 1, 1);
								};
				var callback = function (r)
								{
									var arr = eval(r);
									toolTip.hide('productFunctions');
									if (arr.success == "added")
										noticeLayer.show(storage.get('productSaved'));
									else if (arr.success == "present")
										noticeLayer.show(storage.get('productPresent'));
									else
										noticeLayer.show(storage.get('productSaveError'));
								};
				this.reqChain.add
				(
					{
						'pre_call'	: pre_call,
						'params' 		: objParams,
						'callback' 	: callback
					}
				);
				this.sendRequest();
			},
			compareCar : function (elmID, ID)
			{
				this.initRequest();

				var objParams = new Object();
				objParams.action 	= 'compareProduct';
				objParams.ID 		= ID;

				var pre_call = function ()
								{
									toolTip.show(document.getElementById(elmID), " ", 'productFunctions', 1, 1);
								};
				var callback = function (r)
								{
									var arr = eval(r);
									toolTip.hide('productFunctions');
									if (arr.success == "added")
										noticeLayer.show(storage.get('productCompareAdded'));
									else if (arr.success == "present")
										noticeLayer.show(storage.get('productComparePresent'));
									else if (arr.success == "filled")
										noticeLayer.show(storage.get('productCompareFilled'));
									else
										noticeLayer.show(storage.get('productCompareError'));
								};
				this.reqChain.add
				(
					{
						'pre_call'	: pre_call,
						'params' 		: objParams,
						'callback' 	: callback
					}
				);
				this.sendRequest();
			},
			sendToFriend : function (elmID)
			{
				if (elmID)
				{
					var formElm = document.getElementById(elmID);
					if (formElm)
					{
						$displayMode = formElm.style.display;
						if (!$displayMode || $displayMode == 'none')
							formElm.style.display = 'block';
						else
							formElm.style.display = 'none';
					}
				}
			},
			initRequest : function()
			{
				if (null === this.reqChain)
					this.reqChain	= new requestChain(ajax.request);
			},
			sendRequest  : function()
			{
				if (false === this.reqChain.isBusy)
					this.reqChain.process();
				else
					this.reqChain.flush_mid_section();
			},
			hideFriendsForm : function(groupID)
			{
				var elm = document.getElementById(groupID + '_.' + this.friendsFormFields[1]) || false;
				if (elm)
					elm.value = "";
				this.sendToFriend('formSendToFriend');
			},
			sendFriendsMessage : function (groupID, ID)
			{
				this.initRequest();

				var objParams = new Object();
				objParams.action 	= 'sendMessageFriend';
				objParams.ID 		= ID;
				objParams.groupID	= groupID;
				for(i in this.friendsFormFields)
				{
					objParams[this.friendsFormFields[i]] = document.getElementById(groupID + '_.' + this.friendsFormFields[i]).value;
				}
				var pre_call = function ()
								{
									toolTip.show(document.getElementById(groupID + '_.button'), " ", 'productFunctions', 1, 1);
								};
				var callback = function (r)
								{
									var arr = eval(r);
									toolTip.hide('productFunctions');
									if (arr.success == "sended")
									{
										noticeLayer.show(storage.get('success'));
										productFunctions.hideFriendsForm(arr.groupID);
									}
									else if (arr.success == "send_error")
										noticeLayer.show(storage.get('send_error'));
									else if (arr.error)
										noticeLayer.show(arr.error);
									else
										noticeLayer.show(storage.get('send_disabled'));
								};
				this.reqChain.add
				(
					{
						'pre_call'	: pre_call,
						'params' 		: objParams,
						'callback' 	: callback
					}
				);
				this.sendRequest();
			},
			sendMessage : function (groupID, ID)
			{
				this.initRequest();

				var objParams = new Object();
				objParams.action 	= 'sendMessageSeller';
				objParams.ID 		= ID;
				objParams.groupID	= groupID;
				for(i in this.contactFormFields)
				{
					objParams[this.contactFormFields[i]] = document.getElementById(groupID + '_.' + this.contactFormFields[i]).value;
				}
				var pre_call = function ()
								{
									toolTip.show(document.getElementById(groupID + '_.button'), " ", 'productFunctions', 1, 1);
								};
				var callback = function (r)
								{
									var arr = eval(r);
									toolTip.hide('productFunctions');
									if (arr.success == "sended")
									{
										noticeLayer.show(storage.get('success'));
										productFunctions.clearFormValues(arr.groupID);
									}
									else if (arr.success == "send_error")
										noticeLayer.show(storage.get('send_error'));
									else if (arr.error)
										noticeLayer.show(arr.error);
									else
										noticeLayer.show(storage.get('send_disabled'));
								};
				this.reqChain.add
				(
					{
						'pre_call'	: pre_call,
						'params' 		: objParams,
						'callback' 	: callback
					}
				);
				this.sendRequest();
			},
			clearFormValues : function(groupID)
			{
				for(i in this.contactFormFields)
				{
					var elm = document.getElementById(groupID + '_.' + this.contactFormFields[i]) || false;
					if (elm)
						elm.value = "";
				}
			}
		}

	var compareFunctions =
		{
			functionClasses : new Object
				({
					'mouseover' : 'paramTDOver',
					'mouseout'	: 'paramTD',
					'mouseup'	: 'paramTDOver'
				}),
			reqChain : null,
			loadAction : 'mouseup',
			actionAttribute : '__action',
			receive : function (i, e)
			{
				var event 	= e ? e : window.event;
				this.changeCls(i, event['type']);
			},
			changeCls : function (i, key)
			{
				i.className = this.functionClasses[key];

				if (key == this.loadAction)
				{
					var action = i.getAttribute(this.actionAttribute);
					if (action != "")
						eval(action);
				}
			},
			removeFromCompare : function (elmID, ID)
			{
				if (null === this.reqChain)
					this.reqChain	= new requestChain(ajax.request);

				var objParams = new Object();
				objParams.action 	= 'removeCompareProduct';
				objParams.ID 		= ID;
				var pre_call = function ()
								{
									toolTip.show(document.getElementById(elmID), " ", 'productFunctions', 1, 1);
								};
				var callback = function (r)
								{
									document.location.reload();
								};
				this.reqChain.add
				(
					{
						'pre_call'	: pre_call,
						'params' 		: objParams,
						'callback' 	: callback
					}
				);
				if (false === this.reqChain.isBusy)
					this.reqChain.process();
				else
					this.reqChain.flush_mid_section();
			}
		}

	searchForm.fn_fetch_outer = function (ID, params)
	{
		if (null === this.reqChain)
			this.reqChain	= new requestChain(ajax.request);

		var objParams = new Object();

		objParams.action 	= 'populateModels';
		objParams.ID 			= ID;

		for (var x in params)
			objParams[x] = params[x];

		var pre_call = function ()
			{
				if (!(searchForm.selected instanceof Object) || 'undefined' == typeof(searchForm.selected[ID]))
					toolTip.show(document.getElementById(ID), storage.get('loading_results'), 'searchForm', 1, 1);

				ddHandler.emptyDataList(ID);
				ddHandler.deactivate(ID);
			};

		var callback = function (r)
			{
				var selected = searchForm.getSelected(ID);
				ddHandler.populate(ID, r, selected);
				ddHandler.activate(ID);
				toolTip.hide('searchForm');

				if ('undefined' == typeof(selected) && !window.ModelsInitialLoad)
					ddHandler.showDataList(document.getElementById(ID), false, true);
				if (window.ModelsInitialLoad)
					window.ModelsInitialLoad = false;
			};

		this.reqChain.add
			(
				{
					'pre_call'	: pre_call,
					'params' 		: objParams,
					'callback' 	: callback
				}
			);

		if (false === this.reqChain.isBusy)
			this.reqChain.process();
		else
			this.reqChain.flush_mid_section();
	};

	function __int (func, args, timeout, tcount)
	{
		var timeout 	= timeout;
		var func			= func;
		var args			= args;
		var interval	= null;
		var tcount		= tcount;
		var iter			= 0;
		var kill			= false;

		this.start = function ()
		{
			if (null === interval)
			{
				kill = false;
				__exec();
			}
		};

		this.stop = function ()
		{
			clearTimeout(interval);

			interval 	= null;
			kill 			= true;
		};

		this.change_timeout = function (_timeout)
		{
			timeout = _timeout;
		};

		this.change_args = function (_args)
		{
			if (_args instanceof Array)
				args = _args;
		};

		function __exec ()
		{
			func.apply(null, args);

			if (-1 < tcount && iter >= tcount || false !== kill)
				return;

			interval = setTimeout(__exec, timeout);

			++iter;
		};
	};

	function searchEnter (e) { };
	function checkEnter (e) { };

	function randomXToY (minVal, maxVal, floatVal)
		{
			var randVal = minVal + (Math.random() * (maxVal-minVal));
			return typeof 'undefined' == floatVal ? Math.round(randVal) : randVal.toFixed(floatVal);
		};

	var blinkingStar = function (parent, x, y, nID)
		{
			this.constant 		= {};
			this.constant.cls	= 'blinkingStar';

			this.elm 							= parent.ownerDocument.createElement('div');
			this.elm.className 		= this.constant.cls;
			this.elm.style.top		= y + 'px';
			this.elm.style.left 	= x + 'px';
			this.elm.id						= nID;
			
			this.ival 			= null;
			this.isVisible 	= true;
			
			this.startOpac 		= 0;
			this.endOpac 			= 0;
			this.opacStep 		= 10;
			this.optimalDelay = 0;
			this.frameCount		= 0;
			
			parent.parentNode.appendChild(this.elm);
		};

	blinkingStar.prototype.blink = function (interval, timeWait)
		{
			this.timeout			= parseInt(interval, 10);
			this.frameCount		= 100 / this.opacStep;
			this.optimalDelay = this.timeout / this.frameCount;
			
			this.ival = setInterval(___func(this, 'actualFade'),
															this.timeout +
															parseInt(timeWait, 10));
		};

	blinkingStar.prototype.actualFade = function ()
		{
			if (false === this.isVisible)
			{
				this.isVisible 	= true;
				this.startOpac 	= 0;
				this.endOpac 		= 100;
				
				if (platform.isIE)
					this.elm.style.display = 'block';
			}
			else
			{
				this.isVisible 	= false;
				this.startOpac 	= 100;
				this.endOpac 		= 0;
				
				if (platform.isIE)
					this.elm.style.display = 'none';
			}
			
			if (!platform.isIE)
				for (frame = 0 ; frame <= this.frameCount ; frame++)
					setTimeout(___func(this, 'renderFrame', frame), frame * this.optimalDelay);
		};
		
	blinkingStar.prototype.renderFrame = function (frame)
		{
			var direction = 1;
			
			if (this.startOpac > this.endOpac)
				direction = -1;
			
			var currentOpacity = (this.startOpac + this.opacStep * frame * direction);
			
			if (currentOpacity * direction > this.endOpac * direction)
				currentOpacity = endOpacity;
				
			utils.changeOpac(currentOpacity, this.elm, true);
		};

	var blinkingMenuItem = function (elm, cnt, intMin, intMax, twMin, twMax)
		{
			this.elm 			= elm;
			this.starW		= 17;
			this.starH		= 17;
			this.maxDiff	= 2;
			this.intMin		= intMin;
			this.intMax		= intMax;
			this.twMin		= twMin;
			this.twMax		= twMax;
			this.count		= cnt;
			this.stars		= [];
			this.funcs		= [];

			this.populateStars();
		};

	blinkingMenuItem.prototype.populateStars = function ()
		{
			var sector = this.elm.offsetWidth / this.count;
			var coord;
			
			for (var x = 0 ; x < this.count ; x++)
			{
				coord = (0 == x % 2) ? randomXToY(-this.maxDiff, 0)
														 : randomXToY(this.elm.offsetHeight - this.starH, this.elm.offsetHeight - (this.starH - this.maxDiff));
				
				this.stars[x] = new blinkingStar(this.elm, randomXToY(x * sector, (x + 1) * sector) - (this.starW / 2),
																									 coord,
																				 this.elm.id + '_BS_' + x);
			}
		};

	blinkingMenuItem.prototype.trigger = function ()
		{
			for (var x = 0 ; x < this.stars.length ; x++)
				this.stars[x].blink(randomXToY(this.intMin, this.intMax),
														randomXToY(this.twMin, this.twMax));
		};

	var ___func = function (context, func, args)
		{
			if ('function' == typeof(context[func]))
			{
				var _func = function ()
					{
						context[func].call(context, args);
					};

				return _func;
			}

			return function () {};
		};
		
	var platform = 
		{
			isIE 				: false,
			isMozilla 	: false,
			isNetscape 	: false,
			isFirefox 	: false,
			isOpera			: false,
			isSafari		: false,

			verMajor		: 0,
			verMinor		: 0,

			detect : function ()
				{
					var appName 	= navigator.appName.toLowerCase();
					var userAgent = navigator.userAgent.toLowerCase();

					this.isIE 			= (appName.indexOf('microsoft') != -1);
					this.isNetscape = (appName.indexOf('netscape') 	!= -1);
					this.isOpera 		= (appName.indexOf('opera') 		!= -1);
					this.isSafari 	= (appName.indexOf('safari') 		!= -1);
					this.isMozilla 	= (userAgent.indexOf('mozilla') != -1);
					this.isFirefox 	= (userAgent.indexOf('firefox') != -1);

					var parseVersion = function (ver)
						{
							var a = ver.split('.');

							platform.verMajor = parseInt(a[0], 10);
							platform.verMinor = parseInt(a[1], 10);
						};

					var indexOf = function (str, sub, start)
						{
							var i = str.indexOf(sub, start);

							return i >= 0 ? i : str.length;
						};

					if (this.isMozilla)
					{
						var offset = userAgent.indexOf('mozilla/');

						if (offset >= 0)
							parseVersion(userAgent.substring(offset + 8, indexOf(userAgent, ' ', offset)));
					}

					if (this.isIE)
					{
						var offset = userAgent.indexOf('msie ');

						if (offset >= 0)
							parseVersion(userAgent.substring(offset + 5, indexOf(userAgent, ';', offset)));
					}

					if (this.isNetscape)
					{
						var offset = userAgent.indexOf('rv:');

						if (offset >= 0)
							parseVersion(userAgent.substring(offset + 3, indexOf(userAgent, ')', offset)));
					}

					if (this.isFirefox)
					{
						var offset = userAgent.indexOf('firefox/');

						if (offset >= 0)
							parseVersion(userAgent.substring(offset + 8, indexOf(userAgent, ' ', offset)));
					}
				}
		};

	platform.detect();