var  Regions = new Array();
var RegionsImot = new Array();

Regions["Видин"]="Видин";
Regions["Монтана"]="Монтана";
Regions["Враца"]="Враца";
Regions["Плевен"]="Плевен";
Regions["Ловеч"]="Ловеч";
Regions["Габрово"]="Габрово";
Regions["Велико Търново"]="Велико Търново";
Regions["Русе"]="Русе";
Regions["Търговище"]="Търговище";
Regions["Разград"]="Разград";
Regions["Силистра"]="Силистра";
Regions["Шумен"]="Шумен";
Regions["Добрич"]="Добрич";
Regions["Варна"]="Варна";
Regions["Бургас"]="Бургас";
Regions["Ямбол"]="Ямбол";
Regions["Сливен"]="Сливен";
Regions["Хасково"]="Хасково";
Regions["Стара Загора"]="Стара Загора";
Regions["Кърджали"]="Кърджали";
Regions["Пловдив"]="Пловдив";
Regions["Смолян"]="Смолян";
Regions["Пазарджик"]="Пазарджик";
Regions["Благоевград"]="Благоевград";
Regions["Кюстендил"]="Кюстендил";
Regions["Перник"]="Перник";
Regions["София"]="София";

Regions["Област Видин"]="Видин област";
Regions["Област Монтана"]="Монтана област";
Regions["Област Враца"]="Враца област";
Regions["Област Плевен"]="Плевен област";
Regions["Област Ловеч"]="Ловеч област";
Regions["Област Габрово"]="Габрово област";
Regions["Област Велико Търново"]="Велико Търново област";
Regions["Област Русе"]="Русе област";
Regions["Област Търговище "]="Търговище област";
Regions["Област Разград"]="Разград област";
Regions["Област Силистра"]="Силистра област";
Regions["Област Шумен"]="Шумен област";
Regions["Област Добрич"]="Добрич област";
Regions["Област Варна"]="Варна област";
Regions["Област Бургас"]="Бургас област";
Regions["Област Ямбол"]="Ямбол област";
Regions["Област Сливен"]="Сливен област";
Regions["Област Хасково"]="Хасково област";
Regions["Област Стара Загора"]="Стара Загора област";
Regions["Област Кърджали"]="Кърджали област";
Regions["Област Пловдив"]="Пловдив област";
Regions["Област Смолян"]="Смолян област";
Regions["Област Пазарджик"]="Пазарджик област";
Regions["Област Благоевград"]="Благоевград област";
Regions["Област Кюстендил"]="Кюстендил област";
Regions["Област Перник"]="Перник област";
Regions["Област София"]="София област";

RegionsImot["Видин"]="град Видин";
RegionsImot["Монтана"]="град Монтана";
RegionsImot["Враца"]="град Враца";
RegionsImot["Плевен"]="град Плевен";
RegionsImot["Ловеч"]="град Ловеч";
RegionsImot["Габрово"]="град Габрово";
RegionsImot["Велико Търново"]="град Велико Търново";
RegionsImot["Русе"]="град Русе";
RegionsImot["Търговище"]="град Търговище";
RegionsImot["Разград"]="град Разград";
RegionsImot["Силистра"]="град Силистра";
RegionsImot["Шумен"]="град Шумен";
RegionsImot["Добрич"]="град Добрич";
RegionsImot["Варна"]="град Варна";
RegionsImot["Бургас"]="град Бургас";
RegionsImot["Ямбол"]="град Ямбол";
RegionsImot["Сливен"]="град Сливен";
RegionsImot["Хасково"]="град Хасково";
RegionsImot["Стара Загора"]="град Стара Загора";
RegionsImot["Кърджали"]="град Кърджали";
RegionsImot["Пловдив"]="град Пловдив";
RegionsImot["Смолян"]="град Смолян";
RegionsImot["Пазарджик"]="град Пазарджик";
RegionsImot["Благоевград"]="град Благоевград";
RegionsImot["Кюстендил"]="град Кюстендил";
RegionsImot["Перник"]="град Перник";
RegionsImot["София"]="град София";

