
function GeoHelper(input_name,t,button,country,special,city_id,select_first){




        function ajaxify(fn,event_type,field_name){
            if (document.getElementById(field_name).addEventListener){
                 document.getElementById(field_name).addEventListener(event_type,fn,false);

            } else if (document.getElementById(field_name).attachEvent){
                 document.getElementById(field_name).attachEvent('on' + event_type,fn);

            }
        }
        this.ajaxify = ajaxify;

        function setRelative(){
          document.getElementById(this.input).parentNode.style.position = 'relative';
        }
        this.setRelative = setRelative;
        function save(elem){
            if(elem != null){
            var parent = elem.parentNode.getAttribute('id');
            var nn = parent.split("_ul_list");
            var obj = document.getElementById(nn[0]);

            var name = elem.innerHTML.split("<");
            //obj.value = name[0];

            var idd = elem.getAttribute('id');
            idd = idd.split("_");
            idd = idd[1];

            obj.geo.putEvery(idd);
            }
        }
        this.save = save;

        function setNewGeo(name){
            this.idbox = name;
            document.getElementById(this.input+ "_id").name = this.idbox;

        }
        this.setNewGeo = setNewGeo;

        function saveMouse(e){

            var node = '';
            var field = '';
            if(!this.parentNode) {node = e.srcElement.parentNode; field = e.srcElement;} else { node = this.parentNode; field = this; }
            var parent = node.getAttribute('id');


            var nn = parent.split("_ul_list");
            var obj = document.getElementById(nn[0]);

            var name = field.innerHTML.split("<");
            obj.value = name[0];

            var idd = field.getAttribute('id');

            idd = idd.split("_");
            idd = idd[1];

            obj.geo.putEvery(idd);

        }
        this.saveMouse = saveMouse;

        function putEvery(id){//ie
            document.getElementById(this.input+"_id").value = id;
            if(this.changeFunction != null) this.changeFunction();
            this.blur();
        }
        this.putEvery = putEvery;

        function getCountry(){//ie
          this.country_id = document.getElementById(this.country_box).value;
          return this.country_id;
        }
        this.getCountry = getCountry;

        function blur(){//ie

               document.getElementById(this.input + '_list').style.display = 'none';
               document.getElementById(this.input + '_ul_list').innerHTML = '';
               if(this.button) document.getElementById(this.button).disabled = false;
        }
        this.blur = blur;

        function setValue(val){//ie
            document.getElementById(this.input+"_id").value = val;
        }
        this.setValue = setValue;

        function hide(e){//ie
                if(!this.geo) this.geo = e.srcElement.geo;
                var input_name = this.geo.input;

                if(this.geo.type == "country" && this.geo.city_id ){
                    document.getElementById(this.geo.city_id).value = '';
                    document.getElementById(this.geo.city_id+"_id").value = '';
                    if(this.geo.city_id == "search_geo_str")  document.getElementById(this.geo.city_id+"_id").value = '0';
                }
                var val = document.getElementById(input_name).value;
                if(val == '' || val == " ") document.getElementById(input_name+"_id").value = '0';
                if(this.geo.state == 1){
                    var val1 = document.getElementById(input_name+"_id").value;
                    if(val1 == '' || val1 == 0){
                        document.getElementById(input_name).value = '';
                    }
                }

               document.getElementById(input_name + '_list').style.display = 'none';
               document.getElementById(input_name + '_ul_list').innerHTML = '';
               if(this.geo.button) document.getElementById(this.geo.button).disabled = false;

        }
        this.hide = hide;

        function over(e){//ie
                    var node = '';
                    var field = '';
                    if(!this.parentNode) {node = e.srcElement.parentNode; field = e.srcElement;} else { node = this.parentNode; field = this; }
                    var parent = node.getAttribute('id');

                    var nn = parent.split("_ul_list");
                    var obj = document.getElementById(nn[0]);


                    var tt = document.getElementById(obj.geo.current);
                    if(tt != null ){
                        tt.removeAttribute("class");
                        tt.className = '';
                    }
                    if(!this.parentNode)obj.geo.current = e.srcElement.getAttribute("id"); else obj.geo.current = field.getAttribute("id");

                    //var idd = obj.geo.current.split("_");
                    //idd = idd[1];

                    //document.getElementById(obj.geo.input+"_id").value = idd;

                    if(obj.geo.prev = field.previousSibling) obj.geo.prev =obj.geo.prev.getAttribute('id'); else obj.geo.prev = 0;
                    if(obj.geo.next = field.nextSibling) obj.geo.next = obj.geo.next.getAttribute('id'); else obj.geo.next = 0;

                    field.setAttribute("class","selected");
                    //var name = field.innerHTML.split("<SPAN>");
                    //obj.value = name[0];
                    //obj.value = field.innerHTML;
                    field.className = "selected";

        }
        this.over = over;

        function createListBox(){//ie
                 var ndiv = document.createElement('div');
                 ndiv.setAttribute('id',this.input+"_list");
                 ndiv.setAttribute('class','suggestion_box');
                 ndiv.className="suggestion_box";

                 var nul = document.createElement('ul');
                 nul.setAttribute('id',this.input+"_ul_list");
                 nul.setAttribute('class','suggestion_list');
                 nul.className="suggestion_list";

                 var ninput = document.createElement('input');
                 ninput.setAttribute('type','hidden');
                 ninput.setAttribute('value','');
                 ninput.setAttribute('id',this.input+"_id");
                 if(this.type == 'country') ninput.setAttribute('name','country_geo'); else ninput.setAttribute('name',this.idbox);

                 var condiv = document.createElement('div');
                 condiv.setAttribute('id',this.input+"_container");
                 condiv.style.position = 'relative';
                 ndiv.appendChild(nul);
                 condiv.appendChild(ndiv);

                 document.getElementById(this.input).parentNode.appendChild(ninput);

                 document.getElementById(this.input).parentNode.appendChild(condiv);

                 document.getElementById(this.input).parentNode.appendChild(ninput);
        }

        function getcontent(names){//ie
                var name = names;

                if(name.length < 3) return;
                var nn = this.input;
                var obj =  document.getElementById(nn);
                if( obj.geo.country_box != null )  document.getElementById(nn+'_id').value = 0;


                if(obj.geo.ajj != null && obj.geo.ajj.HTTP){ obj.geo.ajj.HTTP.abort();}
                var counrty_id = '';
                if(obj.geo.country_box == null) country_id = 1; else country_id = obj.geo.getCountry();

                if(this.type == 'country'){
                    obj.geo.ajj = new Ajax('/files/ajax/lista_panstw_light_n.php', document.location);
                }else if(this.type == 'powiaty'){
                    obj.geo.ajj = new Ajax('/files/ajax/lista_powiaty_light_n.php?country='+ country_id, document.location);
                }else if(this.type == 'wojewodztwa'){
                    obj.geo.ajj = new Ajax('/files/ajax/lista_wojewodztwa_light_n.php?country='+ country_id, document.location);

                }else if(this.type == 'lok'){
                    obj.geo.ajj = new Ajax('/files/ajax/lista_miast_hoteland.php?country='+ country_id, document.location);
                }else{
                   obj.geo.ajj = new Ajax('/files/ajax/lista_miast_light_n.php?country='+ country_id , document.location);
                }



                obj.geo.ajj.AddGETParam('geo_str',name);
                obj.geo.ajj.AddGETParam('onlycity',this.onlycity);
		obj.geo.ajj.onSuccess = function ()
		{

                        obj.geo.blur();
			var response = this.HTTP.responseText;

			if (response.length>0)
			{
                                obj.geo.prev = 0;
                                obj.geo.next = 0;

				mmm = response.split("#");

                                var text = 0;


                                 var one = false;
                                for(var i = 0; i < mmm.length;i++){

                                  var miasto = mmm[i].split("|");
                                  if(miasto[0] == 0) continue;

                                  text = 1;
                                  var nli = document.createElement('li');
                                  nli.setAttribute('id','m_'+miasto[0]);
                 if (document.getElementById(input_name).addEventListener){
                                  nli.addEventListener('mouseover',obj.geo.over,false);

                                  nli.addEventListener('mousedown', obj.geo.saveMouse,false);
                 } else if (document.getElementById(input_name).attachEvent){
                                  nli.attachEvent('onmouseover',obj.geo.over);
                                  nli.attachEvent('onmousedown', obj.geo.saveMouse);
                 }

                                  var temp = miasto[1].split("<");


                                  if( (name.toLowerCase() == temp[0].toLowerCase() ) && !one ){

                                      nli.setAttribute("class","selected");
                                      nli.className = "selected";
                                      obj.geo.current = 'm_'+miasto[0];
                                      document.getElementById(nn+'_id').value = miasto[0];
                                      one = true;
                                  }else if(obj.geo.select_first != null && !one){
                                      nli.setAttribute("class","selected");
                                      nli.className = "selected";
                                      obj.geo.current = 'm_'+miasto[0];
                                      document.getElementById(nn+'_id').value = miasto[0];

                                      one = true;
                                      obj.geo.changeFunction(1);
                                  }
                                  nli.innerHTML = miasto[1];
                                  document.getElementById(nn+"_ul_list").appendChild(nli);
                                }


                                if(text == 1){

                                    var now = document.getElementById(nn+"_ul_list").firstChild;

                                    if(now != null) { now = now.getAttribute("id");
                                        if(!one) obj.geo.current = now;
                                    }
                                    document.getElementById(nn+'_list').style.display = 'block';


                                }else {
                                    if(obj.geo.state == 1){
                                    obj.value='';
                                     document.getElementById(nn+'_id').value = 0;
                                    document.getElementById(nn+"_ul_list").innerHTML = "<li>Musisz wybrać lokalizację z listy</li>";
                                    document.getElementById(nn+'_list').style.display = 'block';
                                    }
                                }

			}
			else document.getElementById(nn+'_list').style.display = 'none';

		}

		obj.geo.ajj.GET();

        }

        function keypress(e){//ie
            if(!this.geo) this.geo = e.srcElement.geo;
                var input_name = this.geo.input;

            var key = e.keyCode;

            if (key == 38){//g�ra
                if ( this.geo.next == 0 && this.geo.current != 0) {
                    document.getElementById(this.geo.current).setAttribute("class","selected");
                    document.getElementById(this.geo.current).className = "selected";
                    this.geo.next = this.geo.current;
                    if(document.getElementById(this.geo.current).previousSibling) this.geo.prev = document.getElementById(this.geo.current).previousSibling.getAttribute('id'); else this.geo.prev = 0;

                    var name = document.getElementById(this.geo.current).innerHTML.split("<span>");
                    this.value=name[0];
					var idd = document.getElementById(this.geo.current).getAttribute("id");
                    idd = idd.split("_");
                    document.getElementById(input_name+"_id").value = idd[1];

                } else if(this.geo.prev != 0){
                    document.getElementById(this.geo.current).removeAttribute("class");
                    document.getElementById(this.geo.current).className = '';
                    this.geo.current = this.geo.prev;
                    document.getElementById(this.geo.current).setAttribute("class","selected");
                    document.getElementById(this.geo.current).className = "selected";
                    this.geo.next = this.geo.current;

                    var name = document.getElementById(this.geo.current).innerHTML.split("<span>");
                    this.value=name[0];
                    var idd = document.getElementById(this.geo.current).getAttribute("id");
                    idd = idd.split("_");
                    document.getElementById(input_name+"_id").value = idd[1];
                    if(this.geo.prev = document.getElementById(this.geo.current).previousSibling) this.geo.prev = this.geo.prev.getAttribute('id'); else this.geo.prev = 0;
                }
            }else if (key == 40){//d�

                if (this.geo.prev == 0 && this.geo.current != 0) {
                    document.getElementById(this.geo.current).setAttribute("class","selected");
                    document.getElementById(this.geo.current).className = "selected";
                    this.geo.prev = this.geo.current;
                    if(document.getElementById(this.geo.current).nextSibling) this.geo.next = document.getElementById(this.geo.current).nextSibling.getAttribute('id'); else this.geo.next = 0;
                    var name = document.getElementById(this.geo.current).innerHTML.split("<span>");
                    var idd = document.getElementById(this.geo.current).getAttribute("id");
                    idd = idd.split("_");
                    document.getElementById(input_name+"_id").value = idd[1];
                    this.value=name[0];
		} else if(this.geo.next != 0){
                    document.getElementById(this.geo.current).removeAttribute("class");
                    document.getElementById(this.geo.current).className = '';
                    this.geo.current = this.geo.next;
                    document.getElementById(this.geo.current).setAttribute("class","selected");
                    document.getElementById(this.geo.current).className = "selected";
                    this.geo.prev = this.geo.current;
                    var name = document.getElementById(this.geo.current).innerHTML.split("<span>");
                    this.value=name[0];
                    var idd = document.getElementById(this.geo.current).getAttribute("id");
                    idd = idd.split("_");
                    document.getElementById(input_name+"_id").value = idd[1];
                    if(this.geo.next = document.getElementById(this.geo.current).nextSibling) this.geo.next = this.geo.next.getAttribute('id'); else this.geo.next = 0;
                }
            }else if (key == 27){ this.geo.blur();
            }else if (key == 13){
                if( this.geo.country_box == null ){
                    if(this.geo.button) document.getElementById(this.geo.button).disabled = true;

                }
                var val = document.getElementById(this.geo.input).value;
                if((val == '' || val == " ") && obj.geo.select_first == null){
                   document.getElementById(input_name+"_id").value = '0';

                }


            }

        }

        function keyup(e){//ie

                if(!this.geo) this.geo = e.srcElement.geo;
                var input_name = this.geo.input;
            var key = e.keyCode;
           if(this.geo.button) document.getElementById(this.geo.button).disabled = true;
           if (key == 13) {

               this.geo.save(document.getElementById(this.geo.current));
               this.geo.blur();


           }else if (key == 27){this.geo.blur();
           }else if (key != 13 && key != 40 && key !=38){
               var value = '';

                if(this.value == undefined) value = e.srcElement.value; else value = this.value;
                this.geo.blur();
                this.geo.getcontent(value);

           }


        }

            if(!special) this.state = 0; else this.state = special;

            this.input = input_name;
            this.type =  t;

            this.createListBox = createListBox;
            this.keyup = keyup;
            this.keypress = keypress;
            this.getcontent = getcontent;
            this.country_id = 1;
            this.country_box = country;
            if(country == null) this.country_id = 1; else {var pusto = this.getCountry(); }
            this.current = null;
            this.next = 0;
            this.prev = 0;
            this.button = button;
            this.idbox = "geo";
            this.changeFunction = null;
            this.createListBox();
            this.city_id = city_id;
            this.select_first = select_first;
            this.onlycity = 0;
            this.ajj = null;

            if (document.getElementById(input_name).addEventListener){
                 document.getElementById(input_name).addEventListener('blur',hide,false);
                 document.getElementById(input_name).addEventListener('keydown',keypress,false);
                 document.getElementById(input_name).addEventListener('keyup',keyup,false);
            } else if (document.getElementById(input_name).attachEvent){
                 document.getElementById(input_name).attachEvent('onblur',hide);
                 document.getElementById(input_name).attachEvent('onkeydown',keypress);
                 document.getElementById(input_name).attachEvent('onkeyup',keyup);
            }


            document.getElementById(input_name).geo = this;
            return this;

    }



