//global variables
var svgSVGObj;
var svgDoc;
var svgVal;
var svgCityGroup;
var ulXCorner;
var ulYCorner;
var origPixSize;
var pixSize;
var offsetX;
var offsetY;
var yMinusVal;
var refCityRect;
var ratioY;
var pixWidth;
var pixHeight;

var allWidth;	
var allHeight;	
var xOriginCorner;
var yOriginCorner;
var curWidth; var curHeight;
var curXOriginCorner; var curYOriginCorner; 
var svgRect;
var svgoverviewdoc;
var svgMainViewport;
var pluginPixWidth;
var pluginPixHeight;
var pressed = 0;

var first_zoom = 0;
var opt_add = 0;
var curScale = 100;var zoomVal =0;
var zoomAuto = 0;var scrollAuto = 0;


function get_viewbox()
{
	var viewbox = new String(svgMainViewport.getAttribute("viewBox"));
	var viewboxes = viewbox.split(' ');
	
	curXOriginCorner = parseFloat(viewboxes[0]);
	curYOriginCorner = parseFloat(viewboxes[1]);
	curWidth = parseFloat(viewboxes[2]);
	curHeight = parseFloat(viewboxes[3]);
}


function initMap() {	

	if (document.all) {
		svgDoc = document.embeds['Carte'].getSVGDocument();
	}
	else {
		svgDoc = document.Carte.document.embeds[0].getSVGDocument();
	}
	
	if (document.all) {
		svgVal = document.embeds['Valeur'].getSVGDocument();
	}
	else {
		svgVal = document.Valeur.document.embeds[0].getSVGDocument();
	}
				
	if (document.all) {
		svgoverviewdoc = document.embeds['Apercu'].getSVGDocument();
	}
	else {
		svgoverviewdoc = document.Apercu.document.embeds[0].getSVGDocument();
	}
	svgRect = svgoverviewdoc.getElementById("rectForPlace");
	overviewViewport = svgoverviewdoc.getElementById("root");		
	pluginPixWidth = overviewViewport.getAttribute("width");
	pluginPixHeight = overviewViewport.getAttribute("height");

	if (document.all) {
		svgMainViewport = Carte.getSVGDocument();
	}
	else {
		svgMainViewport = document.emap.document.embeds[0].getSVGDocument();
	}
	svgMainViewport = svgMainViewport.getElementById("root");


	//initialisation des coordonnées
	get_viewbox();
	xOriginCorner = curXOriginCorner;
	yOriginCorner = curYOriginCorner;
	allWidth = curWidth;
	allHeight = curHeight;	
		
	pixWidth = svgDoc.getElementById("root").getAttribute("width");
	pixHeight = svgDoc.getElementById("root").getAttribute("height");
	
}

function hilite_elem(checkbox)
{
	element_name = checkbox.name.substring(1, checkbox.name.length);	
	
	ntype = element_name & 0xFF;
	nstype = element_name & 0xFF00;
		
	var svgobj = svgDoc.getElementById(element_name);
	
	if (!checkbox.checked){
		// cacher couche.		
		svgobj.setAttributeNS(null,'visibility','hidden');
		if(!nstype)
		{
			for(v=1;v<=0xFF;v++)
			{
				stype = ntype + (v * 0x100);
				if(visibility.elements['v' + stype])
				{
				visibility.elements['v' + stype].checked = false
				}
				else
				{break}
			}
		}		
	} else {
		// afficher couche.		
		svgobj.setAttributeNS(null,'visibility','');
		// afficher type
		svgDoc.getElementById(ntype).setAttributeNS(null,'visibility','');
		visibility.elements['v'+ ntype].checked = true;		
		for(v=1;v<=0xFF;v++)
		{
			stype = ntype + (v * 0x100);
			svgobj = svgDoc.getElementById(stype);
			if(svgobj)
			{
				if(svgobj.getAttributeNS(null, 'visibility')=='') visibility.elements['v'+stype].checked=true;					
			}
			else
			{break}
		}						
	}
	

	
	
}

