/**
* Système de Commentaires en AJAX

* MagicCorporation WebSystem v6.0
* Gestionnaire de Contenu pour site Internet
* 
* @package      MC6
* @subpackage   index
* @author       Jean-Christophe Taisne <amonra@magiccorporation.com>
* @link         http://mc6.magiccorporation.com 
* @copyright    2000-2009 MagicCorporation
* @version      6.0 $Id: comment.js 610 2009-02-26 14:23:11Z amonra $
*/

document.include('mc6/librairies/js/smooth-src-comments.js');

/**
* Arret du Scroll de souris
* @see : smooth-src-comments.js
*/
function stopScroll() {
	clearInterval(Scroller.interval);
}

/**
* Sauvegarde d'un Commentaire
*/
function comment_save() {
	var num = $F('num');
	var rub = $F('rub');
	var file = $F('file');
	var title = $F('title');
	var inst = FCKeditorAPI.GetInstance("commentaire"); // ID/NAME du textarea si on doit changer un jour
	var comment = inst.GetHTML();
    
	if(title != "" && comment != "") {	
		new Ajax.Request('mc.php', {
		    method      : 'POST',
			parameters  : {
                rub         : "index", 
                file        : "ajax", 
                num         : num, 
                rub_com     : rub, 
                file_com    : file, 
                title       : title, 
                comment     : comment, 
                op          : "comment_add"
            },
		    onSuccess   : function(transport) {
					comment_list(num, rub, file, 0, true);
					$('title').value= "";
					var inst = FCKeditorAPI.GetInstance("commentaire");
					inst.SetData('');
			},
		    onFailure   : function() {
                $('divAddComment').innerHTML = "Il y a eu un problème.";
            }
		});	
	} else
		alert("Vous devez remplir le Titre et votre Commentaire.");
}

/**
* Liste des Commentaires
*/
function comment_list(num, rub, file, page, isScroll) {
	if($('divChargement')) {
        $('divChargement').innerHTML += "<img id='imgChargement' src='images/gif/ajax-loader.gif'>";
		$('divChargement').innerHTML += " <b>Chargement des Commentaires ...</b>";
	}
	new Ajax.Request('mc.php', {
	    method      : 'POST',
		parameters  : {
            rub         : "index", 
            file        : "ajax", 
            num         : num, 
            rub_com     : rub, 
            file_com    : file, 
            op          : "comment_list", 
            page        : page
        },
	    onSuccess   : function(transport) {
			var response = transport.responseText || "Il n'y a pas de commentaire";
			$('comments').innerHTML = response;		
			if(isScroll) {
				var a = $('comment_last');
				clearInterval(Scroller.interval);
				Scroller.interval = setInterval('Scroller.scroll('+Scroller.gy(a)+')',10);
			}
	    },
	    onFailure   : function() { 
            $('comments').innerHTML = "Il y a eu un problème."; 
        }
	});		
}

var editionEnCours = false;

/**
* Modification d'un commentaire
*/
function comment_modif(id, obj, nomValeur, type, uid, page) {
	if(editionEnCours)
		return false;
	else
		editionEnCours = true;
	//Objet servant à l'édition de la valeur dans la page
	var input = null;
	//On crée un composant différent selon le type de la valeur à modifier
	switch(type) {
		//Valeur de type texte ou nombre
		case "texte":
		case "nombre"       : input = document.createElement("input"); break;
		//Valeur de type texte multilignes
		case  "texte-multi" : input = document.createElement("textarea"); break;
	}
	//Assignation de la valeur
 	if (obj.innerText)
		input.value = obj.innerText;
	else
		input.value = obj.textContent;
	//input.value = trim(input.value); 
	input.style.width  = "480px"; 
    //getTextWidth(input.value) + 30 + "px";
	if(type == "texte-multi"){
		
        //input.style.height  = "100px";
        //alert(getTextHeight(input.value));
        input.style.height = getTextHeight(input.value) + 20 + "px";
		comment_setInput(input, id);
	}
	//alert(obj.firstChild);
	//Remplacement du texte par notre objet input
	obj.innerHTML = "";
	obj.appendChild(input);
	//On donne le focus à l'input et on sélectionne le texte qu'il contient
	input.focus();
	input.select();
	//Sortie de l'input
	input.onblur = function sortir() {
		comment_sauverMod(id, obj, nomValeur, input.value, type, uid);
		delete input;
		var num = $F('num');
		var rub = $F('rub');
		var file = $F('file');
		comment_list(num, rub, file, ++page, false);
	};
}

/**
* Initialisation des Commantaires
*/
function comment_setInput(input, id) {
 	new Ajax.Request('mc.php', {
	    method      : 'POST',
		parameters  : { 
            rub     : "index", 
            file    : "ajax", 
            num     : id, 
            op      : "comment_get" 
        },
	    onSuccess   : function(transport) {
			var response = transport.responseText || "Il n'y a pas de commentaire";
			//alert(response);
			input.value = encodeHTML(response);
			//input.value = response;
	    },
	    onFailure   : function() { 
            alert("Input initialization failed."); 
        }
	});	 
}

