/********************************************************************
* im_extras.js
*
* This file contains functions related to the intermap extra features
* ie the ones the user can call via the buttons below the bigger map.
* 
********************************************************************/

/********************************************************************
*** LAYERS
********************************************************************/
/*
## Called by the bottom toolbar
## Shows a list of configured map servers
*/
function im_addLayer()
{
    // setup WB
    clearNode('im_whiteboard');    
    var WB = $('im_whiteboard');

    var wbtitle = im_createWBTitle(i18n('addLayer')); //FIXME i18n
    WB.appendChild(wbtitle);

    var closer = im_getWBCloser();
    WB.appendChild(closer);
    Event.observe(closer, 'click', im_closeWhiteBoard);

    // fill contents
    var div = document.createElement('div'); // main box
    div.id = "im_serverList";
    div.className = 'im_wbcontent';
    WB.appendChild(div);
   
    var myAjax = new Ajax.Updater (
           'im_serverList',    
    	'/intermap/srv/'+Env.lang+'/mapServers.listServers.embedded', 
    	{
    		method: 'get',    		    	
    		onFailure: im_load_error
    	}
    );
}

/*
## Called when a known map server has been selected
*/
function im_mapServerSelected(id, name, refreshCache)
{
	var im = $('im_serverList');
	clearNode(im);
	
	var t1 = Builder.node("p");
	t1.innerHTML = i18n("wait");
	im.appendChild(t1);
	
	var t2 = document.createElement("p");
	t2.innerHTML = i18n("loadingFrom") + " " + name;	
	im.appendChild(t2);

            imc_loadServerServices(id, refreshCache, im_servicesLoaded, "im_servicesSelected();");
}

function imc_loadServerServices(id, refreshCache, callback, jscallback)
{
	var url = '/intermap/srv/'+Env.lang+'/mapServers.getServices.embedded';
	var pars = 'mapserver='+id  				
	                +"&jscallback="+encodeURIComponent(jscallback)
	                +"&refreshCache="+refreshCache;

	var myAjax = new Ajax.Request (
		url, 
		{
			method: 'get',
			parameters: pars,
			onSuccess: callback,
			onFailure: im_load_error
		}
	);
}

/*
## Called when the URL of an unknown map server has been given
*/
function im_mapServerURL(url, refreshCache)
{
	var im = $('im_serverList');
	clearNode(im);

	var t1 = document.createElement("p");
	t1.innerHTML = "...please wait...";
	im.appendChild(t1);

	var t2 = document.createElement("p");
	t2.innerHTML = i18n("loadingFromWMS");	
	im.appendChild(t2);

            imc_loadURLServices(url, refreshCache, -2, im_servicesLoaded, "im_servicesSelected();" );
}

function imc_loadURLServices(url, refreshCache, type, callback, jscallback)
{
	var pars = 'mapserver='+type
	                +"&url="+encodeURIComponent(url)
	                +"&jscallback="+encodeURIComponent(jscallback)
	                +"&refreshCache="+refreshCache;
	
	var myAjax = new Ajax.Request (
		'/intermap/srv/'+Env.lang+'/mapServers.getServices.embedded', 
		{
			method: 'get',
			parameters: pars,
			onSuccess: callback,
			onFailure: im_load_error
		}
	);
}

function im_servicesLoaded(req)
{
	// Dinamically generate content
	var im = $('im_serverList');
	im.innerHTML =req.responseText; 
}

/*
## Called by the ok button generated by service mapServers.getServices.embedded
*/
function im_servicesSelected()
{
	var im = $('im_serverList');
	
	// next two elements are created by the mapServers.getServices.embedded service
	var url   = $('im_addlayer_serverurl').value;
	var type = $('im_addlayer_type').value;
	
	var services = new Array();
	//var query = "url="+url+"&type="+type;
	
	var lilist = im.getElementsByTagName("input");
			
	$A(lilist).each(
	    function (input)
	    {
	        var value = input.value;
	        var checked = input.checked;
	        
	        if(checked)
	        {
	            services.push(value);
	            //query += "&service="+value;	        
	        }
	    }
	
	
	);
	
	//alert(query);
	
	setStatus('busy');
	imc_addServices(url, services, type, im_servicesAdded);
	
}

