
var isCSS, isW3C, isIE4, isNN4, isNav;
var aBtnNames = new Array("zoomini","zoomin","zoomout","pan","identify","zoomprev","btnOrtofoto","btnPaneles","ayuda");
var aBtnImgNames = new Array("zoomini","zoommas","zoommenos","desplazar","informar","zoomprev","ortofoto","paneles","ayuda");
var aBtnTypes = new Array(0,1,1,1,1,0,2,2,0); //0 command, 1 button, 2 check
var aImg = new Array();
var aImgOver = new Array();
var aImgOn = new Array();
var aImgCursor = new Array();

var aLayerChks = new Array("chkInstituciones", "chkMuseos", "chkEducativos", "chkIglesias",
	"chkCorreos", "chkHospitales", "chkBomberos", "chkPolicia", "chkHoteles", "chkTeatros",
	"chkAutobusTuristico", "chkParadas", "chkAutobus", "chkAparcamientos", "chkCarrilBici", "chkTextos",
	"chkCEAS", "chkPuntosLimpios");
var aCollapsiblePanels = new Array("eventsCtrl_eventsPanel","leyendaCtrl_leyendaPanel", "adfinderCtrl_direccionPanel", "plfinderCtrl_serviciosPanel",
	"zonefinderCtrl_zonasPanel", "infoCtrl_infoPanel");

var objMap;
var mapWindow;
var mapImg;
var zMapAction = 1;
var zMouseButton = 1;
//Position vars
var zX = 0, zY = 0, zX2 = 0, zY2 = 0;
var zImgW = 660, zImgH = 442;
var zImgX, zImgY;
var minxActual, minyActual, maxxActual, maxyActual;
var x, y, fx, fy;
var posx = 0, posy = 0;
var isdrag=false;
var nn6=document.getElementById&&!document.all;
var fromLeft = 15, fromTop = 0;
var scrolled;
var container;
var objCursor;
var objDivEventInfo;
//Offsets
var cursorOffsetLeft = 15, cursorOffsetTop = 0;
var rectOffsetX = 0, rectOffsetY = 0;
var pointOffsetX = 0, pointOffsetY = 0;
var lineOffsetX = 0, lineOffsetY = 0;
var canvas;
var canvasEventos;
var aevts = new Array();
var myRef;


function init() {
    if (document.images) {
		for (var i=0; i < 9; i++) {
			aImg[i] = new Image(30,30);
			aImgOver[i] = new Image(30,30);
			aImgOn[i] = new Image(30,30);
			aImgCursor[i] = new Image(16,16);
			aImg[i].src = "images/" + aBtnImgNames[i] + "_1.gif";
			aImgOver[i].src = "images/" + aBtnImgNames[i] + "_2.gif";
			if (aBtnTypes[i] != 0) aImgOn[i].src = "images/" + aBtnImgNames[i] + "_3.gif";
			else aImgOn[i].src = null;
			if (aBtnTypes[i] == 1) aImgCursor[i].src = "images/" + aBtnImgNames[i] + ".gif";
			else aImgCursor[i].src = null;
		}
        isCSS = (document.body && document.body.style) ? true : false;
        isW3C = (isCSS && document.getElementById) ? true : false;
        isIE4 = (isCSS && document.all) ? true : false;
        isNN4 = (document.layers) ? true : false;
        isIE6CSS = (document.compatMode && document.compatMode.indexOf("CSS1") >= 0) ? true : false;
        isNav = ((parseInt(navigator.appVersion) >= 4) && (navigator.appName == "Netscape"));
        
        mapWindow = getObject("mapWindow");
        mapImg = getObject("mapImg");
        container = getObject("mapContainer");
        objCursor = getObject("divCursor");
        objDivEventInfo = getObject("divEventInfo");
        zImgW = mapImg.width;
        zImgH = mapImg.height;
		minxActual = parseFloat(document.getElementById("mapminx").value);
		minyActual = parseFloat(document.getElementById("mapminy").value);
		maxxActual = parseFloat(document.getElementById("mapmaxx").value);
		maxyActual = parseFloat(document.getElementById("mapmaxy").value);
		//alert(minxActual + " " + minyActual + " " + maxxActual + " " + maxyActual);
		  
		container.onmousedown = startmouse;
		container.onmousemove = movemouse;
		document.onmouseup = stopmouse;
		canvas = new jsGraphics("divCanvas");
		canvas.setColor("black");
		canvas.setStroke(2);
		canvasEventos = new jsGraphics("divEventos");
		canvasEventos.setColor("black");
		canvasEventos.setStroke(2);
		
		scrolled= isNav ? "window.pageYOffset" : "document.body.scrollTop";
		
		zMapAction = parseInt(document.getElementById("mapaction").value);
		if (zMapAction == 0) zMapAction = 1;
		
		var btn = document.getElementById(aBtnNames[zMapAction]);
		if ((btn.src.indexOf('3.gif') == -1) && (aImgOn[zMapAction].src != null)) btn.src = aImgOn[zMapAction].src;
		if (aImgCursor[zMapAction].src != null) document.getElementById("imgcursor").src = aImgCursor[zMapAction].src;
		init_events();
		draw_events();
    }
}

