function AutoCompleter(InputElement, Component, Action, MainElement)
{
    if (!InputElement || !document.getElementById(InputElement.id) || !document.getElementById(MainElement) || !Action)
    {
        return false;
    }
    // Variables
    var InputElement = InputElement;
    InputElement.active = false;
    InputElement.autocomplete = 'off';
    InputElement.className = 'text';
    InputElement.setAttribute("autocomplete", "off");
    InputElement.setAttribute("class", "text");
    var MainElement = document.getElementById(MainElement);
    var Component = Component;
    var Action = Action;
    var InputIdExp = new RegExp('^(form_completer_([^_]*)_(?:[0-9]*_)?(.*))$');
    var MultipleLocationsExp = new RegExp('^([^_]*)_(.*)$');
    var InputIdCustomerExp = new RegExp('^(form_completer_([^_]*)_([0-9]*)_(.*))$');
    var SelectIdExp = new RegExp('^(form_completer_([^_]*)_((.*))_select)$');
    //var InputIdExp = new RegExp( '^(([a-z|A-Z|_]*)([0-9]+)([a-z|A-Z|_]*))([0-9]?)$' );
    //var InputNameExp = new RegExp( '^((form)\[data\](\[[a-z|A-Z|_|0-9]*\])(\[[a-z|A-Z|_|0-9]*\])(\[[a-z|A-Z|_|0-9]*\])(\[[a-z|A-Z|_|0-9]*\])?)$' );
    var SelectIdAffix = '_select';
    var SelectButtonIdAffix = '_select_button';
    var ButtonIdAffix = '_submit';
    var SelectElement = ((document.getElementById(InputElement.id + SelectIdAffix)) ? (document.getElementById(InputElement.id + SelectIdAffix)) : (null));
    var SelectButtonElement = ((document.getElementById(InputElement.id + SelectButtonIdAffix)) ? (document.getElementById(InputElement.id + SelectButtonIdAffix)) : (null));
    var ButtonElement = document.getElementById(InputElement.id + ButtonIdAffix);
    if (ButtonElement)
    {
        ButtonElement.style.display = 'none';
        ButtonElement.disabled = true;
    }
    var HttpRequest = null;
    var PressedKey = null;
    var OptionItems = null;
    var Key = null;
    var SelectedRequestItem = null;
    //var TmpInnerHTML = MainElement.innerHTML;
    if (SelectElement)
    {
        SelectElement.style.display = 'none';
    }
    if (SelectButtonElement)
    {
        SelectButtonElement.style.display = 'none';
        SelectButtonElement.disabled = true;
    }
    // Events
    InputElement.onfocus = function ()
    {
        this.active = true;
        if (SelectElement)
        {
            if (SelectElement.getElementsByTagName("option")[SelectElement.selectedIndex])
            {
                this.SelectElementValue = SelectElement.getElementsByTagName("option")[SelectElement.selectedIndex].value;
            }
        }
        if (!InputElement.value)
        {
            if ((SelectElement && !SelectElement.select) || !SelectElement)
            {
                AutoCompleter();
            }
        }
        return;
    }
    InputElement.onkeypress = function ()
    {
        this.active = true;
        return !(window.event && (window.event.keyCode == 13 || window.event.keyCode == 9));
    }

    InputElement.onkeydown = function (Key)
    {
        PressedKey = (window.event) ? event.keyCode : Key.keyCode;
        var ESC = (window.event) ? 27 : Key.DOM_VK_ESCAPE;
        if (PressedKey == ESC)
        {
            PressedKey = 27;
        }
        if (SelectElement)
        {
            switch (PressedKey)
            {
                case 38:
                    {
                        if (SelectElement.selectedIndex > 0)
                        {
                            --SelectElement.selectedIndex;
                        }
                        break;
                    }
                case 40:
                    {
                        if (SelectElement.selectedIndex < SelectElement.length - 1)
                        {
                            ++SelectElement.selectedIndex;
                        }
                        break;
                    }
                case 13:
                    {
                        SelectElement.onclick();
                        break;
                    }
                case 27:
                    {
                        this.value = '';
                        SelectElement.parentNode.removeChild(SelectElement);
                        //MainElement.innerHTML = TmpInnerHTML;
                        //onload();
                        break;
                        //	                    InputElement.active = false;
                        //	                    SelectElement.active = false;
                        //	                    this.value = '';
                        //	                    RemoveSelectElement();
                        //	                    break;
                    }
            }
        }
    }
    InputElement.onblur = function ()
    {
        this.active = false;
        /*
        if (SelectElement)
        {
        if (SelectElement.selectedIndex > -1)
        {
        if (SelectElement.getElementsByTagName('option')[SelectElement.selectedIndex].disabled == false)
        {
        if (ReplaceChars(this.value) == ReplaceChars(SelectElement.getElementsByTagName('option')[SelectElement.selectedIndex].childNodes[0].nodeValue))
        {
        this.value = SelectElement.getElementsByTagName('option')[SelectElement.selectedIndex].childNodes[0].nodeValue;
        SelectElement.select = true;

                        if (SelectElement.onclick)
        {
        SelectElement.onclick();
        }
        }
        }
        }
        }*/
        window.setTimeout(RemoveOrHideSelectElement, 25);
        return;
    }
    InputElement.onkeyup = function ()
    {
        if (!PressedKey || (PressedKey < 45 && PressedKey != 8 && PressedKey != 32))
        {
            return;
        }
        if (SelectElement)
        {
            SelectElement.select = false;
        }
        AutoCompleter();
        /* mozna muze delat chyby, dopsal jsem bez zkouseni podle zkusenosti s errorcheckerem */
        PressedKey = null;
    }

    // Methods	
    var InsertAfter = function (NewElement, ReferenceElement)
    {
        ReferenceElement.parentNode.insertBefore(NewElement, ReferenceElement.nextSibling);
    }
    function HideSelectElement()
    {
        if (SelectElement)
        {
            if (!(SelectElement.active || InputElement.active))
            {
                if ( SelectElement.selectedIndex > -1 && ReplaceChars(InputElement.value) == ReplaceChars((SelectElement.selectedIndex > -1) ? (SelectElement.getElementsByTagName('option')[SelectElement.selectedIndex].childNodes[0].nodeValue) : ('')))
                {
                    InputElement.value = SelectElement.getElementsByTagName('option')[SelectElement.selectedIndex].childNodes[0].nodeValue;
                }
                InputElement.style.backgroundImage = "";
                SelectElement.style.display = 'none';
            }
        }
    }
    function RemoveSelectElement()
    {
        InputElement.value = '';
        if (SelectElement)
        {
            if (!(SelectElement.active || InputElement.active))
            {
                if (!InputElement.value || ReplaceChars(InputElement.value) != ReplaceChars((SelectElement.selectedIndex > -1) ? (SelectElement.getElementsByTagName('option')[SelectElement.selectedIndex].childNodes[0].nodeValue) : ('')))
                {
                    this.value = '';
                    SelectElement.parentNode.removeChild(SelectElement);
                    //MainElement.innerHTML = TmpInnerHTML;
                    //onload();
                    return;
                    /*  InputElement.value = '';
                    InputElement.style.backgroundImage = "";
                    switch (InputElement.id.replace(InputIdExp, '$3'))
                    {
                    case 'city':
                    case 'domicile_city':
                    case 'office_city':
                    case 'invoicing_city':
                    case 'post_city':
                    {
                    // var  query = "&component=" + Component + "&action=" + Action + "&form[data][" + InputElement.id.replace( InputIdExp, '$2' ) + "][]=0";							
                    // FormCompleter( SelectElement, query, MainElement.id );

                                break;
                    }
                    } HideSelectElement();
                    SelectElement.parentNode.removeChild(SelectElement);
                    SelectElement = null;*/
                }
            }
        }
    }
    var RemoveOrHideSelectElement = function ()
    {
        if (SelectElement)
        {
            if (!SelectElement.active && !InputElement.active)
            {
               // alert(SelectElement.selectedIndex);
               // alert(ReplaceChars(InputElement.value) +'=='+ ReplaceChars(SelectElement.getElementsByTagName('option')[SelectElement.selectedIndex].childNodes[0].nodeValue));
                if (SelectElement.selectedIndex >= 0 && ReplaceChars(InputElement.value) == ReplaceChars(SelectElement.getElementsByTagName('option')[SelectElement.selectedIndex].childNodes[0].nodeValue))
                {
                    //SelectElement.onclick();
                    HideSelectElement();
                }
                else
                {
                    RemoveSelectElement();
                }
            }
        }
    }
    function CheckSelectElement(ID, Name, OptionItem, After)
    {
        var Element = null;
        if (!document.getElementById(ID))
        {
            Element = document.createElement('select');
            Element.id = ID;
            Element.name = Name;
            Element.className = "text";
            Element.size = '1';
            Element.style.display = 'none';
            Element.style.position = 'absolute';
            Element.style.zIndex = '99';
            InsertAfter(Element, After);
        }
        else
        {
            Element = document.getElementById(ID);
            Element.className = "text";
            Element.style.display = 'none';
            Element.style.position = 'absolute';
            Element.style.zIndex = '99';
        }
        Element.active = false;
        while (Element.hasChildNodes())
        {
            Element.removeChild(Element.firstChild);
        }
        Element.appendChild(OptionItem);
        if (!Element.hasChildNodes())
        {
            Element.parentNode.removeChild(Element);
        }
        document.getElementById(ID).selectedIndex = 0;
        return;
    }
    var CreateSelectElement = function ()
    {
        if (!document.getElementById(InputElement.id + SelectIdAffix))
        {
            SelectElement = document.createElement('select');
            SelectElement.id = InputElement.id + SelectIdAffix;
            SelectElement.className = "text";
            SelectElement.size = '7';
            SelectElement.style.display = 'none';
            SelectElement.style.position = 'absolute';
            SelectElement.style.display = 'block';
            SelectElement.style.zIndex = '99';
            if ((InputElement.id.replace(InputIdExp, '$3') == 'customer' && (Action != 'customer_event')) || InputElement.id.replace(InputIdExp, '$3') == 'multiple_locations' || InputElement.id.replace(InputIdExp, '$3') == 'locations')
            {
                SelectElement.name = 'form[data][' + InputElement.id.replace(InputIdExp, '$2') + ']' + '[' + InputElement.id.replace(InputIdExp, '$3') + ']' + '[' + InputElement.id.replace(InputIdCustomerExp, '$3') + ']';
            }
            else
            {
                SelectElement.name = 'form[data][' + InputElement.id.replace(InputIdExp, '$2') + ']' + '[' + InputElement.id.replace(InputIdExp, '$3') + ']';
            }
            if (InputElement.id == 'form_completer_search_company')
            {
                SelectElement.name = 'form[' + InputElement.id.replace(InputIdExp, '$2') + ']' + '[' + InputElement.id.replace(InputIdExp, '$3') + ']';
            }
            if (InputElement.id == 'form_completer_search_customer')
            {
                SelectElement.name = 'form[' + InputElement.id.replace(InputIdExp, '$2') + ']' + '[' + InputElement.id.replace(InputIdExp, '$3') + ']';
            }
            if (document.getElementById(InputElement.id + '_check_box'))
            {
                InsertAfter(SelectElement, document.getElementById(InputElement.id + '_check_box'));
            }
            else
            {
                InsertAfter(SelectElement, InputElement);
            }
        }
        else
        {
            SelectElement = document.getElementById(InputElement.id + SelectIdAffix);
            SelectElement.className = "text";
            SelectElement.style.display = 'none';
            SelectElement.style.position = 'absolute';
            SelectElement.style.zIndex = '99';
        }
        SelectElement.active = false;
        SelectElement.onfocus = function ()
        {
            this.active = true;
            return;
        }
        SelectElement.onblur = function ()
        {
            this.active = false;
            window.setTimeout(RemoveOrHideSelectElement, 25);
            return;
        }
        SelectElement.onclick = function ()
        {
            if (this.selectedIndex >= 0 && this.getElementsByTagName('option')[this.selectedIndex].value && !this.getElementsByTagName('option')[this.selectedIndex].disabled)
            {
                this.active = false;
                this.select = true;
                HideSelectElement();
                //if (InputElement.SelectElementValue == this.getElementsByTagName("option")[this.selectedIndex].value || !HttpRequest.responseXML.getElementsByTagName('items')[0])
                {
                    InputElement.value = this.getElementsByTagName('option')[this.selectedIndex].childNodes[0].nodeValue;
                    // return;
                }
                var OptionItems = this.getElementsByTagName("option");
                var OptionCount = OptionItems.length;
                SelectedRequestItem = null;
                for (i = 0, j = 0; i < OptionItems.length; ++i, ++j)
                {
                    if (SelectElement.selectedIndex != i)
                    {
                        if (i > SelectElement.selectedIndex)
                        {
                            if (SelectElement.selectedIndex >= 0)
                            {
                                --SelectElement.selectedIndex;
                            }
                        }
                        this.removeChild(OptionItems[i]);
                        --i;
                    }
                    else
                    {
                        SelectedRequestItem = HttpRequest.responseXML.getElementsByTagName('items')[0].getElementsByTagName('i')[j];
                    }
                }
                SelectElement.selectedIndex = 0;
                SelectElement.size = 1;
                var ID = this.id.replace(SelectIdExp, '$2');
                switch (Action)
                {
                    case 'location':
                        {
                            document.getElementById('form_completer_' + ID + '_city').value = SelectedRequestItem.getElementsByTagName('ct')[0].childNodes[0].nodeValue;
                            document.getElementById('form_completer_' + ID + '_district').value = SelectedRequestItem.getElementsByTagName('d')[0].childNodes[0].nodeValue;
                            document.getElementById('form_completer_' + ID + '_locality').value = SelectedRequestItem.getElementsByTagName('l')[0].childNodes[0].nodeValue;

                            OptionItem = document.createElement('option');
                            OptionItem.value = SelectedRequestItem.getElementsByTagName('c')[0].childNodes[0].nodeValue
                            OptionItem.innerHTML = SelectedRequestItem.getElementsByTagName('ct')[0].childNodes[0].nodeValue
                            CheckSelectElement('form_completer_' + ID + '_city_select', 'form[data][' + ID + '][city]', OptionItem, document.getElementById('form_completer_' + ID + '_city_check_box'))

                            if (SelectedRequestItem.getElementsByTagName('p')[0])
                            {
                                document.getElementById('form_completer_' + ID + '_postcode').value = SelectedRequestItem.getElementsByTagName('p')[0].childNodes[0].nodeValue;
                            }
                            else
                            {
                                document.getElementById('form_completer_' + ID + '_postcode').value = '';
                            }
                            if (!SelectedRequestItem.getElementsByTagName('sw')[0])
                            {
                                document.getElementById('form_completer_' + ID + '_ward').disabled = true;
                                document.getElementById('form_completer_' + ID + '_ward').value = HttpRequest.responseXML.getElementsByTagName('cww')[0].childNodes[0].nodeValue;
                            }
                            else
                            {
                                document.getElementById('form_completer_' + ID + '_ward').disabled = false;
                                if (SelectedRequestItem.getElementsByTagName('wt')[0])
                                {
                                    OptionItem = document.createElement('option');
                                    OptionItem.value = SelectedRequestItem.getElementsByTagName('w')[0].childNodes[0].nodeValue
                                    OptionItem.innerHTML = SelectedRequestItem.getElementsByTagName('wt')[0].childNodes[0].nodeValue
                                    CheckSelectElement('form_completer_' + ID + '_ward_select', 'form[data][' + ID + '][ward]', OptionItem, document.getElementById('form_completer_' + ID + '_ward_submit'))
                                    document.getElementById('form_completer_' + ID + '_ward').value = SelectedRequestItem.getElementsByTagName('wt')[0].childNodes[0].nodeValue;
                                }
                                else
                                {
                                    document.getElementById('form_completer_' + ID + '_ward').value = '';
                                }
                            }
                            if (!SelectedRequestItem.getElementsByTagName('ss')[0])
                            {
                                document.getElementById('form_completer_' + ID + '_street').disabled = true;
                                document.getElementById('form_completer_' + ID + '_street').value = HttpRequest.responseXML.getElementsByTagName('cws')[0].childNodes[0].nodeValue;
                            }
                            else
                            {
                                document.getElementById('form_completer_' + ID + '_street').disabled = false;
                                if (SelectedRequestItem.getElementsByTagName('st')[0])
                                {
                                    OptionItem = document.createElement('option');
                                    OptionItem.value = SelectedRequestItem.getElementsByTagName('s')[0].childNodes[0].nodeValue
                                    OptionItem.innerHTML = SelectedRequestItem.getElementsByTagName('st')[0].childNodes[0].nodeValue
                                    CheckSelectElement('form_completer_' + ID + '_street_select', 'form[data][' + ID + '][street]', OptionItem, document.getElementById('form_completer_' + ID + '_street_submit'))
                                    OptionItem = document.createElement('option');
                                    document.getElementById('form_completer_' + ID + '_street').value = SelectedRequestItem.getElementsByTagName('st')[0].childNodes[0].nodeValue;
                                }
                                else
                                {
                                    document.getElementById('form_completer_' + ID + '_street').value = '';
                                }
                            }
                            if (!SelectedRequestItem.getElementsByTagName('scd')[0])
                            {
                                document.getElementById('form_completer_' + ID + '_city_district').disabled = true;
                                document.getElementById('form_completer_' + ID + '_city_district').value = HttpRequest.responseXML.getElementsByTagName('cwcd')[0].childNodes[0].nodeValue;
                            }
                            else
                            {
                                document.getElementById('form_completer_' + ID + '_city_district').disabled = false;
                                if (SelectedRequestItem.getElementsByTagName('cdt')[0])
                                {
                                    OptionItem = document.createElement('option');
                                    OptionItem.value = SelectedRequestItem.getElementsByTagName('cd')[0].childNodes[0].nodeValue
                                    OptionItem.innerHTML = SelectedRequestItem.getElementsByTagName('cdt')[0].childNodes[0].nodeValue
                                    CheckSelectElement('form_completer_' + ID + '_city_district_select', 'form[data][' + ID + '][city_district]', OptionItem, document.getElementById('form_completer_' + ID + '_city_district_submit'))
                                    document.getElementById('form_completer_' + ID + '_city_district').value = SelectedRequestItem.getElementsByTagName('cdt')[0].childNodes[0].nodeValue;
                                }
                                else
                                {
                                    document.getElementById('form_completer_' + ID + '_city_district').value = '';
                                }
                            }
                            break;
                        }
                    case 'multiple_locations':
                        {
                            var Tmp = InputElement.id.replace(InputIdExp, '$3').replace(MultipleLocationsExp, '$1');
                            document.getElementById('form_completer_' + ID + '_' + Tmp + '_city').value = SelectedRequestItem.getElementsByTagName('ct')[0].childNodes[0].nodeValue;

                            OptionItem = document.createElement('option');
                            OptionItem.value = SelectedRequestItem.getElementsByTagName('c')[0].childNodes[0].nodeValue;
                            OptionItem.innerHTML = SelectedRequestItem.getElementsByTagName('ct')[0].childNodes[0].nodeValue;
                            CheckSelectElement('form_completer_' + ID + '_' + Tmp + '_city_select', 'form[data][' + ID + '][' + Tmp + '_city]', OptionItem, document.getElementById('form_completer_' + ID + '_' + Tmp + '_city_submit'))
                            if (SelectedRequestItem.getElementsByTagName('p')[0])
                            {
                                document.getElementById('form_' + ID + '_' + Tmp + '_postcode').value = SelectedRequestItem.getElementsByTagName('p')[0].childNodes[0].nodeValue;
                            }
                            else
                            {
                                document.getElementById('form_' + ID + '_' + Tmp + '_postcode').value = '';
                            }
                            if (!SelectedRequestItem.getElementsByTagName('sw')[0])
                            {
                                document.getElementById('form_completer_' + ID + '_' + Tmp + '_ward').disabled = true;
                                document.getElementById('form_completer_' + ID + '_' + Tmp + '_ward').value = HttpRequest.responseXML.getElementsByTagName('cww')[0].childNodes[0].nodeValue;
                            }
                            else
                            {
                                document.getElementById('form_completer_' + ID + '_' + Tmp + '_ward').disabled = false;
                                if (SelectedRequestItem.getElementsByTagName('wt')[0])
                                {
                                    OptionItem = document.createElement('option');
                                    OptionItem.value = SelectedRequestItem.getElementsByTagName('w')[0].childNodes[0].nodeValue
                                    OptionItem.innerHTML = SelectedRequestItem.getElementsByTagName('wt')[0].childNodes[0].nodeValue
                                    CheckSelectElement('form_completer_' + ID + '_' + Tmp + '_ward_select', 'form[data][' + ID + '][' + Tmp + '_ward]', OptionItem, document.getElementById('form_completer_' + ID + '_' + Tmp + '_ward_submit'))
                                    document.getElementById('form_completer_' + ID + '_' + Tmp + '_ward').value = SelectedRequestItem.getElementsByTagName('wt')[0].childNodes[0].nodeValue;
                                }
                                else
                                {
                                    document.getElementById('form_completer_' + ID + '_' + Tmp + '_ward').value = '';
                                }
                            }
                            if (!SelectedRequestItem.getElementsByTagName('ss')[0])
                            {
                                document.getElementById('form_completer_' + ID + '_' + Tmp + '_street').disabled = true;
                                document.getElementById('form_completer_' + ID + '_' + Tmp + '_street').value = HttpRequest.responseXML.getElementsByTagName('cws')[0].childNodes[0].nodeValue;
                            }
                            else
                            {
                                document.getElementById('form_completer_' + ID + '_' + Tmp + '_street').disabled = false;
                                if (SelectedRequestItem.getElementsByTagName('st')[0])
                                {
                                    OptionItem = document.createElement('option');
                                    OptionItem.value = SelectedRequestItem.getElementsByTagName('s')[0].childNodes[0].nodeValue
                                    OptionItem.innerHTML = SelectedRequestItem.getElementsByTagName('st')[0].childNodes[0].nodeValue
                                    CheckSelectElement('form_completer_' + ID + '_' + Tmp + '_street_select', 'form[data][' + ID + '][' + Tmp + '_street]', OptionItem, document.getElementById('form_completer_' + ID + '_' + Tmp + '_street_submit'))
                                    OptionItem = document.createElement('option');
                                    document.getElementById('form_completer_' + ID + '_' + Tmp + '_street').value = SelectedRequestItem.getElementsByTagName('st')[0].childNodes[0].nodeValue;
                                }
                                else
                                {
                                    document.getElementById('form_completer_' + ID + '_' + Tmp + '_street').value = '';
                                }
                            }
                            break;
                        }
                    case 'customer_event':
                        {
                            document.getElementById('form_completer_0_customer').value = SelectedRequestItem.getElementsByTagName('t')[0].childNodes[0].nodeValue;
                            break;
                        }
                    case 'property_event':
                        {
                            document.getElementById('form_completer_0_property').value = SelectedRequestItem.getElementsByTagName('t')[0].childNodes[0].nodeValue;
                            break;
                        }
                    case 'customer_search':
                        {
                            document.getElementById('form_completer_search_customer').value = SelectedRequestItem.getElementsByTagName('t')[0].childNodes[0].nodeValue;
                            break;
                        }
                    case 'company_search':
                        {
                            document.getElementById('form_completer_search_company').value = SelectedRequestItem.getElementsByTagName('t')[0].childNodes[0].nodeValue;
                            break;
                        }
                    case 'customers':
                        {
                            document.getElementById('form_completer_' + this.id.replace(InputIdCustomerExp, '$2') + '_' + this.id.replace(InputIdCustomerExp, '$3') + '_customer').value = SelectedRequestItem.getElementsByTagName('t')[0].childNodes[0].nodeValue;
                            break;
                        }
                }
            }
            else
            {
                RemoveSelectElement();
            }
            if (document.getElementById(InputElement.id))
            {
                //InputElement.focus();
            }
        }
        return;
    }
    var SetSelectElementSize = function ()
    {
        if (SelectElement.length > 7)
        {
            SelectElement.size = 7;
        }
        else
        {
            SelectElement.size = SelectElement.length;
        }
        if (SelectElement.size == 1)
        {
            SelectElement.multiple = 'multiple';
        }
        else
        {
            SelectElement.multiple = '';
        }
    }
    var FadeIn = function (element)
    {
        if (element.opacity == undefined)
        {
            element.opacity = 0;
        }
        if (element.FadeIntOut)
        {
            window.clearInterval(element.FadeIntOut);
        }
        element.FadeIntIn = window.setInterval(
			function ()
			{
			    element.style.zIndex = 1;
			    element.style.filter = "alpha(opacity=" + element.opacity + ")";
			    element.style.opacity = element.opacity / 100;
			    element.opacity = element.opacity + 10;
			    if (element.opacity > 100)
			    {
			        element.opacity = 100;
			        window.clearInterval(element.FadeIntIn);
			    }
			}
			, 1
		)
    };
    var FadeOut = function (element)
    {
        if (element.opacity == undefined)
        {
            element.opacity = 100;
        }
        if (element.FadeIntIn)
        {
            window.clearInterval(element.FadeIntIn);
        }
        element.FadeIntOut = window.setInterval(
			function ()
			{
			    element.style.filter = "alpha(opacity=" + element.opacity + ")";
			    element.style.opacity = element.opacity / 100;
			    element.opacity = element.opacity - 5;
			    if (element.opacity < 0)
			    {
			        element.style.zIndex = -1;
			        element.opacity = 0;
			        window.clearInterval(element.FadeIntOut);
			    }
			}
			, 10
		)
    };
    var ReplaceChars = function (expression)
    {
        var exp = new Array('(ě|Ě|é|É)', '(š|Š)', '(č|Č)', '(ř|Ř)', '(ž|Ž)', '(ý|Ý)', '(á|Á)', '(í|Í)', '(ď|Ď)', '(ť|Ť)', '(ň|Ň)', '(ó|Ó)', '(ů|Ů|ú|Ú)');
        var replace = new Array('e', 's', 'c', 'r', 'z', 'y', 'a', 'i', 'd', 't', 'n', 'o', 'u');
        for (i = 0; i < 13; i++)
        {
            var expTmp = new RegExp(exp[i]);
            expression = expression.replace(expTmp, replace[i]);
        }
        expTmp = new RegExp('(^(\ )+(.*)$)');
        expression = expression.replace(expTmp, '$3');
        expTmp = new RegExp('(([^\ ])(\ )+$)');
        expression = expression.replace(expTmp, '$2');
        expression = expression.toLowerCase();
        return expression;
    };
    var AutoCompleter = function ()
    {
        if (window.ActiveXObject)
        {
            HttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
        }
        else if (window.XMLHttpRequest)
        {
            HttpRequest = new XMLHttpRequest();
        }
        HttpRequest.onreadystatechange = HttpResult;
        var QueryString = '';
        var InputList = document.getElementsByTagName('input');
        HttpRequest.open("POST", "/auto-completer.php", true);
        HttpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        if (InputElement.active)
        {
            InputElement.style.backgroundImage = 'url(/layout/graphics/ajax.gif)';
            InputElement.style.backgroundPosition = "right center";
            InputElement.style.backgroundRepeat = "no-repeat";
            Elements = MainElement.getElementsByTagName('select');
            QueryString = '';
            for (i = 0; i < Elements.length; ++i)
            {
                if (Elements[i].selectedIndex != -1)
                {
                    QueryString += '&' + Elements[i].name + '=' + Elements[i].getElementsByTagName("option")[Elements[i].selectedIndex].value;
                }
            }
            Elements = MainElement.getElementsByTagName('input');
            for (i = 0; i < Elements.length; ++i)
            {
                if (Elements[i].type == 'text' || Elements[i].type == 'hidden')
                {
                    QueryString += '&' + Elements[i].name + '=' + Elements[i].value;
                }
            }
            if (document.getElementById('form_completer_' + InputElement.id.replace(InputIdExp, '$2') + '_company_user'))
            {
                Elements = document.getElementById('form_completer_' + InputElement.id.replace(InputIdExp, '$2') + '_company_user').getElementsByTagName('input');
                for (i = 0; i < Elements.length; ++i)
                {
                    if (Elements[i].type == 'text' || Elements[i].type == 'hidden')
                    {
                        QueryString += '&' + Elements[i].name + '=' + Elements[i].value;
                    }
                }
                Elements = document.getElementById('form_completer_' + InputElement.id.replace(InputIdExp, '$2') + '_company_user').getElementsByTagName('select');
                for (i = 0; i < Elements.length; ++i)
                {
                    if (Elements[i].selectedIndex != -1)
                    {
                        QueryString += '&' + Elements[i].name + '=' + Elements[i].getElementsByTagName("option")[Elements[i].selectedIndex].value;
                    }
                }
            }
         //   alert(Action);
            HttpRequest.send('&action=' + Action + '&form[search_submit][' + InputElement.id.replace(InputIdExp, '$2') + '][' + InputElement.id.replace(InputIdExp, '$3') + ']=true&' + InputElement.name + '=' + ReplaceChars(InputElement.value/*.substring( 0, ( ( GetSelectionStart() != GetSelectionEnd() ) && ( GetSelectionStart() != 0 && GetSelectionEnd() == InputElement.value.length ) ) ? ( GetSelectionStart( InputElement ) ) : ( InputElement.value.length) )*/) + QueryString);
        }
        return;
    };
    var HttpResult = function ()
    {
        if (HttpRequest.readyState == 4)
        {
            if (HttpRequest.status == 200)
            {
                if (HttpRequest.responseText)
                {
                    //alert(HttpRequest.responseText)
                    InputElement.style.backgroundImage = 'none';
                    CreateSelectElement();
                    while (SelectElement.hasChildNodes())
                    {
                        SelectElement.removeChild(SelectElement.firstChild);
                    }
                    var ItemsCount = HttpRequest.responseXML.getElementsByTagName('count')[0].childNodes[0].nodeValue;
                    if (ItemsCount != 0)
                    {
                        if (HttpRequest.responseXML.getElementsByTagName('items')[0])
                        {
                            OptionItems = HttpRequest.responseXML.getElementsByTagName('items')[0].getElementsByTagName('i');
                            Action = HttpRequest.responseXML.getElementsByTagName('act')[0].childNodes[0].nodeValue;
                            if (HttpRequest.responseXML.getElementsByTagName('key')[0].childNodes[0])
                            {
                                Key = HttpRequest.responseXML.getElementsByTagName('key')[0].childNodes[0].nodeValue;
                            }
                            var ID = SelectElement.id.replace(SelectIdExp, '$2');
                            var HelpTags = null;
                            switch (Action)
                            {
                                case 'customer_event':
                                case 'property_event':
                                case 'customers':
                                case 'company_search':
                                case 'customer_search':
                                case 'users':
                                    {
                                        var TextTag = 't';
                                        var ValueTag = 'id';
                                        var HelpTags = new Array("h");
                                        break;
                                    }
                                case 'locations':
                                    {
                                        var TextTag = 't';
                                        var ValueTag = 'id';
                                        var HelpTags = new Array("h");
                                        break;
                                    }
                                case 'multiple_locations':
                                case 'location':
                                    {
                                        switch (Key)
                                        {
                                            case 'city':
                                                {
                                                    var TextTag = 'ct';
                                                    var ValueTag = 'c';
                                                    var HelpTags = new Array("dt", "lt", "p");
                                                    break;
                                                }
                                            case 'city_district':
                                                {
                                                    var TextTag = 'cdt';
                                                    var ValueTag = 'cd';
                                                    if (!document.getElementById('form_completer_' + ID + '_city_select'))
                                                    {
                                                        var HelpTags = new Array("ct", "dt", "lt", "p");
                                                        break;
                                                    }
                                                    break;
                                                }
                                            case 'ward':
                                                {
                                                    var TextTag = 'wt';
                                                    var ValueTag = 'w';
                                                    if (!document.getElementById('form_completer_' + ID + '_city_select'))
                                                    {
                                                        var HelpTags = new Array("cdt", "ct", "dt", "lt", "p");
                                                        break;
                                                    }
                                                    if (!document.getElementById('form_completer_' + ID + '_city_district_select') && !document.getElementById('form_completer_' + ID + '_city_district').disabled)
                                                    {
                                                        var HelpTags = new Array("cdt", "p");
                                                        break;
                                                    }
                                                    var HelpTags = new Array("p");
                                                    break;
                                                }
                                            case 'street':
                                                {
                                                    var TextTag = 'st';
                                                    var ValueTag = 's';
                                                    if (!document.getElementById('form_completer_' + ID + '_city_select'))
                                                    {
                                                        var HelpTags = new Array("wt", "cdt", "ct", "dt", "lt", "p");
                                                        break;
                                                    }
                                                    if (!document.getElementById('form_completer_' + ID + '_city_district_select') && !document.getElementById('form_completer_' + ID + '_city_district').disabled)
                                                    {
                                                        var HelpTags = new Array("wt", "cdt", "p");
                                                        break;
                                                    }
                                                    if (!document.getElementById('form_completer_' + ID + '_ward_select'))
                                                    {
                                                        var HelpTags = new Array("wt", "p");
                                                        break;
                                                    }
                                                    var HelpTags = new Array("p");
                                                    break;
                                                }
                                        }

                                        break;
                                    }

                            }
                            for (i = 0; i < OptionItems.length; ++i)
                            {
                                element = document.createElement('option');
                                element.value = OptionItems[i].getElementsByTagName(ValueTag)[0].childNodes[0].nodeValue;
                                element.innerHTML = OptionItems[i].getElementsByTagName(TextTag)[0].childNodes[0].nodeValue;
                                InnerHTML = '';
                                if (HelpTags)
                                {
                                    var DoHelp = false;
                                    for (x = 0; x < HelpTags.length; ++x)
                                    {
                                        DoHelp = ((OptionItems[i].getElementsByTagName(HelpTags[x])[0]) ? (true) : (false))
                                        if (DoHelp)
                                        {
                                            break;
                                        }
                                    }
                                    if (DoHelp)
                                    {
                                        var AddSlash = false;
                                        for (x = 0; x < HelpTags.length; ++x)
                                        {
                                            InnerHTML += (x == 0) ? (' [ ') : ('');
                                            if (AddSlash)
                                            {
                                                InnerHTML += ' / ';
                                            }
                                            InnerHTML += TmpText = ((OptionItems[i].getElementsByTagName(HelpTags[x])[0] && OptionItems[i].getElementsByTagName(HelpTags[x])[0].childNodes[0]) ? (OptionItems[i].getElementsByTagName(HelpTags[x])[0].childNodes[0].nodeValue) : (''))
                                            InnerHTML += (x + 1 == HelpTags.length) ? (' ]') : ('');
                                            AddSlash = (TmpText) ? (true) : (false);
                                        }
                                    }
                                }
                                element.innerHTML += '<span>' + InnerHTML + '</span>';
                                SelectElement.appendChild(element);
                            }

                        }
                        else
                        {
                            element = document.createElement('option');
                            element.innerHTML = HttpRequest.responseXML.getElementsByTagName('msg')[0].getElementsByTagName('emp')[0].childNodes[0].nodeValue;
                            element.disabled = 'disabled';
                            element.value = '';
                            SelectElement.appendChild(element);
                        }
                    }
                    else
                    {
                        element = document.createElement('option');
                        element.innerHTML = HttpRequest.responseXML.getElementsByTagName('msg')[0].getElementsByTagName('err')[0].childNodes[0].nodeValue;
                        element.disabled = 'disabled';
                        element.value = '';
                        SelectElement.appendChild(element);
                    }
                    if (!SelectElement.getElementsByTagName('option')[0].disabled)
                    {
                        SelectElement.selectedIndex = 0;
                    }
                    else
                    {
                        SelectElement.selectedIndex = -1;
                    }
                    SetSelectElementSize();
                    if (SelectElement.active || InputElement.active)
                    {
                        SelectElement.style.display = 'block';
                    }
                    else
                    {
                        RemoveSelectElement(SelectElement);
                    }
                }
            }
        }
    };

}


	
