var DHTML;

var bBox;
var bBoxVisible=false;

var mouseDrag=false;
var mouseDown=false;

var mDownPos;
var mapPos;

var element=null;
var elementVisible=false;
var isOver=false;

function initDHTML()
{
	DHTML = (document.getElementById || document.all || document.layers);

	if ( DHTML ) {
		bBox=getElementStyle('bBox');
	}
}

function point( xPos, yPos )
{
	this.x=xPos;
	this.y=yPos;
}

function getElement(id) 
{
	var elem;

	if ( document.getElementById ) { elem=document.getElementById(id); }
	else if ( document.all ) { elem=document.all(id); }
	else if ( document.layers ) {	elem=document.layers[id]; }

	return elem;
}

function getElementStyle(id) 
{
	var style;

	if ( document.getElementById ) { style=document.getElementById(id).style; }
	else if ( document.all ) { style=document.all(id).style; }
	else if ( document.layers ) { style=document.layers[id]; }

	return style;
}

function showElement(id,e)
{
    if( mouseDrag ) return;

	hideElement(false);

    element = getElementStyle(id);

	if ( element ) {
        var eventPos=getEventLocation(e);
		element.left=eventPos.x + 10;
		element.top=eventPos.y + 10;
		element.visibility='visible';
		elementVisible=true;
	}

	mouseIsOver();
}

function hideElement(delay)
{
    if(delay) {
        isOver=false;
        setTimeout("hideElement(false)", 450);
    }
    else if(elementVisible && !delay && !isOver) {
        element.visibility='hidden';
        elementVisible=false;
        element=null;
    }
}

function getElementLocation(elem)
{
	var x = 0;
	var y = 0;

	if (elem.offsetParent) {
		while (elem.offsetParent) {
			x += elem.offsetLeft
			y += elem.offsetTop
			elem = elem.offsetParent;
		}
	}
	else if (elem.x) {
		x += elem.x;
		y += elem.y;
	}

	return new point( x, y );
}

function getEventLocation(e)
{
	var x=0;
	var y=0;

	if (!e) e=window.event;

	if (e.pageX) {
		x=e.pageX;
		y=e.pageY;
	}
	else if (e.clientX) {
		x=e.clientX + document.body.scrollLeft;
		y=e.clientY + document.body.scrollTop;
	}

	return new point( x, y );
}

function mouseIsOver()
{
    isOver = true;
}


function startDrag(e)
{
	if (!e) e=window.event;

	mouseDown=true;
	mDownPos=getEventLocation(e);
	return false;
}

function stopDrag(uri,elem,e)
{
    var startX=0;
	var startY=0;
	var endX=0;
	var endY=0;
	var width=0;
	var height=0;

	if ( !mouseDown ) return;
    mouseDown=false;

	if( !mouseDrag ) return;
	mouseDrag=false;

	if (!e) e=window.event;

	var mUpPos=getEventLocation(e);

	if ( !elem ) {
		if (e.target) elem=e.target;
		else if (e.srcElement) elem=e.srcElement;
	}

	mapPos=getElementLocation( elem );

	startX=mDownPos.x - mapPos.x;
	startY=mDownPos.y - mapPos.y;
	endX=mUpPos.x - mapPos.x;
	endY=mUpPos.y - mapPos.y;

	url = uri;

	if ( startX <= endX ) {
		width=endX-startX;
		url += '&map.x=' + startX;
	}
	else {
		width=startX-endX;
		url += '&map.x=' + endX;
	}

	if ( startY <= endY ) {
		height=endY-startY;
		url += '&map.y=' + startY;
	}
	else {
		height=startY-endY;
		url += '&map.y=' + endY;
	}

	if ( bBoxVisible ) {
		bBox.visibility='hidden';
		bBox.display='none';
		bBoxVisible=false;
	}

	window.location = url + '&width=' + width + '&height=' + height;
	return false;
}

