/* $Id: mil.js,v 1.86 2010-07-08 08:56:06 mmozdyniewicz Exp $ */

//global scope variables init
var cartProductsCount = 0; //has to be updated further

function $JM(id) { return document.getElementById(id) }
function $JMc(name) { return $JMce(name,null,null) }
function $JMce(name,params,style) { var el = document.createElement(name); if(params) for(var i in params) el[i]=params[i]; if(style) for(var i in style) el.style[i]=style[i]; return el; }
function $JMre(el) { if(!el||!el.parentNode) return; el.parentNode.removeChild(el); }

function addEvent(obj, type, fn)
{
  if (obj.addEventListener) { obj.addEventListener(type, fn, false); }
  else if (obj.attachEvent){ obj["e"+type+fn] = fn; obj[type+fn] = function(){obj["e"+type+fn](window.event);}; obj.attachEvent("on"+type, obj[type+fn]); }
}

function getScrollY()
{
	return parseInt( window.pageYOffset ? window.pageYOffset :
		 ( document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) - 20 );
}

function getScrollX()
{
	return parseInt( window.pageXOffset ? window.pageXOffset :
		 ( document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft) - 20 );
}

function getInnerHeight()
{
	return parseInt( self.innerHeight ? self.innerHeight : (document.documentElement && document.documentElement.clientHeight)
		? document.documentElement.clientHeight : document.body.clientHeight);
}

function getInnerWidth()
{
	return parseInt( self.innerWidth ? self.innerWidth : (document.documentElement && document.documentElement.clientWidth)
		? document.documentElement.clientWidth : document.body.clientWidth);
}


function findPos(el)
{
	var l = t = 0;
	if (el.offsetParent) { l = el.offsetLeft;t = el.offsetTop; while (el = el.offsetParent) { l += el.offsetLeft;t += el.offsetTop; } }
	return [l,t];
}

/* class */
function addClass(el,c) { if(!el) return; if(!containsClass(el, c)) el.className += " " + c; }
function removeClass(el, c) { if(!el) return; el.className = el.className.replace(new RegExp(c,"g"),""); }
function containsClass(el, c) { if(!el) return false; return el.className.indexOf(c) != -1 }

String.prototype.trim = function () {
    return this.replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1");
};

/* Dustin Diaz's getElementsByClassName */
function getElementsByClassName(searchClass,node,tag)
{
	var classElements = new Array();

	if ( node == null ) node = document;
	if ( tag == null ) tag = '*';

	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");

	var i, j=0;
	for (i = 0; i < elsLen; i++)
	{
		if ( pattern.test(els[i].className) )
			classElements[j++] = els[i];
	}

	return classElements;
}

/* cookies */
function getCookie(name)
{
	var arg	= name + '=';
	var alen = arg.length;
	var	clen =document.cookie.length;
	var i = 0;
	while (i<clen)
	{
		var j = i + alen;
		if (document.cookie.substring(i,j)==arg) return getCookieVal(j);
		i = document.cookie.indexOf(" ",i) + 1;
		if (i==0) break;
	};
	return null;
}

function setCookie(name,value,path,expires)
{
	str = name + "=" + value;
	if (expires) str += " ;expires="+expires;
        if (path) str += " ;path="+path;
	document.cookie = str;
}

function getCookieVal(offset)
{
	var endstr = document.cookie.indexOf(";", offset);
	if (endstr==-1) endstr = document.cookie.length;
	return unescape(document.cookie.substring(offset,endstr));
};

function delCookie(name)
{
	if (getCookie(name))
    	document.cookie = name + "=; expires=Thu, 01-Jan-70 00:00:01 GMT";
}

// render
function setOpacity(el, o)
{
	el.style.opacity = o/100;
	el.style.filter = "alpha(opacity="+o+")";
}

// -- run
function run()
{
	// run with threads for faster load
	setTimeout(recommendService,0);
	setTimeout(hoverFormElements,0);
}

addEvent(window,"load",run);

/* to del */
function debug(object)
{
	var t = "";
	for(var i in object)
		t+=i+" -> "+object[i]+"<br>";
	document.write(t);
}