RegionsImot["Област Видин"]="област Видин";
RegionsImot["Област Монтана"]="област Монтана";
RegionsImot["Област Враца"]="област Враца";
RegionsImot["Област Плевен"]="област Плевен";
RegionsImot["Област Ловеч"]="област Ловеч";
RegionsImot["Област Габрово"]="област Габрово";
RegionsImot["Област Велико Търново"]="област Велико Търново";
RegionsImot["Област Русе"]="област Русе";
RegionsImot["Област Търговище "]="област Търговище";
RegionsImot["Област Разград"]="област Разград";
RegionsImot["Област Силистра"]="област Силистра";
RegionsImot["Област Шумен"]="област Шумен";
RegionsImot["Област Добрич"]="област Добрич";
RegionsImot["Област Варна"]="област Варна";
RegionsImot["Област Бургас"]="област Бургас";
RegionsImot["Област Ямбол"]="област Ямбол";
RegionsImot["Област Сливен"]="област Сливен";
RegionsImot["Област Хасково"]="област Хасково";
RegionsImot["Област Стара Загора"]="област Стара Загора";
RegionsImot["Област Кърджали"]="област Кърджали";
RegionsImot["Област Пловдив"]="област Пловдив";
RegionsImot["Област Смолян"]="област Смолян";
RegionsImot["Област Пазарджик"]="област Пазарджик";
RegionsImot["Област Благоевград"]="област Благоевград";
RegionsImot["Област Кюстендил"]="област Кюстендил";
RegionsImot["Област Перник"]="област Перник";
RegionsImot["Област София"]="област София";

var uriEncode = {'А':'%C0',
'Б':'%C1',
'В':'%C2',
'Г':'%C3',
'Д':'%C4',
'Е':'%C5',
'Ж':'%C6',
'З':'%C7',
'И':'%C8',
'Й':'%C9',
'К':'%CA',
'Л':'%CB',
'М':'%CC',
'Н':'%CD',
'О':'%CE',
'П':'%CF',
'Р':'%D0',
'С':'%D1',
'Т':'%D2',
'У':'%D3',
'Ф':'%D4',
'Х':'%D5',
'Ц':'%D6',
'Ч':'%D7',
'Ш':'%D8',
'Щ':'%D9',
'Ъ':'%DA',
'Ы':'%DB',
'Ь':'%DC',
'Э':'%DD',
'Ю':'%DE',
'Я':'%DF',
'а':'%E0',
'б':'%E1',
'в':'%E2',
'г':'%E3',
'д':'%E4',
'е':'%E5',
'ж':'%E6',
'з':'%E7',
'и':'%E8',
'й':'%E9',
'к':'%EA',
'л':'%EB',
'м':'%EC',
'н':'%ED',
'о':'%EE',
'п':'%EF',
'р':'%F0',
'с':'%F1',
'т':'%F2',
'у':'%F3',
'ф':'%F4',
'х':'%F5',
'ц':'%F6',
'ч':'%F7',
'ш':'%F8',
'щ':'%F9',
'ъ':'%FA',
'ы':'%FB',
'ь':'%FC',
'э':'%FD',
'ю':'%FE',
'я':'%FF'
};

function strReplace(str) {
    var strR = [];
 for (var i = 0, n = str.length; i < n; ++i) {
        var s = str.charAt(i);
        var encoded = uriEncode[s];
        strR[strR.length] = (encoded ? encoded : s);
 }
 return strR.join('');
}

function listenEvent(o, e, f, t)
{
    var func = t ? function(event) { return f.call(t, event); } : f;
    if (o.addEventListener) {
        o.addEventListener(e, func, false);
    } else if (o.attachEvent) {
        o.attachEvent('on' + e, func);
    }
}

function stopEventPropagation(event)
{
    event = event || window.event;
    event.cancelBubble = true;
    if (event.stopPropagation) {
        event.stopPropagation();
    }
}

function cancelDefaultEvent(event)
{
    event = event || window.event;
    event.returnValue = false;
    if (event.preventDefault && event.cancelable) {
        event.preventDefault();
    }
    return false;
}

