
var cmarker;

function onGmapZoomEnd(map) 
{

    return function(oldLevel, newLevel)
    {
		if(cmarker) {
			gmap.closeInfoWindow();
			displayCreateNewHotspotInfoWindow(cmarker);
		}
    }
}

function onGmapClick(map) 
{

    return function(marker, point)
    {
        if (!marker || (marker == cmarker && cmarker)) 
        {
            if (cmarker)
            {
                cmarker.setPoint(point);
                displayCreateNewHotspotInfoWindow(cmarker);
            }

            else 
            {
                cmarker = new GMarker(point, {draggable: true});
                map.addOverlay(cmarker);
                displayCreateNewHotspotInfoWindow(cmarker);
                GEvent.addListener(cmarker, "dragend", onMarkerDragEnd(map, cmarker));
            }
            
            //$('debug').innerHTML = 'Clicked at X=' + window.event.clientX +  ' Y=' + window.event.clientY;
        }
        else {
            if (marker && marker.isHotSpot) 
            {
	            displayHotspotInfoWindow(marker);
            }
        }
    }
}

/*
 * Makes some specific element visible for lightbox
 * For example links generated by javascript
 */
function init_lb(element) {
	valid = new lightbox(element);	
}

function displayHotspotInfoWindow(marker) {
    hotspot = marker.hotspot;
    
    imghtml = '';
    for(i = 0; i < Math.min(hotspot.images.length, 8); i++)
    {
        imghtml += '<a target="blank" href="' + hotspot.images[i].url_fullsize + '"><img class="infowindow" src="' + hotspot.images[i].url_thumbnail + '" /></a>';
    }

	marker.openInfoWindowHtml('<p style="font-size: large;"><strong>' + marker.hotspot.name + '</strong></p>' + 
							  '<p>' + marker.hotspot.description + '</p>' + 
							  '<p>' + imghtml + '</p>' + 
							  '<p><table>' + 
							     '<tr><td style="text-align: right; font-weight: bold;">Lag til:</td><td>' + new Date(marker.hotspot.date * 1000).toUTCString() + '</td></tr>' + 
							     '<tr><td style="text-align: right; font-weight: bold;">Fra:</td><td>' + marker.hotspot.username + '</td></tr>' + 
							     '<tr><td style="text-align: right; font-weight: bold;"></td><td style="text-align: right;"><a href="/hotspot/details/' + marker.hotspot.id + '" id="a_hotspot_details" title="" class="lbOn">Mer informasjon</a> | <a href="./?hs=' + marker.hotspot.id + '">Gå til &raquo;</a></td></tr>' + 
							  '</table></p>');

    /* Re-initialize lightbox */
	init_lb($('a_hotspot_details'));
}

function onMarkerDragEnd(map, marker) 
{
    return function(point)
    {
        if (marker == cmarker) {
			gmap.closeInfoWindow();
            displayCreateNewHotspotInfoWindow(marker);
        }

        //$('debug').innerHTML = 'Dropped at X=' + window.event.clientX +  ' Y=' + window.event.clientY;
    }
}

function displayCreateNewHotspotInfoWindow(marker) {
    marker.openInfoWindowHtml('<p><strong>Ny hotspot</strong></p>' + 
							  '<p>Lat: ' + cmarker.getPoint().lat() +  '</p>' +
							  '<p>Long: ' + cmarker.getPoint().lng() +  '</p>' +
							  '<p>Zoom: ' + gmap.getZoom() + '</p>' +
							  '<div class="infowindow_buttons"><a id="a_add_form" href="' + addform_get_url(cmarker.getPoint(), gmap.getZoom()) + '" class="lbOn">Opprett ny hotspot her &raquo;</a></div>');
	
	/* Make visible for Lightbox */
	init_lb($('a_add_form'));
}

function addform_get_url(pos, zoom) {
    return '/hotspot/addform/' + pos.lng() + '/' + pos.lat() + '/' + zoom;
	
}

function createHotspot() 
{
    if (!cmarker) { return; }
}

function removeCmarker() 
{
    gmap.removeOverlay(cmarker);
    gmap.getInfoWindow().hide();
    cmarker = null;
}

function getAddHotspotForm(pos, zoom) 
{
    showWaitBar('controls');
    
    url = './hotspot/addform/' + pos.lng() + '/' + pos.lat() + '/' + zoom;
    parm = '';
    handler = showAddHotspotForm();
	var myAjax = new Ajax.Request(url, 
	{
		method: 'get', 
		parameters: parm, 
		onComplete: handler
	});
}

function showAddHotspotForm() 
{
    return function(req) {
        $('controls').innerHTML = req.responseText;
        new Effect.Highlight('controls', {startcolor: '#d5dcff', endcolor: '#ffffff'});
    }
}