function im_servicesAdded(req)
{
	var im = $('im_serverList');
	clearNode(im);
	
	var t1 = document.createElement("p");
	t1.innerHTML = i18n("layersAdded");
	im.appendChild(t1);
	
	im_buildLayerList(req); // rebuild layers' list
	
	//imc_reloadLayers(); 
			
           // refreshes should be chained
	refreshNeeded(); // refresh big map
	// im_mm_refreshNeeded(); // refresh minimap	
		
}

/********************************************************************
*** MAIL
********************************************************************/
/*
## Called by the bottom toolbar
*/
function im_sendMail()
{
    clearNode('im_whiteboard');

    var div = document.createElement('div');
    div.id = "im_sendMail";
    div.className = 'im_wbcontent';
    $('im_whiteboard').appendChild(div);

    var wbtitle = im_createWBTitle(i18n("sendByEmail"));
    div.appendChild(wbtitle);

    var closer = im_getWBCloser();
    div.appendChild(closer);
    Event.observe(closer, 'click', im_closeWhiteBoard);

    var h1 = document.createElement('h1');
    h1.innerHTML = i18n("sendByEmail"); 
    div.appendChild(h1);


    var input = document.createElement('input');
    input.setAttribute('name', 'emailaddress');
    input.setAttribute('size', '35');
    input.setAttribute('value', 'user@domain');
    div.appendChild(input);

}

/********************************************************************
*** PDF
********************************************************************/
/*
## Called by the bottom toolbar
*/
function im_openPDFform()
{
	// setup WB
	clearNode('im_whiteboard');    
	var WB = $('im_whiteboard');
	
	var wbtitle = im_createWBTitle(i18n('exportAsPDF')); //FIXME i18n
	WB.appendChild(wbtitle);
	
	var closer = im_getWBCloser();
	WB.appendChild(closer);
	Event.observe(closer, 'click', im_closeWhiteBoard);
	
	var div = document.createElement('div'); // main box
	div.id = "im_createPDF";
	div.className = 'im_wbcontent';
	WB.appendChild(div);
	
	var myAjax = new Ajax.Updater (
		'im_createPDF',    
		'/intermap/srv/'+Env.lang+'/static.form.pdf', 
		{
			method: 'get',    		    	
			onFailure: im_load_error
		}
	);

}

function im_requestPDF()
{
	var orient = $('pdf_orientation').value;
	var psize = $('pdf_pagesize').value;

	var ptitle = $('pdf_title').value;
	var pcopy = $('pdf_copyright').value;
	
	var bllist = $('pdf_layerlist').checked;
	var bdetails = $('pdf_details').checked;
	var bbbox = $('pdf_boundingbox').checked;
	var bscale = $('pdf_scalebar').checked;
	var barrow = $('pdf_arrow').checked;
	
	var pars = "orientation="+orient+
		"&pagesize="+psize+
		"&"+im_bm_getURLbbox();
		
	if(ptitle)
		pars += "&title="+ encodeURIComponent(ptitle);
	if(pcopy)
		pars += "&copyright="+ encodeURIComponent(pcopy);


	if(bllist)
		pars += "&layerlist=on";
	
	if(bdetails)
		pars += "&details=on";
	
	if(bbbox)
		pars += "&boundingbox=on";

	if(bscale)
		pars += "&scalebar=on";

	if(barrow)
		pars += "&arrow=on";

	$('im_requestingpdf').show();   
	$('im_requestpdf').hide();
	$('im_builtpdf').hide();
	
	var myAjax = new Ajax.Request (
		'/intermap/srv/'+Env.lang+'/create.pdf', 
		{
			method: 'get',
			parameters: pars,
			onSuccess: im_openPDF,
			onFailure: im_load_error
		}
	);
    
}

function im_openPDF(req)
{
    var url = req.responseXML.documentElement.getElementsByTagName('url')[0].firstChild.nodeValue;

    window.open(url);

    $('im_requestpdf').show();
    $('im_requestingpdf').hide();   
    $('im_builtpdf').show();
}

