/*
  geo.js
  Script adapted from gouv.fr site by ChD -- Nov 2006
*/

var geoLayerName = "divCpbMap";
var deptRgn = new Array();
var listDept = new Array;
var listRegion = new Array;
var geoFrm = null;
var targetField = null;	// text field that wil receive department choosen
var targetForm = null;	// form that wil be posted (or null to NOT post)
var imageBase = null;
var autoPost = true;	// default


// Regions

listRegion[ 0] = "choisir une région";
listRegion[ 1] = 'Ile de France';
listRegion[ 2] = 'Champagne-Ardenne';
listRegion[ 3] = 'Picardie';
listRegion[ 4] = 'Haute-Normandie';
listRegion[ 5] = 'Centre';
listRegion[ 6] = 'Basse-Normandie';
listRegion[ 7] = 'Bourgogne';
listRegion[ 8] = 'Nord-Pas-De-Calais';
listRegion[ 9] = 'Lorraine';
listRegion[10] = 'Alsace';
listRegion[11] = 'Franche-Comté';
listRegion[12] = 'Pays de la Loire';
listRegion[13] = 'Bretagne';
listRegion[14] = 'Poitou-Charentes';
listRegion[15] = 'Aquitaine';
listRegion[16] = 'Midi-Pyrénnées';
listRegion[17] = 'Limousin';
listRegion[18] = 'Rhône-Alpes';
listRegion[19] = 'Auvergne';
listRegion[20] = 'Languedoc-Roussillon';
listRegion[21] = 'Provence-Côte-d Azur';
listRegion[22] = 'Corse';


// Departements

listDept[  0] = "choisir un département";
listDept[  1] = 'AIN (01)';
listDept[  2] = 'AISNE (02)';
listDept[  3] = 'ALLIER (03)';
listDept[  4] = 'ALPES-DE-HAUTE-PROVENCE (04)';
listDept[  5] = 'HAUTES-ALPES (05)';
listDept[  6] = 'ALPES-MARITIMES (06)';
listDept[  7] = 'ARDECHE (07)';
listDept[  8] = 'ARDENNES (08)';
listDept[  9] = 'ARIEGE (09)';
listDept[ 10] = 'AUBE (10)';
listDept[ 11] = 'AUDE (11)';
listDept[ 12] = 'AVEYRON (12)';
listDept[ 13] = 'BOUCHES-DU-RHONE (13)';
listDept[ 14] = 'CALVADOS (14)';
listDept[ 15] = 'CANTAL (15)';
listDept[ 16] = 'CHARENTE (16)';
listDept[ 17] = 'CHARENTE-MARITIME (17)';
listDept[ 18] = 'CHER (18)';
listDept[ 19] = 'CORREZE (19)';

listDept[ 20] = 'COTE-D OR (21)';
listDept[ 21] = 'COTES-D ARMOR (22)';
listDept[ 22] = 'CREUSE (23)';
listDept[ 23] = 'DORDOGNE (24)';
listDept[ 24] = 'DOUBS (25)';
listDept[ 25] = 'DROME (26)';
listDept[ 26] = 'EURE (27)';
listDept[ 27] = 'EURE-ET-LOIR (28)';
listDept[ 28] = 'FINISTERE (29)';

listDept[ 29] = 'CORSE-DU-SUD (2A)';
listDept[ 30] = 'HAUTE-CORSE (2B)';