function hasClass(o, c)
{
    if (typeof(o.className) == 'undefined') {
        return false;
    }
    return (' ' + o.className + ' ').indexOf(' ' + c + ' ') >= 0;
}

function addClass(o, c)
{
    if (typeof(o) == 'undefined' || o == null) {
        return;
    }
    if (o.nodeType != 1 || typeof(o.className) == 'undefined') {
        return;
    }
    if (!hasClass(o, c)) {
        o.className += ' ' + c;
    }
}

function removeClass(o, c)
{
    if (typeof(o) == 'undefined' || o == null) {
        return;
    }
    if (o.nodeType != 1 || typeof(o.className) == 'undefined' || o.className == null) {
        return;
    }
    var className = ' ' + o.className + ' ';
    var i = className.indexOf(' ' + c + ' ');
    if (i >= 0) {
        className = className.substr(0, i) + className.substr(i + c.length + 1);
        o.className = className.substr(1, className.length - 2);
    }
}

function getParentByTagName(element, tagName)
{
    tagName = tagName.toLowerCase();
    while (element != null) {
        if (element.nodeType == 1) {
            if (element.tagName.toLowerCase() == tagName) {
                return element;
            }
        }
        element = element.parentNode;
    }
    return null;
}

function getResponse(url, callback) {
	var requester = null;
	if (window.XMLHttpRequest) {
		requester = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		var version = 6;
		while (version >= 3 && !requester) {
			try {
				requester = new ActiveXObject('Msxml2.XMLHTTP.' + i + '.0');
			} catch (e) {
				--version;
			}
		}
		if (!requester) {
			try {
				requester = new ActiveXObject('Microsoft.XMLHTTP');
			} catch (e) {
			}
		}
	}
	if (requester) {
		requester.onreadystatechange = function()
		{
			if (requester.readyState === 4 && requester.status === 200 && callback) {
				callback(requester.responseText);
			}
		};
		requester.open('GET', url, true);
		requester.send(null);
	} else {
		xml = document.createElement('xml');
		if (xml && typeof(xml.addBehavior) !== 'undefined') {
			xml.addBehavior('#default#download');
			xml.startDownload(url, callback);
		}
	}
}

function getElementOffset(element, offsetAncestor) {
    if (element) {
        var offsetLeft = 0;
        var offsetTop = 0;
        var offsetWidth = 0;
        var offsetHeight = 0;
        if (element.offsetParent) {
            if (!offsetAncestor) {
                offsetAncestor = null;
            }
            offsetLeft = element.offsetLeft;
            offsetTop = element.offsetTop;
            offsetWidth = element.offsetWidth;
            offsetHeight = element.offsetHeight;
            while ((element = element.offsetParent) && (offsetAncestor === null || offsetAncestor !== element)) {
                offsetLeft += element.offsetLeft;
                offsetTop += element.offsetTop;
            }
        }
        return { left: offsetLeft, top: offsetTop, width: offsetWidth, height: offsetHeight };
    } else {
        return null;
    }
}

//
// -----------------------------------------------------------------------------
//

