﻿function mtsRegionsSetCookie(name, value, expires, path, domain, secure) {
  document.cookie = name + "=" + escape(value) +
  ((expires) ? "; expires=" + expires : "") +
  ((path) ? "; path=" + path : "") +
  ((domain) ? "; domain=" + domain : "") +
  ((secure) ? "; secure" : "");
} 
function SaveRegionCookie(val) {
  var expires = new Date();	
  expires.setYear( expires.getFullYear() + 1 );
  mtsRegionsSetCookie('region.alias', val, expires.toUTCString(), '/', '.mts.ru', null);
}

mtsRegions.selectedIndex = 0;

mtsRegions.root       = undefined;  // Основная видимая область   mts-regions
mtsRegions.combo      = undefined;  // Комбобокс                  mts-regions-combo
mtsRegions.comboArea  = undefined;  // td                         mts-regions-input
mtsRegions.comboInput = undefined;  // Поле ввода в комбобоксе    
mtsRegions.comboArrow = undefined;  // Кнопка выпадающего списка  mts-regions-arrow

mtsRegions.list  = undefined;  // Выпадающая область         mts-regions-list
mtsRegions.listScroll = undefined;  // Собственно список в выпадающей области (UL)
mtsRegions.listRows   = undefined;  // Собственно список в выпадающей области (UL)

mtsRegions.build = function(left, top, label, url) {
    if (this.root) return;

    var div = document.getElementById("head");
    if (!div) return;

    this.root = this.buildRoot(left, top, label);
    div.appendChild(this.root);

    this.list = this.buildList();
    div.appendChild(this.list);

    this.addEvents();
    this.findValue(url);
}

mtsRegions.addEvents = function() {
    var that = this;

    //if (!this.comboArrow) alert("addEvents: no comboArrow"); // DEBUG
    $(this.comboArrow).click(function(e) {
        e.stopPropagation();
        that.toggle();
    });


    //if (!this.comboArea) alert("addEvents: no comboArea"); // DEBUG
    $(this.comboArea).click(function(e) {
        if (that.list.style.display == "block") return;
        e.stopPropagation();
        that.toggle();
    });

    //if (!this.list) alert("addEvents: no list"); // DEBUG

    $(this.list).click(function(e) { that.click(e); });
    $(this.list).mouseover(this.hoverOn).mouseout(this.hoverOff);

    $(document).mousedown(function(e) {
        that.externalClick(e);
    });
}

mtsRegions.click = function(e) {
    var who = e.target;
    if (!who || who.tagName != "LI") return;
    var value = who.innerHTML;

    this.toggle();

    //if (!this.comboInput) alert("click: no comboInput"); // DEBUG
    this.comboInput.innerHTML = value;

    //if (!this.listRows) alert("click: no listRows"); // DEBUG

    // Ищем в списке выбранный элемент
    var items = this.listRows.childNodes;
    var len = items.length;
    if (len > this.length) len = this.length;
    for (var i = 0; i < len; i++) {
        if (items[i] == who) {
            SaveRegionCookie(this[i].url);
            location = this[i].url;
            return;
        }
    }
    //alert("Выбранный элемент не найден"); // DEBUG
}
mtsRegions.setCookie = function(name, value, expires, path, domain, secure) {
      document.cookie = name + "=" + escape(value) +
        ((expires) ? "; expires=" + expires : "") +
        ((path) ? "; path=" + path : "") +
        ((domain) ? "; domain=" + domain : "") +
        ((secure) ? "; secure" : "");
}

mtsRegions.externalClick = function(e) {
    if ($(e.target).parents(".mts-regions-list").length === 0
        && $(e.target).parents(".mts-regions-combo").length === 0
        && this.list.style.display == "block") {
        e.stopPropagation();
        this.list.style.display = "none";
    }
}


mtsRegions.hoverOn = function(e) {
    var who = e.target;
    if( !who || who.tagName != "LI" ) return;
    who.className = "hover";
}

mtsRegions.hoverOff = function(e) {
    var who = e.target;
    if (who.tagName != "LI") return;
    who.className = "";
}

mtsRegions.buildRoot = function(left, top, title) {
    var div = document.createElement("div");
    div.className = "mts-regions";
    if (this.IEVersion() < 8) {
        div.style.width = "400px";
        div.style.height = "20px";
    }

    div.style.position = "absolute";
    div.style.left = left + 'px';
    div.style.top = top + 'px';

    var lbl = document.createElement("label");
    // if (this.IEVersion() < 8) {
    lbl.style.display = "inline";
    lbl.style.float = "left";
    lbl.style.padding = "5px 6px 0 0"; //padding-top: 5px; padding-right: 6px;    
    // }

    lbl.innerHTML = title;
    div.appendChild(lbl);

    // <span style="display: none;"><!--[CDATA[<noindex>]]--></span>

    this.combo = this.buildCombo();

    if (this.IEVersion() < 8) {
        this.combo.style.display = "inline";
        this.combo.style.width = "318px";
    }

    //if (!this.combo) alert("buildRoot: no combo"); // DEBUG
    div.appendChild(this.combo);

    //<span style="display: none;"><!--[CDATA[</noindex>]]-->   </span>

    return div;
}