function hoverFormElements()
{
	hover("input");
	hover("textarea");

	function hover(name)
	{
		var elements = document.getElementsByTagName(name);
		for(var i = 0; i < elements.length; i++)
		{
			addEvent(elements[i],"focus",function() { addClass(this,"focus"); });
			addEvent(elements[i],"blur",function() { removeClass(this,"focus"); });
		}
	}
}


/*=============================================================================
    SERVICES
==============================================================================*/
function serviceSearchBox()
{
	var searchBox = $JM("search-clause");
	if(!searchBox) return;
	var help = searchBox.parentNode.getElementsByTagName("div").item(0);
	help.propertyVisible = false;
	var button = searchBox.parentNode.getElementsByTagName("h5").item(0);
	button.onclick = function()
	{
		if(!help.propertyVisible) addClass(help,"show");
		else removeClass(help,"show");
		help.propertyVisible = !help.propertyVisible;
	}
	help.onclick = button.onclick;
	createSuggestor(searchBox);
}

//setSwitcher("new");setSwitcher("promotion");setSwitcher("recommended");

function setSwitcher(set)
{
	var select = $JM("select-"+set+"-category");
	if(!select) return;
	var urlBase = "/products_in_set.xml?set=" + set + "&category_id=";
	var content = $JM(set + "-products");
	select.onchange = function()
	{
		var form = this.form;
		addClass(form,set);
		var url = urlBase + this.options[this.selectedIndex].value + "&limit=" + this.title;
		ajaxRequest(url, "GET", content, function()
		{
			removeClass(form,set);
			var title = select.parentNode.parentNode.parentNode.getElementsByTagName("h3")[0];
			var titleElems = title.innerHTML.split(":");
			var newTitle = titleElems[0] + ": " + select.options[select.selectedIndex].innerHTML;
			title.innerHTML = newTitle;
		});
	}
}

function serviceCatManufacturers()
{
	var select = $JM("select-manufacturer");
	if(!select) return;

	select.onchange = function()
	{
		var form = this.form;
		addClass(form,"cat");
		var content = $JM("categories_manufacturer");
		var url = "/categories_manufacturer.xml?manufacturer_id=" + this.options[this.selectedIndex].value;
		ajaxRequest(url, "GET", content, function()
		{
			removeClass(form,"cat");
			var title = select.parentNode.parentNode.parentNode.getElementsByTagName("h3")[0];
			var titleElems = title.innerHTML.split(":");
			var newTitle = titleElems[0] + ": " + select.options[select.selectedIndex].innerHTML;
			title.innerHTML = newTitle;
		});
	}
}

function serviceLoginBox(spellLoginFormChecked)
{
	var form = document.getElementById("login_box");
	if(!form)
		return;

	var labels = form.getElementsByTagName("label");
	for( var i = 0; i < labels.length; i++ )
	{
		if(labels[i].className.indexOf("field") != -1 )
		{
			if(document.getElementById(labels[i].htmlFor).value == "")
			{
				labels[i].style.display = "block";
				labels[i].onclick = function(e)
				{
					e=e||event;
					hideDirectly(document.getElementById(this.htmlFor));
					e.cancelBubble = true;
					return false;
				}
			}
			else
			{
				labels[i].style.display = "none";
			}
		}
	}
	// keyboard navigation
	var inputs = form.getElementsByTagName("input");
	for( var i = 0; i < inputs.length; i++ )
	{
		if(inputs[i].className.indexOf("text") != -1 )
		{
			if(inputs[i].value!="")	hideDirectly(inputs[i]);
			inputs[i].onfocus = hide;
			inputs[i].onclick = hide;
		}
	}

	function hide()
	{
		hideDirectly(this);
	}

	function hideDirectly(input)
	{
		if(!input || !input.nodeName || input.nodeName.toLowerCase()!="input") return;
		var label = input.previousSibling;
		if(label && label.nodeName.toLowerCase() == "label" && label.className.indexOf("hide") == -1)
		{
			input.previousSibling.className = "hide";
			input.focus();
		}
	}

	// do it twice becouse of firefox autocomplete
	if(!spellLoginFormChecked || spellLoginFormChecked != 1)
	{
		window.setTimeout(function(){serviceLoginBox(1);}, 111 );
	}
}

