var layer_1 = "cada";
var layer_2 = "cadn";
var listPolysTot = new Array();
var mapMode; //1 for searching with map, 0 searching with form
var centerDrag = new Object();
var nbDeplac;

document.observe("dom:loaded", function() {	
	layer_1 = document.getElementById("select_layer_1").value;
	layer_2 = document.getElementById("select_layer_2").value;
	var setCursor = new Object();	
	dragged = false;
	mv = new MapViewer('imageViewer', {
		zoomLevel: 0,
		coordinates: {x: 722891.6, y: 173896.4},
		layers: [
			{
				name: 'cada',	// affci
				opacity: 100
			},
			{
				name: 'cadn',
				opacity: 40
			}
		],
		dragstart: function(){			
			document.getElementById("imageViewer").style.cursor = "move";			
			centerDrag.x = mv.state.coordinates.x;
			centerDrag.y = mv.state.coordinates.y;
		},
		dragstop: function(){			
			document.getElementById("imageViewer").style.cursor = "default";			
			if(centerDrag.x != mv.state.coordinates.x && centerDrag.y != mv.state.coordinates.y){								
				if(mapMode == 1) nbDeplac++;
				checkPoly();				
				// console.log("dragged, nbdplac : "+nbDeplac);				
			}
			centerDrag.x = mv.state.coordinates.x;
			centerDrag.y = mv.state.coordinates.y;
		}
	});	
	mapMode = 0;
	nbDeplac = 0;
	centerDrag = {x: centerOrig.x, y: centerOrig.y};
	mv.addZoomListener(function(event){
		if(mapMode == 1) nbDeplac++;
		checkPoly();
		dijit.byId("zoomSlider").attr('value',event.currentLevel);
		mv.refresh();
	});	
});	

//Get all the polygons
dojo.addOnLoad(function(){	
	var xhr_object = null; 
	if(window.XMLHttpRequest) // Firefox 
	  xhr_object = new XMLHttpRequest(); 
	else if(window.ActiveXObject) // Internet Explorer 
	  xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); 
	else { // XMLHttpRequest non supporté par le navigateur 
	  alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
	  return; 
	} 
	xhr_object.open("POST", "includes/loadPolys.php", true); 	 
	xhr_object.onreadystatechange = function() { 
		if(xhr_object.readyState == 4) {
			var polys = xhr_object.responseXML.getElementsByTagName('poly');			
			for (var i = 0; i < polys.length; i++) {
				var points,center = new Array();
				points = convertPoints(polys[i].getAttribute('points'));
				center = convertPoints(polys[i].getAttribute('center'));				
				var regrId = polys[i].getAttribute('regrId').replace("REG  ","");				
				var spe = polys[i].getAttribute('spe');
				var ondblclick = function(){rechercherFromMap(this.id);}
				var size = getSize(points,center);				
				// var draw = false;
				// if(size > 3000) draw = true;				
				listPolysTot.push({p: points, c: center, s: size, id: regrId, spe: spe, drawn: false, color:'blue', filled:true, onclick:function(){}, ondblclick:function(){}, showOnOver:true, onover:function(){}, onout:function(){}, zindex:0, isresult:false });					
			}			
			//sort polygons by size
			usort(listPolysTot,comparePolys);
			//printPoly(listPolysTot);
			var nb=0;	
			stopWait();			
		}
	}
	xhr_object.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; Charset=iso-8859-1");
	xhr_object.send(null); 	
});

function reloadMap(){	
	layer_1 = document.getElementById("select_layer_1").value;
	layer_2 = document.getElementById("select_layer_2").value;
	//console.log("l1 = "+layer_1+", l2 = "+layer_2);
	mv.state.layers[0].name = layer_1;
	mv.state.layers[1].name = layer_2;
	mv.refresh();
}