listDept[ 31] = 'GARD (30)';
listDept[ 32] = 'HAUTE-GARONNE (31)';
listDept[ 33] = 'GERS (32)';
listDept[ 34] = 'GIRONDE (33)';
listDept[ 35] = 'HERAULT (34)';
listDept[ 36] = 'ILLE-ET-VILAINE (35)';
listDept[ 37] = 'INDRE (36)';
listDept[ 38] = 'INDRE-ET-LOIRE (37)';
listDept[ 39] = 'ISERE (38)';
listDept[ 40] = 'JURA (39)';
listDept[ 41] = 'LANDES (40)';
listDept[ 42] = 'LOIR-ET-CHER (41)';
listDept[ 43] = 'LOIRE (42)';
listDept[ 44] = 'HAUTE-LOIRE (43)';
listDept[ 45] = 'LOIRE-ATLANTIQUE (44)';
listDept[ 46] = 'LOIRET (45)';
listDept[ 47] = 'LOT (46)';
listDept[ 48] = 'LOT-ET-GARONNE (47)';
listDept[ 49] = 'LOZERE (48)';
listDept[ 50] = 'MAINE-ET-LOIRE (49)';
listDept[ 51] = 'MANCHE (50)';
listDept[ 52] = 'MARNE (51)';
listDept[ 53] = 'HAUTE-MARNE (52)';
listDept[ 54] = 'MAYENNE (53)';
listDept[ 55] = 'MEURTHE-ET-MOSELLE (54)';
listDept[ 56] = 'MEUSE (55)';
listDept[ 57] = 'MORBIHAN (56)';
listDept[ 58] = 'MOSELLE (57)';
listDept[ 59] = 'NIEVRE (58)';
listDept[ 60] = 'NORD (59)';
listDept[ 61] = 'OISE (60)';
listDept[ 62] = 'ORNE (61)';
listDept[ 63] = 'PAS-DE-CALAIS (62)';
listDept[ 64] = 'PUY-DE-DOME (63)';
listDept[ 65] = 'PYRENEES-ATLANTIQUES (64)';
listDept[ 66] = 'HAUTES-PYRENEES (65)';
listDept[ 67] = 'PYRENEES-ORIENTALES (66)';
listDept[ 68] = 'BAS-RHIN (67)';
listDept[ 69] = 'HAUT-RHIN (68)';
listDept[ 70] = 'RHONE (69)';
listDept[ 71] = 'HAUTE-SAONE (70)';
listDept[ 72] = 'SAONE-ET-LOIRE (71)';
listDept[ 73] = 'SARTHE (72)';
listDept[ 74] = 'SAVOIE (73)';
listDept[ 75] = 'HAUTE-SAVOIE (74)';
listDept[ 76] = 'PARIS (75)';
listDept[ 77] = 'SEINE-MARITIME (76)';
listDept[ 78] = 'SEINE-ET-MARNE (77)';
listDept[ 79] = 'YVELINES (78)';
listDept[ 80] = 'DEUX-SEVRES (79)';
listDept[ 81] = 'SOMME (80)';
listDept[ 82] = 'TARN (81)';
listDept[ 83] = 'TARN-ET-GARONNE (82)';
listDept[ 84] = 'VAR (83)';
listDept[ 85] = 'VAUCLUSE (84)';
listDept[ 86] = 'VENDEE (85)';
listDept[ 87] = 'VIENNE (86)';
listDept[ 88] = 'HAUTE-VIENNE (87)';
listDept[ 89] = 'VOSGES (88)';
listDept[ 90] = 'YONNE (89)';
listDept[ 91] = 'TERRITOIRE-DE-BELFORT (90)';
listDept[ 92] = 'ESSONNE (91)';
listDept[ 93] = 'HAUTS-DE-SEINE (92)';
listDept[ 94] = 'SEINE-SAINT-DENIS (93)';
listDept[ 95] = 'VAL-DE-MARNE (94)';
listDept[ 96] = 'VAL-D OISE (95)';
listDept[ 97] = 'GUADELOUPE (971)';
listDept[ 98] = 'MARTINIQUE (972)';
listDept[ 99] = 'GUYANE (973)';
listDept[100] = 'REUNION (974)';
listDept[101] = 'ST PIERRE et MIQUELON (975)';
listDept[102] = 'MAYOTTE (976)';


// Department to region