function serviceCartBox()
{
	var button = $JM("resize_cart_box");
	if(!button) return;
	button.status = getCookie("cart_display_status");
	if(!button.status) button.status = 1;
	else button.status = Math.abs(button.status - 1);

	var cartList = button.parentNode.getElementsByTagName("ul").item(0);
	var cartSummary = button.parentNode.getElementsByTagName("div").item(0);

	button.onclick = function()
	{
		changeDisplay(this.status);
		this.title = (this.status == 1) ? "Poka\u017C produkty w koszyku" : "Poka\u017C podsumowanie koszyka";
		this.className = (this.status == 1) ? "short" : "";
		this.status = Math.abs(this.status - 1);
	}

	function changeDisplay(status)
	{
		if(status == 1)
		{
			addClass(cartList,"hidden");
			addClass(cartSummary,"show_summary");
		}
		else
		{
			removeClass(cartList,"hidden");
			removeClass(cartSummary,"show_summary");
		}
		setCookie("cart_display_status", status, "/");
	}
}

function serviceNlBox()
{
	var form = $JM("nl_box");
	if(!form) return;

	var input = form.elements["email"];

	var defaultValue = input.value;
	input.onfocus = function() { if(this.value == defaultValue) this.value = ""; }
	input.onblur = function() { if(this.value == "") this.value = defaultValue; }

	var quitButton = form.parentNode.getElementsByTagName("a")[0];

	form.onsubmit = function() {
		if(!checkEmail(input.id,"Podaj prawid\u0142wy adres email"))
			return false;
		form.elements['funcml'].value = 'add';
		return true;
	}

	if (quitButton != undefined)
	{
		quitButton.onclick = function()
		{
			this.onblur;
			if(!checkEmail(input.id,"Podaj prawid\u0142wy adres email")) return false;
			form.elements['funcml'].value = 'unsub2';
			form.submit();
			return false;
		}
	}

	var tt = $JM("nl_box_tooltip");

	if (tt != undefined && tt != null)
	{
		tt.onmouseover = function() {addClass(this,"hover"); this.parentNode.style.zIndex = 1;}
		tt.onmouseout = function() {removeClass(this,"hover"); this.parentNode.style.zIndex = 0; }
		tt.onclick = function()	{form.elements['email'].focus();removeClass(this,"hover");this.parentNode.style.zIndex = 0;};
	}
}

function serviceNlCategory()
{
	var form = $JM("nl_category_form");
	if(!form) return;

	var input = form.elements["email"];

	var defaultValue = input.value;
	input.onfocus = function() { if(this.value == defaultValue) this.value = ""; }
	input.onblur = function() { if(this.value == "") this.value = defaultValue; }

	form.onsubmit = function() {
		if(!checkEmail(input.id,"Podaj prawid\u0142wy adres email"))
			return false;
		form.elements['funcml'].value = 'add';
		return true;
	}
}

function serviceBSBox()
{
	var zIndex = 10;
	var bsBox = $JM("bs_box");
	if(!bsBox)
		return;
	var links = bsBox.getElementsByTagName("a");
	for( var i = 0; i < links.length; i++ )
		links[i].onmouseover = showImage;

	function showImage()
	{
		for( var i = 0; i < links.length; i++ )
			if(this == links[i]) addClass(links[i],"active");
			else if(links[i].className.indexOf("active") != -1) removeClass(links[i],"active");
	}
}

