/*
JavaScript Gallery
Copyright (C) 2008 Aptus s.c.
All rights reserved
*/

var jsgId='popupJSG';
var jsgImgPath='i/';
var jsgDefaultId='jsg';

var jsgOldOnResize, jsgOldOnScroll;
var jsgActive=null;
var jsgGalleries=[];
var jsgCallback=false;
var jsgSrc;



function jsgMove()
{
	var e=document.getElementById(jsgId+'_window');
	if(e) {
		var es=e.style;
		var mx=document.body.scrollLeft;
		var my=document.body.scrollTop;
		var cx=document.body.clientWidth;
		var cy=document.body.clientHeight;

		var x=Math.floor(cx/2-e.offsetWidth/2)+mx;
		var y=Math.floor(cy/2-e.offsetHeight/2)+my;
//		alert('my: '+my+' cy: '+cy+' offsetHeight: '+e.offsetHeight+' y: '+y);
		if(y<0)
			y=0;
		if(x<0)
			x=cx-e.offsetWidth;
		//es.marginLeft=x+'px';
		//es.marginTop=y+'px';
	}
}

function jsgOnScroll(e)
{
	jsgMove();
	if(jsgOldOnScroll)
		jsgOldOnScroll(e);
}

function jsgResize()
{
	var e=document.getElementById(jsgId);
	if(e) {
		var es=e.style;
		if(es.display!='none') {
			es.display='none';
			//es.width=document.body.scrollWidth+'px';
			//es.height=(document.body.scrollHeight>document.body.clientHeight ? document.body.scrollHeight : document.body.clientHeight)+'px';
			es.display='';
		}
		jsgMove();
	}
}

function jsgOnResize(e)
{
	jsgResize();
	if(jsgOldOnResize)
		jsgOldOnResize(e);
}

function jsgReadyState()
{
	if(event.srcElement.readyState=='complete')
		jsgMove();
}

function jsgLoad(e)
{
	jsgMove();
}

function jsgImgClick(e)
{
	var x=e ? (e.offsetX ? e.offsetX : e.pageX-this.x) : event.offsetX;
	if(x<this.offsetWidth/2)
		jsgActive.prev();
	else
		jsgActive.next();
}

function jsgInit()
{
	var e=document.getElementById(jsgId);
	if(!e) {
		jsgOldOnResize=window.onresize;
		window.onresize=jsgOnResize;
		jsgOldOnScroll=window.onscroll;
		window.onscroll=jsgOnScroll;
		var e=document.createElement('div');
		e.id=jsgId;
		e.style.backgroundImage='url('+jsgImgPath+'jsg_bg.gif)';
		e.innerHTML='<table style="width:100%; height:100%;"><tr><td align="center" valign="middle" style="width:100%; text-align:center !important; height:100%;"><center><table align="center" id="'+jsgId+'_window" cellspacing=0 cellpadding=0 class="jsg"><tr><td class="header"><a href="javascript:jsgClose();void(0);"><img src="'+jsgImgPath+'jsg_close.gif"></a><span id="'+jsgId+'_title"></span></td></tr><tr><td class="image"><img src="" id="'+jsgId+'_image"></td></tr><tr><td class="footer"><div class="navi"><a href="javascript:jsgActive.first();void(0);"><img src="'+jsgImgPath+'jsg_first.gif"></a><a href="javascript:jsgActive.prev();void(0);"><img src="'+jsgImgPath+'jsg_prev.gif"></a><a href="javascript:jsgActive.next();void(0);"><img src="'+jsgImgPath+'jsg_next.gif"></a><a href="javascript:jsgActive.last();void(0);"><img src="'+jsgImgPath+'jsg_last.gif"></a></div><span id="'+jsgId+'_desc"></span></td></tr></table></center></td></tr></table>';
		document.body.appendChild(e);
		e=document.getElementById(jsgId);
		var img=document.getElementById(jsgId+'_image');
		if(img.addEventListener)
			img.addEventListener('load',jsgLoad,false);
		else
			img.attachEvent('onreadystatechange',jsgReadyState);
		img.onclick=jsgImgClick;
		jsgResize();
	}
	e.style.display='';
}