deptRgn[  0] = 0;
deptRgn[  1] = 18;
deptRgn[  2] = 3;
deptRgn[  3] = 19;
deptRgn[  4] = 21;
deptRgn[  5] = 21;
deptRgn[  6] = 21;
deptRgn[  7] = 18;
deptRgn[  8] = 2;
deptRgn[  9] = 16;
deptRgn[ 10] = 2;
deptRgn[ 11] = 20;
deptRgn[ 12] = 16;
deptRgn[ 13] = 21;
deptRgn[ 14] = 6;
deptRgn[ 15] = 19;
deptRgn[ 16] = 14;
deptRgn[ 17] = 14;
deptRgn[ 18] = 5;
deptRgn[ 19] = 17;
deptRgn[ 20] = 7;
deptRgn[ 21] = 13;
deptRgn[ 22] = 17;
deptRgn[ 23] = 15;
deptRgn[ 24] = 11;
deptRgn[ 25] = 18;
deptRgn[ 26] = 4;
deptRgn[ 27] = 5;
deptRgn[ 28] = 13;
deptRgn[ 29] = 22;
deptRgn[ 30] = 22;
deptRgn[ 31] = 20;
deptRgn[ 32] = 16;
deptRgn[ 33] = 16;
deptRgn[ 34] = 15;
deptRgn[ 35] = 20;
deptRgn[ 36] = 13;
deptRgn[ 37] = 5;
deptRgn[ 38] = 5;
deptRgn[ 39] = 18;
deptRgn[ 40] = 11;
deptRgn[ 41] = 15;
deptRgn[ 42] = 5;
deptRgn[ 43] = 18;
deptRgn[ 44] = 19;
deptRgn[ 45] = 12;
deptRgn[ 46] = 5;
deptRgn[ 47] = 16;
deptRgn[ 48] = 15;
deptRgn[ 49] = 20;
deptRgn[ 50] = 12;
deptRgn[ 51] = 6;
deptRgn[ 52] = 2;
deptRgn[ 53] = 2;
deptRgn[ 54] = 12;
deptRgn[ 55] = 9;
deptRgn[ 56] = 9;
deptRgn[ 57] = 13;
deptRgn[ 58] = 9;
deptRgn[ 59] = 7;
deptRgn[ 60] = 8;
deptRgn[ 61] = 3;
deptRgn[ 62] = 6;
deptRgn[ 63] = 8;
deptRgn[ 64] = 19;
deptRgn[ 65] = 15;
deptRgn[ 66] = 16;
deptRgn[ 67] = 20;
deptRgn[ 68] = 10;
deptRgn[ 69] = 10;
deptRgn[ 70] = 18;
deptRgn[ 71] = 11;
deptRgn[ 72] = 7;
deptRgn[ 73] = 12;
deptRgn[ 74] = 18;
deptRgn[ 75] = 18;
deptRgn[ 76] = 1;
deptRgn[ 77] = 4;
deptRgn[ 78] = 1;
deptRgn[ 79] = 1;
deptRgn[ 80] = 14;
deptRgn[ 81] = 3;
deptRgn[ 82] = 16;
deptRgn[ 83] = 16;
deptRgn[ 84] = 21;
deptRgn[ 85] = 21;
deptRgn[ 86] = 12;
deptRgn[ 87] = 14;
deptRgn[ 88] = 17;
deptRgn[ 89] = 9;
deptRgn[ 90] = 7;
deptRgn[ 91] = 11;
deptRgn[ 92] = 1;
deptRgn[ 93] = 1;
deptRgn[ 94] = 1;
deptRgn[ 95] = 1;
deptRgn[ 96] = 1;
deptRgn[ 97] = 0;
deptRgn[ 98] = 0;
deptRgn[ 99] = 0;
deptRgn[100] = 0;
deptRgn[101] = 0;
deptRgn[102] = 0;



/////////////// UTILITY FUNCTIONS - START /////////////////

function showHideLayerObj(obj,visible) {
  if (obj.style) {
    obj=obj.style;
  }
  obj.visibility = (visible==true) ? 'visible' : 'hidden';
}

/////////////// UTILITY FUNCTIONS - END /////////////////



// init combo if empty
function fillRegionCombo() {
	geoFrm.IdRegion.length=listRegion.length;
	for (var ri=0; ri<listRegion.length; ri++) {
	  geoFrm.IdRegion.options[ri].value = ri;
	  geoFrm.IdRegion.options[ri].text = listRegion[ri];
	}
}

function changeRegion(){

	if (geoFrm.IdRegion.options.length==0) {
		fillRegionCombo();
	}

	var rgnIdx = geoFrm.IdRegion.selectedIndex;

	idreg = geoFrm.IdRegion.options[rgnIdx].value;
	geoFrm.IdDepartement.length = 1;
	geoFrm.IdDepartement.options[0].value = 0;
	geoFrm.IdDepartement.options[0].text = "Choisir un département";
	iter = 1;
	if (idreg == 0) { // all regions == all departments
		for (i=1 ; i<listDept.length ; i++){
				geoFrm.IdDepartement.length = iter+1;
				geoFrm.IdDepartement.options[i].value = i;
				geoFrm.IdDepartement.options[i].text = listDept[i];
				iter++;
		}
	} else {	// filter departments
		for (i=1 ; i<deptRgn.length ; i++){
			if (deptRgn[i]==idreg){
				geoFrm.IdDepartement.length = iter+1;
				geoFrm.IdDepartement.options[iter].value = i;
				geoFrm.IdDepartement.options[iter].text = listDept[i];
				iter++;
			}
		}
	}

	geoFrm.IdDepartement.selectedIndex = 0;	// no department choosen yet

	if (targetField!=null) {
		targetField.value="";
	}

	showMap(idreg);	// change img bitmap and clickable map
}