/* FIXME: "BACK" in shIEt, in Opera "BACK" doesn't work */
function serviceChapters()
{
	var content = $JM("content");
	if(!content) return;

	var historyCheckerInterval;
	var current = -1; // current chapter
	var start = -1; // start chapter
	var linksHref = new Array(); // all chapters
	var ieTest;

	chapters(); // add click events on links
	return;

	function chapters()
	{
		var chapterList = content.getElementsByTagName("ul");
		var chapterCnt = 0;
		for(var i = 0; i < chapterList.length; i++ )
		{
			if(chapterList[i].className.indexOf("chapters") != -1)
			{
				addChapterAjaxSwitcher(chapterList[i]);
				chapterCnt++;
			}
		}
		if(chapterCnt > 0)
		{
			clearInterval(historyCheckerInterval);
			historyCheckerInterval=setInterval(watchHash,300); // add listener 4 browser back button
		}
	}

	function addChapterAjaxSwitcher(list)
	{
		var tmp = start;
		var links = list.getElementsByTagName("a");
		if(links.length == 0) return;
		ieTest = links[0].pathname.slice(0,1) != "/";
		for(var i = 0; i < links.length; i++ )
		{
			if(start == -1) // do it only once
			{
				if(linksHref[i]==undefined)
					linksHref[i] = links[i].href + ((links[i].href.indexOf("?") != -1) ? "&" : "?") + "media=ajax";
				if(links[i].pathname == location.pathname)
					tmp = i;
			}
			links[i].onclick = (function(i){return function(){return changeChapter(this,i,null,true);}})(i);
		}
		if(start == -1)
			start = current = tmp;
	}

	function changeChapter(el,i,url,add)
	{
		if(el!=null)
			url = el.href + ((el.href.indexOf("?") != -1) ? "&" : "?") + "media=ajax";
		current = i;
		if(add) addHistoryEntry(current);
		return !ajaxRequest(url, "GET", content, chapters);
	}


	function watchHash()
	{
		if(ieTest) { clearInterval(historyCheckerInterval); return; }

		var hash = location.hash;
		// if hash is null set it to start
		hash = (hash.length == 0) ? start : hash.slice(1);
		if(hash != current)
			changeChapter(null,hash,linksHref[hash],false);
	}

	function addHistoryEntry(val)
	{
		location.hash = val;
	}
}

function serviceSortCategory()
{
	var forms = document.getElementsByTagName("form");
	for(var i = 0; i < forms.length; i++)
	{
		if(forms[i].className.indexOf("sort") != -1)
		{
			submit(forms[i].getElementsByTagName("select"));
			submit(forms[i].getElementsByTagName("input"));
		}
	}

	function submit(elements)
	{
		for(var j = 0; j < elements.length; j++)
				elements[j].onchange = function() { this.form.submit(); }
	}
}

/* wishlist */
function checkWishListForm(input)
{
	var select = input.form.getElementsByTagName("select")[0];
	var value = select.value;

	if(value == "removeDisabled")
	{
		return confirm('Czy na pewno chcesz usun\u0105\u0107 niedost\u0119pne produkty z listy \u017Cycze\u0144?');
	}

	if(checkWishListProductsSelected())
	{
		if(value == "remove")
			return confirm("Czy na pewno chcesz usun\u0105\u0107 wybrane z listy \u017Cycze\u0144?");
		return true;
	}

	if(value == "remove") myAlert("Wybierz produkty z listy \u017Cycze\u0144 kt\u00F3re chcesz usun\u0105\u0107");
	else if(value == "moveToBasket") myAlert("Wybierz produkty z listy \u017Cycze\u0144 kt\u00F3re chcesz przenie\u015B\u0107 do koszyka");
	else if(value == "copyToBasket") myAlert("Wybierz produkty z listy \u017Cycze\u0144 kt\u00F3re chcesz skopiowa\u0107 do koszyka");

	return false;
}

function checkWishListProductsSelected()
{
	var table = document.getElementById("product_table");
	var inputs = table.getElementsByTagName("input");
	for( var i = 0; i < inputs.length; i++ )
		if(inputs[i].className.indexOf("mark_delete") != -1 && inputs[i].checked)
			return true;
	return false;
}

/*=============================================================================
    ALERT DIALOG
==============================================================================*/
// errorMesssage - display message
// elementFocus - set focus to element after hide alert (optional)
function myAlert(errorMessage, elementFocus)
{
	var box = new AlertBox();
	box.addMessage(errorMessage);
	box.addPostElement(elementFocus);
	box.addButton("OK","Zamknij","button",false);
	box.show();
	box.addShadow();
	return false;
}

//window.confirm = myConfirm;

function myConfirm(question)
{
	var box = new AlertBox();
	box.addMessage(question);
	box.addButton("OK","Potwierd\u017A czynno\u015B\u0107","button ok",true);
	box.addButton("Anuluj","Anuluj czynno\u015B\u0107","button cancel",false);
	box.show();
	box.addShadow();
	return false;
}