function jsgClose()
{
	var e=document.getElementById(jsgId);
	if(e) {
		e.style.display='none';
		document.getElementById(jsgId+'_image').src='';
	}
	jsgActive=null;
}

function jsgShow(i)
{
	this.current=i;
	var img=this.images[i];
	document.getElementById(jsgId+'_image').src=typeof(img)=='object' ? img[0] : img;
	document.getElementById(jsgId+'_desc').innerHTML=(i+1)+'/'+this.images.length+' '+(typeof(img)=='object' ? img[1] : '');
}

function jsgOpen(i)
{
	jsgInit();
	jsgActive=this;
	document.getElementById(jsgId+'_title').innerHTML=this.title;
	this.show(i);
}

function jsgFirst()
{
	this.show(0);
}

function jsgPrev()
{
	if(this.current>0)
		this.show(this.current-1);
}

function jsgNext()
{
	if(this.current<this.images.length-1)
		this.show(this.current+1);
}

function jsgLast()
{
	this.show(this.images.length-1);
}

function jsgFind(i)
{
	var c;
	for(c=0; c<this.images.length; c++)
		if(i==(typeof(this.images[c])=='object' ? this.images[c][0] : this.images[c]))
			return c;
	return null;
}

function JSgallery(g,t)
{
	this.images=g;
	this.title=t;
	this.open=jsgOpen;
	this.show=jsgShow;
	this.first=jsgFirst;
	this.prev=jsgPrev;
	this.next=jsgNext;
	this.last=jsgLast;
	this.find=jsgFind;
}

function jsgFindImages(e)
{
	var img=new Array();
	var i,j;
	for(i=0; i<e.childNodes.length; i++)
		if(e.childNodes[i].tagName) {
			if(e.childNodes[i].tagName=='IMG' && e.childNodes[i].onclick) {
				e.childNodes[i].onclick();
				img.push([jsgSrc,e.childNodes[i].title]);
			}
			var img2=jsgFindImages(e.childNodes[i]);
			for(j=0; j<img2.length; j++)
				img.push(img2[j]);
		}
	return img;
}

function jsgClick(i,e,d)
{
	var l=false;
	var jsgTmp;
	if(jsgCallback) {
		jsgSrc=i;
		return;
	}
	if(typeof(e)=='object')
		l=true;
	else
		d=e;
	if(typeof(d)=='undefined')
		d=jsgDefaultId;
	if(l || typeof(jsgGalleries[d])=='undefined') {
		var bl;
		if(l)
			while(e) {
				e=e.parentNode;
				if(e.id==d) {
					bl=e;
					break;
				}
			}
		else
			bl=document.getElementById(d);
		if(!bl)
			return;
		jsgCallback=true;
		var img=jsgFindImages(bl);
		jsgCallback=false;
		jsgTmp=new JSgallery(img,bl.title);
		if(!l)
			jsgGalleries[d]=jsgTmp;
	}
	else
		jsgTmp=jsgGalleries[d];
	jsgTmp.open(jsgTmp.find(i));
}


window.addLoadEvent = function(func) {
   var oldonload = window.onload;
   if (typeof window.onload != 'function') {
      window.onload = func;
   } else {
      window.onload = function() {
         if (oldonload) {
            oldonload();
         }
         func();
      }
   }
}


function img1(name) {
	 img=new Image();
     img.src = '/i/'+name+'.gif';
	 document.images[name].src=img.src;
}

function img2(name) {
	 img=new Image();
     img.src = '/i/'+name+'b.gif';
	 document.images[name].src=img.src;
}

function dbl(t) {
	if(t.dlg_clicked)
		return false;
	t.dlg_clicked=true;
	return true;
}

