if (!String.prototype.trim)
    String.prototype.trim = function() {
        var r = /^\s*((?:.|\n)+?)\s*$/.exec(this);
        return r ? r[1]: this.toString();
    }
if( typeof document.getElementsByClassName == 'undefined' ){
    document.getElementsByClassName = function(classname){
    var all = document.all,
    elements = [],
    regexpr = new RegExp('\\b'+classname+'\\b','ig');
    for(var x=0; x<all.length; x++) {
        if( all[x].className ) {
            if( all[x].className.search(regexpr)!=-1 ) {
                elements[ elements.length ] = all[x];
            }
        }
    }
    return elements;
    }
}

function _get(a){ return document.getElementById?document.getElementById(a):null}

/* -------------------------------------------------------------------------- */

window.onDOMComplete = [];
DOMSTATE = window.setInterval(
    function() {
        try {
            document.body.appendChild(document.createElement('DIV')).id = '-layout-dummy';
            document.body.removeChild(document.getElementById('-layout-dummy')).id = '';
        } catch(e) {
            return;
        }

        window.clearInterval(DOMSTATE);
        window.setTimeout(
            function() {
                for (var i = 0; i < window.onDOMComplete.length; i++)
                     window.onDOMComplete[i]();
            }, 500);
    }, 1
);

/* -------------------------------------------------------------------------- */


function smrAJAX() {

    this.enabled = true;
    this.ajaxId = 'ajaxLoader';

    this.objects = [];
    this.results = [];

}

smrAJAX.prototype = {

    createNewObject: function(id) {

        var newAjaxObject;

        try {
            newAjaxObject = new ActiveXObject('Msxml2.XMLHTTP');
        } catch (e) { try {
            newAjaxObject = new ActiveXObject('Microsoft.XMLHTTP');
        } catch (e) { try {
            newAjaxObject = new XMLHttpRequest();
        } catch (e) {
            this.enabled = false;
            return null;
        } } }

        if (id)
            this.objects[id] = newAjaxObject;

        return this.objects[id];
    },

    query: function(id, URL, method, data, todo) {

        this.ajaxLoader();

        method = method.toUpperCase();

        if (this.createNewObject(id)) {

            dataString = 'ajax=1';
            for (i in data)
                 dataString += '&' + i + "=" + escape(data[i]);

            if (method == 'POST') {
                this.objects[id].open('POST', URL, true);
                this.objects[id].setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
                this.objects[id].send(dataString);
            } else {
                this.objects[id].open('GET', URL + ((URL.indexOf('?') == -1) ? '?' : '&') + dataString, true);
                this.objects[id].send(null);
            }

            this.objects[id].onreadystatechange = function() {
                smrAJAX.handleRSC(id, todo);
            }
        }
    },

    ajaxLoader: function() {


    },

    handleRSC: function(id, todo) {

        if (this.objects[id].readyState == 4) {

            if (this.objects[id].status == 200)
                AJAXOutput = this.objects[id].responseText;
            else
                AJAXOutput = '';

            eval(todo);

        }
    }
}

function Virta() {

    this.browser = {};

    switch (true) {
        case ((i = navigator.userAgent.indexOf('Opera')) != -1):
            this.browser.type = 'opera'; break;
        case ((i = navigator.userAgent.indexOf('MSIE')) != -1):
            this.browser.type = 'msie'; break;
        case ((i = navigator.userAgent.indexOf('Firefox')) != -1):
            this.browser.type = 'firefox'; break;
        case ((i = navigator.userAgent.indexOf('Mozilla')) != -1):
            this.browser.type = 'mozilla'; break;
        default:
            this.browser.type = 'unknown'; break;
    }

    this.browser.version = Number((navigator.userAgent.substring(i + this.browser.type.length + 1).split(/[\s\,\;]/)[0]).split(".")[0]);


}

