/**
 * Get InternetExplorer version
 * @returns InternetExplorer version
 */
function getInternetExplorerVersion() {
    var rv = -1; // Return value assumes failure.
    if (navigator.appName == 'Microsoft Internet Explorer') {
        var ua = navigator.userAgent;
        var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
        if (re.exec(ua) != null)
            rv = parseFloat(RegExp.$1);
    }
    return rv;
}

/**
 * Overture des news d'une année
 * @param year conteneur li de l'année
 */
function openNews(year) {
	var months = year.getElementsByTagName('ul');
	for (var i = 0; i < months.length; i++) {
		if (months[i].className) {
			months[i].className = '';
		} else {
			months[i].className = 'visible';
		}
	}
}

/**
  * Open a pop-up window
  * @param url url of the page to pen
  * @param width window width
  * @param height window height
  */
function openWin(url, width, height) {
    window.open(url, 'ashortpopup', 'toolbar=no,directories=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,copyhistory=no,width=' + width + ',height=' + height);
}

/**
 * Show back an URL into the main window
 * @param url URL to open in the main window
 * @return false
 */
function popdown(url)
{
    if (window.name != '') {
        window.opener.location.href = url.replace(/&amp;/g, '&');
        return false;
    }
    return true;
}

/**
 * Confirm the change of an url with a message box
 * @param message message to display
 * @param url url to move on
 * @return false
 */
function link_confirm(message, url) {
	var cond = confirm(message);
	if (cond) {
		window.location = url;
	}
	return false;
}

/**
  * Switch display property of an element
  * @param element element
  * @param value value of the display property to switch on/off
  * @param idFocus id of element to focus when scitch on
  */
function switchDisplay(element, value, idFocus) {
    if (element) {
        if (element.style.display == value) {
            element.style.display = 'none';
        } else {
            element.style.display = value;
            if (idFocus != null) {
	            var area = document.getElementById(idFocus);
	            if (area) {
	                area.focus();
	            }
            }
        }
    }
}

/**
 * Exécute une requête AJAX, et appel la fonction 'fonction' en asynchrone pour le traitement AJAX
 * @param   url         URL de la reqûete AJAX
 * @param   fonction    fonction de traitement de la réponse AJAX, La fonction doit prendre en paramètre httpRequest et un tableau de paramètres
 * @param   params      Tableau de paramètres passés à la fonction
 */
function makeRequest(url, fonction, params) {
    var httpRequest = false;
    if (window.XMLHttpRequest) { // Mozilla, Safari,...
        httpRequest = new XMLHttpRequest();
        if (httpRequest.overrideMimeType) {
            httpRequest.overrideMimeType('text/xml');
        }
    }
    else if (window.ActiveXObject) { // IE -7
        try {
            httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e) {
            try {
                httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch (e) {}
        }
    }
    if (!httpRequest) {
        return false;
    }
    httpRequest.onreadystatechange = function() { fonction(httpRequest, params); };
    httpRequest.open('GET', url, true);
    httpRequest.send(null);
}


/**
 * Ajout une option à un select
 * @param select objet select
 * @param object object xml ajouté au select 
 */
function selectAppendChild(select, object) {
	var id = object.getAttribute('id');
	var name = object.lastChild.nodeValue;
	var html = '<option value="'+id+'">'+name+'</option>';
	select.options[select.options.length] = new Option(name, id);
}

/**
  * Fonction de mise à jour des listes du wiki
  * @param  httpRequest     Objet AJAX
  * @param  params          Paramètres, non utilisé
  */
func_update_wiki_lists = function updateWikiList(httpRequest, params) {
    if (httpRequest.readyState == 4) {
        if (httpRequest.status == 200) {
            var selectSongs = document.getElementById('wikicode_song');
            var selectDiscs = document.getElementById('wikicode_disc');
            var selectConcerts = document.getElementById('wikicode_concert');
            var root = httpRequest.responseXML;
            
            var songs = root.getElementsByTagName('songs')[0].getElementsByTagName('song');
            for (var i = 0; i < songs.length; i++) {
            	selectAppendChild(selectSongs, songs[i]);
            }
            
            var discs = root.getElementsByTagName('discs')[0].getElementsByTagName('disc');
            for (var i = 0; i < discs.length; i++) {
            	selectAppendChild(selectDiscs, discs[i]);
            }
            
            var concerts = root.getElementsByTagName('concerts')[0].getElementsByTagName('concert');
            for (var i = 0; i < concerts.length; i++) {
            	selectAppendChild(selectConcerts, concerts[i]);
            }            
        }
    }
}

/**
 * Appel AJAX de la mise à jour des listes du wiki
 * @param root_path chemin relatif à la racine du site (par rapport à la page appelant)
 * @param lang langue avec la quelle la lite sera chargée
 */
function initWikiLists(root_path, lang) {
    makeRequest(root_path+'wiki/get_lists.php?dclang='+lang, func_update_wiki_lists, new Array());
}