function productChangeTab(visTab)
{
	var tabs = ['tabDesc', 'tabVote', 'tabAnnex', 'tabDescparams'];
	var tab = '';
	for(var i=0; i<=tabs.length; i++) {
		tab = tabs[i];
		if(document.getElementById(tab)) {
			if(tab==visTab) {
				document.getElementById(tab).style.display='none';
				document.getElementById(tab+'H').style.display='block';
				document.getElementById(tab+'Content').style.display = 'block';
			}
			else {
				document.getElementById(tab).style.display='block';
				document.getElementById(tab+'H').style.display='none';
				document.getElementById(tab+'Content').style.display = 'none';
			}
		}
	}
}


function pageChange(id,all) {
	for(var i=1;i<=all;i++) {
		document.getElementById('page'+i).style.display = 'none';
		document.getElementById('link'+i).className = 'normal';
	}
	document.getElementById('page'+id).style.display = 'block';
	document.getElementById('link'+id).className = 'hover';
}

function dlg_url(u)
{
	if(typeof(u)=='object') {
		var s=u[0];
		if(typeof(u[1])=='object') {
			var k;
			var sp='?';
			for (k in u[1]) {
				s+=sp+encodeURIComponent(k)+'='+encodeURIComponent(u[1][k]);
				sp='&';
			}
		}
		if(typeof(u[2])!='undefined')
			s+='#'+u[2];
		return s;
	}
	return u;
}

function dlg_get(u,cb,cbp)
{
	return dlg_xmlhttprequest(u,'GET','','',cb,cbp);
}


function dlg_xmlhttprequest(u,m,d,c,cb,cbp)
{
	u=dlg_url(u);
	var r=false;
    if(window.XMLHttpRequest) {
    	try {
			r=new XMLHttpRequest();
        }
		catch(e) {
			r=false;
        }
    }
	else if(window.ActiveXObject) {
       	try {
        	r=new ActiveXObject("Msxml2.XMLHTTP");
      	}
		catch(e) {
        	try {
          		r=new ActiveXObject("Microsoft.XMLHTTP");
        	}
			catch(e) {
          		r=false;
        	}
		}
    }

	if(r) {
		r.onreadystatechange=function() {
			if(r.readyState==4) {
				if(r.status==200)
					cb(r.responseText,cbp);
			}
		};
		r.open(m,u);
		if(c!='')
			r.setRequestHeader('Content-Type',c);
		r.send(d);
		return true;
	}
	return false;
}

function reset() {
	dlg_get('/add2compare.php?id=1',function(d){});
}


function comparePreview() {
	dlg_get('/comparePreview.php',function(d){document.getElementById('compare').innerHTML=d;});
}

var idAction;

function moveTable(direction) {
	if(document.getElementById('compareTable').offsetWidth>(window.parent.document.getElementById('inner_lightbox').offsetWidth-24)) {
		if(direction=='-') {
			if(-(parseInt(document.getElementById('compareTable').style.left))<document.getElementById('compareTable').offsetWidth-(window.parent.document.getElementById('inner_lightbox').offsetWidth-24)) {
					document.getElementById('compareTable').style.left = (parseInt(document.getElementById('compareTable').style.left)-2)+"px";
			}
		} else {
			if(parseInt(document.getElementById('compareTable').style.left)<0) {
					document.getElementById('compareTable').style.left = (parseInt(document.getElementById('compareTable').style.left)+2)+"px";
			}
		}
	}
}

function setTableMove(direction) {
	if(document.getElementById('compareTable').offsetWidth>(window.parent.document.getElementById('inner_lightbox').offsetWidth-24)) {
		idAction = window.setInterval("moveTable('"+direction+"')", 50);
	}
}

function clearTableMove() {
	if(document.getElementById('compareTable').offsetWidth>(window.parent.document.getElementById('inner_lightbox').offsetWidth-24)) {
		window.clearInterval(idAction);
	}
}

function change_dictionary()
{
	var id_dict = document.form.dictionary.value;
	dlg_get(['/search.php', {'action':'words_get', 'id_dictionary':id_dict}], function(d) { document.getElementById('wordsDiv').innerHTML=d;  } );
}

