
var mapWidth = 473;
var mapHeight = 352;

var isLoading = false;

function formSubmit() {
	if (isLoading)
		return false;
		
	isLoading = true;
	showLoading();
	document.forms[0].submit();	
}

function showLoading() {
	document.body.style.cursor='wait';
	getElement('loading').style.visibility = 'visible';
}

function getElement(name) {
	return document.getElementById(name);
}

function getMapX(e) {
	if (e.offsetX) {
		// IE
		return e.offsetX;
	}
	else {
		// Other
		return e.pageX - findObjX('imgMap');
	}
}

function getMapY(e) {
	if (e.offsetY) {
		return e.offsetY;
	}
	else {
		return e.pageY - findObjY('imgMap');
	}
}

function findObjX(name) {
	var obj = getElement(name);
	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 findObjY(name) {
	var obj = getElement(name);
	var curtop = 0;
	if (obj.offsetParent) {
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y) {
		curtop += obj.y;
	}
	return curtop;
}

function isRightButton(e) {
	if ((!document.all && e.which == 3) || (document.all && event.button==2))
		return true;
	else
		return false;
}
	
// PAN STUFF

function panClick(dir) {
	getElement('mapfunction').value = dir;
	formSubmit();
}

function panMouseOver(dir, evt) {
	mapMouseUp(evt);
	setBGColor('pan' + dir, 'white');
}

function panMouseOut(dir) {
	setBGColor('pan' + dir, '#DADADA');
}

function setBGColor(id, color) {
	getElement(id).style.backgroundColor = color;
}


// NAVIG STUFF

var rbStartX = 0;
var rbStartY = 0;
var rubberBand;

function mapOnClick(evt) {
	return false;
}

function mapMouseDown(evt) {
	if (isLoading)
		return false;

	if (isRightButton(evt))
		return false;
	
	rbStartX = getMapX(evt);
	rbStartY = getMapY(evt);					

	rubberBand = getElement('rubberband').style;
	rubberBand.width = 0;
	rubberBand.height = 0;
	rubberBand.left = rbStartX;
	rubberBand.top  = rbStartY;
	rubberBand.visibility = 'visible';
}

function rubberbandMove(evt) {
	rubberBand.visibility = 'hidden';
}

function mapMouseMove(evt) {
	if (isLoading)
		return false;

	var mouseX = getMapX(evt);
	var mouseY = getMapY(evt);	
	
	showCoordinates(mouseX, mouseY);
	
	if (rubberBand == null) {
		mapCheckMouseOver(mouseX, mouseY);	
		return false;
	}	
		
	rubberBand.visibility = 'visible';
		
	if ((mouseX >= mapWidth) || (mouseY >= mapHeight))
		mapMouseUp(evt);
	
	if ((isNaN(mouseX)) || (isNaN(mouseY))) {
		mapMouseUp(evt);
		return;
	}
		
	moveRubberband(mouseX, mouseY);
}

function moveRubberband(mouseX, mouseY) {
	
	if (mouseX < rbStartX)
		mouseX = mouseX + 1;
	else
		mouseX = mouseX - 5;
		
	if (mouseY < rbStartY)
		mouseY = mouseY + 1;
	else
		mouseY = mouseY - 5;
	
	var minX = (rbStartX <= mouseX) ? rbStartX : mouseX;
	var maxX = (rbStartX >= mouseX) ? rbStartX : mouseX;
	var minY = (rbStartY <= mouseY) ? rbStartY : mouseY;
	var maxY = (rbStartY >= mouseY) ? rbStartY : mouseY;
	
	rubberBand.left = minX;
	rubberBand.top  = minY;
	
	var newW = maxX - minX;
	var newH = maxY - minY;
	
	rubberBand.width = newW;
	rubberBand.height = newH;
}

function mapMouseUp(evt) {
	if (isLoading)
		return false;

	if (isRightButton(evt)) {
		showMainContextMenu(evt);
		return false;
	}
		
	if (rubberBand == null)
		return false;
	
	rubberBand.visibility = 'hidden';

	//converts to map pixels
	var minX = parseInt(rubberBand.left);					
	var maxX = minX + parseInt(rubberBand.width);
	var minY = parseInt(rubberBand.top);
	var maxY = minY + parseInt(rubberBand.height);
								
	//checks if it is a point or rectangle
	if (((maxX - minX) > 10) && ((maxY - minY) > 10)) {
		getElement('mapfunction').value = minX + '@' + minY + '@' + maxX + '@' + maxY;
	} else {
		getElement('mapfunction').value = minX + '@' + minY;
	}
	formSubmit();

	rubberBand = null;	
}

function showCoordinates(pxX, pxY) {
	//window.status = 'x:' + pxX + ' y:' + pxY; 
	window.status = 'UTM33 x:' + getWidthCoordinate(pxX) + ' y:' + getHeightCoordinate(pxY); 
}

function getHeightCoordinate(pixY) {
	var coords = getElement('extent').value;	
	var currYMin = parseInt(coords.split('|')[1]);
	var currYMax = parseInt(coords.split('|')[3]);
	return (Math.round(currYMin+((currYMax-currYMin)*((mapHeight - pixY)/mapHeight))));
}

function getWidthCoordinate(pixX) {		
	var coords = getElement('extent').value;	
	var currXMin = parseInt(coords.split('|')[0]);
	var currXMax = parseInt(coords.split('|')[2]);
	return (Math.round(currXMin+((currXMax-currXMin)*(pixX/mapWidth))));
}


// SEARCH STUFF

function searchClick(bPost) {
	if (getElement(searchInput).value.length > 1) {
		getElement('mapfunction').value = 'search';
		if (bPost) 
			formSubmit();
		return true;
	}
	else
		return false;
}

function searchInputKeyDown(elem, evt) {
	if (getKeyCode(evt) == 13) {
		return searchClick(false);
	}
	else
	 return true;
}

function getKeyCode(e) {
	var i;
    if (!e) {
		if (window.event)
            e = window.event;
        else return -1;
    }
    if (typeof(e.which ) == 'number' )
        i = e.which;
    else if(typeof(e.keyCode) == 'number')
        i = e.keyCode;
    else if(typeof( e.charCode ) == 'number')
        i = e.charCode;
    else
        return - 1;
    
    return i;
}

/* TOOLTIP FUNCTIONS */

var activeCompany = null;

function mapCheckMouseOver(mouseX, mouseY) {
	if(typeof(jsStorePixels) == 'undefined')
		return false;
				
	var mapIconOffX = 9;
	var mapIconOffY = -6;
		
	var diffXMin = 2;
	var diffXMax = 15;
	var diffYMin = 17;
	var diffYMax = 3;
	
	var x = 0;
	var y = 0;
			
	for (var i=0;i<jsStorePixels.length;i++) {
	
		x = parseInt(jsStorePixels[i].split('|')[0]);
		y = parseInt(jsStorePixels[i].split('|')[1]);
				
		if (mouseX>(x-diffXMin) && mouseX<(x+diffXMax) && mouseY>(y-diffYMin) && mouseY<(y+diffYMax)) {
			// updates the right text							
			updateCompanyInfo(i);	
			
			// updates icon on map		
			activeCompany = getElement('mapActivePoint').style;
			activeCompany.left = x + mapIconOffX;
			activeCompany.top  = y + mapIconOffY;
			activeCompany.visibility = 'visible';	
		}
	}		
}


function updateCompanyInfo(index) {
	//creates the html
	var html = '<div class=storeName>' + jsStoreNames[index] + '</div>' +
			   '<div class=storeAddress>' + jsStoreAddresses[index] + '</div>' + 
			   '<div class=storePhoneT>Telefon:<span class=storePhone>' + jsStorePhones[index] + '</span></div>' + 
			   '<div class=storeFaxT>Faks:<span class=storeFax>' + jsStoreFaxes[index] + '</span></div>' + 
			   '<div class=storeOpeningsT>Åpningstider:<br>Man-fre:<span class=storeOpeningsD>' + jsStoreOpeningsD[index] + '</span>' + 
			   '<br>Lørdag:<span class=storeOpeningsW>' + jsStoreOpeningsW[index] + '</span>';
	
	//checks if sunday openings exists
	if (jsStoreOpeningsS[index] != '')
		html += '<br>Søndag:<span class=storeOpeningsS>' + jsStoreOpeningsS[index] + '</span>';	   
			  
	//and the rest of the html
	html += '</div><img class=storeImage src=' + jsStoreImages[index] + ' />';
	
	//alert(html);
	getElement('mapDetailsBody').innerHTML = html;
	
	getElement('imgActivePoint').alt = jsStoreNames[index];
}


