var searchobj_id;
var searchobj_str;
var mX=0;
var mY=0;
var counter=0;
var oldX=0;
var oldY=0;
var eps=0.1;
var url="gis-getinfo?rnd=";
var urlreyt="gis-getdata?rnd=";
var getcenter="gis-getcenter?rnd=";
var urlsearch="gis-searchid?rnd=";
var getobj="gis-getobj";

function get_geo(alias){ 
    
    if(!(navigator.appName.indexOf("Opera")!=-1)&&!(navigator.appName.indexOf("Netscape")!=-1)) {
        formMask();
    }
    
    if(timerID) {
         clearTimeout(timerID);
         timerC=60;
    }
    
    document.getElementById("divtablemap").style.display="none";
    getaddata(alias);

    var deltaY1=def_absolute_height/(2*scale);
    var deltaX1=def_absolute_width/(2*scale);

    searchobj_id='';
    searchobj_str='';
    toggleSuggestions(500,400,"Загрузка <br/> изображения","on");
    //var minimap=document.getElementById("minimap");
    geo_get_map=document.getElementById('get_geo_map');
    window.status='Loading...';
    var layers=getLayers();
    var rnd=Math.random();
    var src= path+"gis-get?centerx="+centerX+"&centery="+centerY+"&scale="+scale+"&frameWidth="+frameWidth+"&frameHeight="+parseInt(frameHeight)+"&rnd="+rnd;
    if(layers.length!=0) {
        geo_get_map.src=src+"&layers="+layers;
    } else {
        geo_get_map.src=src+"&layers=0";
    }

    geo_get_map.onload=function(){
    
        if(timerID) {
            clearTimeout(timerID);
            timerC=60;
        }
        
        toggleSuggestions(500,400,"","off");

        window.status='Готово';
        
        /*Wobz=(2*dojo._getContentBox(minimap).w*deltaX1)/def_absolute_width;
        Hobz=(2*dojo._getContentBox(minimap).h*deltaY1)/def_absolute_height;

        document.getElementById("viewer").style.width=Wobz+"px";
        document.getElementById("viewer").style.height=Hobz+"px";

        if(scale==1){
            document.getElementById("viewer").style.display="none";
            document.getElementById("viewer").style.left=dojo.coords(minimap,true).x+"px";
            document.getElementById("viewer").style.top= dojo.coords(minimap,true).y+"px";
        
        } else {
            document.getElementById("viewer").style.display="block";
            document.getElementById("viewer").style.left=minicenterX-(1/2)*Wobz+dojo.coords(minimap,true).x+"px";
            document.getElementById("viewer").style.top= dojo.coords(minimap,true).y+dojo._getContentBox(minimap).h-minicenterY-(Hobz/2)+"px";
        }*/
    }

    hideAllcomment();
    switchcomment();
}
var timerC=60;
var timerID;
function timerS(){
    timerC--;
    toggleSuggestions(500,400,"Подождите... <br/>"+new String(timerC)+" секунд","on");
    timerID = setTimeout("timerS()",1000);
    if (timerC==0) {
        if(timerID) {
            clearTimeout(timerID);
        }
        timerC=60;
        get_geo();
    }    
}
function refresh(){
    toggleSuggestions(500,400,"off");
    timerS();
    toggleSuggestions(500,400,"","off");
}
function getLayers(){
    var l=document.getElementById('geo_layers');
    var checkboxes=l.getElementsByTagName('input');
    var l_sel=[];

    var y=0;
    for(var i=0; i<checkboxes.length; i++) {
        if(checkboxes[i].checked) {
            l_sel[y]=checkboxes[i].id.substring(11,checkboxes[i].id.length)+"=1";
        } else {
            l_sel[y]=checkboxes[i].id.substring(11,checkboxes[i].id.length)+"=0";
        }
        y++;
    }
    return  l_sel;
}

/*function get_minicenter() {
    var minimap=document.getElementById("minimap");
    minicenterX=dojo._getContentBox(minimap).w/2;
    minicenterY=dojo._getContentBox(minimap).h/2;
}
function setminisenter() {
    var minimap=document.getElementById("minimap");
    minicenterX=(dojo._getContentBox(minimap).w*(centerX-dX))/def_absolute_width;
    minicenterY=(dojo._getContentBox(minimap).h*(centerY-dY))/def_absolute_height;
}*/