/********************************************************************
*** WMC
********************************************************************/
/*
## Called by the bottom toolbar
*/
function im_openWMCform()
{
	// setup WB
	clearNode('im_whiteboard');    
	var WB = $('im_whiteboard');
	
	var wbtitle = im_createWBTitle(i18n("dummy")); 
	WB.appendChild(wbtitle);
	
	var closer = im_getWBCloser();
	WB.appendChild(closer);
	Event.observe(closer, 'click', im_closeWhiteBoard);
	
	var div = document.createElement('div'); // main box
	div.id = "im_createWMC";
	div.className = 'im_wbcontent';
	WB.appendChild(div);
	
	var pars="&width=" + im_bm_width + 
		    "&height=" + im_bm_height;
	
	
	var myAjax = new Ajax.Updater (
		'im_createWMC',    
		'/intermap/srv/'+Env.lang+'/wmc.mailform', 
		{
			method: 'get',    		    	
			parameters: pars,
			onFailure: im_load_error
		}
	);

}

function im_requestWMC()
{
	var orient = $('pdf_orientation').value;
	var psize = $('pdf_pagesize').value;

	var ptitle = $('pdf_title').value;
	var pcopy = $('pdf_copyright').value;
	
	var bllist = $('pdf_layerlist').checked;
	var bdetails = $('pdf_details').checked;
	var bbbox = $('pdf_boundingbox').checked;
	var bscale = $('pdf_scalebar').checked;
	var barrow = $('pdf_arrow').checked;
	
	var pars = "orientation="+orient+
		"&pagesize="+psize+
		"&"+im_bm_getURLbbox();
		
	if(ptitle)
		pars += "&title="+ encodeURIComponent(ptitle);
	if(pcopy)
		pars += "&copyright="+ encodeURIComponent(pcopy);


	if(bllist)
		pars += "&layerlist=on";
	
	if(bdetails)
		pars += "&details=on";
	
	if(bbbox)
		pars += "&boundingbox=on";

	if(bscale)
		pars += "&scalebar=on";

	if(barrow)
		pars += "&arrow=on";

	$('im_requestingpdf').show();   
	$('im_requestpdf').hide();
	$('im_builtpdf').hide();
	
	var myAjax = new Ajax.Request (
		'/intermap/srv/'+Env.lang+'/create.pdf', 
		{
			method: 'get',
			parameters: pars,
			onSuccess: im_openPDF,
			onFailure: im_load_error
		}
	);
    
}

function im_openWMC(req)
{
    var url = req.responseXML.documentElement.getElementsByTagName('url')[0].firstChild.nodeValue;

    window.open(url);

    $('im_requestpdf').show();
    $('im_requestingpdf').hide();   
    $('im_builtpdf').show();
}

/********************************************************************
*** Export image
********************************************************************/
/*
## Called by the bottom toolbar
*/
function im_openPictureForm()
{
    clearNode('im_whiteboard');

    var div = document.createElement('div');
    div.id = "im_createPic";
    $('im_whiteboard').appendChild(div);

    var wbtitle = im_createWBTitle("Export this map as image"); //FIXME i18n
    div.appendChild(wbtitle);

    var closer = im_getWBCloser();
    div.appendChild(closer);
    Event.observe(closer, 'click', im_closeWhiteBoard);

    var h1 = document.createElement('h1');
    h1.innerHTML = "TODO" ; //FIXME i18n 
    div.appendChild(h1);

}

/********************************************************************
*** SUB TOOLBAR UTILITIES
********************************************************************/


function im_createWBTitle(title)
{
    var div = Builder.node('div', {id: "im_wbtitle"});
    var h1 = Builder.node('h1');
    h1.innerHTML = title;
    div.appendChild(h1);       

//    Effect.BlindDown('im_whiteboard');

    return div;
}


function im_getWBCloser()
{
    var closer = Builder.node('div', {id: "im_wbcloser"});
    var img = Builder.node('img',
    {
        title: "Close", // FIXME i18N
        src: "/intermap/images/close.png"
    });
    closer.appendChild(img);
    
    //Event.observe(closer, 'click', im_closeWhiteBoard);
        return closer;
}

function im_closeWhiteBoard()
{
//    Effect.SwitchOff('im_whiteboard');
//    Effect.BlindUp('im_whiteboard');
    clearNode('im_whiteboard');
}

