var _DISTANCE_TOOL = "distanceTool";
var _SURFACE_TOOL = "surfaceTool";
var _ZOOM_TOOL = "zoomTool";
var _PAN_TOOL = "panTool"; 
var _QUERY_POINT_TOOL = "queryPointTool";
var _QUERY_RECT_TOOL = "queryRectTool";
var _QUERY_POLY_TOOL = "queryPolyTool";
var _QUERY_CIRC_TOOL = "queryCircTool";
var _QUERY_GEOMETRY_TOOL = "queryGeometryTool";

var _DRAW_POLY_TOOL = "drawPolyTool";
var _DRAW_LINE_TOOL = "drawLineTool";
var _DRAW_POINT_TOOL = "drawPointTool";
var _DRAW_ANNOTATION_TOOL = "drawAnnotationTool";

var _EDIT_PICK_TOOL = "editPickTool";
var _EDIT_MOVE_TOOL = "editMoveTool";
var _EDIT_ADD_VERTEX_TOOL = "editAddVertexTool";

var _MAX_RESULT_CARTO = 100;

var _IE4 = (document.all)? true:false;	  //IE 4
var _NS4 = (document.layers)? true:false;	  //NS 4
var _DOM = (document.getElementById)? true:false;	  //DOM

var _TYPE_ZOOM_WHEEL = 1;
var _TYPE_ZOOM_BOX = 2;
var _TYPE_ZOOM_POINT = 3;
var _TYPE_ZOOM_ALL = 4;
var _TYPE_ZOOM_SCALE = 5;

var _SELECTION_CLASS_TAGNAME = "";
var _LOCALISATION_CLASS_TAGNAME = "";
	
var _ZOOM_IN = 1;
var _ZOOM_OUT = 2;
var _ZOOM_PAN = 3;

var _INSEE_COMCOM = "000";

var _DISPLAY_MAP_URL = 'displayMap.htm';
var _AJAX_INIT_MAP_URL = 'initMap.htm';
var _AJAX_RENDER_MAP_URL = 'renderMap.htm';
var _AJAX_ZOOM_MAP_URL = 'zoomMap.htm';
var _AJAX_MOVE_MAP_URL = 'moveMap.htm';
var _AJAX_RENDER_SCALEBAR_URL = 'renderScaleBar.htm';
var _AJAX_RENDER_KEYMAP_URL = 'renderKeyMap.htm';
var _AJAX_RENDER_LEGEND_URL = 'renderLegend.htm';
var _AJAX_RENDER_PICTO_URL = 'renderPicto.htm';
var _AJAX_RESIZE_MAP_URL = 'resizeMap.htm';
var _AJAX_QUERY_BY_POINT_URL = 'queryByPoint.htm';
var _AJAX_QUERY_BY_RECT_URL = 'queryByRect.htm';
var _AJAX_QUERY_BY_POLY_URL = 'queryByPoly.htm';
var _AJAX_QUERY_BY_ATTRIBUTE_URL = 'queryByAttribute.htm';
var _AJAX_INFOS_PARCELLE = 'infosParcelle.htm';
var _AJAX_TOGGLE_LAYER_STATUS_URL = 'toggleLayerStatus.htm';
var _AJAX_REORDER_LAYER_URL = 'reorderLayer.htm';
var _AJAX_DRAW_RECT_URL = 'drawRect.htm';
var _AJAX_DRAW_POLY_URL = 'drawPoly.htm';
var _AJAX_DRAW_LINE_URL = 'drawLine.htm';
var _AJAX_DRAW_POINT_URL = 'drawPoint.htm';
var _AJAX_DRAW_ANNOTATION_URL = 'drawAnnotation.htm';
var _AJAX_DELETE_DRAW_URL = 'deleteDraw.htm';
var _AJAX_UPDATE_STYLE_TO_FEATURE_POLYGON_URL = 'updateStyleToFeaturePolygon.htm';
var _AJAX_UPDATE_STYLE_TO_FEATURE_LINE_URL = 'updateStyleToFeatureLine.htm';
var _AJAX_UPDATE_STYLE_TO_FEATURE_POINT_URL = 'updateStyleToFeaturePoint.htm';
var _AJAX_UPDATE_STYLE_TO_FEATURE_ANNOTATION_URL = 'updateStyleToFeatureAnnotation.htm';
var _AJAX_RENDER_PREVIEW_STYLE_POLYGON_URL = 'renderPreviewStylePolygon.htm';
var _AJAX_RENDER_PREVIEW_STYLE_LINE_URL = 'renderPreviewStyleLine.htm';
var _AJAX_RENDER_PREVIEW_STYLE_POINT_URL = 'renderPreviewStylePoint.htm';
var _AJAX_RENDER_PREVIEW_STYLE_ANNOTATION_URL = 'renderPreviewStyleAnnotation.htm';
var _AJAX_SAVE_WINDOW_STATE_URL = 'saveWindowState.htm';
var _AJAX_SELECT_GEOMETRY_URL = 'selectGeometry.htm';
var _AJAX_UPDATE_GEOMETRY_URL = 'updateGeometry.htm';
var _AJAX_DELETE_GEOMETRY_URL = 'deleteGeometry.htm';
var _AJAX_GET_POINTS_GEOMETRY = 'getPointsGeometry.htm';

