/* fneu 2006, fneu [at] supersmart.com */

function find_villes (cp) {
    var res = new Array();
//    var re = new RegExp('^' + cp);
    var v;
    for (var i = 0; i < cp_list.length; i++) {
	if (cp_list[i].indexOf(cp) == 0) {
//	if (cp_list[i].search(re) != -1) {
	    v = ville_list[i];
	    if (cp.length < 5) {v += ' (' + cp_list[i] + ')';}
	    res.push(v);}}
    return res.sort();
}

function find_cpx (ville) {
    var res = new Array();
//    var re = new RegExp('^' + ville);
    var v;
    for (var i = 0; i < ville_list.length; i++) {
	if (ville_list[i].indexOf(ville) == 0) {
//	if (ville_list[i].search(re) != -1) {
	    v = ville_list[i];
	    v += ' (' + cp_list[i] + ')';
	    res.push(v);}}
    return res.sort();
}

function empty_select (select) {
    while(select.options.length > 0) {select.remove(0);}
}

function populate_select (select, list, selected) {
    var option;
    var found = 0;
    empty_select(select);
    for (var i = 0; i < list.length; i++) {
	option = document.createElement("OPTION");
	option.value = i;
	option.text = list[i];
	try {select.add(option);} catch (e) {select.add(option, null);}
	if ((selected) && (list[i] == selected)) {option.selected = true; found = 1;}}
    return found;
}

function init_ville_select (cp, ville_initiale, prefix) {
    eval('var ville = document.form.' + prefix.toString() + 'ville');
    eval('var ville_select = document.form.' + prefix.toString() + 'ville_select');
    eval('var pays_select = document.form.' + prefix.toString() + 'pays');
    eval('var cp_input = document.form.' + prefix.toString() + 'cp');
    var val_pays = pays_select.options[pays_select.selectedIndex].value;
    if ((val_pays != 'FR') && (val_pays != 'GF') && (val_pays != 'GP') && (val_pays != 'MC')
     && (val_pays != 'MQ') && (val_pays != 'NC') && (val_pays != 'PF') && (val_pays != 'PM')
     && (val_pays != 'RE')) {ville_select_display(0, prefix); return;}
    if (cp.search(/^[0-9]*$/) == -1) {
	alert('Caractère invalide pour un code postal Français.               ');
	cp_input.value = cp.replace(/[^0-9]/g, '');
	ville_select_display(0, prefix); return;}
    if (cp.length > 5) {
	alert('Le champ est trop long pour un code postal Français.               ');
	ville_select_display(0, prefix); return;}
    if (cp.length < 5) {
	ville_select_display(0, prefix); ville.value = ''; return;}

//    if (cp.length < 5) {
//        self.setTimeout('alert(form.cp.value.length)', 1000);
//    last_len = cp.length;
//    self.setTimeout('coucou()', 1000);

    var v = find_villes(cp);
    if (v.length > 0) {
	v.push('- Autre -');
	var found = populate_select(ville_select, v, ville_initiale);
	if (ville_initiale) {
	    ville.value = ville_initiale;
	    if (found == 0) {
//	        td_ville_warning.innerHTML = 'correspondance ville/code postal non trouvée';
	        alert('correspondance ville/code postal non trouvée');
		ville_select_display(0, prefix); return;}}
        else {ville.value = ville_select.options[0].text;}
	ville_select_display(1, prefix);}
    else {
	//empty_select(ville_select, v);
	ville.value = ''; ville_select_display(0, prefix);}
}

function ville_select_display (show, prefix) {
    eval('var tr_ville_id = tr_' + prefix.toString() + 'ville');
    eval('var ville_select = document.form.' + prefix.toString() + 'ville_select');
    eval('var tr_ville_select_id = tr_' + prefix.toString() + 'ville_select');
    if (show == 1) {
    	tr_ville_id.style.display = 'none';
    	ville_select.style.display = 'inline';
    	tr_ville_select_id.style.display = '';}
    else {
	tr_ville_id.style.display = '';
	ville_select.style.display = 'none';
	tr_ville_select_id.style.display = 'none';}
}

function select_ville (prefix) {
    eval('var ville = document.form.' + prefix.toString() + 'ville');
    eval('var ville_select = document.form.' + prefix.toString() + 'ville_select');
    eval('var cp = document.form.' + prefix.toString() + 'cp');
    var selected = ville_select.options[ville_select.selectedIndex].text;
    if (selected == '- Autre -') {
	ville.value = ''; ville_select_display(0, prefix); ville.focus();}
    else if ((res = selected.match(/^([^(]+) \((\d+)\)$/)) != null) {
	cp.value = res[2]; ville.value = res[1];}
    else {ville.value = selected;}
}

function init_cp_select (ville, prefix) {
    ville = ville.toUpperCase();
    eval('var ville_select = document.form.' + prefix.toString() + 'ville_select');
    eval('var cp = document.form.' + prefix.toString() + 'cp');
    eval('var pays_select = document.form.' + prefix.toString() + 'pays');
    //var ville_input = document.form.ville;
    var val_pays = pays_select.options[pays_select.selectedIndex].value;
    if ((val_pays != 'FR') && (val_pays != 'GF') && (val_pays != 'GP') && (val_pays != 'MC')
     && (val_pays != 'MQ') && (val_pays != 'NC') && (val_pays != 'PF') && (val_pays != 'PM')
     && (val_pays != 'RE')) {ville_select_display(0, prefix); return;}
    if (ville.length < 3) {ville_select_display(0, prefix); return;}
    var v = find_cpx(ville);
    if (v.length > 0) {
	v.push('- Autre -');
	populate_select(ville_select, v, null);
        //ville_input = ville_select.options[0].text;
    	ville_select.style.display = 'inline';
        eval('var tr_ville_select_id = tr_' + prefix.toString() + 'ville_select');
	tr_ville_select_id.style.display = '';}
    else {ville_select_display(0, prefix);}
}