function storeSelectedDept(idDep) {
	var s = listDept[idDep];
	var p0 = s.indexOf("(");
	var p1 = s.indexOf(")");


	if (targetField!=null) {
		targetField.value = s.substr(p0+1,p1-p0-1);
		if (autoPost && (targetForm!=null) && (targetField.value.length>1)) {
			var r = true;
			if (targetForm.onsubmit) {	// is there a onSubmit event ?
				r = targetForm.onsubmit();	// ok, call it. NOTE: result is false with IE6  :(
			}
			targetForm.submit();	// and finally submit form
		}
	}
	geoClose();	// department choosen, hide geo DIV
}


/**
  When user choose a department, select its region
*/
function changeDept() {
	idDep = geoFrm.IdDepartement.options[geoFrm.IdDepartement.selectedIndex].value;
	idreg=deptRgn[idDep];
	for (i=0 ; i<geoFrm.IdRegion.options.length; i++){
		if(geoFrm.IdRegion.options[i].value == idreg){
			geoFrm.IdRegion.selectedIndex = i;
			showMap(i);	// change img bitmap and clickable map
			i = geoFrm.IdRegion.options.length;	// chd061120 - exit loop right now (dirty quick fix)
		}
	}
    storeSelectedDept(idDep);
}

function selectReg(idReg) {
	for (i=0 ; i<geoFrm.IdRegion.options.length; i++){
		if(geoFrm.IdRegion.options[i].value == idReg){
			geoFrm.IdRegion.selectedIndex = i;
			i = geoFrm.IdRegion.options.length;	//**chd quick opt
		}
	}
	changeRegion()
}

function selectDep(idDep) {
	  for (i=0 ; i<geoFrm.IdDepartement.options.length; i++){
		if(geoFrm.IdDepartement.options[i].value == idDep){
			geoFrm.IdDepartement.selectedIndex = i;
			i = geoFrm.IdDepartement.options.length;	//**chd quick opt
		}
	  }
	storeSelectedDept(idDep);
}

function setRgn(rgnId,deptId) {
	if (deptId) {
		selectDep(deptId);
	} else {
//		alert("Région choisie : "+rgn);
		selectReg(rgnId);
	}
}

// force 2 digits format (or more)
function format2(id) {
	if (id>9) {
		return id;
	} else {
		return "0"+id;
	}
}

function hideMaps() {
	var imgDiv;
	for (var i=22; i>=0; i--) {
		imgDiv = MM_findObj("divmap"+format2(i));
//		showHideLayerObj(imgDiv,false);
		zipUnzipLayerObj(imgDiv,false);
	}
}

function showMap(id) {
	hideMaps();
	var imgDiv = MM_findObj("divmap"+format2(id));
	var img = imgDiv.getElementsByTagName("img")[0];
	img.src = imageBase + "rgn"+format2(id)+".gif";
	zipUnzipLayerObj(imgDiv,true);
}


// INIT functions

function geoClose() {
	hideLayer(geoLayerName);
}

// must setup first
function geoOpen(aImageBase,aTargetFormName,aTargetFieldName,aAutoPost) {
	geoFrm = MM_findObj("frmGeo");
	if (!geoFrm) {
		alert("form 'frmGeo' not found");
	}
	imageBase = aImageBase;
	targetForm = MM_findObj(aTargetFormName);
	if (targetForm==null) {
		alert("form ["+aTargetFormName+"] not found");
	}

	//targetField = MM_findObj(aTargetFieldName,targetForm);
	targetField = targetForm[aTargetFieldName];
	if (targetField==null) {
		alert("field ["+aTargetFieldName+"] not found in form ["+aTargetFormName+"]");
	}

//	alert("Form="+targetForm.name+", targetField="+targetField.name);

	selectReg(0);
	selectDep(0);

	showLayer(geoLayerName);
//	unzipLayer("divCpbMap");
}