function normolizeX(x) {
    if (x > 0&&x <  frameWidth) return x;
    else if (x > frameWidth) return frameWidth;
          else return 0;
}
function normolizeY(y) {
    if (y > 0&&y <  frameHeight) return y;
    else if (y > frameHeight) return frameHeight;
          else return 0;
}
function transformPoints(spisok) {
    var str="";
    var s=(def_absolute_height/scale)/frameHeight;
    var xyarray=spisok.split(",");
    var tmp="";
    for (var i=0; i<xyarray.length/2;i++) {
        var x=xyarray[2*i];
        var y=xyarray[2*i+1];
        x=(x-centerX)/s+frameWidth/2;
        y=frameHeight/2-(y-centerY)/s;
        if (str=="") {
            str=normolizeX(x)+","+normolizeY(y);
            tmp=str;
        }
        else str+=","+normolizeX(x)+","+normolizeY(y);
    }
    str+=","+tmp;
    return str;
}
function formMask() {
    var rusmap=document.getElementById("rusmap");
    while (rusmap.hasChildNodes()) rusmap.removeChild(rusmap.lastChild);
    var area= new Array();
    for (var i=1; i<crd.length; i++) {
        var coor=transformPoints(crd[i]);
        area[i]=document.createElement('area');
        area[i].setAttribute("shape","poly");
        area[i].setAttribute("coords",coor);
        area[i].setAttribute("alt",nms[i]);
        area[i].title=nms[i];
        area[i].onclick=function(e){get_info(e)}
        rusmap.appendChild(area[i]);
    }
}

function getmousecoord(e) {
    mX=e.pageX;
    mY=e.pageY;
    close_txt_hint();
}

function gethint() {
    if ((oldX==mX)&&(oldY==mY)) counter++;
    else {
        oldX=mX;
        oldY=mY;
    }
    if (counter<=5) {
        return;
    }
    var Px=mX-dojo.coords(document.getElementById("get_geo_map"),true).x+document.documentElement.scrollLeft;
    var Py=mY-dojo.coords(document.getElementById("get_geo_map"),true).y+document.documentElement.scrollTop;
    for (var i=1; i<crd.length; i++) {
        var coor=transformPoints(crd[i]);
        var xyarray=coor.split(",");
        var x1=Math.round(xyarray[0]);
        var y1=Math.round(xyarray[1]);
        var x2;
        var y2;
        var counter=0;

        for (var j=1; j<xyarray.length/2;j++) {
            x2=Math.round(xyarray[2*j]);
            y2=Math.round(xyarray[2*j+1]);
            if (x2==x1&&y2==y1) continue;
            if ((Py>= y1&&Py<y2)||(Py>= y2&&Py<y1)) { 
                if (x2!=x1) {
                    var k=(y2-y1)/(x2-x1);
                    if ((k>0)&&((y1-Py)>k*(x1-Px))) counter++;
                    else if ((k<0)&&((y1-Py)<k*(x1-Px))) counter++;
                } else {
                    if (Px >= x1) counter++;
                }
            }
            x1=x2;
            y1=y2;
        }
        if ((counter % 2)==1) {
            counter=0;
            return show_txt_hint(oldX,oldY,nms[i]);
        }
    }
    counter=0;
    return;
}

function get_geo_act(act){ 
    if(!(navigator.userAgent.indexOf ("MSIE 5")!=-1)){
    
    var deltaY1=def_absolute_height/(2*scale);
    var deltaX1=def_absolute_width/(2*scale);

    if(act=="move_up"){ 
        if(scale==1){
            return true;
        } else {
            if(centerY+deltaY1 <= top-deltaY1){
                centerY=centerY+deltaY1;
            }else{
                centerY=top-deltaY1;
            }    
        }
    }
    if(act=="move_down"){
        if(scale==1){
            return true;
        } else {
            if(centerY-deltaY1 >= bot+deltaY1){
                centerY=centerY-deltaY1;
            }else{
                centerY=bot+deltaY1;
            }
        }
    } 
    if(act=="move_left"){
        if(scale==1){
            return true;
        } else {
            if(centerX-deltaX1 >= left+deltaX1){
                centerX=centerX-deltaX1;
            }else{
                centerX=left+deltaX1;
            }
        }
    }
    if(act=="move_right"){
        if(scale==1){
            return true;
        } else {
            if(centerX+deltaX1 <= right-deltaX1){
                centerX=centerX+deltaX1;
            }else{
                centerX=right-deltaX1;
            }
        }
    }
    if(act=='scale') {
        scale=document.getElementById('verticalSliderValue').value;
        var deltaY1=def_absolute_height/(2*scale);
        var deltaX1=def_absolute_width/(2*scale);
        if (scale==1) {
            centerX=x;
            centerY=y; 
        } else {
            if(centerX-deltaX1<left){
                centerX=left+deltaX1;
            }    
            if((centerX+deltaX1)>right){
                centerX=right-deltaX1;
            }
            if(centerY-deltaY1<bot){
                centerY=bot+deltaY1;
            }
            if((centerY+deltaY1)>top){
                centerY=top-deltaY1;
            }
        }
    }
    //setminisenter();
    get_geo();
    } else { document.getElementById("debug").innerHTML= "Версия вашего браузера не поддерживается";}
}