var AutoComplete = {
    PROPERTIES: {
        containerClass: null,
        highlightClass: null,
        url: null,
        generateHtml: null,
        select: null,
		cache: {},
        delay: 100,
        cacheExpiry: 15 * 60 * 1000
    },

    ID_PREFIX: 'autoComplete',
    nextId: 1,
    fields: {},

    id: null,
    timer: null,
    timestamp: null,

    add: function(input, properties)
    {
        if (!input) {
            return;
        }
        AutoComplete.id = input.id;
        if (!AutoComplete.id) {
            AutoComplete.id = AutoComplete.assignId(input);
        }
        var fieldProperties = {lastValue: null, containerId: null, position: -1};
        for (var key in AutoComplete.PROPERTIES) {
            fieldProperties[key] =
                (properties && typeof properties[key] !== 'undefined' ? properties : AutoComplete.PROPERTIES)[key];
        }
        AutoComplete.fields[AutoComplete.id] = fieldProperties;
        input.setAttribute('autocomplete', 'off');
        listenEvent(input, 'keyup', AutoComplete.handleKey);
        listenEvent(input, 'keypress', AutoComplete.suppressSubmit);
        listenEvent(document, 'click', AutoComplete.closeDocument);
    },

    assignId: function(element)
    {
        return element.id = AutoComplete.ID_PREFIX + (++AutoComplete.nextId);
    },

    suppressSubmit: function(event)
    {
        if (event.keyCode == 13) {
            return cancelDefaultEvent(event);
        } else {
			return true;
		}
    },

    handleKey: function(event)
    {
		if (AutoComplete.timer) {
            clearTimeout(AutoComplete.timer);
            AutoComplete.timer = null;
        }
        var target = event.srcElement || event.target;
        AutoComplete.id = target.id;
		var properties = AutoComplete.properties();
        switch (event.keyCode) {
            case 38:    // up
                if (AutoComplete.isClosed()) {
                    AutoComplete.open();
                } else if (properties.result) {
                    AutoComplete.moveUp();
                }
                return;

            case 40:    // down
                if (AutoComplete.isClosed()) {
                    AutoComplete.open();
                } else if (properties.result) {
                    AutoComplete.moveDown();
                }
                return;

            case 27:    // escape
                AutoComplete.close(true);
                return;

            case 13:    // enter
                AutoComplete.close(false);
//                AutoComplete.field().form.submit();
                return
        }

		AutoComplete.timer = setTimeout(function() {AutoComplete.sendRequest(false);}, properties.delay);
    },

    field: function()
    {
        return document.getElementById(AutoComplete.id);
    },

    container: function()
    {
        var properties = AutoComplete.properties();
        var container = document.getElementById(properties.containerId);
        if (!container) {
            var field = AutoComplete.field();
            var offset = getElementOffset(field);
            container = document.createElement('div');
            container.className = properties.containerClass;
            container.style.position = 'absolute';
            container.style.top = (offset.top + offset.height) + 'px';
            container.style.left = offset.left + 'px';
            container.style.width = offset.width + 'px';
            container.onclick = AutoComplete.mouseclick;
            container.onmousemove = AutoComplete.mousemove;
            properties.containerId = AutoComplete.assignId(container);
            field.parentNode.insertBefore(container, field.nextSibling);
        }
        return container;
    },

    properties: function()
    {
        return AutoComplete.fields[AutoComplete.id];
    },

    open: function()
    {
        AutoComplete.container().style.display = 'block';
    },

    close: function(restore)
    {
        if (restore) {
            AutoComplete.field().value = AutoComplete.properties().lastValue;
        }
        AutoComplete.container().style.display = 'none';
    },

    isClosed: function()
    {
        return AutoComplete.container().style.display === 'none';
    },

    sendRequest: function(dontOpen)
    {
		var timestamp = new Date();
        var field = AutoComplete.field();
        var search = field.value;
        var properties = AutoComplete.properties();
		var idFieldInput = document.getElementById('region');
		removeClass(idFieldInput, 'error');
        if (search) {
			if (properties.cache[search] && (timestamp - properties.cache[search].timestamp < properties.cacheExpiry)) {
                if (search != properties.lastValue) {
                    properties.lastValue = null;
					AutoComplete.showResult(search, properties.cache[search].result, dontOpen);
                } else {
                    AutoComplete.open();
                }
            } else {
                properties.lastValue = null;
				if (encodeURIComponent) {
					var searchURL = encodeURIComponent(search);
				} else {
					var searchURL = escape(search);
				}
				var searchURL = strReplace(search);
				getResponse(properties.url + searchURL, function(response) { AutoComplete.processResponse(AutoComplete.id, response, search, timestamp, dontOpen); });
            }
        } else {
            AutoComplete.trashList();
        }
    },

    processResponse: function(id, response, search, timestamp, dontOpen)
    {
        if (AutoComplete.id !== id || (AutoComplete.timestamp !== null && AutoComplete.timestamp > timestamp)) {
            return;
        }
        AutoComplete.timestamp = timestamp;
        AutoComplete.timer = null;
        if (response) {
			var properties = AutoComplete.properties();
            properties.cache[search] = {timestamp: timestamp, result: eval('(' + response + ')')};
            AutoComplete.showResult(search, properties.cache[search].result, dontOpen);
        } else {
            AutoComplete.trashList();
        }
    },

    showResult: function(search, result, dontOpen)
    {
        var properties = AutoComplete.properties();
        var html = properties.generateHtml(result);
        var container = AutoComplete.container();
        html += '<div><span onclick="AutoComplete.closeLink(event)">затвори</span></div>';
        container.innerHTML = html;
		if (dontOpen) {
			AutoComplete.close();
		} else {
			AutoComplete.open();
		}
        properties.lastValue = search;
        properties.position = -1;
		properties.result = result;
    },

    mouseclick: function(event)
    {
        event = event || window.event;
        var target = event.srcElement || event.target;
        var row = AutoComplete.targetRow(target, true);
        if (row !== null && AutoComplete.populate(AutoComplete.rows())) {
            AutoComplete.close(false);
//            AutoComplete.field().form.submit();
        }
    },

    moveDown: function()
    {
        var rows = AutoComplete.rows();
        var properties = AutoComplete.properties();
        if (properties.position >= 0) {
            removeClass(rows[properties.position], properties.highlightClass);
        }
        ++properties.position;
        if (properties.position >= rows.length) {
            properties.position = -1;
        }
        AutoComplete.highlight(rows, true);
    },

    moveUp: function()
    {
        var rows = AutoComplete.rows();
        var properties = AutoComplete.properties();
        if (properties.position >= 0) {
            removeClass(rows[properties.position], properties.highlightClass);
        }
        --properties.position;
        if (properties.position < -1) {
            properties.position = rows.length - 1;
        }
        AutoComplete.highlight(rows, true);
    },

    mousemove: function(event)
    {
        event = event || window.event;
        var target = event.srcElement || event.target;
        var row = AutoComplete.targetRow(target, false);
        if (row !== null) {
            AutoComplete.highlight(AutoComplete.rows(), false);
        }
    },

    targetRow: function(target, onlyCheck)
    {
        var row = getParentByTagName(target, 'tr');
        if (row && row.parentNode.tagName.toLowerCase() === 'tbody') {
            var rows = AutoComplete.rows();
            var index = -1;
            var properties = AutoComplete.properties();
            var highlightClass = properties.highlightClass;
            for (var i = 0, n = rows.length; i < n; ++i) {
                if (row == rows[i]) {
                    index = i;
                } else if (!onlyCheck) {
                    removeClass(rows[i], highlightClass);
                }
            }
            if (!onlyCheck) {
                properties.position = index;
                AutoComplete.highlight(rows, false);
            }
			return row;
		} else {
            return null;
        }
    },

    highlight: function(rows, populate)
    {
        var properties = AutoComplete.properties();
        if (properties.position >= 0) {
            addClass(rows[properties.position], properties.highlightClass);
            if (populate) {
                AutoComplete.populate(rows);
            }
        } else {
            AutoComplete.field().value = properties.lastValue;
			properties.select(properties.result, properties.position);
        }
    },

    populate: function(rows)
    {
        var properties = AutoComplete.properties();
        var row = rows[properties.position];
		var value = properties.select(properties.result, properties.position);
        if (value) {
            AutoComplete.field().value = value;
        }
        return !!value;
    },

    rows: function()
    {
        return AutoComplete.container().getElementsByTagName('tbody')[0].getElementsByTagName('tr');
    },

    closeLink: function(event)
    {
        event = event || window.event;
        AutoComplete.close(true);
        stopEventPropagation(event);
    },

    closeDocument: function(event)
    {
        event = event || window.event;
        var target = event.srcElement || event.target;
        if (target == AutoComplete.field()) {
            return;
        }
        var container = AutoComplete.container();
        while (target != null) {
            if (target == container) {
                return;
            }
            target = target.parentNode;
        }
        AutoComplete.close(false);
    },

    trashList: function(dontUpdateMap)
    {
        AutoComplete.close(false);
		var properties = AutoComplete.properties();
        properties.lastValue = null;
		properties.position = -1;
		properties.result = null;
		properties.select(properties.result, properties.position, dontUpdateMap);
		var container = AutoComplete.container();
        container.parentNode.removeChild(container);
    },
	
	setField: function(id, value, dontUpdateMap)
	{
		if (AutoComplete.timer) {
            clearTimeout(AutoComplete.timer);
            AutoComplete.timer = null;
        }
        AutoComplete.id = id;
		AutoComplete.field().value = value;
		AutoComplete.trashList(dontUpdateMap);
		AutoComplete.sendRequest(true);
	}
};