function AlertBox()
{
	var dialogAlertId = "dialog_alert";
	var dialogAlertIdBg = "dialog_alert_bg";

	var elementFocus = null;
	var buttons = new Array();
	var returnVal = null;

	var alertBgUnder = document.createElement("div");
	alertBgUnder.id = dialogAlertIdBg;
	document.getElementsByTagName("body").item(0).appendChild(alertBgUnder);

	var alertBg = document.createElement("div");
	alertBg.id = dialogAlertId;
	document.getElementsByTagName("body").item(0).appendChild(alertBg);

	var dialog = document.createElement("div");
	dialog.className = "dialog";
	dialog.onclick = function(e) { e = e||event; e.cancelBubble = true; return false; }
	alertBg.appendChild(dialog);

	this.addShadow = function()
	{
		// shadow
		var shadow = document.createElement("div");
		shadow.className = "shadow";
		shadow.style.position = "absolute";
		shadow.style.background = "#000";
		shadow.style.top = (dialog.offsetTop + 3) + "px";
		shadow.style.left = (dialog.offsetLeft + 3) + "px";
		shadow.style.width = dialog.offsetWidth + "px";
		shadow.style.height = dialog.offsetHeight + "px";
		shadow.style.opacity = 0.15;
		shadow.style.filter = "alpha(opacity=15)";
		alertBg.appendChild(shadow);
	}

	this.addPostElement = function(elem)
	{
		elementFocus = elem;
	}

	this.addMessage = function(msg)
	{
		var text = document.createElement("div");
		text.className = "text";
		text.innerHTML = msg;
		text.onselectstart = new Function("return false");
		dialog.appendChild(text);
	}

	this.addButton = function(text, title, className, ret)
	{
		var button = document.createElement("a");
		button.setAttribute("href","#");
		button.innerHTML = text;
		button.className = className;
		button.onfocus = function() { addClass(this,"focus"); }
		button.title = title;
		button.onblur = function() { removeClass(this,"focus"); }
		dialog.appendChild(button);
		button.onclick = function()
		{
			alertBg.parentNode.removeChild(alertBg);
			alertBgUnder.parentNode.removeChild(alertBgUnder);
			if(elementFocus) elementFocus.focus();
			return false;
		}
		buttons[buttons.length] = button;
	}

	this.show = function()
	{
		var scroll = getPageScroll();

		alertBgUnder.style.width = alertBg.style.width = document.documentElement.scrollWidth + "px";
		alertBgUnder.style.height = document.documentElement.scrollHeight + "px";
		setOpacity(alertBgUnder,30);
		alertBgUnder.style.background = "#000";

		var innerHeight = window.innerHeight ? window.innerHeight : ( screen.availHeight - 100 )

		dialog.style.position = "absolute";
		dialog.style.top = ( ( scroll.y + ( innerHeight/2 )  ) - ( dialog.offsetHeight / 2 ) ) + "px";
		dialog.style.left = ( (parseInt(alertBg.style.width) / 2) - ( dialog.offsetWidth / 2 ) ) + "px";

		alertBg.onclick = function()
		{
			dialog.className += " alert";
			setTimeout( function()
			{
				removeClass(dialog,"alert");
				if(buttons.length == 1) buttons[0].focus();
			}, 1000 );
		}

		buttons[buttons.length - 1].focus();
	}

	function getPageScroll()
	{
		var scroll = new Object();
		if (self.pageYOffset)
		{
			scroll.x = self.pageXOffset;
			scroll.y = self.pageYOffset;
		}
		else if (document.documentElement && document.documentElement.scrollTop)
		{
			scroll.x = document.documentElement.scrollLeft;
			scroll.y = document.documentElement.scrollTop;
		}
		else if (document.body)
		{
			scroll.x = document.body.scrollLeft;
			scroll.y = document.body.scrollTop;
		}
		return scroll;
	}


}