function move_to(el,e){ 
    var deltaY1=def_absolute_height/(2*scale);
    var deltaX1=def_absolute_width/(2*scale);

    var leftM=(deltaX1*dojo._getContentBox(el).w)/def_absolute_width;
    var rightM=dojo._getContentBox(el).w-(deltaX1*dojo._getContentBox(el).w)/def_absolute_width; 
    var topM=dojo._getContentBox(el).h-(deltaY1*dojo._getContentBox(el).h)/def_absolute_height; 
    var botM=(deltaY1*dojo._getContentBox(el).h)/def_absolute_height;

    if(scale==1) {return false;}
    else {
        var x; var y;
        if (isIE) {
            x=document.body.scrollLeft+event.clientX;
            y=document.body.scrollTop+event.clientY;
        } else {
            x=e.pageX;
            y=e.pageY;
        }
        var delta_x_c=x-dojo.coords(el,true).x-minicenterX;
        var delta_y_c=dojo.coords(el,true).y+dojo._getContentBox(el).h-y -minicenterY;
        var delta_x_0=(def_absolute_width * delta_x_c)/dojo._getContentBox(el).w;
        var delta_y_0=(def_absolute_height * delta_y_c)/dojo._getContentBox(el).h;

        if(delta_x_c>0){
            if((centerX+delta_x_0) <= right-deltaX1){
                centerX+=delta_x_0;
                minicenterX=x-dojo.coords(el,true).x;
            //    minicenterY=dojo.coords(el,true).y+dojo._getContentBox(el).h-mouse.y;
            }else{
                centerX=right-deltaX1;
                minicenterX=rightM;
            }
        }
        if(delta_x_c<0){
            if((centerX+delta_x_0) >= left+deltaX1){
                centerX+=delta_x_0;
                minicenterX=x-dojo.coords(el,true).x;
            //    minicenterY=dojo.coords(el,true).y+dojo._getContentBox(el).h-mouse.y;
            }    
            else{
                centerX=left+deltaX1;
                minicenterX=leftM;
            }
        }
        if(delta_y_c>0){
            if(centerY+delta_y_0 <= top-deltaY1){
                centerY+=delta_y_0;
            //    minicenterX=mouse.x-dojo.coords(el,true).x;
                minicenterY=dojo.coords(el,true).y+dojo._getContentBox(el).h-y;
            }else{
                centerY=top-deltaY1;
                minicenterY=topM;
            }
        }
        if(delta_y_c<0){
            if(centerY+delta_y_0 >= bot+deltaY1){
                centerY+=delta_y_0;
            //    minicenterX=mouse.x-dojo.coords(el,true).x;
                minicenterY=dojo.coords(el,true).y+dojo._getContentBox(el).h-y;
            }else{
                centerY=bot+deltaY1;
                minicenterY=botM;
            }
        }
        formMask();
        get_geo();
    }
}