function showObject(name)
{

	ntype = name & 0xFF;
	nstype = name & 0xFF00;
	nobjet = name & 0xFFF00000;
	
	for(c=1;c<0xF;c++)
	{
		if(svgDoc.getElementById((c*0x10000) + nstype + ntype))		
		{
			libelle = svgDoc.getElementById((c*0x10000) + nstype + ntype).firstChild.nodeValue;
			if(svgDoc.getElementById(nobjet + (c*0x10000) + nstype + ntype).firstChild)
			{
				valeur = svgDoc.getElementById(nobjet + (c*0x10000) + nstype + ntype).firstChild.nodeValue;
			}
			else
			{
				valeur = '';
			}
			if(svgVal.getElementById(c)) svgVal.getElementById(c).firstChild.nodeValue = libelle;
			if(svgVal.getElementById(c*0x100)) svgVal.getElementById(c*0x100).firstChild.nodeValue = valeur;			
		}
		else
		{
			if(svgVal.getElementById(c)) svgVal.getElementById(c).firstChild.nodeValue = ' ';
			if(svgVal.getElementById(c*0x100)) svgVal.getElementById(c*0x100).firstChild.nodeValue = ' ';
		}		
	}

}

function emptyObject() {
	for(c=1;c<0xFF;c++)
	{
		if(svgVal.getElementById(c)) svgVal.getElementById(c).firstChild.nodeValue = ' ';
		if(svgVal.getElementById(c*0x100)) svgVal.getElementById(c*0x100).firstChild.nodeValue = ' ';
	}
}

/*
	function clickNom(text) {
		//show an alert message
		alert(text);
	}
	
	function resetCoords() {
		//get current zoom and pan values
		var scale = svgSVGObj.currentScale;
		var trans = svgSVGObj.currentTranslate;
			var transx = trans.x;
			var transy = trans.y;
			//reset offset-values and pixSize according to current scale and translate
			pixSize = origPixSize / scale;
			offsetX = parseFloat(ulXCorner) - transx * pixSize;
			offsetY = parseFloat(ulYCorner) - transy * pixSize;
		
		//to determine y-position, x-position is always the same ...
			var height = pixHeight * pixSize;
		var newScale = 1 / parseFloat(scale);
			var newTranslateX = offsetX;
			var newTranslateY = offsetY + height * ratioY; //position always relative to bottom of viewBox
			newtransform = "translate(" + newTranslateX + " " + newTranslateY + ") " + "scale(" + newScale + ")";
			
			//reset position and scale for the showCoordsgroup so it always stays at the same place
			refCityRect.setAttribute('transform', newtransform);
	}
*/

function getTranslate(myElement,xOrY) {
        //get reference to element
	element = svgDoc.getElementById(myElement);
        
        //first get transform value of coordinate box
        var curTransform = element.getAttribute("transform");
        curTransform = new String(curTransform); //Wert in ein String umwandeln
        //no fear from Regular expressions ... just copy it, I copied it either ...
        var translateRegExp=/translate\(([-+]?\d+)(\s*[\s,]\s*)([-+]?\d+)\)\s*/;
        //This part extracts the translation-part from the overall transform-string
        if (curTransform.length != 0)
        {
          var result = curTransform.match(translateRegExp);
          if (result == null || result.index == -1)
          {
             var oldTranslateX = 0;
             var oldTranslateY = 0;
          }
          else
          {
             var oldTranslateX = result[1];
             var oldTranslateY = result[3];
          }
        }
        if (xOrY == "x") {
        	 return oldTranslateX;
        }
        if (xOrY == "y") {
        	 return oldTranslateY;
        }      
}

function global_view()
{
	selectZoomVal.myZoomSelect.value = 100;
	zoomIt();
}