function showhideBanner(show) {
	var l = document.getElementById("onloading");
    l.style.visibility = show ? "visible" : "hidden";
}

function getObject(obj) {
    if (isW3C) {
        theObj = document.getElementById(obj);
    } else if (isIE4) {
        theObj = document.all(obj);
    } else {
		return false;
    }
    return theObj;
}

function button_onmouseover(n) {
	var btn = document.getElementById(aBtnNames[n]);
	if (btn.src.indexOf('3.gif') == -1) if (aImgOver[n]) btn.src = aImgOver[n].src;
}

function button_onmouseout(n) {
	var btn = document.getElementById(aBtnNames[n]);
	if (btn.src.indexOf('3.gif') == -1) if (aImg[n]) btn.src = aImg[n].src;
}

function button_onclick(n) {
	if (n == 8) {
		if (!myRef) {
			myRef = window.open('HelpForm.aspx','mywin',
				'left=20,top=20,width=500,height=500,toolbar=1,resizable=0,scrollbars=1');
		}
		return false;
	}
	if (zMapAction == n) return false;
	if (aBtnTypes[n] != 1) return false;
	oldbutton = document.getElementById(aBtnNames[zMapAction]);
	newbutton = document.getElementById(aBtnNames[n]);
	if (oldbutton) oldbutton.src = aImg[zMapAction].src;
	if (newbutton) newbutton.src = aImgOn[n].src;
	zMapAction = n;
	document.getElementById("imgcursor").src = aImgCursor[n].src;
}

function startmouse(evt) {
	zMouseButton = (evt) ? evt.which : window.event.button;
	if (zMouseButton == 1) {
        isdrag = true;
        tx = parseInt(mapImg.style.left + 0);
        ty = parseInt(mapImg.style.top + 0);
        x = nn6 ? evt.clientX : event.clientX;
        y = nn6 ? evt.clientY : event.clientY;
        zImgX = findPosX(mapImg);
        zImgY = findPosY(mapImg);
        zX = x - zImgX;
        zY = y - zImgY;

        if (zMapAction == 4) {
            canvas.clear();
            canvas.fillEllipse(zX + pointOffsetX, zY + pointOffsetY, 8, 8);
            canvas.paint();
        }
	    //if (nn6) evt.stopPropagation();
        //else event.cancelBubble = true;
	    return false;
	} 
}

function movemouse(evt) {
    var x2 = nn6 ? evt.clientX : event.clientX;
    var y2 = nn6 ? evt.clientY : event.clientY;
    objCursor.style.left = x2 + cursorOffsetLeft;
    objCursor.style.top = y2 + cursorOffsetTop;
    objDivEventInfo.style.left = x2 + cursorOffsetLeft;
    objDivEventInfo.style.top = y2 + cursorOffsetTop;
    if (!isdrag) {
		zImgX = findPosX(mapImg);
		zImgY = findPosY(mapImg);
    }
    zX2 = x2 - zImgX;
    zY2 = y2 - zImgY;
    var isIn = (x2 > (zImgX + 10)) && (x2 < (zImgX + zImgW - 10)) && (y2 > (zImgY + 10)) && (y2 < (zImgY + zImgH - 10));
    //window.status = "zX = " + zX  + " ; zY = " + zY + " ; zX2 = " + zX2 + " ; zY2 = " + zY2 + " ; isIn = " + isIn;
    if (isIn) {
		objCursor.style.visibility = "visible";
		if (aevts.length > 0) {
			var result = find_event(zX2, zY2);
			if (result != "") {
				objDivEventInfo.innerHTML = result;
				objDivEventInfo.style.visibility = "visible";
			} else {
				objDivEventInfo.style.visibility = "hidden";
			}
        }
	} else {
		objCursor.style.visibility = "hidden";
		objDivEventInfo.style.visibility = "hidden";
	}
    if (isdrag) {    
        if (isIn) {
            if ((zMapAction == 1) || (zMapAction == 2)) {
                canvas.clear();
                canvas.drawRect(Math.min(zX, zX2) + rectOffsetX, Math.min(zY, zY2) + rectOffsetY, Math.abs(zX-zX2), Math.abs(zY-zY2));
                canvas.paint();
            } else if (zMapAction == 3) {
				fx = tx + x2 - x;
				fy = ty + y2 - y;
                mapImg.style.left = fx;
                mapImg.style.top = fy;
                document.getElementById("divEventos").style.left = fx;
                document.getElementById("divEventos").style.top = fy - 442;
            }
            //objCursor.style.visibility = "visible";
        } else {
            //objCursor.style.visibility = "hidden";
        }
    }
    //if (nn6) evt.stopPropagation();
    //else event.cancelBubble = true;
    return false;
}

