var lat = 62.241716;
var lon = 25.74946;
var address = '';
var city = 'Jyväskylä';
var scale = 11;
//var popupFade;
var startPoint = null;
var locs = new Array();
var logoType = '020202';
var backgroundColor = '';
var font = 'arial';
var fontSize = 11;
var fontColor = '000000';
var coordinateX = 0;
var coordinateY = 0;
var hash = '';
var edsacId = '';
var marker = false;
var baseUrl = '';
var mapBorders = 0;


function initMap(width, height, custom) {
    if (!custom) {
        $('leveys').value = width;
        $('korkeus').value = height;
    } else {
        width = $('leveys').value;
        height = $('korkeus').value;
        $('kartanYlaosaOikea').setStyle('width','4.8%');
        $('kartanAlaosaOikea').setStyle('width','4.8%');
    }

    if (width < 275) {
        width = 275;
        $('leveys').value = width;
    }
    if (height < 275) {
        height = 275;
        $('korkeus').value = height;
    }
    if (width > 800) {
        width = 800;
        $('leveys').value = width;
    }
    if (height > 800) {
        height = 800;
        $('korkeus').value = height;
    }

    updateMapSectionDimensions(width, height);

    locs = new Array();

    $('MapArea').style.width = $('leveys').value + 'px';
    $('MapArea').style.height = $('korkeus').value + 'px';
    $('MapArea').innerHTML = '';

    var options = Maps.options;
    options.emptyZoom = scale;
    options.defaultLat = lat;
    options.defaultLng = lon;
    options.enableOverview = false;
    options.smallControls = true;
    options.tileSwitcher = false;

    Maps.createInteractiveMap('MapArea', options);

    Maps.addEventListener( 'recenter', updateCoordinates );
    Maps.addEventListener( 'zoom', updateCoordinates );

    if (startPoint != null) {
        locs.push(startPoint);
    }

    if (marker)
        getLocation();
}

function copyToClipboard(text) {  

	if (window.clipboardData) {
        alert("eka: " + text);

        window.clipboardData.setData('text', text);

	} else {
        alert("toka: " + text);

        var clipboard = document.getElementById('clipboard');

		if (clipboard == null) {  
			clipboard = document.createElement('div');  
			clipboard.setAttribute("name", "clipboard");  
			clipboard.setAttribute("id", "clipboard");  
			document.body.appendChild(clipboard);  
		}

		clipboard.innerHTML = '<embed src="/kartat/swf/clipboard.swf" FlashVars="clipboard=' + encodeURIComponent(text) + '" width="0" height="0" type="application/x-shockwave-flash"></embed>';  
	}  

	return false;  
}  

function updateElementCoordinates(element) {
    var left = element.offsetLeft;
    var top  = element.offsetTop;
    
    while(element=element.offsetParent) {
        left += element.offsetLeft;
        top  += element.offsetTop;
    }
    
    coordinateX = left;
    coordinateY = top;
}

function updateMapSectionDimensions(width_str, height) {
	var width = parseInt(width_str) +1;
	// harmaan laatikon koon muutos kartan koon mukaan ie6:lla
	if (Browser.Engine.trident4){
		var harmaaAlueWidth = width + 360;
		var harmaaAlueWidthMin = 770;
		$('ylempiHarmaaAlue').style.width = (harmaaAlueWidth > harmaaAlueWidthMin ? harmaaAlueWidth : harmaaAlueWidthMin) + 'px';
		$('alempiHarmaaAlue').style.width = (harmaaAlueWidth > harmaaAlueWidthMin ? harmaaAlueWidth : harmaaAlueWidthMin) + 'px';
	}
	$('kartta').style.width = width + 'px';
	$('mapContainer').style.height = height + 'px';
}