function loadPolys(){
	// console.log("nbDeplac : "+nbDeplac);
	if(nbDeplac == 0 || nbDeplac >= 3){
		startWait();	
		mapMode = 1;	
		nbDeplac = 0;
		document.getElementById("img_btn_load_map").src = "images/btn_load_map_dis.gif";
		checkPoly();
		mv.refresh();	
		stopWait();	
	}
}

function getSize(points, center){
	var maxH = center[0].x;
	var minH = center[0].x;
	var maxV = center[0].y;
	var minV = center[0].y;
	
	for(var i=0; i<points.length; i++){
		if(points[i].x > maxH) maxH = points[i].x;
		if(points[i].x < minH) minH = points[i].x;
		if(points[i].y > maxV) maxV = points[i].y;
		if(points[i].y > maxV) maxV = points[i].y;
	}		
	var size = (maxH-minH)*(maxV-minV);
	return size;
}

function printPoly(liste){
	var print = "lise des polys : ";
	for(var i=0; i<liste.length; i++){
		print += liste[i].id +" ";
		//if(liste[i].isresult) print += liste[i].id +" "+liste[i].spe+" "+liste[i].isresult+", ";
	}
	//console.log(print);
	var nb = 0;	
	for(var i=0; i<liste.length; i++){
		//if(liste[i].id == '20060707090731') console.log("hit");
		for(var j=0; j<liste.length; j++){
			if(liste[i].id == liste[j].id && i!=j){
				nb++;
				//console.log("id = "+liste[i].id);
			}
		}
	}
	//console.log("nb of duplicate values : "+nb);
}

function comparePolys(a,b){
	if(a.s - b.s >0) return -1;
	else if(a.s - b.s < 0) return 1;
	else return 0;
}

function usort(inputArr, sorter) {
    
    var valArr = [], keyArr=[];
	var i = 0;
	
    if (typeof sorter === 'string') {
        sorter = this[sorter];
    } else if (sorter instanceof Array) {
        sorter = this[sorter[0]][sorter[1]];
    }   
	for (var k=0; k<inputArr.length; k++) { // Get key and value arrays
		valArr.push(inputArr[k]);
        delete inputArr[k] ;
    }
    try {
        valArr.sort(sorter);
    } catch (e) {
        return false;
    }
    for (i = 0; i < valArr.length; i++) { // Repopulate the old array
        inputArr[i] = valArr[i];
    }
 
    return true;
}
function unset(array, valueOrIndex){
	var output=[];
	for(var i in array){
		if (i!=valueOrIndex)
			output[i]=array[i];
	}
	return output;
}

function getPoly(id){
	for(var i=0; i<listPolysTot.length; i++){
		if(listPolysTot[i].id == id){
			return listPolysTot[i];
		}
	}
}

function getPolyMV(id){
	for(var i=0; i<mv._polygons.length; i++){
		if(mv._polygons[i].id == id){			
			return mv._polygons[i];
		}
	}
}

function getPolyInd(id){
	for(var i=0; i<listPolysTot.length; i++){
		if(listPolysTot[i].id == id){
			return i;
		}
	}
}

function getPolyIndMV(id){
	for(var i=0; i<mv._polygons.length; i++){
		if(mv._polygons[i].id == id){
			return i;
		}
	}
}

function isDrawn(id){
	for(var i=0; i<mv._polygons.length; i++){
		if(mv._polygons[i].id == id){
			return true;			
		}
	}
	return false;
}

function convertPoly(polyMV){
	var polyTmp = new Object();
	polyTmp.id = polyMV.id;
	polyTmp.p = polyMV.coordinates;
	polyTmp.color = polyMV.color;
	polyTmp.filled = polyMV.filled;
	polyTmp.onclick = polyMV.onclick;
	polyTmp.ondblclick = polyMV.ondblclick;
	polyTmp.showOnOver = polyMV.showOnOver;
	polyTmp.onover = polyMV.onover;
	polyTmp.onout = polyMV.onout;
	polyTmp.zindex = polyMV.zindex;
	return polyTmp;
}