function get_info(e){
    var x;
    var y;
    if (isIE) {
        x=document.body.scrollLeft+event.clientX
        y=document.body.scrollTop+event.clientY
    } else {
        x=e.pageX;
        y=e.pageY;
    }
    
    var Px=x-dojo.coords(document.getElementById("get_geo_map"),true).x;
    var Py=y-dojo.coords(document.getElementById("get_geo_map"),true).y;

    var layers=getLayers();
    if(layers.length==0){
        layers=0;
    }
    var rnd=Math.random();
    
    var newurl=path+url+rnd+"&centerX="+centerX+"&centerY="+centerY +
         "&scale="+scale+"&frameWidth="+frameWidth+"&frameHeight="+parseInt(frameHeight)+"&layers="+layers+"&Px="+Px+"&Py="+Py+
         "&height="+220+"&width="+220+"&cenx=1.3&ceny=1.0"+"&offx=0&offy=-1"+"&mscale=1.05"+"&textsize=9";
    
    var s=new String(layers);

    if (s.indexOf("nsot=1")!=-1||s.indexOf("pok_1_2=1")!=-1||s.indexOf("fedou=1")!=-1) {
        close_hint();
        toggleSuggestions(x,y,"Подождите... ;)","on");
        
        dojo.xhrGet({
            url: newurl,
            encoding: "utf-8",
            handleAs: "text",
            content: {},
            load: function(response,ioArgs){
                 toggleSuggestions(x,y,"","off");
                 if (new String(layers).indexOf("nsot=1")!=-1)
                    show_hint(x,y,response,600);
                 if (new String(layers).indexOf("pok_1_2=1")!=-1)
                    show_hint(x,y,response,250);
                 if (new String(layers).indexOf("fedou=1")!=-1)
                    show_hint(x,y,response,600);
                 if (new String(layers).indexOf("speed=1")!=-1)
                    show_hint(x,y,response,600);
                 executeScript(response);
            }
        })
    } else {
        var x11=(screen.width/2)-(1000/2); var y11=(screen.height/2)-(600/2);
        var options="height="+600+",width="+1000+",left="+x11+",top="+y11+",scrollbars="+"yes"+",resizable=yes"; 
        pup=window.open(newurl,"",options);
        pup.focus();
    }
}

function changeForm(v){
    var notaddress=document.getElementById("notaddress");
    var address=document.getElementById("address");
    if(v==1||v==0){
        address.style.display="block";
        notaddress.style.display="none";
    }else{
        address.style.display="none";
        notaddress.style.display="block";
    }
}

function getaddata(alias){
    if (alias!=null) {
        var rnd=Math.random();
        dojo.xhrGet({
            url: path+urlreyt+rnd +"&alias="+alias,
            encoding: "utf-8",
            handleAs: "text",
            content: {},
            load: function(response,ioArgs){
                parserSpisok(response);
            }
        })
    }
}
function parserSpisok(data) {
    if (data) {
        document.getElementById("reyting").innerHTML=data;
        document.getElementById("reyting").style.display="block";
        document.getElementById("divtablemap").style.display="block";
    } else 
        document.getElementById("divtablemap").style.display="none";
}

function correctcenter(cx,cy){
        if((cx < left+deltaXcur[scale])&&(cx < def_center_x)){
            centerX=left+deltaXcur[scale];
        }
        if((cx > right-deltaXcur[scale])&&(cx > def_center_x)){
            centerX=right-deltaXcur[scale];
        }
        if((cy > top-deltaYcur[scale])&&(cy > def_center_y)){
            centerY=top-deltaYcur[scale];
        }
        if((cy < bot+deltaYcur[scale])&&(cy < def_center_y)){
            centerY=bot+deltaYcur[scale];
        }
}

function toggleSuggestions(x,y,data,key){
   //var x=x;
   //var y=y;
   var suggestion=document.getElementById("dojoDebugOutput");
   //var display=suggestion.getAttribute('displayed');
   if(key=='off'){       
     document.getElementById("dojoDebugOutput").style.display="none";
     //display="off";
   } 
   if(key=='on'){
     document.getElementById("dojoDebugOutput").innerHTML=data;
     document.getElementById("dojoDebugOutput").style.display="block";
     //display='on';
   }
   //suggestion.setAttribute('displayed',display);
}

function getElementPosition(offsetTrail) {
    var offsetLeft=0;
    var offsetTop=0;
    while(offsetTrail) {
        offsetLeft+=offsetTrail.offsetLeft;
        offsetTop+=offsetTrail.offsetTop;
        offsetTrail=offsetTrail.offsetParent;
    }
    return { left:offsetLeft,top:offsetTop }
}


function show_help(event,id) {
    var evt=event||window.event;
    var o=evt.target||evt.srcElement;
    var coords=getElementPosition(o);
    var div=document.getElementById('help');
    div.innerHTML="<div style='float:right; position:absolute; right:0; top:0'><img src='/images/site/gis/exit.gif' onclick='close_help()' alt='Закрыть'/></div>"+document.getElementById(id).innerHTML;
    div.style.top=(coords.top+o.offsetHeight+5)+'px';
    div.style.left=(coords.left-10)+'px';
    div.style.display='block';
    evt.cancelBubble=true;
    return false;
}