function getIframeHTML() {
	var date = new Date();
	hash = hex_sha256('' + date.getTime());

	var width = $('leveys').value;
	var height = $('korkeus').value;

	// Päivitetään kartta-osion mittasuhteet
	updateMapSectionDimensions(width, height);
	
	var areawidth = parseInt(width) +1;

	var ret = 	'<div style="width: ' + areawidth + 'px; font-family: arial; font-size: 12px; color: #010101; float: left;">\n' +
				'<div>\n' +
				'<div style="width: 2%; height: 67px; float: left; background-image: url(' + baseUrl + '/kartat/kuvat/karttalaatikko_tausta.png); background-position: top left;">&nbsp;</div>\n' +
				'<div style="width: 93%; height: 67px; float: left; background-image: url(' + baseUrl + '/kartat/kuvat/karttalaatikko_keski.png); background-position: top left;">\n' +
				'<div style="padding-left:20px; padding-top: 10px; font-size: 12px; font-family: arial; font-weight: normal;"><div style="font-weight: bold; font-size: 14px; margin-bottom: 5px;">' + $('yrityksenNimi').value + '</div><div>' + address + '</div><div>' + city + '</div></div></div>\n' +
				'<div style="width: 5%; height: 67px; float: left; background-image: url(' + baseUrl + '/kartat/kuvat/karttalaatikko_tausta.png); background-position: top right;	">&nbsp;</div>\n' +
				'</div>\n' +
				'<div style="height: ' + height + 'px; border-top: none; border-bottom: none; border-left: solid 1px #bebebc; border-right: none;	clear: both;	overflow: hidden;	width: 100%;">\n' +
				'<iframe src="' + makeIframeUrl() + '" frameborder="no" scrolling="no" width="' + width + '" height="' + height + '"></iframe>\n' + 
				'</div>\n' +
				'<div style="color: #333333;">\n' +
				'<div style="width: 2%; height: 82px; float: left; background-image: url(' + baseUrl + '/kartat/kuvat/karttalaatikko_tausta.png); background-position: bottom left;">&nbsp;</div>\n' +
				'<div style="width: 93%; height: 82px; float: left; background-image: url(' + baseUrl + '/kartat/kuvat/karttalaatikko_keski.png); background-position: bottom left;">\n' +			
				'<div style="padding-top: 10px; padding-left: 20px; line-height: 200%;">\n' +
				'<a href="' + "02fi_url".localize() + '#edsacid=' + logoEdsacId + '"><img src="' + baseUrl + '/kartat/kuvat/02_fi_kartta_logo.gif" style="float: right; margin-right: 20px; border: none;" alt="02.fi logo" /></a>\n' +
				'<div style="background-image: url(' + baseUrl + '/kartat/kuvat/kaannos.png); background-repeat: no-repeat; background-position: 0 0; padding-left: 30px; margin-top: 5px;" ><a href="' + mapServiceUrl + '?service=020202&endaddress=' + address + '&endlocality=' + city + '#edsacid=' + routeEdsacId + '" title="Reittiohjeet" style="line-height: 1.3em; font-size: 12px; font-family: arial; font-weight: bold; color: #333333;" >Reittiohjeet kohteeseen</a></div>\n' +
				'<div style="background-image: url(' + baseUrl + '/kartat/kuvat/lippu.png); background-repeat: no-repeat; background-position: 0 3; padding-left: 30px;	height:35px; margin-top: 5px;" ><a href="' + publicTransportationUrl + '#edsacid=' + publicTransportationEdsacId + '" title="Joukkoliikenne" style="line-height: 1.3em; font-size: 12px; font-family: arial; font-weight: bold; color: #333333;">Joukkoliikenteen reitit ja aikataulut</a></div>\n' +
				'</div>\n' +
				'</div>\n' +
				'<div style="width: 5%; height: 82px; float: left; background-image: url(' + baseUrl + '/kartat/kuvat/karttalaatikko_tausta.png); background-position: bottom right;">&nbsp;</div>\n' +
				'</div>\n' +
				'</div>';

	// Aktivoidaan sivun alalaidan elementit
	$('lahetaNappi').disabled = '';
	$('ieSaaLahettaa').disabled = '';
	$('saaLahettaa').disabled = '';
	$('email').disabled = '';
	$('koodi').disabled = '';
	$('kopioiLeikepoydalleNappi').disabled = '';

	return ret;
}

function toggleSizeInput() {
    if ($('leveys').disabled) {
		$('leveys').disabled = false;
		$('korkeus').disabled = false;
    } else {
		$('leveys').disabled = true;
		$('korkeus').disabled = true;
    }
}

function disableCustomSize(isDisabled) {
	$('leveys').disabled = isDisabled;
	$('korkeus').disabled = isDisabled;
}



function updateCoordinates( e, map ) {
    lat = e.center.lat;
    lon = e.center.lng;
    $('endlat').value = lat;
    $('endlon').value = lon;
    scale = map.zoomLevel;

	$('koodi').value = getIframeHTML();
}

