/**
 * Constructeur
 * @param id L'id unique du widget. Doit etre l'id du conteneur qui englobe TOUS les controles
 */
function cmsWidget(id, basePath, langues, savePath, adminBarreScroll)
{	
	var id = id;
	controls = trouverInfos(id, basePath, langues, savePath, adminBarreScroll);
	init(controls);
}
/**
 * Trouve les champs utiles pour le widget
 * @param id L'id unique du widget. Doit etre l'id du conteneur qui englobe TOUS les controles
 * @returns Une structure contenant les champs utiles.
 */
function trouverInfos(id,basePath, langues, savePath, adminBarreScroll)
{
        var cms_id     = $("#"+id).find("input[name=cms_id]");
	var modifier   = $("#"+id).find("a[name=modifierCmsAdmin]");
        var supprimer  = $("#"+id).find("a[name=supprimerCmsAdmin]");
	var voir       = $("#"+id).find("a[name=voirCmsAdmin]");
	var status     = $("#"+id).find("img[name=status]");
	var texte       = $("#"+id).find("div.texteCms");
	var titre	   = $("#"+id).find("div.titreCms");
	var texteEdit  = $("#"+id).find("div.texteCmsEdit");
	var titreEdit  = $("#"+id).find("div.titreCmsEdit");	
	var barreAdmin = $("#"+id).find("div.cms_admin");
	var conteneur  = $("#"+id).find("div.cms_conteneur");
	var formulaire = $("#"+id).find("form");
	
	var controls = {
			"id" : id,
                        "cms_id" : cms_id,
			"basePath" : basePath, 
			"modifier": modifier,
                        "supprimer": supprimer,
			"voir": voir,
			"status": status,
			"texte": texte,
			"titre": titre,
			"texteEdit": texteEdit,
			"titreEdit": titreEdit,
			"barreAdmin": barreAdmin,
			"conteneur": conteneur,
			"formulaire" : formulaire,
                        "langues": langues,
                        "savePath": savePath,
                        "adminBarreScroll": adminBarreScroll
			};
	return controls;
}
/**
 * Attache les ecouteurs aux controles et les envoies aux fonctions respectives
 * @param controls La structure contenant les controles du widget. Voir la fonction trouverInfos pour cette structure.
 */