function stopmouse(evt) {
	if (zMouseButton == 1) {
        if (isdrag) {
            sendRequest();
        }
	}
	isdrag=false;
	return false;
}

function sendRequest() {
	document.getElementById("mapaction").value = zMapAction;
	var wreal = maxxActual - minxActual;
	var hreal = maxyActual - minyActual;
	var f = wreal / zImgW;
	var maxxNuevo = maxxActual, maxyNuevo = maxyActual, minxNuevo = minxActual, minyNuevo = minyActual;
	if ((zMapAction == 1) || (zMapAction == 2) || (zMapAction == 3)) {
		if ((zMapAction == 1) || (zMapAction == 2)) {
			var maxxImg = Math.max(zX2, zX);
			var maxyImg = zImgH - Math.min(zY2, zY);
			var minxImg = Math.min(zX2, zX);
			var minyImg = zImgH - Math.max(zY2, zY);
			if (zX2 == 0) var xmedio = zX; else var xmedio = (maxxImg + minxImg) / 2;
			if (zY2 == 0) var ymedio = zImgH - zY; else var ymedio = zImgH - (maxyImg + minyImg) / 2;
			if (zMapAction == 1) {
				if ((((maxxImg - minxImg) < 4) && ((maxyImg - minyImg) < 4)) ||
					((zX2 == 0) && (zY2 == 0))) {
					maxxNuevo = minxActual + (xmedio * f) + (wreal * 4 / 10);
					maxyNuevo = minyActual + (ymedio * f) + (hreal * 4 / 10);
					minxNuevo = minxActual + (xmedio * f) - (wreal * 4 / 10);
					minyNuevo = minyActual + (ymedio * f) - (hreal * 4 / 10);
				} else {
					maxxNuevo = minxActual + (maxxImg * f);
					maxyNuevo = minyActual + (maxyImg * f);
					minxNuevo = minxActual + (minxImg * f);
					minyNuevo = minyActual + (minyImg * f);
				}
			} else if (zMapAction == 2) {
				if ((((maxxImg - minxImg) < 4) && ((maxyImg - minyImg) < 4)) ||
					((zX2 == 0) && (zY2 == 0))) {
					maxxNuevo = minxActual + (xmedio * f) + (wreal * 6 / 10);
					maxyNuevo = minyActual + (ymedio * f) + (hreal * 6 / 10);
					minxNuevo = minxActual + (xmedio * f) - (wreal * 6 / 10);
					minyNuevo = minyActual + (ymedio * f) - (hreal * 6 / 10);
				} else {
					var factor1 = wimg / (maxxImg - minxImg);
					var factor2 = himg / (maxyImg - minyImg);
					var factor = Math.min(factor1, factor2);
					maxxNuevo = minxActual + (xmedio * f) + (wreal * factor);
					maxyNuevo = minyActual + (ymedio * f) + (hreal * factor);
					minxNuevo = minxActual + (xmedio * f) - (wreal * factor);
					minyNuevo = minyActual + (ymedio * f) - (hreal * factor);
				}
			}
		} else if (zMapAction == 3) {
			if ((zX2 != 0) && (zY2 != 0)) {
				var dxImg = zX - zX2;
				var dyImg = zY - zY2;
				maxxNuevo = maxxActual + (dxImg * f);
				maxyNuevo = maxyActual - (dyImg * f);
				minxNuevo = minxActual + (dxImg * f);
				minyNuevo = minyActual - (dyImg * f);
			}
		}
	} else if (zMapAction == 4) {
		minxNuevo = minxActual + (zX * f);
		minyNuevo = minyActual + ((zImgH - zY) * hreal / zImgH);
		maxxNuevo = 0;
		maxyNuevo = 0;
	}
	
    document.getElementById("mapimgx").value = minxNuevo;
    document.getElementById("mapimgy").value = minyNuevo;
    document.getElementById("mapimgx2").value = maxxNuevo;
    document.getElementById("mapimgy2").value = maxyNuevo;
    document.getElementById("istool").value = 1;
    
   // alert("mapaction " + zMapAction + " mapimgx " + zX + " mapimgy " + zY + " mapimgx2 " + zX2 + " mapimgy2 " + zY2 + " istool " + 1);
	var theform;
	/*if (window.navigator.appName.toLowerCase().indexOf("netscape") > -1) {
		theform = document.forms["mapForm2"];
	} else {
		theform = document.mapForm2;
	}*/
	if (window.navigator.appName.toLowerCase().indexOf("microsoft") > -1) {
		theform = document.mapForm2;
	} else {
		theform = document.forms["mapForm2"];
	}
	//theform.__EVENTTARGET.value = "";
	//theform.__EVENTARGUMENT.value = "";
	//__doPostBack('','');
	theform.submit();
}