function getAllHotspotsAsXML() 
{
    
    url = './?c=ajax&a=get_hotspots_xml';
    parm = '';
    handler = getAllHotspotsAsXMLHandler();
	var myAjax = new Ajax.Request(url, 
	{
		method: 'get', 
		parameters: parm, 
		onComplete: handler
	});
}

function getAllHotspotsAsJSON() 
{
    
    url = '/hotspot/indexjson';
    parm = '';
    handler = getAllHotspotsAsJSONHandler();
	var myAjax = new Ajax.Request(url, 
	{
		method: 'get', 
		parameters: parm, 
		onComplete: handler
	});
}

function getAllHotspotsAsXMLHandler() 
{
    return function(req) {

        var parser = new DOMImplementation();
        
        //load the XML into the parser and get the DOMDocument
        var doc = parser.loadXML(req.responseText);
        
        //get the root node (hotspots)
        var root = doc.getDocumentElement();
        
        //get the first "TAG1" element
        var hotspots = root.getElementsByTagName("instance");

        for (i = 0; i<hotspots.length; ++i) {
            var nodes = hotspots.item(i).getChildNodes();
            var hotspot = {};

            for (n = 0; n<nodes.length; ++n) {
                node = nodes.item(n);
                var name = node.getNodeName();
                var value = node.getFirstChild().getNodeValue();
                //$('controls').innerHTML += name + ' : '  + value + '<br>';

                hotspot[name] = value;


            } // for

            addHotspotToMap(gmap, hotspot);

        } // for
    }
}

function getAllHotspotsAsJSONHandler() 
{
    return function(req) {

        hotspots = eval(req.responseText);

        for (i = 0; i<hotspots.length; ++i) {

            hotspot = hotspots[i];
            addHotspotToMap(gmap, hotspot);
        }
    }
}

function showRecentHotspots() 
{
    url = '/hotspot/latest/10';
    parm = '';
    handler = showRecentHotspotsHandler();
	var myAjax = new Ajax.Request(url, 
	{
		method: 'get', 
		parameters: parm, 
		onComplete: handler
	});
}

function showRecentHotspotsHandler() 
{
    return function(req) {
        $('latest').innerHTML = req.responseText;
        new Effect.Appear('latest');
        $('mapwait').style.zIndex = 0;
    }
}



function searchHotspots(text) 
{
    
    url = './?c=search&a=ajax&text=' + text;
    parm = '';
    handler = searchHotspotsHandler();
	var myAjax = new Ajax.Request(url, 
	{
		method: 'get', 
		parameters: parm, 
		onComplete: handler
	});
}

function searchHotspotsHandler() 
{
    return function(req) {
        $('searchresult').innerHTML = req.responseText;
        new Effect.Highlight('searchresult', {startcolor: '#d5dcff', endcolor: '#ffffff'});
    }
}

function addHotspotToMap(map, hotspot) 
{

	//$('debug').innerHTML += 'Added: ' + hotspot.name + '<br>';

    var point = new GLatLng(hotspot.lat, hotspot.lng);
    var marker = new GMarker(point);
    marker.hotspot = hotspot;
    marker.isHotSpot = true;
    map.addOverlay(marker);
	GEvent.addListener(marker, "click", onHotspotClick(map, marker));

	if (getQ('hs') != '' && getQ('hs') > 0 && getQ('hs') == hotspot.id) {
		map.setCenter(point, parseInt(hotspot.zoom));
		displayHotspotInfoWindow(marker);
        new Effect.Highlight('controls', {startcolor: '#d5dcff', endcolor: '#ffffff'});
	}
	
}

function onHotspotClick(map, marker) 
{
	return function(marker, point) {
		//$('controls').innerHTML += 'lol';


	}
}

function showWaitBar(elmnt) 
{
    $(elmnt).innerHTML = '<center><img src="/gfx/wait.gif" /></center>';
}

function onSearchBoxKeyPress(stuff) 
{
	return true;
}

function getQ(variable) 
{
  var query = window.location.search.substring(1);
  var vars = query.split("&");
  for (var i=0;i<vars.length;i++) {
    var pair = vars[i].split("=");
    if (pair[0] == variable) {
      return pair[1];
    }
  } 
  return '';
}

function hotspot_form_add_file()
{

    /* Create ID */
    var d = new Date();
    id = 'img' + d.getTime();

    /* Prepare element */
    elmnt = '<div id="' + id + '"><input style="width: 280px;" type="file" name="images[]" />&nbsp;<a style="font-size: xx-small;" href="#" onclick="$(\'imgctrl\').removeChild($(\'' + id + '\'))">Fjern</a></div>'
    
    tmp = $('imgctrl').innerHTML;
    $('imgctrl').innerHTML = elmnt + tmp;
}