function drawBox(e)
{
	if ( !mouseDown )	return;
	if ( !mouseDrag ) mouseDrag=true;

	if ( !e ) e=window.event;

	var mMovePos=getEventLocation(e);

	var width=0;
	var height=0;

	if ( mDownPos.x <= mMovePos.x ) {
		width=mMovePos.x-mDownPos.x;
		bBox.left=mDownPos.x + 'px';
		bBox.width=width;
	}
	else {
		width=mDownPos.x-mMovePos.x;
		bBox.left=mMovePos.x + 'px';
		bBox.width=width;
	}

	if ( mDownPos.y <= mMovePos.y ) {
		height=mMovePos.y-mDownPos.y;
		bBox.height=height;
		bBox.top=mDownPos.y + 'px';
	}
	else {
		height=mDownPos.y-mMovePos.y;
		bBox.height=height;
		bBox.top=mMovePos.y + 'px';
	}

	if ( !bBoxVisible ) {
		bBox.visibility='visible';
		bBox.display='block';
		bBoxVisible=true;
	}

	return false;
}

function doFocus(uri, elem,e)
{
    if (!e) var e=window.event;

    if (e.offsetX)
    {
        var x=e.offsetX;
        var y=e.offsetY;
    }
    
    else if (e.x)
    {
        var x=e.x;
        var y=e.y;
    }
    
    else if (e.layerX)
    {
        var x=e.layerX - elem.x;
        var y=e.layerY - elem.y;
    }

  
    if ( !elem )
    {
        if (e.target) elem = e.target;
        else if (e.srcElement) elem = e.srcElement;
    }

    url = uri + '&map.x=' + x + '&map.y=' + y;
    window.location = url;
}

var newWin='';

function openPostWindow( width, height, form )
{
    if (!newWin.closed && newWin.location)
    {
        if ( confirm('Aikaisempi ponnahdus ikkuna on yhä auki. Paina OK jos haluat avata sivun aikaisempaan ikkunaan.') )
        {
            document.directionForm.target='newWin';
        }
        else
        {
            myWin=window.open('','myWin','height=' + height + ',width=' + width + ',scrollbars=yes, status=yes');
            document.forms[form].target='myWin';
            if (window.focus) {myWin.focus()}
        }
    }
    else
    {
        newWin=window.open('','newWin','height=' + height + ',width=' + width+ ',scrollbars=yes, status=yes');
        document.forms[form].target='newWin';
        if (window.focus) {newWin.focus()}
    }
    
    return true;
}

function disableOthers(fm)
{
    for ( i = 0; i < fm.length; i++ )
    {
        if ( fm[i].checked ) 
        {
            var name = fm[i].name; 
            var val = fm[i].value;

            if ( val == 'poi' )
            {
                document.forms[0].elements[name + "_street"].disabled=true;
                document.forms[0].elements[name + "_street_number"].disabled=true;
                document.forms[0].elements[name + "_region"].disabled=true;
                document.forms[0].elements[name + "_poi"].disabled=false;
                shadeElement(name + "Map1");
                shadeElement(name + "Address1");
                shadeElement(name + "Address2");
                shadeElement(name + "Address3");
            }
            else if ( val == 'map' )
            {
                document.forms[0].elements[name + "_street"].disabled=true;
                document.forms[0].elements[name + "_street_number"].disabled=true;
                document.forms[0].elements[name + "_region"].disabled=true;
                highlightElement(name + "Map1");
                shadeElement(name + "Address1");
                shadeElement(name + "Address2");
                shadeElement(name + "Address3");

                if ( document.forms[0].elements[name + "_poi"] ) {
                    document.forms[0].elements[name + "_poi"].disabled=true;
                }
            }
            else if ( val == 'address' )
            {
                document.forms[0].elements[name + "_street"].disabled=false;
                document.forms[0].elements[name + "_street_number"].disabled=false;
                document.forms[0].elements[name + "_region"].disabled=false;
                shadeElement(name + "Map1");
                highlightElement(name + "Address1");
                highlightElement(name + "Address2");
                highlightElement(name + "Address3");

                if ( document.forms[0].elements[name + "_poi"] ) {
                    document.forms[0].elements[name + "_poi"].disabled=true;
                }
            }

            break;
        }
    }

    return true;
}

function highlightElement(id)
{
    changeElementColor( id,'#000000');
}

function shadeElement(id)
{
    changeElementColor( id,'#909090');
}

function changeElementColor(id, color)
{
	var obj = getElementStyle(id);

	if ( obj )
	{
		obj.color=color;
	}
}