function init_events() {
	if (document.getElementById("events").value == "") return;
	var adata = document.getElementById("events").value.split("#");
	var descripcion, xevt, yevt, capa, icono, pt, evt;
	for (var i = 0; i < (adata.length/5); i++) {
		descripcion = adata[5*i];
		xevt = parseFloat(adata[5*i + 1]);
		yevt = parseFloat(adata[5*i + 2]);
		capa = adata[5*i + 3];
		icono = adata[5*i + 4];
		evt = new evento(descripcion, xevt, yevt, capa, icono);
		pt = convert_to_imgpixel(xevt, yevt);
		evt.ImagePixelX = pt[0];
		evt.ImagePixelY = pt[1];
		aevts.push(evt);
	}
}

function draw_events() {
	canvasEventos.clear();
	for (var i = 0; i < aevts.length; i++) {
		//alert(pt[0] + " " + pt[1]);
		if (document.getElementById("chk" + aevts[i].Capa)) {
			if (document.getElementById("chk" + aevts[i].Capa).checked)  {
				canvasEventos.drawImage(aevts[i].Icono, aevts[i].ImagePixelX - 11, aevts[i].ImagePixelY - 11, 22, 22);
			}
		} else {
			canvasEventos.drawImage(aevts[i].Icono, aevts[i].ImagePixelX - 11, aevts[i].ImagePixelY - 11, 22, 22);
		}
	}
	canvasEventos.paint();
}

function find_event(x, y) {
	var result = "";
	var minx, miny, maxx, maxy;
	for (var i = 0; i < aevts.length; i++) {
		minx = aevts[i].ImagePixelX - 11;
		miny = aevts[i].ImagePixelY - 11;
		maxx = aevts[i].ImagePixelX + 11;
		maxy = aevts[i].ImagePixelY + 11;
		if ((x > minx) && (x < maxx) && (y > miny) && (y < maxy)) {
			result = aevts[i].Descripcion;
		}
	}
	return result;
}

function evento(descripcion, x, y, capa, icono) {
	this.Descripcion = descripcion;
	this.X = x;
	this.Y = y;
	this.Capa = capa;
	this.Icono = icono;
	this.ImagePixelX = 0;
	this.ImagePixelY = 0;
}

function convert_to_imgpixel(x, y) {
	var xreal = Math.round((x - minxActual) * zImgW / (maxxActual - minxActual));
	var yreal = Math.round(zImgH - (zImgH * (y - minyActual) / (maxyActual - minyActual)));
	return new Array(xreal, yreal);
}

function window_show(foto) {
	document.getElementById("imgFoto").src = foto;
	document.getElementById("divFoto").style.visibility = "visible";
	document.getElementById("divWindow").style.top = findPosY(mapWindow) - 50;
	document.getElementById("divWindow").style.left = findPosX(mapWindow) + 50;
	document.getElementById("divWindow").style.visibility = "visible";
}

function window_hide() {
	document.getElementById("divFoto").style.visibility = "hidden";
	document.getElementById("divWindow").style.visibility = "hidden";
}

function ExpandCollapse2(container, collapse, expand) {
	var fld;
	for (n = 0; n < aCollapsiblePanels.length; n++) {
		fld = document.getElementById(aCollapsiblePanels[n] + '_state');
		if (container == aCollapsiblePanels[n]) {
			ExpandCollapse(aCollapsiblePanels[n], collapse, expand);
		} else {
			if (fld.value == "block") ExpandCollapse(aCollapsiblePanels[n], collapse, expand);
		}
	}
}

function ExpandCollapse(container, collapse, expand) {
	var obj = document.getElementById(container + '_content');
	var fld = document.getElementById(container + '_state');
	var img = document.getElementById(container + '_button');
	if (obj != null) {
		obj.style.display = (obj.style.display == "block") ? "none" : "block";
		fld.value = obj.style.display;
		img.src = (fld.value == "block")  ? collapse : expand;
	}
}

function findPosX(obj) {
	var curleft = 0;
	if (obj.offsetParent) {
		while (obj.offsetParent) {
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	} else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj) {
	var curtop = 0;
	if (obj.offsetParent) {
		while (obj.offsetParent) {
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	} else if (obj.y)
		curtop += obj.y;
	return curtop;
}