function sendEmail() {

	// Sähköpostiosoite
	var email = $('email').value;
	
	if (email == null || email.trim() == '') {
	
		alert("sahkoposti_on_pakollinen".localize());
		
		// Sähköpostiosoitetta ei ole annettu
		return false;
	    
	} else {
		       
		// Regular expression sähköpostin validointiin
		var re = new RegExp("^[A-Za-z0-9_|-]+([.][A-Za-z0-9|-]+)*@[A-Za-z0-9|-]+([.][A-Za-z0-9|-]+)*[.][A-Za-z0-9]+$","ig");
		     
		if(!re.test(email)) {
		     
			alert("sahkoposti_on_virheellinen".localize());
		
			// Sähköpostiosoite on syötetty väärin			        
			return false;
		}
	}
	
	var koodi = $('koodi').value;
	var recieveNotifications = $('saaLahettaa').checked;
	
	MapRemote.sendEditorCode(email, koodi, recieveNotifications, notifyUser);
}

function notifyUser(data) {

	if (data) {
	
		alert("lahetys_onnistui".localize());
	
	} else {
	
		alert("lahetys_epaonnistui".localize());
	}
	
	return false;
}

function getLocation() {

	if ($('hyvaksynKayttoehdot').checked == null || $('hyvaksynKayttoehdot').checked == '') {
		alert("et_ole_hyvaksynyt_palvelun_kayttoehtoja".localize());
		return false;
	}

    $('expandlistdiv').setStyle("opacity", "0");
    $('expandlistdiv').setStyle("display", "none");
    var streets = new Array();
    var localities = new Array();

	Maps.removePointsFromMap();
	startPoint = null;
	endPoint = null;
	
    if ($('katuosoite').value != '' || $('paikkakunta').value != '') {

		if (marker && address == $('katuosoite').value && city == $('paikkakunta').value) {

	        streets.push(address);
	        localities.push(city);

		} else {

	        $('loadingimg').style.display = 'block';
	
	        streets.push($('katuosoite').value);
	        localities.push($('paikkakunta').value);
        }
        
        MapRemote.geocodeAddresses(streets, localities, 0, 0, false, false, addStartPoint);
    }

    return false;
}

function addStartPoint(data) {
    $('loadingimg').style.display = 'none';
    // Lisätään mahdolliset laajennettavat hakutulokset
    
    if (data != null && data.localities != null && data.localities[0] != null) {
        if (data.localities[0].length > 1) {
            addPoints(data, false);
        } else {
            // Vain yksi osuma
            lat = data.localities[0][0].wgs84lat;
            lon = data.localities[0][0].wgs84lon;
            address = data.localities[0][0].street_address;
            city = data.localities[0][0].cityName_fi;
            var contentStr = (data.localities[0][0].street_address != null && data.localities[0][0].street_address.length > 0 ? data.localities[0][0].street_address + ', ' : '') + data.localities[0][0].cityName_fi;
            var tmp = [{ content: contentStr, address: data.localities[0][0].street_address, city: data.localities[0][0].cityName_fi, lat: data.localities[0][0].wgs84lat, lon: data.localities[0][0].wgs84lon, type: 'star' }];
            Maps.addLocsWithFlyoutsToMap( tmp );
            startPoint = tmp[0];

			$('kartanYrityksenNimi').innerHTML = $('yrityksenNimi').value;
			$('kartanKatuosoite').innerHTML = address;
			$('kartanPaikkakunta').innerHTML = city;

			if (data.errors != null && data.errors.length > 0)
				showError(data.errors);

            updatePointInputs();

			$('koodi').value = getIframeHTML();
        }
    } else {
        showAlert();
    }
}

function updatePointInputs() {
    if (startPoint != null) {
        $('endlat').value = startPoint.lat;
        $('endlon').value = startPoint.lon;
        $('katuosoite').value = startPoint.address;
        $('paikkakunta').value = startPoint.city;
        lat = startPoint.lat;
        lon = startPoint.lon;
        address = startPoint.address;
        city = startPoint.city;
        marker = true;
        $('reittiohjeet').href = mapServiceUrl + '?service=020202&endaddress=' + address + '&endlocality=' + city + '#edsacid=' + routeEdsacId;
     }
}

function showError(error) {
    $('expandlistdiv').setStyle("opacity", "0");
    $('expandlistdiv').setStyle("display", "none");

    $('expandlistdiv').innerHTML = error;

    $('expandlistdiv').setStyle("opacity", "0");
    $('expandlistdiv').setStyle("display", "block");
//    popupFade.start(0, 1);
    $('expandlistdiv').fade(1);
}