var RegionSearch = {
    onload: function()
    {
        AutoComplete.add(document.getElementById('region'), {
            containerClass: 'regionSearch',
            highlightClass: 's',
			url: 'http://www.imot.bg/pcgi/regionssrc.cgi?regionStr=',
            generateHtml: RegionSearch.generateHtml,
            select: RegionSearch.select
        });
    },

    generateHtml: function(result)
    {
		var concurrencePos = -1;
		var html = '<table cellspacing="0" cellpadding="0"><thead><tr><th colspan="2">Продажби / Наеми</th></tr></thead><tbody>';
		for (var i = 0, n = result.length; i < n; ++i) {
            html += '<tr>';
            html += '<td>' + result[i].rr + '</td>';
            html += '<td class="c">' + result[i].c + '</td>';
            html += '</tr>';
			if (result[i].s==1) {
				concurrencePos = i;
			}
        }
        html += '</tbody></table>';
        RegionSearch.select(result, concurrencePos);
		return html;
    },

    select: function(result, position, dontUpdateMap)
    {
		var idField = document.getElementById('regionId');
		var idMField = document.getElementById('mainRegionId');

		if (position >=0 && position <= result.length) {
			var item = result[position];
			if (item.id != '0') {			// ????
				idField.value = item.id;
			}
			idMField.value = item.pid;
			if (!dontUpdateMap) {
				RegionSearch.mapUpdate("kvartal", item.f);
			}
			return item.rs;
		} else {
			idField.value = '';
			idMField.value = '';
			if (!dontUpdateMap) {
				RegionSearch.mapUpdate("kvartal", 'clear');
			}
			return null;
		}
    },
	
	mapUpdate: function(param, key)
	{
		var map = document.getElementById('flashMap');
		if (map) {
			map.SetVariable(param, key);
                        SwapME(1);
		}
	}
};
listenEvent(window, 'load', RegionSearch.onload);