var _AJAX_LOCATE_BY_ROAD_URL = 'locateByRoad.htm';
var _AJAX_TOOL_TIPS_URL = 'toolTips.htm';
var _AJAX_PRINT_URL = 'print.htm';
var _AJAX_SELECT_MAP_URL = 'selectMap.htm';
var _AJAX_SELECT_COMMUNE_URL = 'selectCommune.htm';
var _DECONNEXION = 'deconnexion.htm';

var _LAYER_DRAW_POLYGON = '';
var _LAYER_DRAW_LINE = '';
var _LAYER_DRAW_POINT = '';
var _LAYER_DRAW_ANNOTATION = '';

var _LABEL_LAYER_DRAW_POLYGON = 'Dessin polygone';
var _LABEL_LAYER_DRAW_LINE = 'Dessin polyligne';
var _LABEL_LAYER_DRAW_POINT = 'Dessin ponctuel';
var _LABEL_LAYER_DRAW_ANNOTATION = 'Dessin annotation';

var _PICTO_LAYER_WIDTH = 0;
var _PICTO_LAYER_HEIGHT = 0;
var _PICTO_STYLE_WIDTH = 0;
var _PICTO_STYLE_HEIGHT = 0;

var toolTipTimeId = null;
var zoomWheelTimeId = null;

// Url envoye par le formulaire
var ajax_url = "";

var _MIN_ZINDEX_WINDOW = 40;

var currentAction = "";


var utilisateurId = "";

var elt;

var queryFound = false;

var dateInit = new Date();
var timeInit = dateInit.getTime();
var mapSelectTimeStamp = timeInit;

var indexLayerActif = null;
var layerNameFeatureSelected = "";

var drop = false;

var layerControllerDraggable;

var widthDroppableArea = 250;
var heightMaxWindows = 500;

// Largeur et hauteur de la carte
var mapWidth = 0;
var mapHeight = 0;
var newWidthViewPort = 0;


// Distance cartographique (Distance reelle entre le bord gauche et le bord droit de la carte
var minX = 0;
var maxX = 0;
var minY = 0;
var maxY = 0;
var distanceX = 0;
var distanceY = 0;

var leftDivImg = 0;
var topDivImg = 0;

// Outil en cours d'utilisation
var currentTool = "";

var rLegende = "";

document.actionDisabled = false;
document.panning = false;
document.measuring = false;


var _DURATION_APPEAR_MAP_EFFECT = 0.3;
var _DURATION_SLIDE_EFFECT = 0.4;
var _DURATION_APPEAR_WIND_EFFECT = 0.3;
var _DURATION_ZOOM_MAP_EFFECT = 0.8;

function clearGraphs() {
	if (top.graphic) {
		top.graphic.clear();
	}
	if (top.graphicTemp) {
		top.graphicTemp.clear();
	}
	if (top.graphicClosingSurface) {
		top.graphicClosingSurface.clear();
	}
}