function setIframeHeight(iframeName) {
	var iframeEl = document.getElementById? document.getElementById(iframeName): document.all? document.all[iframeName]: null;
	if (iframeEl) {
		var hoogte = iframeEl.contentWindow.document.body.scrollHeight;
		iframeEl.style.height = hoogte + "px";
	}
}


function lightbox_open(title,url,width) {
	document.getElementById('lightbox_title').innerHTML = title;
	lightbox_show(width);
	document.getElementById('iform').src = url;
}

function lightbox_show(width) {
	document.getElementById('lightbox_shadow').style.display = 'block';
	document.getElementById('lightbox').style.display = 'block';
	document.getElementById('inner_lightbox').style.width = (width ? width : 520)+"px";
}

function lightbox_hide() {
	document.getElementById('lightbox_shadow').style.display = 'none';
	document.getElementById('lightbox').style.display = 'none';
	document.getElementById('iform').src = "/i/bl.gif";
}


//v1.7
// Flash Player Version Detection
// Detect Client Browser type
// Copyright 2005-2008 Adobe Systems Incorporated.  All rights reserved.
var isIE  = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;
function ControlVersion()
{
	var version;
	var axo;
	var e;
	// NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry
	try {
		// version will be set for 7.X or greater players
		axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
		version = axo.GetVariable("$version");
	} catch (e) {
	}
	if (!version)
	{
		try {
			// version will be set for 6.X players only
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
			
			// installed player is some revision of 6.0
			// GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
			// so we have to be careful. 
			
			// default to the first public version
			version = "WIN 6,0,21,0";
			// throws if AllowScripAccess does not exist (introduced in 6.0r47)		
			axo.AllowScriptAccess = "always";
			// safe to call for 6.0r47 or greater
			version = axo.GetVariable("$version");
		} catch (e) {
		}
	}
	if (!version)
	{
		try {
			// version will be set for 4.X or 5.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			version = axo.GetVariable("$version");
		} catch (e) {
		}
	}
	if (!version)
	{
		try {
			// version will be set for 3.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			version = "WIN 3,0,18,0";
		} catch (e) {
		}
	}
	if (!version)
	{
		try {
			// version will be set for 2.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
			version = "WIN 2,0,0,11";
		} catch (e) {
			version = -1;
		}
	}
	
	return version;
}
// JavaScript helper required to detect Flash Player PlugIn version information
function GetSwfVer(){
	// NS/Opera version >= 3 check for Flash plugin in plugin array
	var flashVer = -1;
	
	if (navigator.plugins != null && navigator.plugins.length > 0) {
		if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
			var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
			var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
			var descArray = flashDescription.split(" ");
			var tempArrayMajor = descArray[2].split(".");			
			var versionMajor = tempArrayMajor[0];
			var versionMinor = tempArrayMajor[1];
			var versionRevision = descArray[3];
			if (versionRevision == "") {
				versionRevision = descArray[4];
			}
			if (versionRevision[0] == "d") {
				versionRevision = versionRevision.substring(1);
			} else if (versionRevision[0] == "r") {
				versionRevision = versionRevision.substring(1);
				if (versionRevision.indexOf("d") > 0) {
					versionRevision = versionRevision.substring(0, versionRevision.indexOf("d"));
				}
			}
			var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
		}
	}
	// MSN/WebTV 2.6 supports Flash 4
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
	// WebTV 2.5 supports Flash 3
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
	// older WebTV supports Flash 2
	else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
	else if ( isIE && isWin && !isOpera ) {
		flashVer = ControlVersion();
	}	
	return flashVer;
}
// When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision)
{
	versionStr = GetSwfVer();
	if (versionStr == -1 ) {
		return false;
	} else if (versionStr != 0) {
		if(isIE && isWin && !isOpera) {
			// Given "WIN 2,0,0,11"
			tempArray         = versionStr.split(" "); 	// ["WIN", "2,0,0,11"]
			tempString        = tempArray[1];			// "2,0,0,11"
			versionArray      = tempString.split(",");	// ['2', '0', '0', '11']
		} else {
			versionArray      = versionStr.split(".");
		}
		var versionMajor      = versionArray[0];
		var versionMinor      = versionArray[1];
		var versionRevision   = versionArray[2];
        	// is the major.revision >= requested major.revision AND the minor version >= requested minor
		if (versionMajor > parseFloat(reqMajorVer)) {
			return true;
		} else if (versionMajor == parseFloat(reqMajorVer)) {
			if (versionMinor > parseFloat(reqMinorVer))
				return true;
			else if (versionMinor == parseFloat(reqMinorVer)) {
				if (versionRevision >= parseFloat(reqRevision))
					return true;
			}
		}
		return false;
	}
}
function AC_AddExtension(src, ext)
{
  if (src.indexOf('?') != -1)
    return src.replace(/\?/, ext+'?'); 
  else
    return src + ext;
}
function AC_Generateobj(objAttrs, params, embedAttrs) 
{ 
  var str = '';
  if (isIE && isWin && !isOpera)
  {
    str += '<object ';
    for (var i in objAttrs)
    {
      str += i + '="' + objAttrs[i] + '" ';
    }
    str += '>';
    for (var i in params)
    {
      str += '<param name="' + i + '" value="' + params[i] + '" /> ';
    }
    str += '</object>';
  }
  else
  {
    str += '<embed ';
    for (var i in embedAttrs)
    {
      str += i + '="' + embedAttrs[i] + '" ';
    }
    str += '> </embed>';
  }
  document.write(str);
}
function AC_FL_RunContent(){
  var ret = 
    AC_GetArgs
    (  arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
     , "application/x-shockwave-flash"
    );
  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}
