/** netymap **/

Netymap.imgElement = null;
Netymap.polygons = new Array();
Netymap.currentPoly = null;
Netymap.txtDisplay = null;
Netymap.mapHandleToPoly = new Array();
Netymap.clickHandler = null;

Netymap.overlayOff = function(poly) {
    var elImg = document.getElementById( "ol_" + poly.handle );
    if( !elImg ) return;

    elImg.style.display = "none";
    elImg.style.left = "-1px";
    elImg.style.top = "-1px";
}

Netymap.overlayOn = function(poly) {
    var elImg = document.getElementById( "ol_" + poly.handle );
    if( !elImg ) return;

    var pos = getPageCoords( Netymap.imgElement );

    elImg.style.left = pos.x + "px";
    elImg.style.top = pos.y + "px";
    elImg.style.display = "block";
    elImg.style.zIndex = 101;

}

Netymap.overlayByHandle = function(handle)
{
    if( handle ) {
		if( Netymap.currentPoly != null ) Netymap.overlayOff( Netymap.currentPoly );
			Netymap.currentPoly = Netymap.mapHandleToPoly[ handle ];
		
		Netymap.overlayOn( Netymap.currentPoly );
	} else {
		Netymap.overlayOff( Netymap.currentPoly );
		Netymap.currentPoly = null;
	}

    Netymap.updateText();
}

Netymap.onClick = function()
{
	if( !Netymap.currentPoly ) return;
	if( !Netymap.clickHandler ) return;
	
	Netymap.clickHandler( Netymap.currentPoly.handle );
}

Netymap.updateText = function()
{
    if( !Netymap.txtDisplay ) return;
    
    if( !Netymap.currentPoly ) {
	Netymap.txtDisplay.innerHTML = "&nbsp;";
	var btns = document.getElementsByTagName( "SPAN" );

	for( var j = 0; j < btns.length; j ++ ) {
	    if( btns[j].getAttribute( "popped" ) == "true" ) {
		btns[j].setAttribute( "popped", "false" );
		if( btns[j].className )
		    btns[j].className = "sbx";
		else
		    btns[j].setAttribute( "class", "sbx" );
	    }
	}

	return;
    }

    var txtSource = document.getElementById( "in_" + Netymap.currentPoly.handle );
    if( !txtSource ) return;

    Netymap.txtDisplay.innerHTML = txtSource.innerHTML;

    var elIdx = document.getElementById( "btn_" + Netymap.currentPoly.handle );

    if( !elIdx ) return;

    elIdx.setAttribute( "popped", "true" );
    if( elIdx.className )
	elIdx.className = "sbxo";
    else
	elIdx.setAttribute( "class", "sbxo" );
}

Netymap.prototype.watchMice = function(evt) {
    var x, y;

    if( window.event ) {
	x = window.event.offsetX;
	y = window.event.offsetY;
    } else {
	x = evt.pageX - Netymap.imgElement.offsetLeft;
	y = evt.pageY - Netymap.imgElement.offsetTop;
    }

    var pt = { x: x, y: y };

    for( j = 0; j < Netymap.polygons.length; j ++ ) {
	if( Netymap.polygons[j].isPtInPolygon( pt ) ) {
	    if( Netymap.currentPoly != Netymap.polygons[j] ) {
		if( Netymap.currentPoly != null ) Netymap.overlayOff( Netymap.currentPoly );
		Netymap.currentPoly = Netymap.polygons[j];
		Netymap.overlayOn( Netymap.currentPoly );
		Netymap.updateText();
	    }

	    return;
	}
    }

    if( Netymap.currentPoly != null ) Netymap.overlayOff( Netymap.currentPoly );
    Netymap.currentPoly = null;
    Netymap.updateText();
}

Netymap.prototype.addArea = function(points, areaName)
{
    if( !points.length ) return;

    var polygon = new Polygon();

    for( var j = 0; j < points.length; j ++ ) {
		polygon.addPoint( points[j].x, points[j].y );
    }

    polygon.setHandle( areaName );
    Netymap.polygons[ Netymap.polygons.length ] = polygon;
    Netymap.mapHandleToPoly[ polygon.handle ] = polygon;
}

Netymap.prototype.start = function()
{
    for( var j = 0; j < Netymap.polygons.length; j ++ ) {
		var elImg = document.getElementById( "ol_" + Netymap.polygons[j].handle );
		if( !elImg ) continue;
		setEventHandler( elImg, "mousemove", this.watchMice );
		setEventHandler( elImg, "click", Netymap.onClick );
    }
}

function Netymap(imgElement)
{
    Netymap.imgElement = imgElement;
    setEventHandler( Netymap.imgElement, "mousemove", this.watchMice );
	setEventHandler( Netymap.imgElement, "click", Netymap.onClick );
}