function displayLoadingMap() {
	// Positionnement centre et affichage du loadingMap en fonction de la taille de la carte
	var leftLoading = parseInt($('divImg').getStyle('width')) / 2 - 16;
	var topLoading = parseInt($('divImg').getStyle('height')) / 2 - 16;
	$('loading').setStyle({
		left : leftLoading+'px',
		top : topLoading+'px',
		display : 'block'
	});
}

function getInnerWidth() {
	var innerWidth;
	if (_IE4) {
		if (document.documentElement && document.documentElement.clientWidth) {
			innerWidth = document.documentElement.clientWidth;
		} else if (document.body) {
			innerWidth = document.body.clientWidth;
		}
	} else if (_NS4) {
		innerWidth = document.width;
    } else if (_DOM) {
		innerWidth = top.innerWidth;
	}
	if (isNaN(innerWidth)) {
		innerWidth = top.innerWidth;
	}
	return (innerWidth);
}

function getInnerHeight() {
	var innerHeight;
	if (_IE4) {
		if (document.documentElement && document.documentElement.clientHeight) {
			innerHeight = document.documentElement.clientHeight;
		} else if (document.body) {
			innerHeight = document.body.clientHeight;
		}
	} else if (_NS4) {
		innerHeight = document.height;
	} else if (_DOM) {
		innerHeight = top.innerHeight;
	}
	if (isNaN(innerHeight)) {
		innerHeight = top.innerHeight;
	}
	return (innerHeight);
}

function selectItemParIndice(indice,Liste) {
	eval("$('" + Liste.name + "').selectedIndex = indice");
}

function selectItemParValeur(valeur,Liste) {
	maListe = eval(Liste);
	i = 0;
	if (maListe.options.length > 0) {
		while (maListe.options[i].value != valeur) {
			i++;
		}
		selectItemParIndice(i,Liste);
	}
}

function ctrlSelUniqueCheckBox(monchkBox,monchkBoxAChanger) {
	if(eval("document.forms[0]."+monchkBox+".checked") == true) {
    	eval("document.forms[0]."+monchkBoxAChanger+".checked= false");
	}  
}

function selectionnerTousChkBox(field,monchkBox) {
	if (eval("$('" + monchkBox.name + "').checked") == true) {
		for (i = 0; i < field.length; i++) {
			field[i].checked = true;
		}
	} 
	else {
		for (i = 0; i < field.length; i++) {
			field[i].checked = false;
		}  
	}
}

function selectionnerEchelleIdentiqueFenetre(monChkBox) {
	if (eval("$('" + monChkBox.name + "').checked") == true) {
		$('EchellePdf').value = "";
		$('EchellePdf').readOnly = true;
	}
	else {
		$('EchellePdf').readOnly = false;
	}
}

function selectionnerLegende(monChkBox) {
	if (eval("$('" + monChkBox.name + "').checked") == true) {
		$('TopLegendeNewPage').disabled = false;
	}
	else {
		$('TopLegendeNewPage').checked = false;
		$('TopLegendeNewPage').disabled = true;
	}
}

function getSelectedRadioValue (radiobutton){
	var returnValue = "";
	if (radiobutton.length == 1) {
		returnValue = radiobutton.value;
	}
	else {
		for (i=0;i<radiobutton.length;i++) {
			if (radiobutton[i].checked==true) {
				returnValue=radiobutton[i].value;
			}
		}
	}
	return returnValue;
}