function AC_SW_RunContent(){
  var ret = 
    AC_GetArgs
    (  arguments, ".dcr", "src", "clsid:166B1BCA-3F9C-11CF-8075-444553540000"
     , null
    );
  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}
function AC_GetArgs(args, ext, srcParamName, classid, mimeType){
  var ret = new Object();
  ret.embedAttrs = new Object();
  ret.params = new Object();
  ret.objAttrs = new Object();
  for (var i=0; i < args.length; i=i+2){
    var currArg = args[i].toLowerCase();    
    switch (currArg){	
      case "classid":
        break;
      case "pluginspage":
        ret.embedAttrs[args[i]] = args[i+1];
        break;
      case "src":
      case "movie":	
        //args[i+1] = AC_AddExtension(args[i+1], ext);
        ret.embedAttrs["src"] = args[i+1];
        ret.params[srcParamName] = args[i+1];
        break;
      case "onafterupdate":
      case "onbeforeupdate":
      case "onblur":
      case "oncellchange":
      case "onclick":
      case "ondblclick":
      case "ondrag":
      case "ondragend":
      case "ondragenter":
      case "ondragleave":
      case "ondragover":
      case "ondrop":
      case "onfinish":
      case "onfocus":
      case "onhelp":
      case "onmousedown":
      case "onmouseup":
      case "onmouseover":
      case "onmousemove":
      case "onmouseout":
      case "onkeypress":
      case "onkeydown":
      case "onkeyup":
      case "onload":
      case "onlosecapture":
      case "onpropertychange":
      case "onreadystatechange":
      case "onrowsdelete":
      case "onrowenter":
      case "onrowexit":
      case "onrowsinserted":
      case "onstart":
      case "onscroll":
      case "onbeforeeditfocus":
      case "onactivate":
      case "onbeforedeactivate":
      case "ondeactivate":
      case "type":
      case "codebase":
      case "id":
        ret.objAttrs[args[i]] = args[i+1];
        break;
      case "width":
      case "height":
      case "align":
      case "vspace": 
      case "hspace":
      case "class":
      case "title":
      case "accesskey":
      case "name":
      case "tabindex":
        ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
        break;
      default:
        ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
    }
  }
  ret.objAttrs["classid"] = classid;
  if (mimeType) ret.embedAttrs["type"] = mimeType;
  return ret;
}