function torightFlashFP(value)
{
	if (value) {
		AutoComplete.setField('region', Regions[value], true);
		var idMField = document.getElementById('mainRegionId');
		idMField.value = RegionsImot[value];
		var idFieldInput = document.getElementById('region');
		removeClass(idFieldInput, 'error');
	} else {
		AutoComplete.setField('region', '', false);
	}
}

function flashClear() {
	var map = document.getElementById('flashMap');
	if (map) {
		map.SetVariable("kvartal", 'clear');
	}
	return true;
}

function SwapME(onoff)
{
  var me = document.getElementById('me');
  if ( me )
    {
      if ( onoff==1 )
        {
          me.src="../images/picturess/map_europa1.gif";
          var frm = document.getElementById('formFastSearch');
          if ( frm ) frm.action='http://www.imot.bg/pcgi/imot.cgi';
        }
      else
        {
          var reg = document.getElementById('region');
          if ( reg )
            {
              reg.value='Europe';
              flashClear();
              me.src="../images/picturess/map_europa1on.gif"
              var mreg = document.getElementById('mainRegionId');
              mreg.value="europe";
              var frm = document.getElementById('formFastSearch');
              if ( frm ) frm.action='http://www.imot.bg/pcgi/imotbb.cgi';
            }
        }
    }

}