/* ajax request */
/*=============================================================================
    AJAX LIB
==============================================================================*/
function ajaxRequest(url, method, containerResponse, postFunction)
{
	var req;
	if(window.XMLHttpRequest)
		req = new XMLHttpRequest();
	else if(window.ActiveXObject)
		req = new ActiveXObject("Microsoft.XMLHTTP");
	// if browser doesn't support ajax return true
	if(!req) return false;

	method = method.toUpperCase();

	// process function
 	req.onreadystatechange=function()
 	{
  		if (req.readyState == 4)
  			if(req.status == 200)
  			{
  				if(containerResponse) containerResponse.innerHTML = req.responseText;
  				if(postFunction) postFunction(req);
  			}
	}

	// send request
	if(method == "GET")
	{
		req.open(method, url, true );
		req.send(null);
	}
	else if(method == "POST")
	{
		try // catch an exception to prevent errors (opera <= 8 doesn't support post request)
		{
			req.open(method, url.slice(0,url.indexOf("?")), true );
			var parameters = url.slice(url.indexOf("?") + 1);
			req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	      	req.setRequestHeader("Content-length", parameters.length);
	      	req.setRequestHeader("Connection", "close");
	      	req.send(parameters);
      	}
      	catch (e)
      	{
      		return false;
      	}
	}
	else
	{
		alert("Not normal method: " + method);
		return false;
	}

	return true;
}

function updateTopInfoPosition()
{
	var topInfo = $JM("top_info");
	if(!topInfo) return;
	topInfo.className = "relative " + topInfo.className;
	var newWrapper = $JM("top");
	var newSibling = newWrapper.getElementsByTagName("div").item(0);
	newWrapper.insertBefore(topInfo,newSibling);
}

function recommendService()
{
	var recommendButton = $JM("recommend_button");
	if(!recommendButton) return;
	var recommendForm = $JM("product_recommend");
	var recommendCancel = $JM("recommend_cancel");

	recommendButton.onclick = function()
	{
		if(containsClass(recommendForm,"visible"))
			removeClass(recommendForm,"visible");
		else
		{
			addClass(recommendForm,"visible");
			recommendForm.getElementsByTagName("form").item(0).className = "";
		}
		return false;
	}
	recommendCancel.onclick = function()
	{
		removeClass(recommendForm,"visible");
		return false;
	}
	var recommendCloseInfo = $JM("recommend_close_info");
	if(recommendCloseInfo)
		recommendCloseInfo.onclick = function()
		{
			var parent = this.parentNode;
			parent.parentNode.removeChild(parent);
			removeClass(recommendForm,"visible");
			return false;
		}

}

function hoverProducts()
{
	// table
	var productTable = document.getElementById("product_table");
	if(!productTable) return;

	var products = productTable.getElementsByTagName("tbody").item(0).getElementsByTagName("tr");
	for( var i = 0; i < products.length; i++ )
	{
		products[i].onmouseover = function() { addClass(this,"hover"); }
		products[i].onmouseout = function() { removeClass(this,"hover"); }
	}
}

/* recommend (product/club) */
function checkProductRecommend(form)
{
	// TODO: add ajax sending
	return checkFormRecommend(form);

	loading = document.createElement("div");
	addClass(loading,"loading");
	loading.style.width = (form.offsetWidth - 3) + "px";
	loading.style.height = (form.offsetHeight - ((form.offsetHeight/2) - 40) - 23) + "px";
	loading.style.paddingTop = ((form.offsetHeight/2) - 40) + "px";
	loading.innerHTML = "Zapisywanie danych";
	form.appendChild(loading);

	//return false;
}

function selectAdditionalAddress(callback)
{
    var windowwidth = 600
    var windowheight = 350;

    var left = (screen.width - windowwidth)/2;
    var top = (screen.height - windowheight)/2 - 18;

    var scrollbars = "no";

    var url = "/klub/moje_adresy.xml?";
    if(!callback)
    	url += "no_callback=true&";
    url += "r=" + Math.random();

    if (left<0) { scrollbars = "yes"; left = 32; windowwidth = screen.width - 2*left; }
    if (top<0) { scrollbars = "yes"; top = 32; windowheight =  screen.height - 2*top - 18; top = top - 18; }

	if(callback)
	{
		window.dialogArgs = new Object();
		window.dialogArgs.callback = callback;
	}

    var win = window.open(url,"addAddr","toolbar=no,location=no,directories=no,"+
        "status=no,menubar=no,scrollbars=" + scrollbars + ",resizable=no,"+
        "copyhistory=no, width="+windowwidth+",height="+windowheight+",left=" + left + ",top=" + top);

	return false;
}

function createBannerScript(no,categoryId)
{
	document.write("<script src=\"/banner?action=view&id=" + no
	+ ((categoryId.length > 0) ? ('&category_id=' + categoryId ) : '')
	+ "&js&rand=" +	Math.random() + "\" type=\"text/javascript\" /></script>");
}

