/**
 * @copyright Copyright 2008 WnG Solutions Sàrl, all rights reserved
 * @author Dorian Villet <dorian.villet@wng.ch>
 * @author Quentin Mathey <quentin.mathey@wng.ch>
 * @author Daniel Calderini <daniel.calderini@wng.ch>
 * @package WnG Canal XML
 *
 * @filename action.js
 * @version 1.0.0
 * @date 2008-08-28
 */

/**
 * Fonctions JavaScript pour la box "Votre soirée"
 */

//
// Les variables globales suivantes sont utilisée dans la partie "Défilement" du script
//


// La vitesse de défilement actuelle
var currentScrollSpeed = 1;

// La vitesse de défilement maximum
var maxScrollSpeed = 5;

//
var MyInterval;

// Le temps à attendre avant d'effectuer une accélération
var timeSpeedUp = 800; // Miliseconds

// La date actuelle
var startDate = new Date();

// Le temps, en milisecondes, depuis le 01.01.1970
var startTime = startDate.getTime();
	
	
	
	
	
	
	
	
	
	
/********************************************
 *
 * CHARGEMENT ET AFFICHAGE DES FLUX XML
 *
 ********************************************/


/**
 * Construit une requête AJAX compatible entre les navigateurs
 *
 * @return XMLHttpRequest / ActiveXObject
 */
function getXMLHttpRequest() {
	var xhr = null;
 
	if (window.XMLHttpRequest || window.ActiveXObject) {
		if (window.ActiveXObject ) {
			try {
				xhr = new ActiveXObject('Msxml2.XMLHTTP');
			} catch (e) {
				xhr = new ActiveXObject('Microsoft.XMLHTTP');
			}
		} else {
			xhr = new XMLHttpRequest();
		}
	} else {
		alert('Navigateur incompabile XMLHTTPRequest');
		return null;
	}

	return xhr;
}

/**
 * Charge une URL et place la réponse dans un élément HTML
 *
 * @param string urlPage URL de la page à charger
 * @param string idResponse ID de l'élément HTML dans lequel il faut placer la réponse
 * @return void
 */
function httpRequest(urlPage, idReponse) {
	var xhr = getXMLHttpRequest();
	var responseContent = '';
	var element = xmlGetElement(idReponse);
	
	if (xhr && xhr.readyState != 0)
		xhr.abort(); 
	
	// Contenu de la box en attendant le chargement
	element.innerHTML = 'Chargement en cours...';
	
	xhr.onreadystatechange = function() { 
		if (xhr.readyState == 4 && xhr.status == 200) {
			// Remettre le scroll en haut
			element.scrollTop = 0;
			element.innerHTML = xhr.responseText;
		}
	}
	
	xhr.open('GET', urlPage, true);
	xhr.send(null);	
}

/**
 * Charge un autre jour
 *
 * @param string urlPage URL de la page à charger
 * @param string idResponse ID de l'élément HTML dans lequel placer le résultat
 * @param string idMenu ID de l'élément du menu sur lequel on a cliqué
 * @return void
 */
function ajaxGetXMLContent(urlPage, idReponse, idMenu) {
	// Affichage du contenu XML
	httpRequest(urlPage, idReponse);
	
	// Gestion des éléments actifs du menu
	switchMenuStatus(idMenu);
}

/**
 * Change l'élément de menu actif
 *
 * @param string idMenu Identifiant de l'élément du menu à activer
 * @return void
 */
function switchMenuStatus(idMenu) {
	// Désactive l'ancien lien actif
	var menuContainer = xmlGetElement('boxYourEveningMenu');
	var elements = menuContainer.getElementsByTagName('li');
	
	for (i = 0; i < elements.length; i++) {
		elements[i].setAttribute("class", "menuOff");
		elements[i].setAttribute("className", "menuOff");
	}
	
	// Active le nouvel élément
	var newElement = xmlGetElement(idMenu);

	newElement.setAttribute("class", "menuOn");
	newElement.setAttribute("className", "menuOn");
	
	return;
}

/**
 * Ouvre un popup avec le detail de la diffusion
 *
 * @param string url Adresse de la page dans le popup
 * @return void
 */
function openPopUp(url) {
	window.open(
		url,
		'',
		config = 'height=584, width=400, toolbar=no, menubar=no, scrollbars=no, resizable=no, location=yes, directories=no, status=no'
	);
}
	
	
	
	
	
	
	
	
	
	
/********************************************
 *
 * DEFILEMENT DU CONTENU
 *
 ********************************************/
	
	
/**
 * Cette fonction est appelée au survol des flêches de défilement.
 * Elle appelle à interval régulier la fonction moveDiv qui effectue le défilement
 *
 * @param string direction Le sens du défilement; valeurs possibles: "up" ou "down"
 * @param int vitesseDefilement Le temps, en milisecondes, qui s'écoulera entre les appels à la fonction moveDiv
 * @param string contentId ID du bloc HTML à déplacer
 * @return void
 */
function Annim(direction, vitesseDefilement, contentId) {
	MyInterval = setInterval("moveDiv('" + direction + "', '" + contentId + "')", vitesseDefilement);
}

/**
 * Fait defiler vers le haut ou le bas le div cible
 *
 * @param string direction Voir Annim
 * @param string contentId Voir Annim
 * @return void
 */
function moveDiv(direction, contentId) {
	var div = xmlGetElement(contentId);
	var currentDate = new Date();
	var currentTime = currentDate.getTime();
	
	if ((startTime + 800) < currentTime && currentScrollSpeed <= maxScrollSpeed) {
		startDate = new Date();
		startTime = startDate.getTime();
		
		currentScrollSpeed ++;
	}
	
	if (direction == 'up') div.scrollTop -= currentScrollSpeed;
	else if (direction == 'down') div.scrollTop += currentScrollSpeed;
}

/**
 * Arrête l'animation en coupant le setInterval
 *
 * @return void
 */
function stopAnnim() {
	clearInterval(MyInterval);
	currentScrollSpeed = 1;
}
	
	
	
	
	
	
	
	
	
	
/********************************************
 *
 * FONCTIONS GENERALES
 *
 ********************************************/
	
	
/**
 * Retourne document.all[id] s'il est disponible (IE principalement), document.getElementById(id) dans les autre cas
 *
 * @param string id
 * @return resource/bool
 */
function xmlGetElement(id) {
	if (document.all)
		var	e = document.all[id];
	else
		var e = document.getElementById(id);
	
	if (e)
		return e;
	else
		return false;
}

/**
 * Equivalent JS à la fonction PHP substr()
 * Retourne une portion de la chaîne f_string commençant à f_start caractère et de longueur f_length
 *
 * @param string f_string
 * @param int f_start
 * @param int f_length
 * return string
 */
function substr(f_string, f_start, f_length) {
	// http://kevin.vanzonneveld.net
	// +     original by: Martijn Wieringa
	// *         example 1: substr('abcdef', 0, -1);
	// *         returns 1: 'abcde'
	
	if (f_start < 0) f_start += f_string.length;
	
	if (f_length == undefined) f_length = f_string.length;
	else if (f_length < 0) f_length += f_string.length;
	else f_length += f_start;
	
	if (f_length < f_start) f_length = f_start;
	
	return f_string.substring(f_start, f_length);
}