function init(controls)
{
	$(controls.modifier).click(function(){return modifier_onclick(controls);});
        $(controls.supprimer).click(function(){return supprimer_onclick(controls);});
	$(controls.voir).click(function(){return voir_onclick(controls);});
	
	$("#"+ controls.id).mouseenter(function(){conteneur_mouseenter(controls);})
                           .mouseleave(function(){conteneur_mouseleave(controls);})
                           .mousemove(function(){conteneur_mousemove(controls);});
	$(controls.formulaire).submit(function(){return save(controls);});
        $(".langues_cms a").click(function(){
            var langue = $(this).attr("name");
            changerLangueCms(controls, langue);
            return false;
        });
        
        if(!controls.adminBarreScroll)
            $(controls.conteneur).click(function(){
                controls.barreAdmin.slideDown("slow");
            });
}
/******************** DEBUT DES ECOUTEURS *************************************/
function modifier_onclick ( controls )
{
    var titre = $(controls.conteneur).find("div.titreCms:visible");
    var texte = $(controls.conteneur).find("div.texteCms:visible");
    var titreEdit = $(controls.conteneur).find("div.titreCmsEdit:visible");
    var texteEdit = $(controls.conteneur).find("div.texteCmsEdit:visible");
	if(titre != undefined && texte != undefined  && titre.length != 0 && texte.length != 0) // si en mode vu
	{
            var langue = $(titre).attr("name");
            $(titre).hide();
            $(texte).hide();
            $(controls.conteneur).find("div.titreCmsEdit[name='"+langue+"']").show();
            $(controls.conteneur).find("div.texteCmsEdit[name='"+langue+"']").show();
            $(controls.modifier).children().attr("src", controls.basePath + "/images/icones/save.gif");
	}
	else if(titreEdit != undefined && texteEdit != undefined  && titreEdit.length != 0 && texteEdit.length != 0) // si en mode edition
	{
		// On update les champs ckeditor pour preparer le submit
		$(controls.formulaire).find("textarea").each(function(){
			var instance = $(this).attr("name");
			if(instance != undefined && CKEDITOR.instances[instance] != undefined)
                                $(controls.formulaire).find("textarea[name='"+instance+"']").html(CKEDITOR.instances[instance].getData());

		});
		// On post les champs
		return save ( controls );
	}
	return false;
}
function supprimer_onclick ( controls )
{
    if(confirm('Voulez-vous vraiment supprimer le texte "' + $(controls.titre).find("div[name=titreCmsConteneur]").html() + '"'))
        $.post("cms/supprimer", {ajax: "1",cms_id: $(controls.cms_id).val()}, function(){location.reload();});
        
    return true;
}
function voir_onclick ( controls )
{
    if(!controls.adminBarreScroll)
        controls.barreAdmin.slideUp("slow");
    var titreEdit = $("div.titreCmsEdit:visible");
    var texteEdit = $("div.texteCmsEdit:visible");
    if(titreEdit != undefined && texteEdit != undefined)
    {
        var langue = $(titreEdit).attr("name");
        $(titreEdit).hide();
	$(texteEdit).hide();
        $("div.titreCms[name='"+langue+"']").show();
        $("div.texteCms[name='"+langue+"']").show();
        $(controls.modifier).children().attr("src", controls.basePath + "/images/icones/crayon.png");
    }
	return false;
}
var en_action = false;
function conteneur_mouseenter ( controls )
{
    if(!en_action && controls.adminBarreScroll == true)
    {
        en_action = true;
        controls.barreAdmin.slideDown("slow", function(){en_action = false;});
    }
}
function conteneur_mousemove ( controls )
{
    conteneur_mouseenter(controls);
}
function conteneur_mouseleave ( controls )
{
    if(!en_action && controls.adminBarreScroll == true)
    {
        en_action = true;
        controls.barreAdmin.delay(600).slideUp("slow", function(){en_action = false;});
    }
}
/********************  FIN DES ECOUTEURS  ******s1.partners.gen-z.ca*******************************/
/******************** DEBUT DES FONCTIONS *************************************/
function save ( controls )
{
    var champs = {};
    for(var i in controls.langues)
        {
            var lg = controls.langues[i];
            var titre = $(controls.formulaire).find("input[name*='titre_"+lg+"']");
            var texte = $(controls.formulaire).find("textarea[name*='texte_"+lg+"']");
            if(titre == undefined || texte == undefined)
                continue;
            champs["titre_"+lg] = titre.val();
            champs["texte_"+lg] = texte.val();
        }
    
    var cms_id = $(controls.formulaire).find("input[name=cms_id]");
    if(cms_id == undefined)
        return false;
    else
        cms_id = cms_id.val();
    
    // Mettre l'icone de chargement ajax
    changeSatus ( controls, true );
    
    champs["ajax"] = "1";
    champs["cms_id"] = cms_id;
    
    $.post(
            controls.savePath,
            champs,
            function(response){
                for(var i in controls.langues)
                    {
                        var lg = controls.langues[i];
                        var titre_retour = response.data["titre_"+lg];
                        var titre_affiche = $(controls.conteneur).find("div.titreCms[name='"+lg+"']").find("div[name='titreCmsConteneur']");
                        
                        var texte_retour = response.data["texte_"+lg];
                        var texte_affiche = $(controls.conteneur).find("div.texteCms[name='"+lg+"']").find("div[name='texteCmsConteneur']");
                        
                        if(titre_retour != undefined && titre_affiche != undefined && titre_affiche.length > 0)
                            $(titre_affiche).html(titre_retour);
                        if(texte_retour != undefined && texte_affiche != undefined && texte_affiche.length > 0)
                            $(texte_affiche).html(texte_retour);
                    }
                changeSatus ( controls );
            },
            "json"
        )
       .error(
            function(jqXHR, textStatus, errorThrown) {
                alert("Oups ! Une erreur s'est produite.\n\nInformation: "+errorThrown);
            }
        );
    	return false;
}
function changeSatus( controls, chargement )
{
	if(chargement != undefined && chargement == true)
		$(controls.status).show();
	else
		$(controls.status).hide();
}
function changerLangueCms( controls, langue)
{
    var titre = $(controls.conteneur).find("div.titreCms:visible");
    var texte = $(controls.conteneur).find("div.texteCms:visible");
    var titreEdit = $(controls.conteneur).find("div.titreCmsEdit:visible");
    var texteEdit = $(controls.conteneur).find("div.texteCmsEdit:visible");
    if(titre != undefined && texte != undefined  && titre.length != 0 && texte.length != 0) // si en mode vu
    {
        $(titre).hide();
        $(texte).hide();
        $(controls.conteneur).find("div.titreCms[name='" + langue + "']").show();
        $(controls.conteneur).find("div.texteCms[name='" + langue + "']").show();
    }
    else if(titreEdit != undefined && texteEdit != undefined  && titreEdit.length != 0 && texteEdit.length != 0)
    {
        $(titreEdit).hide();
        $(texteEdit).hide();
        $(controls.conteneur).find("div.titreCmsEdit[name='" + langue + "']").show();
        $(controls.conteneur).find("div.texteCmsEdit[name='" + langue + "']").show();
    }
}
//Utils 

function print_r(obj) {
  win_print_r = window.open('about:blank', 'win_print_r');
  win_print_r.document.write('<html><body>');
  r_print_r(obj, win_print_r);
  win_print_r.document.write('</body></html>');
 }

 function r_print_r(theObj, win_print_r) {
  if(theObj.constructor == Array ||
   theObj.constructor == Object){
   if (win_print_r == null)
    win_print_r = window.open('about:blank', 'win_print_r');
   }
   for(var p in theObj){
    if(theObj[p].constructor == Array||
     theObj[p].constructor == Object){
     win_print_r.document.write("<li>["+p+"]=>"+typeof(theObj)+"</li>");
     win_print_r.document.write("<ul>")
     r_print_r(theObj[p], win_print_r);
     win_print_r.document.write("</ul>")
    } else {
     win_print_r.document.write("<li>["+p+"] =>"+theObj[p]+"</li>");
    }
   }
  win_print_r.document.write("</ul>")
 }
 
 function isNumber(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}
/********************  FIN DES FONCTIONS  *************************************/