/**
* Fonction de sauvegarde des modifications apportées
*/
function comment_sauverMod(id, obj, nomValeur, valeur, type, uid) {
	new Ajax.Request('mc.php', {
	    method      : 'POST',
		parameters  : {
            rub         : "index", 
            file        : "ajax", 
            id_comment  : id, 
            op          : "comment_modif", 
            nomValeur   : nomValeur, 
            valeur      : valeur, 
            uid         : uid
        },
	    onSuccess   : function(transport) {
			//Réinitialisation de la variable d'état d'édition
			editionEnCours = false;
			//Remplacement de l'input par le texte qu'il contient
			//obj.replaceChild(document.createTextNode(valeur), obj.firstChild);
	    },
	    onFailure   : function() {
            alert("Il y a eu un problème dans la sauvegarde."); 
        }
	});
}

/**
* Supression d'un Commentaire
*/
function comment_suppr(id_comment, uid_comment, num, rub, file, page){
    if (!confirm("Êtes vous sur de vouloir supprimer ce commentaire ?"))
        return false;  
	page++;
	new Ajax.Request('mc.php', {
	    method      :'POST',
		parameters  : {
            rub         : "index", 
            file        : "ajax", 
            id_comment  : id_comment, 
            op          : "comment_suppr", 
            uid_comment : uid_comment
        },
	    onSuccess   : function(transport) {
			comment_list(num, rub, file, page, false);
	    },
	    onFailure   : function() {
            alert("Il y a eu un problème à la suppresion."); 
        }
	});				
}

/**
* Suppression des espaces/sauts de ligne inutiles
* @link : http://www.breakingpar.com/bkp/home.nsf/0/87256B280015193F87256C0C0062AC78
*/  
function trim(value) {
    var temp = value;
    var obj = /^(\s*)([\W\w]*)(\b\s*$)/;
    if (obj.test(temp)) { temp = temp.replace(obj, '$2'); }
    var obj = /  /g;
    while (temp.match(obj)) { temp = temp.replace(obj, " "); }
    return temp;
}

/**
* Fonction donnant la largeur en pixels du texte donné
*/
function getTextWidth(texte) {
	//Valeur par défaut : 150 pixels
	var largeur = 150;
	if(texte == "")
	    return largeur;
	//Création d'un span caché que l'on "mesurera"
	var span = document.createElement("span");
	span.style.visibility = "hidden";
	span.style.position = "absolute";
	//Ajout du texte dans le span puis du span dans le corps de la page
	span.appendChild(document.createTextNode(texte));
	document.getElementsByTagName("body")[0].appendChild(span);
	//Largeur du texte
	largeur = span.offsetWidth;
	//Suppression du span
	document.getElementsByTagName("body")[0].removeChild(span);
	span = null;
	return largeur;
}

/**
* Fonction donnant la largeur en pixels du texte donné
*/
function getTextHeight(texte) {
    //Valeur par défaut : 150 pixels
    var largeur = 150;
    if(texte == "")
        return largeur;
    //Création d'un span caché que l'on "mesurera"
    var span = document.createElement("span");
    span.style.visibility = "block";
    span.style.position = "absolute";
    span.style.width = "500px";
    //Ajout du texte dans le span puis du span dans le corps de la page
    //span.appendChild(document.createTextNode(texte));
    span.innerHTML = texte.split('\n').join('<br />');
    document.getElementsByTagName("body")[0].appendChild(span);
    
    //Largeur du texte
    largeur = span.offsetHeight;
    //Suppression du span
    document.getElementsByTagName("body")[0].removeChild(span);
    span = null;
    return largeur;
}

/**
* Fonction renvoyant le code de la touche appuyée lors d'un événement clavier
*/
function getKeyCode(evenement) {
    for(prop in evenement)
        if(prop == 'which')
            return evenement.which;
    return evenement.keyCode;
}


/**
* Listener
*/
function editor_commentaire() {
    if($('commentaire')) {
        var oFCKeditor_commentaire = new FCKeditor('commentaire');
        oFCKeditor_commentaire.BasePath = 'mc6/src/fckeditor/';
        oFCKeditor_commentaire.Width = '100%'; 
        oFCKeditor_commentaire.Height = '200';
        oFCKeditor_commentaire.ToolbarSet = 'Comment';
        oFCKeditor_commentaire.ReplaceTextarea();
    }
}
//addListener(window, 'load', editor_commentaire);  
// Fonction permettant de remplacer le OnLoad d'un addListener avant les chargements d'images, merci Julien Tartarin de lexode.com
function trytoload_editor_commentaire() {
   if(typeof editor_commentaire == "function" && document.getElementById('footer')) {
       editor_commentaire();
   } else {
       setTimeout("trytoload_editor_commentaire();", 100);
   }
}
trytoload_editor_commentaire();
 
function iniEventHandlers() {
    if($('btnSubmit'))
        addListener($('btnSubmit'), 'click', comment_save);
    if($('addComment'))    
        comment_list($F('num'),$F('rub'),$F('file'), 0, false);
    else
        comment_list($F('num_tmp'),$F('rub_tmp'),$F('file_tmp'), 0, false);
}    
//addListener(window, 'load', iniEventHandlers);
// Fonction permettant de remplacer le OnLoad d'un addListener avant les chargements d'images, merci Julien Tartarin de lexode.com
function trytoload_iniEventHandlers() {
   if(typeof iniEventHandlers == "function" && document.getElementById('footer')) {
       iniEventHandlers();
   } else {
       setTimeout("trytoload_iniEventHandlers();", 100);
   }
}
trytoload_iniEventHandlers();


if (window.addEventListener)
    addListener(window, 'DOMMouseScroll', stopScroll);
else
    window.onmousewheel = document.onmousewheel = stopScroll;