var searchSelectBuffer = new Array();
function reloadSearchSubCategories(select)
{
	var selectContainer = select.parentNode;
	var selectContainerPos = parseInt(selectContainer.id.slice(15)) + 1;

	// remove sub selects
	var subSelect = null;
	var i = selectContainerPos;
	while((subSelect = $JM("search-section-" + i++)) != null)
		$JMre(subSelect);

	var parentId = select.options[select.selectedIndex].value;
	if(parentId == "") return;

	if(searchSelectBuffer[parentId])
	{
		addSelects(searchSelectBuffer[parentId]);
		return;
	}

	var timeout = setTimeout(function() { addClass(selectContainer,"loading"); }, 100);

	// load subselects
	var url = "/szukaj_kategorie.xml?parent_id=" + parentId + "&position=" + selectContainerPos;
	ajaxRequest(url,"GET",null,insertResponse);
	return;

	function insertResponse(req)
	{
		var text = req.responseText;
		addSelects(text);
		searchSelectBuffer[parentId] = text;
		clearTimeout(timeout);
		removeClass(selectContainer,"loading");
	}

	function addSelects(text)
	{
		var selects = selectContainer.parentNode;
		var container = $JMc("span");
		container.innerHTML = text;
		selects.appendChild(container);
	}
}

/* SUGGESTOR - requires basic functions from the top $, $c etc */
function createSuggestor(input)
{
	input.setAttribute("autocomplete","off");
	var suggestorTimeout;

	var buffer = new Object();

	var suggestShadow = $JMc("div");
	suggestShadow.className = "suggest_shadow hidden";
	suggestShadow.style.width = input.offsetWidth + "px";
	suggestShadow.style.left = (input.offsetLeft + 2) + "px";
	suggestShadow.style.top = (input.offsetTop + input.offsetHeight + 4) + "px";
	setOpacity(suggestShadow,10);
	input.form.appendChild(suggestShadow);

	var suggestContainer = $JMc("div");
	suggestContainer.className = "suggest hidden";
	suggestContainer.style.width = (input.offsetWidth - 2) + "px";
	suggestContainer.style.left = input.offsetLeft + "px";
	suggestContainer.style.top = (input.offsetTop + input.offsetHeight + 1) + "px";
	input.form.appendChild(suggestContainer);
	var clauses = new Array();
	var activeClause = -1;

	var okURIchars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-";
	var hexchars = "0123456789ABCDEF";
	var clause = "";

	input.onkeydown = suggest;
	input.onfocus = suggest;
	addEvent(document,"click",hideSuggestor);
	input.onclick = function(e) { e=e||event; e.cancelBubble = true; }

	function suggest(e)
	{
		e = e || event;
		var key=e.keyCode ? e.keyCode : e.charCode;
		if(key==13||key==16||key==37||key==39)
		{
			if(key==13) clearTimeout(suggestorTimeout);
			return;
		}
		if(key==27)
		{
			replaceDefault(activeClause);
			hideSuggestor();
			return;
		}
		if(key==40||key==38)
		{
			if(clauses.length == 0) return;
			var newActiveClause = activeClause;
			newActiveClause += (key == 40) ? 1 : -1;

			if(newActiveClause < -1) { newActiveClause = clauses.length - 1; }
			else if(newActiveClause >= clauses.length) { newActiveClause = -1; }

			if(newActiveClause == -1) replaceDefault(newActiveClause);
			else replaceActive(newActiveClause,true);

			if (e.preventDefault) e.preventDefault();
			e.returnValue = false;
			return false;
		}
		else
		{
			clause = input.value;
			clearTimeout(suggestorTimeout);
			suggestorTimeout = setTimeout(searchSuggest,200);
		}
	}

	function replaceDefault(newActive)
	{
		removeClass(clauses[activeClause],"active");
		activeClause = newActive;
		input.value = clause;
	}

	function replaceActive(newActive,replaceInput)
	{
		if(activeClause != -1) removeClass(clauses[activeClause],"active");
		activeClause = newActive;
		addClass(clauses[activeClause],"active");
		if(replaceInput) input.value = clauses[activeClause].clause;
	}

	function searchSuggest()
	{
		if(input.value.length < 3)
		{
			hideSuggestor();
			return;
		}
		if(!buffer[input.value])
			ajaxRequest("/szukaj_podpowiedzi.xml?prefix=" + encodeURIComponent(input.value),
				"GET",null,
				function(req)
				{
					buffer[input.value] = req.responseXML;
					displaySuggest(buffer[input.value]);
				}
			);
		else
			displaySuggest(buffer[input.value]);
	}

	function displaySuggest(response)
	{
		var responseClauses = response.getElementsByTagName("clause");

		clauses = new Array();
		suggestContainer.innerHTML = "";
		hideSuggestor();

		if(responseClauses.length == 0) return;

		var frame = $JMc("iframe");
		frame.src = "/images/misc/empty.gif";
		frame.frameBorder="0";
		suggestContainer.appendChild(frame);

		showSuggestor();
		activeClause = -1;
		for( var i = 0; i < responseClauses.length; i++)
		{
			var clause = $JMc("div");
			clause.innerHTML = responseClauses[i].getAttribute("name");
			//clause.innerHTML = responseClauses[i].getAttribute("name") + "<span>~" + responseClauses[i].getAttribute("results") + "</span>";
			clause.clause = clause.innerHTML;
			clause.title = "Szukaj wyra\u017Cenia: " + clause.innerHTML;
			clause.no = i;
			clause.onmouseover = function() { replaceActive(this.no,false) };
			clause.onclick = function() { replaceActive(this.no,true); input.form.submit() };
			suggestContainer.appendChild(clause);
			var results = $JMc("span");
			results.innerHTML = responseClauses[i].getAttribute("results");
			//clause.appendChild(results);
			clauses[i] = clause;

		}
		//addClass(clauses[activeClause],"active");

		var close = $JMc("div");
		close.className = "close";
		suggestContainer.appendChild(close);
		var closeButton = $JMc("a");
		closeButton.href="#";
		closeButton.innerHTML = "Zamknij";
		closeButton.title = "Schowaj okno z podpowiedziami";
		close.appendChild(closeButton);
		close.onclick = function() { return false; }

		frame.style.height = (suggestContainer.offsetHeight - 4) + "px";
		frame.style.width = (suggestContainer.offsetWidth - 2) + "px";
		suggestShadow.style.height = (suggestContainer.offsetHeight - 1) + "px";
	}

	function hideSuggestor()
	{
		addClass(suggestContainer,"hidden");
		addClass(suggestShadow,"hidden");
		return false;
	}

	function showSuggestor()
	{
		removeClass(suggestContainer,"hidden");
		removeClass(suggestShadow,"hidden");
		return false;
	}

	function encodeURIComponent(s)
	{
		var s = utf8(s);
		var c;
		var enc = "";
		for (var i= 0; i<s.length; i++)
		{
			if (okURIchars.indexOf(s.charAt(i))==-1) enc += "%"+toHex(s.charCodeAt(i));
			else enc += s.charAt(i);
	  	}
	  	return enc;
	}

	function utf8(wide)
	{
		var c, s; var enc = ""; var i = 0;
		while(i<wide.length)
		{
			c= wide.charCodeAt(i++);
			// handle UTF-16 surrogates
			if (c>=0xDC00 && c<0xE000) continue;
			if (c>=0xD800 && c<0xDC00)
			{
				if (i>=wide.length) continue;
				s= wide.charCodeAt(i++);
				if (s<0xDC00 || c>=0xDE00) continue;
				c= ((c-0xD800)<<10)+(s-0xDC00)+0x10000;
			}
			// output value
				if (c<0x80) enc += String.fromCharCode(c);
				else if (c<0x800) enc += String.fromCharCode(0xC0+(c>>6),0x80+(c&0x3F));
				else if (c<0x10000) enc += String.fromCharCode(0xE0+(c>>12),0x80+(c>>6&0x3F),0x80+(c&0x3F));
				else enc += String.fromCharCode(0xF0+(c>>18),0x80+(c>>12&0x3F),0x80+(c>>6&0x3F),0x80+(c&0x3F));
		}
		return enc;
	}

	function toHex(n)
	{
		return hexchars.charAt(n>>4)+hexchars.charAt(n & 0xF);
	}
}