/* 
 * Общие функции
 */

// Мышъ

/*var MouseCoords = {
    // координаты x и y
    x: 0,
    y: 0,

    // X-координата
    setX: function(e)
    {
        if (e.pageX)
        {
            this.x = e.pageX;
        }
        else if (e.clientX)
        {
            this.x = e.clientX+(document.documentElement.scrollLeft || document.body.scrollLeft) - document.documentElement.clientLeft;
        }
        else
        {
            this.x = 0;
        }
    },

    // Y-координата
    setY: function(e)
    {
        if (e.pageY)
        {
            this.y = e.pageY;
        }
        else if (e.clientY)
        {
            this.y = e.clientY+(document.documentElement.scrollTop || document.body.scrollTop) - document.documentElement.clientTop;
        }
        else
        {
            this.y = 0;
        }
    }
}


/**//*
document.onmousemove = function(e)
{
    if (!e) e = window.event;
    MouseCoords.setX(e);
    MouseCoords.setY(e);
};

/*
document.onclick = function()
{
    alert(['x: '+MouseCoords.x, 'y: '+MouseCoords.y]);
};
*/
// Title

var timer;
var str_new_message = "";

function pagePrint(){
    pr = '<html><head><link href=\"site/css/main.css\" rel=\"stylesheet\" type=\"text/css\" /></head><body style=\"background:white;;\"><div align=\"right\" style=\"width:776px;\"><div align=\"left\" style=\"padding:15px;font-size:12px;\">';
    pr += document.getElementById('pgp').innerHTML;
    pr += '</div></div></body></html>';
    //pr += '</div></div><div><img src=\"site/img/print/ft.jpg\"></div></body></html>';
    newWin=window.open('','printWindow','width=800,toolbar=0,location=0,directories=0,status=0,menubar=0');
    newWin.document.open();
    newWin.document.write(pr);
    newWin.print();
    newWin.document.close();
}


function title_change(str_new_message){
    var original_title = document.title;
    timer = setInterval(function(){
        title_alert(original_title,str_new_message)
    }, 1000);
}
 
function title_alert(original_title,str_new_message){
    if (document.title == str_new_message){
        document.title = original_title;
    } else {
        document.title = str_new_message;
    }
}
 