function print() {
	if (document.actionDisabled) return;
	
	if ($('TopEchelleIdentiqueFenetre')) {
		$('mapForm').pTopEchelleIdentiqueFenetre.value =  eval("$('TopEchelleIdentiqueFenetre').checked") == true;
	}
	if ($('EchellePdf')) {
		$('mapForm').pEchellePdf.value =  EchellePdf.value;
	}
	if ($('FormatPdf')) {
		$('mapForm').pFormatPdf.value =  FormatPdf.value;
	}
	if ($('OrientationPdf')) {
		$('mapForm').pOrientationPdf.value =  OrientationPdf.value;
	}
	if ($('TitrePdf')) {
		$('mapForm').pTitrePdf.value =  TitrePdf.value;
	}
	if ($('ObservationPdf')) {
		$('mapForm').pObservationPdf.value =  ObservationPdf.value;
	}
	if ($('TopLegende')) {
		$('mapForm').pTopLegende.value =  eval("$('TopLegende').checked") == true;
	}
	if ($('TopLegendeNewPage')) {
		$('mapForm').pTopLegendeNewPage.value =  eval("$('TopLegendeNewPage').checked") == true;
	}
	if ($('TopInformationsParcellairePdf')) {
		$('mapForm').pTopInformationsParcellairePdf.value =  eval("$('TopInformationsParcellairePdf').checked") == true;
	}
	if ($('TopNomCommune')) {
		$('mapForm').pTopNomCommune.value =  eval("$('TopNomCommune').checked") == true;
	}
	if ($('TopDateImpression')) {
		$('mapForm').pTopDateImpression.value =  eval("$('TopDateImpression').checked") == true;
	}
	if ($('FormatPdf')) {
		$('mapForm').pFormatPdf.value =  FormatPdf.value;
	}

	$('mapForm').action = _AJAX_PRINT_URL;
	$('mapForm').submit();
}

function getTagValue(ObjectTag) {
	if (ObjectTag != null && ObjectTag.childNodes[0] != null) {
		return ObjectTag.childNodes[0].nodeValue;
	} else {
		return "";
	}
}

function getTag(r,tagName) {
	return r.getElementsByTagName(tagName)[0];
}

function getValue(r, tagName) {
	return getTagValue(getTag(r, tagName));	
}

function linkCarto(action) {
	document.forms[0].pInnerWidth.value = getInnerWidth();
	document.forms[0].pInnerHeight.value = getInnerHeight();
	document.forms[0].action = action;
	document.forms[0].submit();
}

function stringBlankComplete(maxLengthString, string) {
	var reg = new RegExp("( )", "g");
	var mask = "";
	for (i=0; i < maxLengthString; i++) {
		mask = mask + " ";
	}
	string =  string + mask.substr(0,maxLengthString -  string.length);
	string = string.replace(reg, "&nbsp;");

	return string;
}

function isDateValid(chaineDate) {

	// Je regarde tout d'abord si la chaîne n'est pas vide, sinon pas la peine d'aller plus loin
	   if (chaineDate == "") return false;

	// J'utilise split pour créer un tableau dans lequel je récupère les jour mois année
	// J'attends bien sûr une date formatée en JJ/MM/AAAA
	   var ladate = (chaineDate).split("/");

	// Si je n'ai pas récupéré trois éléments ou bien s'il ne s'agit pas d'entiers, pas la peine non plus d'aller plus loin
	   if ((ladate.length != 3) || isNaN(parseInt(ladate[0])) || isNaN(parseInt(ladate[1])) || isNaN(parseInt(ladate[2]))) return false;

	// Sinon, c'est maintenant que je crée la date correspondante. Attention, les mois sont étalonnés de 0 à 11
	   var unedate = new Date(eval(ladate[2]),eval(ladate[1])-1,eval(ladate[0]));

	// Bug de l'an 2000 oblige, lorsque je récupère l'année, je n'ai pas toujours 4 chiffres selon les navigateurs, je rectifie donc ici le tir.
	   var annee = unedate.getYear();
	   if ((Math.abs(annee)+"").length < 4) annee = annee + 1900;

	// Il ne reste plus qu'à vérifier si le jour, le mois et l'année obtenus sont les mêmes que ceux saisis par l'utilisateur.
	   return ((unedate.getDate() == eval(ladate[0])) && (unedate.getMonth() == eval(ladate[1])-1) && (annee == eval(ladate[2])));
}

function keyNumeric(evt) {
	var res = false;
	if (_IE4) {
		res = ((evt.keyCode >= 48 && evt.keyCode <= 57) || evt.keyCode == 8);
	} else if (_DOM) {
		res = ((evt.charCode >= 48 && evt.charCode <= 57) || evt.charCode == 0);
	}
	return res;
}

function HexToR(h) {return parseInt((cutHex(h)).substring(0,2),16)}
function HexToG(h) {return parseInt((cutHex(h)).substring(2,4),16)}
function HexToB(h) {return parseInt((cutHex(h)).substring(4,6),16)}
function cutHex(h) {return (h.charAt(0)=="#") ? h.substring(1,7):h}