function Set_Cookie( name, value, expires, path, domain, secure ) {
	var today = new Date();
	today.setTime( today.getTime() );
	if ( expires ) {
		expires = expires * 1000 * 60 * 60 * 24;
	}
	var expires_date = new Date( today.getTime() + (expires) );
	document.cookie = name + "=" +escape( value ) +
	( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) +
	( ( path ) ? ";path=" + path : "" ) +
	( ( domain ) ? ";domain=" + domain : "" ) +
	( ( secure ) ? ";secure" : "" );
}

function Get_Cookie( check_name ) {
	var a_all_cookies = document.cookie.split( ';' );
	var a_temp_cookie = '';
	var cookie_name = '';
	var cookie_value = '';
	var b_cookie_found = false;
	for ( i = 0; i < a_all_cookies.length; i++ )
	{
		a_temp_cookie = a_all_cookies[i].split( '=' );
		cookie_name = a_temp_cookie[0].replace(/^\s+|\s+$/g, '');
		if ( cookie_name == check_name )
		{
			b_cookie_found = true;
			if ( a_temp_cookie.length > 1 ) {
				cookie_value = unescape( a_temp_cookie[1].replace(/^\s+|\s+$/g, '') );
			}
			return cookie_value;
			break;
		}
		a_temp_cookie = null;
		cookie_name = '';
	}
	if ( !b_cookie_found ) {
		return null;
	}
}


function font_down() {
	if (! Get_Cookie("font_size")) {
		Set_Cookie("font_size", 11, 99, "/");
	}
	var font_size = parseInt(Get_Cookie("font_size"));
	font_size--;
	Set_Cookie("font_size", font_size, 99, "/");
	document.body.style.fontSize = font_size + "px";
}

function font_up() {
	if (! Get_Cookie("font_size")) {
		Set_Cookie("font_size", 11, 99, "/");
	}
	var font_size = parseInt(Get_Cookie("font_size"));
	font_size++;
	Set_Cookie("font_size", font_size, 99, "/");
	document.body.style.fontSize = font_size + "px";
}

function font_set(font_size) {
	if (! Get_Cookie("font_size")) {
		Set_Cookie("font_size", 11, 99, "/");
	}
	Set_Cookie("font_size", font_size, 99, "/");
	var elems=document.getElementById('fsizeLetters');
	if(elems.childNodes.length>0) {
		for(var i=0; i<elems.childNodes.length-1; i++) {
			if(!elems.childNodes[i].id)
				continue;
			var id=elems.childNodes[i].id.split("_");
			if(id[0]=="fsizeLetters") {
				elems.childNodes[i].style.fontWeight='normal';
				if(id[1]==font_size)
					elems.childNodes[i].style.fontWeight='bold';
			}
		}
	}
	document.body.style.fontSize = font_size + "px";
}