// Сериализация
function unserialize ( inp ) {	// Creates a PHP value from a stored representation
    // 
    // +   original by: Arpad Ray (mailto:arpad@php.net)

    error = 0;
    if (inp == "" || inp.length < 2) {
        errormsg = "input is too short";
        return;
    }
    var val, kret, vret, cval;
    var type = inp.charAt(0);
    var cont = inp.substring(2);
    var size = 0, divpos = 0, endcont = 0, rest = "", next = "";

    switch (type) {
        case "N": // null
            if (inp.charAt(1) != ";") {
                errormsg = "missing ; for null";
            }
            // leave val undefined
            rest = cont;
            break;
        case "b": // boolean
            if (!/[01];/.test(cont.substring(0,2))) {
                errormsg = "value not 0 or 1, or missing ; for boolean";
            }
            val = (cont.charAt(0) == "1");
            rest = cont.substring(1);
            break;
        case "s": // string
            val = "";
            divpos = cont.indexOf(":");
            if (divpos == -1) {
                errormsg = "missing : for string";
                break;
            }
            size = parseInt(cont.substring(0, divpos));
            if (size == 0) {
                if (cont.length - divpos < 4) {
                    errormsg = "string is too short";
                    break;
                }
                rest = cont.substring(divpos + 4);
                break;
            }
            if ((cont.length - divpos - size) < 4) {
                errormsg = "string is too short";
                break;
            }
            if (cont.substring(divpos + 2 + size, divpos + 4 + size) != "\";") {
                errormsg = "string is too long, or missing \";";
            }
            val = cont.substring(divpos + 2, divpos + 2 + size);
            rest = cont.substring(divpos + 4 + size);
            break;
        case "i": // integer
        case "d": // float
            var dotfound = 0;
            for (var i = 0; i < cont.length; i++) {
                cval = cont.charAt(i);
                if (isNaN(parseInt(cval)) && !(type == "d" && cval == "." && !dotfound++)) {
                    endcont = i;
                    break;
                }
            }
            if (!endcont || cont.charAt(endcont) != ";") {
                errormsg = "missing or invalid value, or missing ; for int/float";
            }
            val = cont.substring(0, endcont);
            val = (type == "i" ? parseInt(val) : parseFloat(val));
            rest = cont.substring(endcont + 1);
            break;
        case "a": // array
            if (cont.length < 4) {
                errormsg = "array is too short";
                return;
            }
            divpos = cont.indexOf(":", 1);
            if (divpos == -1) {
                errormsg = "missing : for array";
                return;
            }
            size = parseInt(cont.substring(1, divpos - 1));
            cont = cont.substring(divpos + 2);
            val = new Array();
            if (cont.length < 1) {
                errormsg = "array is too short";
                return;
            }
            for (var i = 0; i + 1 < size * 2; i += 2) {
                kret = unserialize(cont, 1);
                if (error || kret[0] == undefined || kret[1] == "") {
                    errormsg = "missing or invalid key, or missing value for array";
                    return;
                }
                vret = unserialize(kret[1], 1);
                if (error) {
                    errormsg = "invalid value for array";
                    return;
                }
                val[kret[0]] = vret[0];
                cont = vret[1];
            }
            if (cont.charAt(0) != "}") {
                errormsg = "missing ending }, or too many values for array";
                return;
            }
            rest = cont.substring(1);
            break;
        case "O": // object
            divpos = cont.indexOf(":");
            if (divpos == -1) {
                errormsg = "missing : for object";
                return;
            }
            size = parseInt(cont.substring(0, divpos));
            var objname = cont.substring(divpos + 2, divpos + 2 + size);
            if (cont.substring(divpos + 2 + size, divpos + 4 + size) != "\":") {
                errormsg = "object name is too long, or missing \":";
                return;
            }
            var objprops = unserialize("a:" + cont.substring(divpos + 4 + size), 1);
            if (error) {
                errormsg = "invalid object properties";
                return;
            }
            rest = objprops[1];
            var objout = "function " + objname + "(){";
            for (key in objprops[0]) {
                objout += "" + key + "=objprops[0]['" + key + "'];";
            }
            objout += "}val=new " + objname + "();";
            eval(objout);
            break;
        default:
            errormsg = "invalid input type";
    }
    return (arguments.length == 1 ? val : [val, rest]);
}
function serialize( mixed_val ) {    // Generates a storable representation of a value
    // 
    // +   original by: Ates Goral (http://magnetiq.com)
    // +   adapted for IE: Ilia Kantor (http://javascript.ru)
 
    switch (typeof(mixed_val)){
        case "number":
            if (isNaN(mixed_val) || !isFinite(mixed_val)){
                return false;
            } else{
                return (Math.floor(mixed_val) == mixed_val ? "i" : "d") + ":" + mixed_val + ";";
            }
        case "string":
            return "s:" + mixed_val.length + ":\"" + mixed_val + "\";";
        case "boolean":
            return "b:" + (mixed_val ? "1" : "0") + ";";
        case "object":
            if (mixed_val == null) {
                return "N;";
            } else if (mixed_val instanceof Array) {
                var idxobj = {
                    idx: -1
                };
                var map = []
                for(var i=0; i<mixed_val.length;i++) {
                    idxobj.idx++;
                    var ser = serialize(mixed_val[i]);
 
                    if (ser) {
                        map.push(serialize(idxobj.idx) + ser)
                    }
                }                                       

                return "a:" + mixed_val.length + ":{" + map.join("") + "}"

            }
            else {
                var class_name = get_class(mixed_val);
 
                if (class_name == undefined){
                    return false;
                }
 
                var props = new Array();
                for (var prop in mixed_val) {
                    var ser = serialize(mixed_val[prop]);
 
                    if (ser) {
                        props.push(serialize(prop) + ser);
                    }
                }
                return "O:" + class_name.length + ":\"" + class_name + "\":" + props.length + ":{" + props.join("") + "}";
            }
        case "undefined":
            return "N;";
    }
 
    return false;
}
// Всплывающая фигнюлечка
function showOverLayer(mode,op,wt,next){
    var url="ax_over.php";
    var cn=document.getElementById("container");
    var mn=document.getElementById('main');
    mn.style.display='block';
    cn.style.opacity=0;
    cn.style.filter='alpha(opacity=0)';
    cn.style.display='block';
    if(next==0){
        mn.style.opacity=0;
        mn.style.filter='alpha(opacity=0)';
    }
    switch(mode){
        default:
            w=0;
            break;
        case 0:
            w=807;
            break;
        case 1:
            w=909;
            break;
        case 2:
            w=696;
            break;
    }
    var c=document.getElementById('overContainer');
    c.style.width=w+"px";
    axLoad(url,"mode="+mode+"&op="+op+"&wt="+wt,"container");
// А высоту рассчитаем после загрузки контента
}
function overClose(){
    var d=document;
    var m=d.getElementById('main');
    var cn=d.getElementById('container');
    setOpacity(m,73,0,150,1);
    setOpacity(cn,100,0,150,1);
    cn.style.display="none";
    m.style.display="none";
    var ind=document.getElementById('innerDiv');
    ind.style.position="relative";
    ind.style.height="";
}
function runOver(){
    
    var d=document;
    var m=d.getElementById('main');
    var cn=d.getElementById('container');
    var c=d.getElementById('overContainer');
    var cs=d.getElementById('overScrollContainer');
    var ind=document.getElementById('innerDiv');

    if(m.style.opacity<=0||m.style.opacity==undefined){
        setOpacity(m,0,73,150,0);
    }
//setTimeout(function() {window.alert(m.style.opacity);},1000);
    var ww=hw("w");
    var wh=m.offsetHeight;
    var ch=c.offsetHeight;
    var cw=c.offsetWidth;

    cn.style.width=ww+'px';
    cn.style.top=m.offsetTop+'px';

    if(ch>(wh-92)){
        ind.style.position="absolute";
        ind.style.height=cn.style.height=(ch+92)+'px';
        cn.style.position='absolute';
        //c.style.marginBottom='46px';
        //c.style.height=(wh-92)+'px';
        //cs.style.height=(wh-92)+'px';
//        if(navigator.userAgent.indexOf("IE 6")!=-1){
//            cn.style.overflow='scroll';
//        }else{
//            cn.style.overflowY='scroll';
//        }
    }else{
        cn.style.height=wh+'px';
    }

    //deltah=Math.ceil((wh-ch)/2);
    //c.style.top=deltah+'px';
    deltaw=Math.ceil((ww-cw)/2);
    c.style.left=deltaw+'px';
    
    setOpacity(cn,0,100,150,0);
    
}
// Корзина
function putImag(val,col,to,p){
    var url="ax_put.php";
    switch(to){
        case "ins":
            axLoad(url,"val="+val+"&col="+col+"&to="+to+"&p="+p,"usrkorzina");
            break;
        case "del":
            axLoad(url,"val="+val+"&col="+col+"&to="+to+"&tg=0"+"&p="+p,"usrkorzina");
            axLoad(url,"val="+val+"&col="+col+"&to="+to+"&tg=1"+"&p="+p,"korzinatable");
            break;
        case "update":
            axLoad(url,"val="+val+"&col="+col+"&to="+to+"&tg=0"+"&p="+p,"usrkorzina");
            axLoad(url,"val="+val+"&col="+col+"&to="+to+"&tg=1"+"&p="+p,"korzinatable");
            break;
    }
}
var showSend=false;
function chkForm(){
    var ses=document.getElementById('sessdata').value;
    var chk=0;
    var formAr=['name','phone'];
    for(i=0;i<formAr.length;i++){
        if(document.getElementById(formAr[i]).value>''){
            chk++;
        }
    }
    if(chk==formAr.length){
        document.getElementById('iSubmit').innerHTML='<input type="hidden" name="'+ses+'" />';
        showSend=true;
    }else{
        document.getElementById('iSubmit').innerHTML='';
        showSend=true;
    }
}
// Открытие/закрытие элементов
function set(setDiv) {
    var setDiv = document.getElementById(setDiv);
    setDiv.style.display = (setDiv.style.display == "block") ? "none" : "block";
}
function seti(setDiv) {
    var setDiv = document.getElementById(setDiv);
    setDiv.style.display = (setDiv.style.display == "none") ? "inline" : "none";
}
function sh(pnDiv) {
    var pn_Div = document.getElementById(pnDiv);
    pn_Div.style.display = "block";

    // Дополнительно управляем положением относительно правого края браузера
    var w=(window.innerWidth)?window.innerWidth:((document.all)?document.body.offsetWidth:null);
    var ww=pn_Div.offsetWidth;
    var wo=pn_Div.offsetLeft;
    var www=getOffset(pn_Div).left;
    if((www+ww)>w){
        pn_Div.style.left=-1*(wo+ww)+"px";
    }
}
function hd(plDiv) {
    var pl_Div = document.getElementById(plDiv);
    pl_Div.style.display = "none";
}
// Положение элемента относительно окна браузера
function getOffset(elem) {
    if (elem.getBoundingClientRect) {
        // "правильный" вариант
        return getOffsetRect(elem)
    } else {
        // пусть работает хоть как-то
        return getOffsetSum(elem)
    }
}