function zoomIt() {
		
	window.status = "zoom en cours...";	
	
	if (document.all) {
		zoomVal = parseFloat(selectZoomVal.myZoomSelect.value);
	}
	else {
		zoomVal = parseFloat(document.overview.document.selectZoomVal.myZoomSelect.options[document.overview.document.selectZoomVal.myZoomSelect.options.selectedIndex].value);
	}	
	
	curScale = parseInt(zoomVal);

	//Prise des coordonnées du rectangle de prévi
	xulcorner = parseFloat(svgRect.getAttribute("x"));
	yulcorner = parseFloat(svgRect.getAttribute("y"));
	width = parseFloat(svgRect.getAttribute("width"));
	height = parseFloat(svgRect.getAttribute("height"));
	
	
	xcenter = xulcorner + width / 2;
	ycenter = yulcorner + height / 2;
	xnulcorner = xcenter - allWidth / 2 * (100/zoomVal);
	ynulcorner = ycenter - allHeight / 2 * (100/zoomVal);
	nWidth = allWidth * (100/zoomVal);
	nHeight = allHeight * (100/zoomVal);

	if (zoomVal == 100) {
		xnulcorner = xOriginCorner;
		ynulcorner = yOriginCorner;
		svgMainViewport.currentScale = 1;
	}		
	//Attribution au rectangle de prévi
	
	debug();
	
	svgRect.setAttribute("x",xnulcorner);
	svgRect.setAttribute("y",ynulcorner);
	svgRect.setAttribute("width",nWidth);
	svgRect.setAttribute("height",nHeight);
	
	//définition du viewport de la carte principale
	newViewport = xnulcorner + " " + ynulcorner + " " + nWidth + " " + nHeight;
	svgMainViewport.setAttribute("viewBox",newViewport);
	
	//définition du viewport courant
	curXOriginCorner = xnulcorner;curWidth = nWidth;xulcorner = curXOriginCorner;
	curYOriginCorner = ynulcorner;curHeight = nHeight;yulcorner = curYOriginCorner;
	
	svgMainViewport.currentTranslate.x = 0; svgMainViewport.currentTranslate.y = 0;
	
	window.status = "Prêt";
}

function beginPan(evt) {
	pressed = 1;
	width = parseFloat(svgRect.getAttribute("width"));
	height = parseFloat(svgRect.getAttribute("height"));
	evtX = parseFloat(evt.getClientX());
	evtY = parseFloat(evt.getClientY());
	rectUlXCorner = parseFloat(svgRect.getAttribute("x"));
	rectUlYCorner = parseFloat(svgRect.getAttribute("y"));	
}

function doPan(evt) {
	if (pressed == 1) {
		newEvtX = parseFloat(evt.getClientX());
		newEvtY = parseFloat(evt.getClientY());
		toMoveX = rectUlXCorner + (newEvtX - evtX) * allWidth / pluginPixWidth;
		toMoveY = rectUlYCorner + (newEvtY - evtY) * allHeight / pluginPixHeight;
		
				
		//restriction aux bords de l'apercu
		if (toMoveX < xOriginCorner) {
			svgRect.setAttribute("x",xOriginCorner);
		}
		else if ((toMoveX + width) > (xOriginCorner + allWidth)) {
			svgRect.setAttribute("x",xOriginCorner + allWidth - width);				
		}
		else {
			svgRect.setAttribute("x",toMoveX);			
		}
		if (toMoveY < yOriginCorner) {
			svgRect.setAttribute("y",yOriginCorner);
		}
		else if ((toMoveY + height) > (yOriginCorner + allHeight)) {
			svgRect.setAttribute("y",yOriginCorner + allHeight - height);
		}				
		else {
			svgRect.setAttribute("y",toMoveY);
		}
		
		evtX = newEvtX;
		evtY = newEvtY;
		rectUlXCorner = parseFloat(svgRect.getAttribute("x"));
		rectUlYCorner = parseFloat(svgRect.getAttribute("y"));	
	}	
}

function endPan(evt) {
	//window.status = "Déplacement en cours";
	pressed = 0;
	//set viewport of main map
	xulcorner = parseFloat(svgRect.getAttribute("x"));
	yulcorner = parseFloat(svgRect.getAttribute("y"));
	width = parseFloat(svgRect.getAttribute("width"));
	height = parseFloat(svgRect.getAttribute("height"));
	newViewport = xulcorner + " " + yulcorner + " " + width + " " + height;
	svgMainViewport.currentTranslate.x = 0; svgMainViewport.currentTranslate.y = 0;
	svgMainViewport.setAttribute("viewBox",newViewport);
	debug();
	window.status = "Prêt";
}

function get_coord(evt)
{
	//var curWidth; var curHeight;
	//var curXOriginCorner; var curYOriginCorner; 

	coords.c_x.value = parseInt((evt.clientX / pixWidth * curWidth) + curXOriginCorner);
	coords.c_y.value =  parseInt((evt.clientY / pixHeight * curHeight) + curYOriginCorner);	
}