function Autocomplete(id, custom) {
	/* konfiguracja domyślna */
	var c = {
		url: shop_root + 'ajax.php?search_autocomplete=1',
		delay: 500,
		minLen: 1,
		minWidth: 317,
		showLoader: true,
		textAppend: true, // dołącza nowy tekst zamiast zastępowania całej wartości inputa 
		afterKeyPress: false
	}
	/* konfiguracja koniec */
	
	var input;
	var t = this;
	var list = false;
	var currentIndex = -1;
	var sItems;
	var listOpen = false;
	var cancelHide = false;
	var getListTimeout;
	var loader = false;
	
	this.config = function (config) {
		for (var setting in config)
			if (typeof c[setting] != 'undefined')
				c[setting] = config[setting];		
	}
	
	this.setup = function () {
		input = $('#' + id);
		input.attr('autocomplete', 'off');
		input.keydown(t.pressed);
		$(document.body).click(this.autoHide);
	}
	
	this.pressed = function (event) {
		var key = event.keyCode;
		if (key == 38 || key == 40) { // strzałki góra i dół
			if (listOpen) {
				if (sItems.length) {
					t.changePos(key == 38 ? -1 : 1);
				}
			} else if (list) {
				t.loader(1);
				t.getList();
			}
		} else if ((key >= 48 && key <= 90) || (key >= 96 && key <= 111) || key >= 186 || key == 8 || key == 46) { // alfanumeryczne i specjalne
			t.cancelRequest();
			getListTimeout = setTimeout(t.getList, c.delay);
			t.loader(1);
		}
		if (typeof c.afterKeyPress == 'function')
			c.afterKeyPress(t);
	}
	
	this.cancelRequest = function () {
		clearTimeout(getListTimeout);
	}
	
	this.loader = function (show) {
		if ( ! c.showLoader) return;
		if ( ! loader) {
			loader = $('<div class="autocompleteLoader"></div>');
			$('body').append(loader);			
		}
		var pos = input.offset();
		var style = show ? {left: (pos.left + parseInt(input.css('padding-left')) + input.width() - loader.width()), top: pos.top + parseInt(input.css('padding-top')), display: 'block'} : {display: 'none'};
		loader.css(style);
	}
	
	this.changePos = function (go) {
		var goTo;
		var maxIndex = sItems.length - 1;
		currentIndex = parseInt(currentIndex)
		if (currentIndex <= 0 && go == -1)
			goTo = maxIndex;
		else if (currentIndex == maxIndex && go == 1 )
			goTo = 0;
		else
			goTo = currentIndex + go;
		t.focusItem(goTo);
	}
	
	this.getList = function () {
		var val = input.val();
		if (val.length >= c.minLen) {
			$.get(c.url, {term: val}, t.buildList);
		} else {
			t.loader(0);
		}
	}
	
	this.buildList = function (data) {
		var tmp = $('.selectItem', data);
		if (tmp.length) {
			if ( ! list) {
				list = $('<div class="autocompleteList"></div>');
				$('body').append(list);
				list.click(function () {
					cancelHide = true;
				});
			}
			list.html(data);
			currentIndex = -1;
			var pos = input.offset();
			
			var leftPos = pos.left - 30;
			var topPos = pos.top + 32;
			var minWidth = c.minWidth ? c.minWidth : input.outerWidth();
			var width = c.minWidth ? c.minWidth : input.outerWidth();
			list.css({left: leftPos, top: topPos, 'min-width': minWidth, width: width, display: 'block'});

			sItems = $('.selectItem', list).mouseenter(t.focus)
				.mouseleave(t.unfocus)
				.click(t.select);
			for (var i = 0; i < sItems.length; i++) {
				sItems.eq(i).attr('index', i);
			}
			listOpen = true;
		} else
			t.closeList();
		t.loader(0);
	}
	
	this.focus = function () {
		t.focusItem($(this).attr('index'));
	}
	
	this.focusItem = function (index) {
		if (currentIndex != -1)
			t.unfocusItem(currentIndex);
		sItems.eq(index).addClass('active');
		currentIndex = index;
	}
	
	this.unfocus = function () {
		t.unfocusItem($(this).attr('index'));
	}

	this.unfocusItem = function (index) {
		sItems.eq(index).removeClass('active');
	}
	
	// wykonuje akcje po wybraniu elementu
	this.select = function (event) {
		t.selectItem($(this).attr('index'), event);
	}
	
	this.selectItem = function (index, event) {
		var el = sItems.eq(index);
		if (el.attr('href')) {
			
		} else if (el.attr('onclick')) {
			if ( ! event)
				el.trigger('click');
		} else {
			t.setInputValue(el.text());
		}
		t.closeList();
	}
	
	this.setInputValue = function (text) {
		if (c.textAppend) {
			var value = input.val();
			var space = value.lastIndexOf(' ');
			if (space != -1)
				text = value.substr(0, space + 1) + text;
		}
		input.val(text);
	}
	
	this.autoHide = function () {
		if ( ! cancelHide) 
			t.closeList();
		cancelHide = false;
	}
	
	this.closeList = function () {
		if ( ! list) return;
		list.css('display', 'none');
		listOpen = false;
	}
	
	if (custom)
		this.config(custom);
	this.setup();
}