mtsRegions.buildCombo = function() {
    var div = document.createElement("div");
    // div.id = "mts-regions-combo";
    div.className = "mts-regions-combo";
    if (this.IEVersion() < 7) {
        div.style.display = "inline";
    }

    var table = document.createElement("table");
    table.cellPadding = "0";
    table.cellSpacing = "0";

    var tbody = document.createElement("tbody");
    var tr = document.createElement("tr");

    var td;
    td = document.createElement("td");
    td.className = "mts-regions-input";
    this.comboArea = td;

    this.comboInput = document.createElement("div");

    td.appendChild(this.comboInput);

    tr.appendChild(td);

    td = document.createElement("td");
    td.className = "mts-regions-arrow";

    var a = document.createElement("a");
    a.innerHTML = "&nbsp;";

    td.appendChild(a);
    this.comboArrow = td;
    tr.appendChild(td);

    tbody.appendChild(tr);
    table.appendChild(tbody);

    div.appendChild(table);

    return div;
}

mtsRegions.findValue = function(url) {
    this.selectedIndex = 0;

    var len = this.length;
    for (var i = len-1; i >= 0; i--) {
        if( this[i].url == url ){
            this.selectedIndex = i;
            // if (!this.comboInput) alert("no input"); // DEBUG
            this.comboInput.innerHTML = this[i].text;
            return;
        }
    }
    //alert("setValue: Значение [" + url + "] не найдено"); //DEBUG
    this.selectedIndex = 0;
    //if (!this.comboInput) alert("no input"); // DEBUG
    this.comboInput.innerHTML = this[this.selectedIndex].text;
}

mtsRegions.setValue = function(value) {
    //if (!this.comboInput) alert("no input"); // DEBUG
    this.comboInput.innerHTML = value;

    this.selectedIndex = 0;

    var div = document.createElement("div");
    //div.innerHTML = value;
    var len = this.length;
    for (var i = 0; i < len; i++) {
        div.innerHTML = this[i].text;
        if (div.innerHTML == value) {
            this.selectedIndex = i;
            return;
        }
    }
    //alert("setValue: Значение не найдено"); //DEBUG
}

mtsRegions.buildList = function() {
    var div1 = document.createElement("div");
    div1.className = "mts-regions-list";
    div1.style.display = "none";

    if (this.IEVersion() < 7) div1.appendChild( this.buildIFrame() );

    var div2 = document.createElement("div");
    var div3 = document.createElement("div");
    this.listScroll = div3;
    this.listRows = document.createElement("ul");

    var li;
    var a;
    var len = this.length;
    for (var i = 0; i < len; i++) {
        li = document.createElement("li");
        li.innerHTML = this[i].text;
        this.listRows.appendChild(li);
    }

    div3.appendChild(this.listRows);
    div2.appendChild(div3);
    div1.appendChild(div2);

    return div1;
}

mtsRegions.buildIFrame = function() {
    // Без iframe выпадающий список залезает под баннер в ie6
    var a = document.createElement("div");
    a.innerHTML = "<iframe>Your browser does not support inline frames or is currently configured not to display inline frames.</iframe>";
    var f = a.firstChild;
    //if (!f) alert("cant create iframe"); //DEBUG

    f.src = "javascript:'';";

    f.style.position = "absolute";
    f.style.border = "0px";
    f.frameBorder = 0;
    f.style.filter = "progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)";
    f.tabIndex = -1;

    f.style.left   =   "0px";
    f.style.top    =   "0px";
    f.style.width  = "318px";
    f.style.height = "402px";

    return f;
}

mtsRegions.listMove = function() {
    //if (!this.combo) alert("listMove: no combo"); // DEBUG

    var rootOffset = $(this.root).position();

    var combo = $(this.combo);
    var comboOffset = combo.position();
    var comboHeight = combo.outerHeight();

    //if (!this.list) alert("listMove: no list"); // DEBUG

    this.list.style.left = (rootOffset.left + comboOffset.left) + "px";
    this.list.style.top = (rootOffset.top + comboOffset.top + comboHeight - 2) + "px";
}

mtsRegions.toggle = function() {
    //if (!this.list) alert("toggle: no list"); // DEBUG

    if (this.list.style.display == "block")
        this.list.style.display = "none";
    else {
        this.listMove();

        // if (!this.listRows) alert("toggle: no listRows"); // DEBUG

        var liFirst = this.listRows.firstChild;
        var li = liFirst;
        var i = 0;
        while (li) {
            if (i == this.selectedIndex)
                li.className = "hover";
            else if (li.className == "hover")
                li.className = "";
            li = li.nextSibling;
            i++;
        }

        // if (!this.listScroll) alert("toggle: no listScroll"); // DEBUG

        this.list.style.display = "block";
        var liHeight = $(liFirst).outerHeight(); // Только сейчас высота стала доступна
        this.listScroll.scrollTop = liHeight * this.selectedIndex;

    }
}

mtsRegions.IEVersion = function() {
    var version = 999;
    if (navigator.appVersion.indexOf("MSIE") != -1)
        version = parseFloat(navigator.appVersion.split("MSIE")[1]);

    return version;
}