Virta.prototype = {

    setOpacity: function(element, opacity) {

        if (typeof (element.style.KhtmlOpacity) != 'undefined') {
            element.style.KhtmlOpacity = opacity;
        } else
        if (typeof (element.style.MozOpacity) != 'undefined') {
            element.style.MozOpacity = opacity;
        } else
        if (typeof (element.filters) != 'undefined') {
            element.style.filter = 'Alpha(Opacity=\'' + (opacity * 100) + '\');';
        } else
        if (typeof (element.style.opacity) != 'undefined') {
            element.style.opacity = opacity;
        } else { }
    },



    setCookie: function(name, value, expire) {

        expire = new Date((new Date()).getTime() + expire);
        expire = '; expires=' + expire.toGMTString();

       document.cookie = name + '=' + escape(value) + expire;
    },

    getCookie: function(option, defaultValue) {

        if (document.cookie.indexOf(option + '=') != -1) {

            var value = document.cookie.substr(document.cookie.indexOf(option + '=') + option.length + 1);
                value = (value.indexOf(';') != -1) ? value.substr(0, value.indexOf(';')) : value

            return ((value == 'true') ? true : ((value == 'false') ? false : unescape(value)));
        } else
        if (defaultValue) {
            return defaultValue;
        } else {
            return false;
        }
    },



    unsetCookie: function(name) {
        this.setCookie(name, '', 0);
    },

    getPageSize: function() {

        if (self.innerHeight)
            return { width: self.innerWidth, height: self.innerHeight }
        else if (document.documentElement && document.documentElement.clientHeight)
            return { width: document.documentElement.clientWidth, height: document.documentElement.clientHeight }
        else if (document.body)
            return { width: document.body.clientWidth, height: document.body.clientHeight }


        return { width: 0, height: 0 };

    },

    getPageScroll: function() {

        if (self.pageYOffset)
            return { x: self.pageXOffset, y: self.pageYOffset }
        else if (document.documentElement && document.documentElement.scrollTop)
            return { x: document.documentElement.scrollLeft, y: document.documentElement.scrollTop }
        else if (document.body)
            return { x: document.body.scrollLeft, y: document.body.scrollTop }

        return { x: 0, y: 0 };
    },
    getElementPos: function(element) {

        var x = 0;
        var y = 0;

        if (element.offsetParent)
            do {
                x += element.offsetLeft;
                y += element.offsetTop;
            } while (element = element.offsetParent);

        return { x: x, y: y }
    },

    createElement: function(name,attrs,style1) {

        var e = document.createElement(name);
        if (attrs) {
            for (key in attrs) {
                if (key == 'class') {
                    e.className = attrs[key];
                } else if (key == 'id') {
                    e.id = attrs[key];
                } else {
                    e.setAttribute(key, attrs[key]);
                }
            }
        }
        if (style1) {
            for (key in style1) {
                e.style[key] = style1[key];
            }
        }
        return e;
    },
	checkLength: function(str,len) {
		if(str.length>len) {
			str=str.substring(0,len);
		}
		return str;
	},

    displayError:   function(HTML) {

        if (_get('error-box') != null)
            return;

        var pageSize   = this.getPageSize();
        var pageScroll = this.getPageScroll();

        var entry = this.createElement('DIV',{"id":"error-box"},{"marginTop":pageScroll.y + 'px'}).appendChild(this.createElement('DIV',{"class":"entry"}));

        entry.innerHTML = '<h1>Ошибка</h1>' + HTML;

        var closer = entry.appendChild(this.createElement('A',{"title":"закрыть сообщение об ошибке","class":"closer"}));
        closer.href      = 'javascript:void(0);';
        closer.innerHTML = 'закрыть';


        closer.onclick = function() {
            document.body.removeChild(this.parentNode.parentNode);
        }

        document.body.appendChild(entry.parentNode);
        return 0;
    }


}

Virta = new Virta;

smrAJAX = new smrAJAX;