function show_txt_help(event,str) {
    var evt=event||window.event;
    var o=evt.target||evt.srcElement;
    var div=document.getElementById('info');
    var coords=getElementPosition(o);
    document.getElementById("info").innerHTML="<div style='float:right; position:absolute; right:0; top:0'><img src='/images/site/gis/info_exit.gif' onclick='close_txt_help()' alt='Закрыть'/></div>"+str;
    div.style.top=(coords.top+o.offsetHeight+5)+'px';
    div.style.left=(coords.left-10)+'px';
    div.style.display='block';
    evt.cancelBubble=true;
    return false;
}
function show_txt_hint(x,y,str) {
    var div=document.getElementById('imghint');
    document.getElementById("imghint").innerHTML="  "+str;
    div.style.top=(y+16)+'px';
    div.style.left=(x+16)+'px';
    div.style.display='block';
    return false;
}

function show_hint(x,y,str,width) {
    var div=document.getElementById('hint');
    div.innerHTML="<div style='float:right; position:absolute; right:0; top:0'><img src='/images/site/gis/info_exit.gif' onclick='close_hint()' alt='Закрыть'/></div>"+str;
    div.style.width=width+"px";
    div.style.top=(y+16)+'px';
    div.style.left=(x+16)+'px';
    div.style.display='block';
    return false;
}

function close_hint() {
    document.getElementById("hint").style.display="none";
    document.getElementById("hint").innerHTML="";
    return false;
}

function close_txt_hint() { 
    document.getElementById("imghint").style.display="none";
    document.getElementById("imghint").innerHTML="";
    return false;
}
function close_txt_help() {
    document.getElementById("info").style.display="none";
    document.getElementById("info").innerHTML="";
    return false;
}

function close_help() {
    document.getElementById("help").style.display="none";
    document.getElementById("help").innerHTML="";
    return false;
}

function svodTable() {
    document.location.href="gis-table";
}

function inforegion(f) {
    if(f.listregions.value!=0){
        document.location.href="gis-info?name="+f.listregions.value;
    }
}

function newEx() {
    document.location.href="gisadmin-addexpert";
}   

function editEx(f,id) {
    f.action="gisadmin-expertedit?state=1&obj="+ id;
    f.submit();
}

function hideAllcomment() {
    var l=document.getElementById('geo_layers');
    var lays= l.getElementsByTagName('input');
    for(var i=0; i<lays.length; i++) {
        var idel=lays[i].id.substring(11,lays[i].id.length);
        if (idel)
        if (document.getElementById("comment_"+idel)) {
                document.getElementById("comment_"+idel).style.display='none';
        }
    }
}

function switchcomment() {
    var radios=document.getElementsByName('layersradio');
    for (var k=0; k<radios.length; k++) {
        if (radios[k].checked) {
            var idcom=radios[k].id.substring(11,radios[k].id.length);
            if (document.getElementById("comment_"+idcom)) {
                    document.getElementById("comment_"+idcom).style.display='block';
            }
        }
    }
}

executeScript=function (content) {
     var src=new RegExp('<script.*?src=".*?"');
     var repl=new RegExp('<script.*?src="');
     var matches=src.exec(content);
     var semaphore=0;

     if (matches!=null) {
         for (i=0; i < matches.length; i++) {
     
             var scriptSrc=matches[i].replace(repl,'');
             scriptSrc=scriptSrc.substring(0,scriptSrc.length-1);

             dojo.xhrGet({
                 url:      scriptSrc,
                 load:     function(type,evaldObj) {},
                 error:    function(type,error) {alert(type); alert(error);
                            },
                 handleAs: "text",
                 sync:     true
             });
         }
     }

     repl=new RegExp('<script.*?src=".*?".*?</script>');
     content=content.replace(repl,'');

     repl=new RegExp('//.*?$','gm');
     content=content.replace(repl,'\n');

     repl=new RegExp('[\n\r]','g');
     content=content.replace(repl,' ');

     src=new RegExp('<script.*?</script>','g');
     matches=content.match(src);

     if (matches!=null) {
         for (i=0; i < matches.length; i++) {
             var repl=new RegExp('<script.*?>','gm');
             var script=matches[i].replace(repl,'');

             repl=new RegExp('</script>','gm');
             script=script.replace(repl,'');                          
             script=new Function(script);
             script();
         }
     }
 }
 