function scroll()
{
	if (scrollAuto == 0)
	{
		newCoordX = parseInt((0 - svgMainViewport.currentTranslate.x) * curWidth / pixWidth) + parseInt(curXOriginCorner);
		newCoordY = parseInt((0 - svgMainViewport.currentTranslate.y) * curHeight / pixHeight) + parseInt(curYOriginCorner);
		svgRect.setAttribute("x", newCoordX);
		svgRect.setAttribute("y", newCoordY);
		//définition du viewport courant
		newViewport = newCoordX + " " + newCoordY + " " + curWidth + " " + curHeight;
		svgMainViewport.setAttribute("viewBox",newViewport);
					
		curXOriginCorner = newCoordX;curYOriginCorner = newCoordY;
		
		scrollAuto = 1;
		svgMainViewport.currentTranslate.x = 0;
		svgMainViewport.currentTranslate.y = 0;
		scrollAuto = 0;
		
	}
	debug()	
}


function zoom(evt)
{
	if (zoomAuto == 0)
	{

		if (first_zoom == 0 )
		{
				
			window.status = "zoom en cours...";
				
			zoomVal = svgMainViewport.currentScale * 100;
			
			
			curScale = parseInt((curScale - 100) + zoomVal);
			
			//Sélection dans la liste des échelles
			
			for (e=0;e < selectZoomVal.myZoomSelect.options.length;e++)
			{
				if(curScale == selectZoomVal.myZoomSelect.options[e].value)
				{
				selectZoomVal.myZoomSelect.value = curScale;
				break;
				}		
			}
			if (e==selectZoomVal.myZoomSelect.options.length)
			{
				if(opt_add==0)
				{
					var new_scale = new Option(curScale + ' %', curScale);
					selectZoomVal.myZoomSelect.options[selectZoomVal.myZoomSelect.options.length]=new_scale;
					opt_add=1;
				}
				else
				{
					var new_scale = new Option(curScale + ' %', curScale);
					selectZoomVal.myZoomSelect.options[selectZoomVal.myZoomSelect.options.length-1]=new_scale;
				}
				selectZoomVal.myZoomSelect.selectedIndex=selectZoomVal.myZoomSelect.options.length-1;			
			}
				
			
			nWidth = curWidth * 100 / zoomVal;
			nHeight = curHeight * 100 / zoomVal;
			
			nXOriginCorner = (curWidth / pixWidth * (0 - (svgMainViewport.currentTranslate.x / zoomVal * 100))) + curXOriginCorner;
			nYOriginCorner = (curHeight / pixHeight * (0 - (svgMainViewport.currentTranslate.y / zoomVal * 100))) + curYOriginCorner;
			
						
			//Attribution au rectangle de prévi
			svgRect.setAttribute("x",nXOriginCorner);
			svgRect.setAttribute("y",nYOriginCorner);
			svgRect.setAttribute("width",nWidth);
			svgRect.setAttribute("height",nHeight);
			
			debug();			
			
			//définition du viewport courant
			newViewport = nXOriginCorner + " " + nYOriginCorner + " " + nWidth + " " + nHeight;
			svgMainViewport.setAttribute("viewBox",newViewport);		
			
			curXOriginCorner = nXOriginCorner;curWidth = nWidth;xulcorner = curXOriginCorner;
			curYOriginCorner = nYOriginCorner;curHeight = nHeight;yulcorner = curYOriginCorner;
			
		
			window.status = "Prêt";		
			first_zoom = 1;
			zoomAuto = 1;svgMainViewport.currentScale = 1;zoomAuto = 0;
			
			scrollAuto = 1;
			svgMainViewport.currentTranslate.x = 0;
			svgMainViewport.currentTranslate.y = 0;
			scrollAuto = 0;
			
		}else{
			first_zoom = 0;
		}
	}	
}

function test()
{	
	
}

function debug()
{
/*
	coords.tt.value = 'zoomVal: ' + zoomVal + '\n\r t.x:' + svgMainViewport.currentTranslate.x + '\n\r t.y:' + svgMainViewport.currentTranslate.y +
				'\n\r rect x:' + svgRect.getAttribute("x") + '\n\r rect y:' + svgRect.getAttribute("y");
*/
}

//--------------------------------------------------------------------------------------


function About()
{
	alert('SIG2SVG\n\rAlizés Informatique 2004®');
}