function showAlert() {
    $('expandlistdiv').setStyle("opacity", "0");
    $('expandlistdiv').setStyle("display", "none");

    $('expandlistdiv').innerHTML = "pisteen_haku_epaonnistui".localize();

    $('expandlistdiv').setStyle("opacity", "0");
    $('expandlistdiv').setStyle("display", "block");
//    popupFade.start(0, 1);
    $('expandlistdiv').fade(1);
}

function addPoints(data) {
    locs = new Array();

    $('expandlistdiv').innerHTML = '';
    var p = new Element('h2');
    p.innerHTML = "Tarkenna pisteen hakua";

    $('expandlistdiv').appendChild(p);

    var mid = data.localities[0].length > 10 ? Math.ceil(data.localities[0].length/2) : data.localities[0].length;
    var count = 1;
    var list = new Element('ul');
    for (var i=0; i<data.localities[0].length; i++) {
        var item = new Element('li');
        var link = new Element('a', {'href':'javascript:void(0)', 'id':'link'+(i), 'events': {'click': function() { getPoint(this) }} });
        var contentStr = (data.localities[0][i].street_address != null && data.localities[0][i].street_address.length > 0 ? data.localities[0][i].street_address + ', ' : '') + data.localities[0][i].cityName_fi;
        link.innerHTML = count + '. ' + contentStr;
        item.appendChild(link);
        list.appendChild(item);

        locs.push({ content: contentStr, address: data.localities[0][i].street_address, city: data.localities[0][i].cityName_fi, lat: data.localities[0][i].wgs84lat, lon: data.localities[0][i].wgs84lon, type: 'star' });
        //locs.push({ content: data.localities[0][i].cityName_fi, lat: data.localities[0][i].wgs84lat, lon: data.localities[0][i].wgs84lon, type: 1 });
        count++;

        if (i+1 == mid) {
            $('expandlistdiv').appendChild(list);
            list = new Element('ul');
        }
    }
    $('expandlistdiv').appendChild(list);

    $('expandlistdiv').setStyle("opacity", "0");
    $('expandlistdiv').setStyle("display", "block");
	$('expandlistdiv').setStyle("top", coordinateY + "px");
	$('expandlistdiv').setStyle("left", coordinateX + "px");
//    popupFade.start(0, 1);
    $('expandlistdiv').fade(1);
}

function getPoint(ths) {
    try {

        var id = ths.id.substring(4, ths.id.length);
        var tmp = [locs[id]];
        Maps.addLocsWithFlyoutsToMap( tmp );

        startPoint = locs[id];

        updatePointInputs();

		$('kartanYrityksenNimi').innerHTML = $('yrityksenNimi').value;
		$('kartanKatuosoite').innerHTML = address;
		$('kartanPaikkakunta').innerHTML = city;

//        popupFade.start(1, 0);
        $('expandlistdiv').fade(0);
        
        marker = true;

		$('koodi').value = getIframeHTML();
  
    } catch(e) {
        //alert(e);
    }
}

function makeIframeUrl() {
    var url = baseUrl + '/kartat/map.fon?';
    // a=width, b=height, c=centerX, d=centerY, e=type, f=scale
    url += "m.a=" + $('leveys').value;
    url += "&m.b=" + $('korkeus').value;
    url += "&m.c=" + lat;
    url += "&m.d=" + lon;
    url += "&m.e=Map";
    url += "&m.f=" + scale;

    // Coordinates, addresses and balloon texts of the pois
    if (startPoint != null) {
        url += "&m.p[0].la=" + startPoint.lat;
        url += "&m.p[0].lo=" + startPoint.lon;
        url += "&m.p[0].t=" + startPoint.content;
        url += "&m.p[0].n=";
        url += "&m.p[0].ty=star";
    }

    // show overview
    url += "&m.g=true";
    // tile switcher
    url += "&m.h=false";
    // small controls
    url += "&m.i=true";
    // icon tips enabled
    url += "&m.j=false";
    // show routefields
    url += "&m.l=true";
    // logo type
    url += "&m.m=" + logoType;
    // background color
    url += "&m.n=" + backgroundColor;
	// customer id
    url += "&m.id=" + hash;
	// address
    url += "&m.s=" + address;
	// city
    url += "&m.t=" + city;
    // static map
    url += "&m.u=" + "kartta_action".localize();
    // target
    url += "&m.v=_parent";

    return url;
}

