﻿(function() {

    var m = {
        cookies : {
            init:function() {
                for (var a = document.cookie.split("; "),b = 0; b < a.length; b++) {
                    var c = a[b].split("=");
                    this[c[0]] = c[1]
                }
            },
            create:function(a, b) {
                document.cookie = a + "=" + b + "; path=/";
                this[a] = b
            },
            remove:function(a) {
                this.create(a, "", -1);
                this[a] = void 0
            },
            update:function(a, b) {
                this.remove(a);
                this.create(a, b)
            },
            read:function(a) {
                return this[a]
            }},

        loadScript : function(url, callback, timeout, timeoutback) {
            var script = document.createElement("script");
            script.type = "text/javascript";
            var callbackUpd = function() {
                if (m.loadScript[url].timeout === false) {
                    callback();
                }
            };
            if (script.readyState) {
                script.onreadystatechange = function() {
                    if (script.readyState == "loaded" || script.readyState == "complete") {
                        script.onreadystatechange = null;
                        callbackUpd();
                    }
                };
            }
            else {
                script.onload = function(event) {
                    callbackUpd();
                };
            }
            script.src = url;
            document.getElementsByTagName('head')[0].appendChild(script);
            m.loadScript[url] = {
                timeout : false
            };
            setTimeout(function() {
                m.loadScript[url].timeout = true;
                if (timeoutback) {
                    timeoutback();
                }
            }, timeout);
        },

        infoPerm : {
            name :"Perm'",
            number : 58,
            coords : [57.997,56.235]
        },

        regions : [
            {
                name :"Sverdlovsk",
                id : 5,
                number : 71,
                coords : [56.838,60.597]
            },
            {
                name : "Tyumen'",
                id : 6,
                number : 78,
                coords : [57.155,65.516]
            },
            {
                name : "Moscow",
                id : 7,
                number : [47,48],
                coords : [55.756,37.618],
                isMoscow : true
            },
            {
                name : "Leningrad",
                id : 8,
                number : 42,
                coords : [59.939,30.316]
            }
        ],

        getRegionByName : function(name) {
            var curObj = null;
            for (var i = 0; i < m.regions.length; i++) {
                var el = m.regions[i];
                if (el.name == name) {
                    curObj = el;
                    break;
                }
            }
            if (!curObj) {
                return m.getRegionByName("Moscow");
            } else {
                return curObj;
            }
        },

        loadRegion : function(name) {
            var curObj = m.getRegionByName(name);
            m.cookies.update("region_id", curObj.id);
            location.reload();
        },

        loadRegionById : function(number) {
            number = parseInt(number);
            for (var i = 0; i < m.regions.length; i++) {
                var curObj = m.regions[i];
                if (!curObj.isMoscow) {
                    if (curObj.number == number) {
                        m.loadRegion(curObj.name);
                        break;
                    }
                } else {
                    if (m.indexOfArray(curObj.number, number)) {
                        m.getRegionByName("Moscow");
                        break;
                    }
                }
            }

            //            m.loadRegion(m.getClosest().name);
            if (m.infoPerm.number == number || geoip_longitude() >= m.infoPerm.coords[1]) {
                m.loadRegion("Sverdlovsk");
            } else {
                m.loadRegion("Moscow");
            }
        },

        getClosest : function() {
            var curObj = m.getRegionByName("Moscow");
            var tArr = [];
            var curLat = geoip_latitude();
            var curLng = geoip_longitude();
            for (var i = 0; i < m.regions.length; i++) {
                var curEl = m.regions[i];
                tArr.push({
                    name : curEl.name,
                    distance : m.sqr(curLat - curEl.coords[0]) + m.sqr(curLng - curEl.coords[1])
                });
            }
            tArr.sort(function(a, b) {
                return a.distance > b.distance;
            });
            return tArr[0];
        },

        sqr : function(number) {
            return number * number;
        },

        indexOfArray : function(array, elem) {
            for (var i = array.length; i--;) {
                if (array[i] == elem) {
                    return i;
                }
            }
        },

        init : function() {
            m.cookies.init();
            if (!m.cookies.read("region_id")) {
                m.loadScript("http://j.maxmind.com/app/geoip.js", function() {
                    if (geoip_country_code() === "RU") {
                        m.loadRegionById(geoip_region());
                    } else {
                        m.loadRegion("Moscow");
                    }
                }, 1500, null);
            }
        }
    };
    m.init();
})();