function getOffsetSum(elem) {
    var top=0, left=0
    while(elem) {
        top = top + parseInt(elem.offsetTop)
        left = left + parseInt(elem.offsetLeft)
        elem = elem.offsetParent
    }

    return {
        top: top, 
        left: left
    }
}

function getOffsetRect(elem) {
    // (1)
    var box = elem.getBoundingClientRect()

    // (2)
    var body = document.body
    var docElem = document.documentElement

    // (3)
    var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop
    var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft

    // (4)
    var clientTop = docElem.clientTop || body.clientTop || 0
    var clientLeft = docElem.clientLeft || body.clientLeft || 0

    // (5)
    var top  = box.top +  scrollTop - clientTop
    var left = box.left + scrollLeft - clientLeft

    return {
        top: Math.round(top), 
        left: Math.round(left)
    }
}
// Роботы
function roboCalc(){
    var r1=document.getElementById("robo0").innerHTML;
    var r2=document.getElementById("robo1").innerHTML;
    var res=document.getElementById("roboRes").value;
    document.getElementById("robots56").value=r1;
    document.getElementById("robots21").value=r2;
    document.getElementById("robots1").value=res;
}
function robo(rBase){
    for(j=0;j<100;j++){
        j_1 = (Math.random(rBase) * 10);
        j_2 = Math.ceil((Math.random(rBase) * 10));
        if((j_2/2) == Math.ceil(j_2/2)){
            j_3 = "";
        }else{
            j_3 = "1";
        }
        jj = j_2 + j_1;
        document.getElementById("robots" + j).value = Math.ceil(jj);
    }
    for(i=0;i<2;i++){
        ii = (Math.random(rBase) * 10);
        document.getElementById("robo" + i).innerHTML = Math.ceil(ii);
    }
}
function chkIsNum(tg){
    var tgVal=tg.value;
    var tgLen=tgVal.length-1;
    var tgEnd=tgVal.charAt(tgLen);
    var re=/\d/;
    chkRe=re.test(tgEnd);
    if(chkRe){
        tg.value=tgVal;
    }else{
        tg.value=tgVal.substr(0,tgLen);
    }
}
// AJAX
function axXml(){
    if(window.XMLHttpRequest){
        return new XMLHttpRequest();
    }else if(window.ActiveXObject){
        var msxmls = new Array(
            'Msxml2.XMLHTTP.5.0',
            'Msxml2.XMLHTTP.4.0',
            'Msxml2.XMLHTTP.3.0',
            'Msxml2.XMLHTTP',
            'Microsoft.XMLHTTP'
            );
        for(i=0;i<msxmls.length;i++) {
            try{
                return new ActiveXObject(msxmls[i]);
            }catch(e){
            //
            }
        }
    }else{
        return null;
    }
}
function axLoad(url,vars,rescnt,as){
    var xmlhttp = axXml();
    if(xmlhttp){
        switch(as){
            default:
                async=true;
                break;
            case 1:
                async=false;
                break;
        }
        xmlhttp.open('POST',url,true);
        xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        xmlhttp.send(vars);
        xmlhttp.onreadystatechange = function(){
            if (xmlhttp.readyState == 4) {
                if(xmlhttp.status == 200 && xmlhttp.responseText.length>1) {
                    var v = xmlhttp.responseText;
                    if(rescnt!=0&&document.getElementById(rescnt)){
                        document.getElementById(rescnt).innerHTML=unescape(v);
                        if(url.substring(0,7)=="ax_over"){
                            runOver();
                        }
                    }else{
                        return unescape(v);
                    }
                }
            }
        }
    }
}
