// DONE : Parser un item en mémoire
// DONE : Afficher un item
// DONE : Add allow cross origin pour tous les XML...
// DONE : Mettre des liens pour switcher realtime / 24h / etc...
// DONE : Parser un user + Afficher un user
// DONE : Parser un commentaire + Afficher un commentaire.
// DONE : Créer un commentaire.
// DONE : Pouvoir Se loguer
// DONE : Voter affiche le score incrémenté
// DONE : Ajout de commentaire, le com' s'ajoute en live
// DONE : Vote retour du message d'erreur
// DONE : Comments retour message d'erreur
// DONE : Comments afficher sous forme time_ago la date (fait en jquery qui se rafrachi en live + i18n !)
// DONE : Refactoring dans le parsing de commentaire.
// DONE : Items.created_at sous forme de time_ago.
// DONE : refactoring méthod parse_items
// DONE : Friends a récup...
// DONE : Charger les items du site courant et non twituu.local en dur ...
// DONE : Parsing complet d'un user + store en session (+localStore) de l'utilisateur
// DONE : Onglet Moi ; si logged alors afficher infos + lien se déconnecter
// DONE : Afficher mes propres contrib 20min
// DONE : Items New : Affichage Ajax + retours d'erreurs. 20min
// DONE : Récupérer toutes les infos de l'utilisateur dans l'item et le commentaire
// DONE : ITEM FULL : Affiche un item full. récup l'item + Template jquery + affichage
// DONE : Affichage de l'avatar de l'utilisateur
// DONE : Pouvoir s'inscrire

// DONE :  Gestion Item full
/// Solution comme pour Android : Mettre en mémoire différentes listes d'items.
/// => PB les navigateur web, on contrairement a mon app native android, l'intelligence de ne pas
/// refaire un appels API alors que le header HTTP indique "merci de le mettre en cache 60sec".
/// Ce qui augmente la rapidité de l'application et diminue la bande passante de waluu donc c'est cool.
/// Mais du coup la liste mise en mémoire n'est pas MAJ. Et du coup ca plante lorsqu'on clique sur voir l'item full.
/// Du coup il faudrai détecter se cas de figure qui fait planter (facile) puis dans ce cas charger item full par
/// un appel AJAX qui charge l'item.

/// Solution SQLite : Consiste a mettre dans un BD local (coté client) tous les items récupéré.
/// Inconvients, c'est du boulo a mettre en place + j'ignore combien de navigateurs supportent cette fonctionnalité HTML 5.
/// Avantages, c'est le top niveau rapidité, ca permet meme la consultation  hors ligne

/// Solution Supprimer Item Full : Consiste a ne plus avoir la vu Item Full. Ou plus exactement d'intégré tout l'html
/// de la vue item_full dans l'item line, mais d'y caché par défaut. Lorsque l'utilisateur clic sur voir l'item full.
/// Alors on affiche cet item full (contenu dans l'item line) et on cache la parti visible de l'item line.
/// Avantage : Pu de pb de gestion en mémoire des items, meilleur réactivité,
/// pu besoin de faire parfois 2 appels API pour charge l'item full (si solution 1),
/// et c'est clairement plus rapide a mettre en place que SQLite.

// DONE : Supprimer ses propres commentaires et ceux sur ces contrib
// DONE : Supprimer ses items.
// DONE : Gerer le mode not_logged et le mode logged_in
// DONE : Items Show: Gerer les types image 30min
// affichage : récup des différents format d'url lors du parsing
//             si des url sont detecter en image afficher l'image.
// item row full : afficher la version big de l'image...
// Envoi : voir des plugin d'envoi d'image...
// TODO : Items Show: Gerer les types link 30min
// TODO : Items New : Gerer les types image
// TODO : Items New : Gerer les types link

// TODO : Pouvoir changer de service.

// TODO : Afficher mon flux DM
// TODO : Afficher mon flux notices
// TODO : Editer mon profil.
// TODO : Envoyer ma photo de profil.

/****************************
 * MAIN
 ***************************/
///////////////////////////////
// VARIABLES GLOBAL
///////////////////////////////


var mode_dev=true; //passer à false avant COMMIT
var mode_fb=false;
var mode_extension=false;

/* DETECTION TYPE D'APPLICATION (Facebook, Extension Chrome, WebMobile iPhone/Android/Blackberry/Autres/WP7, AppMobile (WP7,BlackBerry) */

// Obtenir les variables dans l'URL : Extension JQUERY utilisation : $.getUrlVar('nom_param_url');
$.extend({
  getUrlVars: function(){
    var vars = [], hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    for(var i = 0; i < hashes.length; i++)
    {
      hash = hashes[i].split('=');
      vars.push(hash[0]);
      vars[hash[0]] = hash[1];
    }
    return vars;
  },
  getUrlVar: function(name){
    return $.getUrlVars()[name];
  }
});
;


url_mode = $.getUrlVar('mode'); //get params "mode" dans l'URL parmi : facebook | web_mobile | app_mobile | extension

if(url_mode=="facebook"){
	mode_fb=true;
	
}
else if(url_mode=="extension"){
	mode_extension=true;
}
else if(url_mode=="web_mobile"){
}
else if(url_mode=="app_mobile"){
}

var stored_login = "login";
var stored_password = "password";
var stored_user = "user";
var stored_access_token = "access_token";

var current_sub_section=""
var current_since = ""; //connaitre le since courant (current_sub_section possible)
var current_page = 0; //
var current_section = ""; //tops|friends|me|user (utile pour flux user more items par ex)
var current_user_id = ""; //(utile pour flux user more items)
var current_item_created_at = ""; //(utile pour rafraichir)
var current_more_item_created_at = ""; //pour more_item
var current_item_id=""; //TMP pour ajout commentaire
var current_comment=""; //TMP pour ajout commentaire
var current_to_user_login=""; //TMP pour ajout MP mode "répondre"
//var current_to_user_id=""; //TMP pour ajout MP dans Flux User (bouton options > enoyer un MP = id et non login)


//
var host = "www.waluu.com";
//var host = window.location.hostname;
if ($.getUrlVar('host')!=undefined)
	host = $.getUrlVar('host');
var port = window.location.port;
var clic_vote=false;
var clic_flag=true;
var refresh=false;
var host_maj=""; //Host avec humanize et sans tld
var sites_name={};


sites_name={
    key2: {id:2, name : 'Piicpets', favicon_url : 'http://waluu-eu-sites-production.s3.amazonaws.com/piicpets.com/2/favicons-original.png' },
    key6: {id:6, name : 'Jookees', favicon_url : 'http://waluu-eu-sites-production.s3.amazonaws.com/jookees.com/6/favicons-original.png' },
    key7: {id:7,name:'Poeemms',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/poeemms.com/7/favicons-original.png' },
    key8: {id:8,name:'Knily',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/knily.com/8/favicons-original.png'},
    key9: {id:9,name:'Waluu',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/waluu.com/9/favicons-original.png'},
    key10: {id:10,name:'Piiclook',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/piiclook.com/10/favicons-original.png'},
    key11: {id:11,name:'Piicscreen',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/piicscreen.com/11/favicons-original.png'},
    key12: {id:12,name:'Tiipps',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/tiipps.com/12/favicons-original.png'},
    key13: {id:13,name:'Mister-Finger',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/mister-finger.com/13/favicons-original.png'},
    key14: {id:14,name:'Noostalgic',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/noostalgic.com/14/favicons-original.png'},
    key15: {id:15,name:'Jolihome',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/jolihome.com/15/favicons-original.png'},
    key17: {id:17,name:'Jolifood',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/jolifood.com/17/favicons-original.png'},
    key18: {id:18,name:'101Stats',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/101stats.com/18/favicons-original.png'},
    key19: {id:19,name:'Masterfail',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/masterfail.com/19/favicons-original.png'},
    key20: {id:20,name:'EntenduALaTv',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/entendualatv.fr/20/favicons-original.png'},
    key21: {id:21,name:'FuturCadeau',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/futurcadeau.com/21/favicons-original.png'},
    key22: {id:22,name:'CestLaCrise',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/cestlacrise.fr/22/favicons-original.png'},
    key23: {id:23,name:'MyBabyShirt',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/mybabyshirt.com/23/favicons-original.png'},
    key24: {id:24,name:'MyBuzzShirt',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/mybuzzshirt.com/24/favicons-original.png'},
    key25: {id:25,name:'MyG33KShirt',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/myg33kshirt.com/25/favicons-original.png'},
    key27: {id:27,name:'Imagello',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/imagello.com/27/favicons-original.png'},
    key28: {id:28,name:'Twituu',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/twituu.com/28/favicons-original.png'},
    key29: {id:29,name:'Labscode',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/labscode.com/29/favicons-original.png'},
    key30: {id:30,name:'InsultesDeGeek',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/insultesdegeek.fr/30/favicons-original.png'},
    key31: {id:31,name:'Questina',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/questina.com/31/favicons-original.png'},
    key32: {id:32,name:'Newsleta',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/newsleta.com/32/favicons-original.png'},
    key39: {id:39,name:'Postuu',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/postuu.com/39/favicons-original.png'},
    key40: {id:40,name:'Geeklive',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/geeklive.net/40/favicons-original.png'},
    key41: {id:41,name:'SiToiAussi',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/sitoiaussi.net/41/favicons-original.png'},
    key42: {id:42,name:'LiveMeteo',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/livemeteo.net/42/favicons-original.png'},
    key43: {id:43,name:'DailyMee',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/dailymee.com/43/favicons-original.png'},
    key44: {id:44,name:'MeWeez',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/meweez.net/44/favicons-original.png'},
    key45: {id:45,name:'Live-Tele',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/live-tele.net/45/favicons-original.png'},
    key46: {id:46,name:'DiauADit',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/dieuadit.fr/46/favicons-original.png'},
    key47: {id:47,name:'Androify',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/androify/47/favicons-original.png'},
    key48: {id:48,name:'LiveFoot',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/livefoot.me/48/favicons-original.png'},
    key49: {id:49,name:'BlagueTaMere',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/blaguetamere.fr/49/favicons-original.png'},
    key50: {id:50,name:'BlagueBlonde',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/blagueblonde.com/50/favicons-original.png'},
    key51: {id:51,name:'Frimeur',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/frimeur.net/51/favicons-original.png'},
    key52: {id:52,name:'SexyPasSexy',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/sexypassexy.com/52/favicons-original.png'},
    key53: {id:53,name:'CityLive',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/citylive.me/53/favicons-original.png'},
    key54: {id:54,name:'Toonify',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/toonify.me/54/favicons-original.png'},
    key55: {id:55,name:'MesDessins',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/mesdessins.me/55/favicons-original.png'},
    key56: {id:56,name:'BuzzVideo',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/buzzvideo.me/56/favicons-original.png'},
    key57: {id:57,name:'MaDefinition',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/MaDefinition/57/favicons-original.png'},
    key58: {id:58,name:'BuzzImage',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/buzzimage/58/favicons-original.png'},
    key59: {id:59,name:'JeuxVideo',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/JeuxVideo/59/favicons-original.png'},
    key60: {id:60,name:'ChuckNorris',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/chucknorris/60/favicons-original.png'},
    key61: {id:61,name:'JaiReveDe',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/JaiReveDe/61/favicons-original.png'},
    key62: {id:62,name:'CoupDeGueule',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/CoupDeGueule/62/favicons-original.png'},
    key63: {id:63,name:'LiveTrafic',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/LiveTrafic/63/favicons-original.png'},
    key64: {id:64,name:'LiveRencontre',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/LiveRencontre/64/favicons-original.png'},
    key65: {id:65,name:'Prediction',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/prediction/65/favicons-original.png'},
    key66: {id:66,name:'LiveAndroid',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/liveandroid/66/favicons-original.png'},
    key67: {id:67,name:'TchatDeGeek',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/tchatdegeek/67/favicons-original.png'},
    key68: {id:68,name:'PsychoDeCouple',favicon_url:'http://waluu-eu-sites-production.s3.amazonaws.com/psychodecouple/68/favicons-original.png'},
    key69: {id:69,name : 'EntenduDansLaRue', favicon_url : 'http://waluu-eu-sites-production.s3.amazonaws.com/entendudanslarue/69/favicons-original.png' },
    key70: {id : 70, name : 'VuALaTv', favicon_url : 'http://waluu-eu-sites-production.s3.amazonaws.com/vualatv/70/favicons-original.png' },
    key71: {id : 71, name : 'Citation', favicon_url : 'http://waluu-eu-sites-production.s3.amazonaws.com/citation/71/favicons-original.png' },
    key72: {id : 72, name : 'VisPasMaVie', favicon_url : 'http://waluu-eu-sites-production.s3.amazonaws.com/vispasmavie.com/72/favicons-original.png' }
};

if(port != null && port != "" && port != "80" )
    host += ":" + port;
// Détermination de l'host du service a partir de l'host de la requete.
console.log("host = " + host);
if (host.substring(0,2) == "m.") {
    host = host.substring(2);
    var count = host.match(/\./g);
    console.log(count.length);
    if (count.length < 2){
        host = "www." + host;
    }
}
console.log("host = " + host);

if(mode_dev){
    //host = "www.twituu.com";
    //host = "www.jookees.com";
    //host = "www.piicpets.com";
    //host = "www.dailymee.com";
    //host = "twituu.local:3000";
    //host = "www.entendualatv.fr";
    //host = "www.sexypassexy.com";
    host = "www.waluu.com:80";
    //host = "predictions.waluu.com";
    console.log("host = " + host);
}
var items = [];
var comments = [];
var session = {};

var xhr_with_auth={} ; // Contient la requete HTTP a executer en ajax avec Authentification.

///////////////////////////////
// END VARIABLES GLOBAL
//////////////////////////////


/*ESSAY OnScroll*/
//$(window).scroll(function(){ testScroll(); });

//scrollTop
//execute_more_items(null);
/*
testScroll = function(){
		$height = $(window).height();
		$scrolltop = $(window).scrollTop();
		
		console.log("$height ="+$height);
		console.log("$scrolltop ="+$scrolltop);
		console.log("$top ="+$(window).offset().top);
		$("[inview]").each(function(){
			$top = $(this).offset().top;
			if($scrolltop + $height >= $top){
                             //$(this).trigger('inview');
                             console.log("$scrolltop ="+$scrolltop );
			}
		});
	}
*/

/*(function(a){
    if(/android.+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|e\-|e\/|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|xda(\-|2|g)|yas\-|your|zeto|zte\-/i.test(a.substr(0,4)))
        return true;
})(navigator.userAgent||navigator.vendor||window.opera,'http://detectmobilebrowser.com/mobile');
*/
//////////////////////////////////////



// Lorsque le DOM est ready
$().ready(function() {
	
    // Récup de la session.
    session = retrieve_stored_session();
        
    console.log(session.login);

    var host_first_letter=host.substr(host.indexOf(".")+1,1).toUpperCase();
    host_maj=host_first_letter+host.substring(host.indexOf(".")+2,host.lastIndexOf("."));
    $("#message_bar").html("Bienvenue sur "+host_maj+" !");
    //var host_maj=host;
    $("#titlebar_title").html(host_maj);

    current_sub_section="items" //init section me sur 1er onglet "contrib'"
    current_since="realtime";
    current_page=1;
    current_section="tops";
    current_user_id="";
    refresh=false;
    clic_vote=false;
    clic_flag=false;
    $('#refresh_btn').show(); //pk les autres init de show ne sont pas là ? Mieux il devrait s'agir d'un appel à show_section plutot que C/C les show

	//Mode Facebook : Bouton Connexion changement de boite de dialog si clic dessus
	if(mode_fb){
    	$('#btn_login').attr("dialog_id","dialog_fb_signup");
	}
	
	
    //vérifie si session en cookie présente
    check_session(false);

    //jQuery.browser.mobile

    // hack : permet de s'assurer que les event JS rajouté au element html fonctionne bien
    refresh_event(); //d'ac mais refait lors du items_index_success
    
    // Initialisation
    $.ajax({
        type : "GET",
        url : "http://" + host + "/api/items.xml?since=realtime",
        dataType : "xml",
        success : execute_items_index_success
    });

    //CACHE ADS si non browser mobile (web, extension, FB)
    if(!jQuery.browser.mobile){
        //$("#ads_01 div").html('<script  type="text/javascript"    src="http://pagead2.googlesyndication.com/pagead/show_afmc_ads.js"></script>'); //
      
        console.log("browser FB/Web/Extension !");
      }
    else{
        console.log("browser Mobile !!");
       // $("#ads_01").attr("valid","yes");
     }

    try {
		//alert("FB init");
		/*
        FB.init({
          appId  : '163423353750493',
          status : true, // check login status
          cookie : true, // enable cookies to allow the server to access the session
          xfbml  : true  // parse XFBML
        });
*/
   }
   catch(err) {
	   console.log("Error when LOADING FB");
	   console.log(err);
   }

});
/******************
 * SESSIONS FUNCTIONS
 ******************/
function retrieve_stored_session() {
    var login = localStorage.getItem(stored_login);
    var password = localStorage.getItem(stored_password);
    var access_token = localStorage.getItem(stored_access_token);
    var user = {};
    try {
        user = jQuery.parseJSON(localStorage.getItem(stored_user));
    } catch(err) {
        console.log("Error when parsing JSON user from local storage");
        console.log(err);
    }
    return {
        login : login,
        password : password,
        access_token : access_token,
        user : user
    };
}

function delete_stored_session() {
    localStorage.removeItem(stored_login);
    localStorage.removeItem(stored_password);
    localStorage.removeItem(stored_user);
    localStorage.removeItem(stored_access_token);
}

function create_session(event) {
    // Récupération des valeurs saisie par l'utilisateur (Login ou Inscription)
    var login = "";
    var password = "";

    //Si boite de login affichée
    if($('#dialog_login').css("display")=="block"){
        login = $('#login_val').val();
        password = $('#password_val').val();
    }//Si boite Iription
    else if($('#dialog_signup').css("display")=="block"){
        login = $('#login_signup_val').val();
        password = $('#password_signup_val').val();
    }
    
    // Vérification (check_credentials) du login/mdp.
    session.login = login;
    session.password = password;

    senddata = {
        login : login,
        password : password
    };
    console.log(senddata);
    $.ajax({
        type : "POST",
        url : "http://" + host + "/api/users/check_credentials.xml",
        data : senddata,
        dataType : "xml",
        success : create_session_success,
        error : create_session_error
    });
    //uniquement si Connexion (pas inscription)
    
    
    
    /*if($('#login_val'))
        show_dialog(event);
        */
}

function create_session_success(xml) {
    console.log(xml);

    //cache boite de connexion
     if($("dialog_login").css("display")=="block"){
        $("dialog_login").hide();
    }

    var user = {};
    $(xml).find("user").each(function() {
        user = parse_user($(this));

    });
    //    var login = $('#id_sessions_login').val();
    //    var password = $('#id_sessions_password').val();

    // On stock les credentials
    localStorage.setItem(stored_login, session.login);
    localStorage.setItem(stored_password, session.password);
    localStorage.setItem(stored_access_token, user.access_token);
    localStorage.setItem(stored_user, JSON.stringify(user));
    // On recup la session a partir des infos stockées.
    session = retrieve_stored_session();
    console.log(session);
    display_info_message("Bienvenue sur "+host_maj+" "+session.login+"!",2500);

    //UI CACHE DIALOG
    $("#dialog_login").hide();


    //UI AFFICHE bouton "Deconnexion" dans onglet Plus pour l'instant
    //var str_content=$("tab_more").html();
    //var str_content="<input type='button' class='btn_mobile' href='#' name='btn_delete_session' value='Déconnexion' id='btn_delete_session' onclick='clear_session();' style='background-color:red'></input>";
    
    //UI CACHE bouton "Connexion"
    $("#btn_login").hide();
    $("#btn_delete_session").show();
    //$("#tab_more").appendTo(str_content);
}

function create_session_error(xhr, text, error) {
    console.log(xhr);
    console.log(text);
    console.log(error);
    if (xhr.status == 401 || xhr.status == 403) { // si c'est une erreur 401 Unauthenticated, ou 403 Forbidden
        clear_session(); // suppression de la session
        display_error_message("Login ou mot de passe non valide");
    }
    else {
        display_error_message("Erreur de connexion");
    }
}

//Appeler lors du clic sur "se déconnecter"
function clear_session() {
    console.log("clear_session");
    delete_stored_session();
    session = {};

    //UI CACHE bouton "Deconnexion"
    $("#btn_login").show();
    $("#btn_delete_session").hide();
    display_info_message("Déconnecté !",2000);
}

function create_user() {
    var login = $('#id_users_create_login').val();
    var email = $('#id_users_create_email').val();
    var password = $('#id_users_create_password').val();
    senddata = {
        login : login,
        password : password,
        email : email
    };
    console.log(senddata);
    $.ajax({
        type : "POST",
        url : "http://" + host + "/api/users.xml",
        data : senddata,
        dataType : "xml",
        success : create_user_success,
        error : create_user_error
    });

}

function create_user_success(xml) {
    console.log(xml);
    display_info_message("Inscription OK");

// display("#items");
}

function create_user_error(xml, text, error) {
    console.log(xml);
    display_error_message("Inscription #fail");
}



function create_comment() {
    current_comment = $('#comment_val').val().trim();
    var item_id = parseInt(current_item_id);
    //display_info_message("Ajout en cours... ");


    if(check_session()) {
        senddata = {
            item_id : item_id,
            body : current_comment
        };

        console.log(senddata);
        xhr_with_auth = {
            level : 0, /* Obligatoirement mettre level : 0 !*/
            type : "POST",
            url : "http://" + host + "/api/comments.xml",
            data : senddata,
            dataType : "xml",
            success : create_comment_success,
            error : create_comment_error
        }
        execute_xhr_with_auth();
    }

}

function create_comment_success(xml) {
    console.log(xml);

    //CACHE dialog
    $("#dialog_comment").fadeOut("slow");
    $("#comment_val").val("");

    /*PARSE Réponse pour obtenir Login (potentiellement Body du comment et Item_id mais j'ai des var current*/
    var user = {};
    $(xml).find("user").each(function() {
        user = parse_user($(this));

    });

    //UI Ajout commentaire
    $('#item_row_full_comments_' + current_item_id).show(); //A VOIR
    console.log("create_comment_success : "+current_item_id+" | "+current_comment);
    $("<div style='padding:4px 0;'><b>"+user.login+"</b> <span>" + current_comment + "</span></div>").appendTo("#item_row_full_comments_"+current_item_id); //Utiliser le template prévu ?!
}

function create_comment_error(xhr) {
    console.log("create_user_error");
    handle_error(xhr);
}

function create_dm(e) {
    e.preventDefault();

    dm = $('#dm_val').val().trim();
    to_user_login = "";

    if($('#to_user_login_val').val())
        to_user_login = $('#to_user_login_val').val();
    else
        to_user_login = current_to_user_login;

    console.log("create_dm to_user_login: "+to_user_login);
    
    if(check_session()) {
        senddata = {
            to_user_login : to_user_login,
            body : dm
        };
        console.log("create_dm :"+senddata);
        xhr_with_auth = {
            level : 0, /* Obligatoirement mettre level : 0 !*/
            type : "POST",
            url : "http://" + host + "/api/dms.xml",
            data : senddata,
            dataType : "xml",
            success : create_dm_success,
            error : create_dm_error
        }
        execute_xhr_with_auth();
    }

}

function create_dm_success(xml) {
    console.log(xml);

    //CACHE dialog
    $("#dialog_dm").fadeOut("slow");
    $("#dm_val").val("");
    $("#to_user_login_val").val("");

    display_info_message('Message Envoyé !',2000);

    /*PARSE Réponse pour obtenir Login (potentiellement Body du comment et Item_id mais j'ai des var current
    var user = {};
    $(xml).find("user").each(function() {
        user = parse_user($(this));
    });
    */
    /*
    //UI Ajout commentaire
    console.log("create_comment_success : ");
    $("<div style='padding:4px 0;'><b>"+user.login+"</b> <span>" + current_comment + "</span></div>").appendTo("#item_row_full_comments_"+current_item_id); //Utiliser le template prévu ?!
    */
}

function create_dm_error(xhr) {
    console.log("create_dm_error");
    handle_error(xhr);
}

//ENVOI MP DEPUIS CURRENT_USER_ID
function create_dm_id(e) {
    e.preventDefault();

    dm = $('#dm_id_val').val().trim();

    console.log("create_dm_id");
    
    if(check_session()) {
        senddata = {
            to_user_id : current_user_id,
            body : dm
        };
        console.log("create_dm_id :"+senddata);
        xhr_with_auth = {
            level : 0, /* Obligatoirement mettre level : 0 !*/
            type : "POST",
            url : "http://" + host + "/api/dms.xml",
            data : senddata,
            dataType : "xml",
            success : create_dm_id_success,
            error : create_dm_id_error
        }
        execute_xhr_with_auth();
    }

}

function create_dm_id_success(xml) {
    console.log(xml);

    //CACHE dialog
    $("#dialog_dm_id").fadeOut("slow");
    $("#dm_id_val").val("");

    display_info_message('Message Envoyé !',2000);
}

function create_dm_id_error(xhr) {
    console.log("create_dm_id_error");
    handle_error(xhr);
}

/*
function display_tab_me() {
    show_section("#tab_me");
    console.log(is_logged());
    if(is_logged()) {
        show_sub_tab_me_logged("#tab_me_user_infos");
        console.log(session.user);
        $('#tab_me_user_infos').html("");
        $('#users_show_row').tmpl(session.user).appendTo('#tab_me_user_infos');
    } else {
        show_sub_tab_me_not_logged();
    }
}

function display_sub_tab_me_user_infos() {
    show_sub_tab_me_logged("#tab_me_user_infos");
//	execute_items_index_me();
}

function display_sub_tab_me_items() {
    show_sub_tab_me_logged("#tab_me_items");
    execute_items_index_me();
}

function display_item_full(item_id) {
    console.log("display_item_full");
    console.log(items);
    item = retrieve_item_from_items(item_id);
    if(item != null) {
        i = item
        i['user'] = item.user
        $('#tab_item_full').html("");
        $('#item_full').tmpl(i).appendTo('#tab_item_full');
        show_section("#tab_item_full");
        refresh_event();
    } else {
        display_error_message("Contribution non trouvée en mémoire");
    }
}
*/
/***
 * param : birthday - ex: 1983-11-15 (=15 nov 83)
 * retun : age - ex: 18 (=18ans)
 ***/
function age_from_birthday(birthday){
    //console.log("birthday : "+birthday);
    if(birthday.length==10){
        bDate = new Date();
        bDate.setDate(birthday.substring(8,10));
        bDate.setMonth(parseInt(birthday.substring(5,7))-1); //à re-vérifier
        bDate.setFullYear(birthday.substring(0,4));

        today = new Date();

        age = today.getTime() - bDate.getTime();
        age = Math.floor(age/(86400000*365));

        return age
    }
    else return 0
}

function display_item_row_full(event) {
    console.log("display_item_row_full");
    var item_id = "";
    if (event)
        item_id = $(this).attr("item_id");
    else
        item_id = current_item_id;
    console.log("display_item_row_full class: "+item_id);

    //SI NON VOTE et NON CLIC Flag
    if(!clic_vote && !clic_flag){
        //$('#item_row_full_' + item_id).show();
        console.log("if1");
        //SWITCH TITRE : pour version complète si besoin
        $('#item_light_' + item_id).toggle();
        $('#item_wide_' + item_id).toggle();
        //AFFICHE ITEM_FULL : panneau item_full (commentaire + user_bar light)
        $('#item_row_full_' + item_id).toggle();
        $('#item_row_all_' + item_id).toggleClass('bkg_gradient_blue');
        console.log("id: "+'#item_row_all_' + item_id);
        $('#item_row_full_comments_' + item_id).hide(); //pour effet re-SlideDown correcte
        if($('#item_row_full_' + item_id).css("display")!="none") //Si non repliement de l'item
            execute_comments_index(item_id);
    }
    else {
        console.log("else1");
        clic_vote = false;
        clic_flag = false;
    }

}

function display_more_comments(event) {
    console.log("display_more_comments");
    event.preventDefault();
    var item_id = $(this).attr("item_id");
    console.log(item_id);
    $(this).hide(); //cache le "Afficher les X commentaires"
    //Convertis les comments en display:none, en display:block
    $(".comments_row_"+item_id).show(); //optimisation car le fait mm sur ceux déjà visible :s
}

function display_dm_line_full(event) {
    console.log("display_dm_line_full");
    var dm_id = $(this).attr("dm_id");
    var conv_user_id = $(this).attr("conv_user_id");
    
    //AFFICHE Les DM
    $('#dm_line_full_' + dm_id).toggle();
    $('#dm_line_' + dm_id).toggleClass('bkg_gradient_blue');
    //execute_comments_index(event, item_id);
    // POURRAIT faire une fonction pour futur waluu_api.js mais attention id de UI à passer dans appel ?
    //Si connecté et si on déplie (et non replie car sinon appel pour rien)

    //Cache systématiquement et avant appel pour re-SlideDown correct des DM corrects
    $('#dm_line_full_comments_' + dm_id).hide();
    if(check_session() && $('#dm_line_full_' + dm_id).css("display")!="none") {
        display_info_message("Chargement...");
        senddata = {
            'with': conv_user_id
        };
        xhr_with_auth = {
            level : 0, /* Obligatoirement mettre level : 0 !*/
            type : "GET",
            url : "http://" + host + "/api/dms.xml",
            data : senddata,
            dataType : "xml",
            success : dms_conv_index_success,
            error : dms_conv_index_error
        }
        execute_xhr_with_auth();
    }
}

/*AUTO REFRESH: pour admin dans un premier temps. */
function updateItems() {
    ///
    refresh=true;
    /*;
    console.log("START updateItems");
    $.ajax({
        type : "GET",
        url : "http://" + host + "/api/items.xml?since=" + current_since,
        //timeout: 2000,
        dataType : "xml",
        success : function(xml) {
            console.log("SUCCESS updateItems");
            execute_items_index_success(xml);
        //window.setTimeout(updateItems, 60000); //60000 60sec - 1min
        },
        error : function (XMLHttpRequest, textStatus, errorThrown) {
            console.log("ERROR: updateItems");
        //window.setTimeout(update, 600000); //600000 600sec - 10min
        }
    });
    
    */
   
   //METHODE MORE_ITEM identique avec CurrentPage en plus ET méthode "more_items_index_success" appelée
    
    display_info_message("Chargement....");
    
    //Flux user
    if(current_section=="user"){
        $.ajax({
            type : "GET",
            url : "http://" + host + "/api/users/"+current_user_id+".xml?items=true",
            dataType : "xml",
            success : execute_items_index_success,
            error : execute_items_index_error
        });
    }
    //Flux Friends
    else if(current_section=="friends"){
        $.ajax({
            type : "GET",
            url : "http://" + host + "/api/users/"+localStorage.getItem(stored_login)+".xml?items=true&follow=followings",
            dataType : "xml",
            success : execute_items_index_success,
        	error : execute_items_index_error
        });
    }
    //Flux Moi
    else if(current_section=="me"){
    	$.ajax({
            type : "GET",
            url : "http://" + host + "/api/users/"+localStorage.getItem(stored_login)+".xml?items=true",
            dataType : "xml",
            success : execute_items_index_success,
            error : execute_items_index_error
        });
    }
    //Flux Temps Réel Tous : Tops current_section=="tops"
    else{

        $.ajax({
            type : "GET",
            url : "http://" + host + "/api/items.xml?since=" + current_since + "",
            dataType : "xml",
            success : execute_items_index_success,
            error : execute_items_index_error
        });
        
    }
}

function retrieve_item_from_items(item_id) {
    console.log("retrieve_item_from_items");
    for( i = 0; i < items.length; i++) {
        if(items[i]['id'] == item_id) {
            console.log("item " + items[i]);
            return items[i];
        }
        console.log("i=" + i);
    }
    return null;
}

/*UTILISER? 
function execute_items_index_me() {
    $.ajax({
        type : "GET",
        url : "http://" + host + "/api/users/" + session.login + ".xml?items=true",
        dataType : "xml",
        success : execute_items_index_me_success
    });
}
function execute_items_index_me_success(xml) {
    console.log("execute_items_index_me_success");
    items = parse_items(xml);
    $('#me_items_list').html("");
    $('#item_row').tmpl(items).appendTo('#me_items_list');
    refresh_event();
}*/

/*AFFICHER/CACHER BOITE DE DIALOG: necessitant inscription/connexion (check_session) */
function show_dialog(event) {

    var dialog_id="#"+$(this).attr("dialog_id");
    var id_event=$(this).attr("id");
    console.log("show_dialog = "+dialog_id+" id_event="+id_event);

    //CACHE dialog connexion si inscription
    if(dialog_id=="#dialog_signup"){
        $("#dialog_login").hide();
    }
    
    

	

	//SI FB_Signup : appel du Js pour init champ 
	if(dialog_id=="#dialog_fb_signup"){
		fbUser();
	}
    

    if($(dialog_id) && $(dialog_id).css("display")=="block"){
        $(dialog_id).hide();
    }
    else if($(dialog_id)){
    	if (id_event!="btn_login" && id_event!="dialog_btn_signup" && id_event!="dialog_login_submit" && check_session()) { //pour ne pas checker la session si clic sur connexion
    	//if (check_session()) {
	        $(dialog_id).show();
	
			
		    if(dialog_id=="#dialog_item"){
		        $("#body_val").focus();
		    }
	
	        if(dialog_id=="#dialog_comment"){
	            current_item_id=$(this).attr("item_id");
	            $("#comment_val").focus();
	            
	            //getPageScroll
	            
	
	            //PB POSITION FIXED Anroid + iOS < à 5.0
	            //if(jQuery.browser.mobile){ //Marche pas sous mon Android, se lance pas !
	            	//alert("jQuery.browser.mobile");
	            	
	            	
	            	//$(dialog_id).css("position","absolute");
	            	//$(dialog_id).css("top",'500px');
	               
	                // INFO : c'est l'offset de l'item (du bouton Ajouter un commentaire de l'item) dont j'ai besoin, trouvable a partir de item_id
	                //$(dialog_id).css("top",($("#add_comment_btn_"+current_item_id).offset().top - 220) + 'px');
	               
					//var t=getPageScroll(); //tableau xScroll, yScroll
	                //$(dialog_id).css("top", t[1] + 'px');
	                //console.log("OFFSET = t.yScroll = "+ t[1] + 'px');
	                //console.log("OFFSET = "+($("#add_comment_btn_"+current_item_id).offset().top - 220));
	            //}
	         
	             //document.getElementById('fixedDiv').style.top = (window.pageYOffset + window.innerHeight - 25) + 'px';
	        }
	        
	        
	        if(dialog_id=="#options_user"){
	        	current_user_id = $(this).attr("user_id");
	        }
	
	        if(dialog_id=="#dialog_dm" && $(this).attr("to_user_login")){
	            current_to_user_login = $(this).attr("to_user_login");
	            
	            $("#to_user_login_val").val(current_to_user_login);
	            console.log("to_user_login = "+$(this).attr("to_user_login"));
	            
	        }
	        else if(dialog_id=="#dialog_dm"){
	            current_to_user_login = "";
	            console.log("ELSE to_user_login = "+$(this).attr("to_user_login"));
	        }
	        //MP depuis flux user
	        if(dialog_id=="#dialog_dm_id"){
	            $("#options_user").hide();
	            //current_to_user_id = current_user_id;
	        }
		}
		else if(id_event=="btn_login" || id_event=="dialog_btn_signup" ){
			$(dialog_id).show();
		}
    }

    
}

/**/
function show_user(user_id) {
   
    current_page=1; //ré-init
    current_section="user"; //ré-init
    current_user_id=user_id; //ré-init
    // AUCUNE SECTION/SUB_SECTION
    //$('#sub_section_tops ul > li a').removeClass("s");
    $('#sections ul > li a').removeClass("s");

    $('.sub_section').hide();
    $('#message_bar').hide();

    //TIMELINE de Login
    console.log("FLUX user = "+"http://" + host + "/api/users/"+user_id+".xml?items=true");
    $.ajax({
        type : "GET",
        url : "http://" + host + "/api/users/"+user_id+".xml?items=true",
        dataType : "xml",
        success : execute_items_user_success
    });
    //remonte l'acsenceur
    goTo();
//
//window.location.href=window.location.href+'#user_id/'+user_id;

}


function execute_items_user_success(xml) {
    // alert("success");
    items = parse_items(xml);
    console.log("show_user, ajout template user_bar en cours...");
    
    if(items.length > 0) {
        //Ajout timeline item
        $('#top_items_list').html("");
        $('#item_row').tmpl(items).appendTo('#top_items_list');


        // USER_BAR ajout template user_bar (mise d'un seul objet pour un seul appel)
        $('#user_bar').html("");
        $('#user_bar_tpl').tmpl(items[0].user).appendTo('#user_bar');
        //$('#user_bar .btn_follow').html("");

        //CHECK si Abonné
        if(check_session(false)){
            console.log("items[0].user.id="+items[0].user.id);
            console.log("items[0].user.id="+session.user.followings_ids);
            /**/
            if(jQuery.inArray(items[0].user.id,session.user.followings_ids.split(",")) != -1){
                console.log(">>Abonné !");
                $('#btn_user_follow').addClass("s");
                $('#btn_user_follow').html("&#10003; Abonné");
                $('#btn_user_follow').attr("follow_type","unfollow");
            }
        }
        $('#user_bar').show();
        refresh_event();
    }
    console.log("END: execute_items_user_success");
}

// DEPRECATED par benoit, voir la fonction create_session() à la place !
function dialog_login_submit(event){
    console.log("dialog_login_submit:"+$('#login_val').val());
    localStorage.setItem("stored_login", $('#login_val').val());
    
    console.log("stored_login: "+ localStorage.getItem('stored_login'));
    
    if(current_section=="me"){
        $.ajax({
            type : "GET",
            url : "http://" + host + "/api/users/"+localStorage.getItem('stored_login')+".xml?items=true",
            dataType : "xml",
            success : execute_items_index_success
        });
    }
    else if(current_section=="friends"){
        $.ajax({
            type : "GET",
            url : "http://" + host + "/api/users/"+localStorage.getItem('stored_login')+".xml?items=true&follow=followings",
            dataType : "xml",
            success : execute_items_index_success
        });
    }
    show_dialog(event);
}
/*
function hide_dialog(event) {
    event.preventDefault();
    var dialog_id=event.data.dialog_id;
    $(dialog_id).hide();
}*/

function show_section(event) {
    event.preventDefault();

    //RECUPERATION SECTION : passé par params coté html.
    var id_section=$(this).attr("id");
    console.log("show_section : "+id_section);

    //DESELECTIONNE SECTIONS
    $('#sections ul > li a').removeClass("s");

    //CACHE les 'bar' de sub_sections de toutes les sections
    $('.sub_section').hide();
    $('#refresh_btn').hide();
    $('#user_bar').hide();
    //$("#contents").hide();
    $(".content_page").hide();
    
    //INIT
    current_page=1;
    current_item_created_at="";
    current_more_item_created_at="";

    //SECTION_TOPS
    if (id_section=="section_tops"){
        current_section="tops";
        console.log("TOPS");

        //AFFICHE SUB_SECTION de sa section
        $('#sub_section_tops').show();
        console.log("$('#sub_section_tops')");
        

        //MESSAGE_BAR : init
        $('#message_bar').html("Bienvenue sur les Tops !");
        
        //SEL SECTION
        $('#section_tops').addClass("s");

        //SEL SUB_SECTION REALTIME
        $('.sub_section ul > li a').removeClass("s");
        $('#sub_section_realtime').addClass("s");
        $('#refresh_btn').show();
        $('#more_items').show(); //Encore Plus : pour temps réel et toujours

        display_info_message("Chargement...");
        $.ajax({
            type : "GET",
            url : "http://" + host + "/api/items.xml?since=realtime",
            dataType : "xml",
            success : execute_items_index_success
        });
    }
    else if (id_section=="section_friends"){
        current_section="friends";

        //CACHE/AFFICHE SUBSECTION
        $('#more_items').show(); 
    	$('#refresh_btn').show();


        //INIT MESSAGE_BAR
        $('#message_bar').html("Voici les contributions de vos Amis !");
        $('#top_items_list').html("<p>Aucun ami. Cliquez sur 'Connexion' pour vous authentifier :).</p>");
        //SEL SECTION
        $('#section_friends').addClass("s");

        if(check_session()) {
            //TIMELINE de Amis
            display_info_message("Chargement...");
            $.ajax({
                type : "GET",
                url : "http://" + host + "/api/users/"+localStorage.getItem(stored_login)+".xml?items=true&follow=followings",
                dataType : "xml",
                success : execute_items_index_success
            });
        }
    }
    else if (id_section=="section_me"){
        current_section="me";
        $('#more_items').hide(); //tmp
        //INIT MESSAGE_BAR
        $('#message_bar').html("Voici vos contributions !");
        $('#top_items_list').html("<p>Aucune contribution. Cliquez sur 'Connexion' pour vous authentifier.</p>");
        
        //SEL SECTION
        $('#section_me').addClass("s");

        //AFFICHE SubSection ME
        $('#sub_section_me').show();
    	$('#sub_section_items').addClass("s");

        //DOUBLONS avec swich sur SubSection Me
               



                //TIMELINE de Login
                if(check_session()) {
                    $('#more_items').show();
                    $('#refresh_btn').show();
                    $('#message_bar').hide();

                    //USER_BAR mode "Moi"
                    $('#user_bar').html("");
                    $('#user_bar_tpl').tmpl(session.user).appendTo('#user_bar');
                    $('#user_bar').show();
                    $("#user_bar_opt").hide();

                    display_info_message("Chargement...");
                    console.log("TIMELINE de Login1 = "+"http://" + host + "/api/users/"+localStorage.getItem(stored_login)+".xml?items=true");
                    $.ajax({
                        type : "GET",
                        url : "http://" + host + "/api/users/"+localStorage.getItem(stored_login)+".xml?items=true",
                        dataType : "xml",
                        success : execute_items_index_success
                    });
                }
                console.log("TIMELINE de Login2");
    }
    else if (id_section=="section_waluu"){

        current_section="waluu";
        $('#more_items').hide();
        $('#top_items_list').html("");

		$('#message_bar').html("Liste de tous les services et applications Waluu :)");
        $('#message_bar').show();
        
        //SEL SECTION
        $('#section_waluu').addClass("s");
        $('#sub_section_services').addClass("s");
        $('#sub_section_waluu').show();
        
        $("#content_services").show();
    }
}
function goTo(){
    jQuery('html,body').animate({
        scrollTop:jQuery('body').offset().top
    },1000,'swing',function(){
        //window.location.hash = '#'; //MAJ l'url
        /*
            jQuery(ancre).attr('tabindex','-1');
            jQuery(ancre).focus();
            jQuery(ancre).removeAttr('tabindex');
            */
        });
}

function show_sub_section(event) {
    event.preventDefault();

    //INIT
    current_page=1;
    current_item_created_at="";
    current_more_item_created_at="";

    //CACHE
    $('#top_items_list').show();
    $('#top_items_list').html("");
    $('#refresh_btn').hide();
    $('#more_items').hide();
    $('#user_bar').hide();
    $('#message_bar').hide();
    //$("#contents").hide();
    $(".content_page").hide();
    
    //INFO
    display_info_message("Chargement...");
    

    //CURRENT SUB_SECTION
    var sub_section =  $(this).attr("sub_section");
    current_sub_section = sub_section;
    
    //SEL SUB_SECTION
    $('.sub_section ul > li a').removeClass("s");
    $('#sub_section_'+sub_section).addClass("s");

    if(current_section=="tops"){
        current_since = sub_section;
        
       	$('#message_bar').show();

        //MESSAGE_BAR
        if(sub_section=="realtime"){
            $('#more_items').show();
            $('#refresh_btn').show();
            $('#message_bar').html("Voici les contributions en Temps réel.");
        }
        else if(sub_section=="24h"){
            $('#message_bar').html("Voici le meilleur de la journée d'hier !");
        }
        else if(sub_section=="7d"){
            $('#message_bar').html("Voici le Top de la Semaine !");
        }
        else if(sub_section=="forever"){
            $('#more_items').show();
            $('#message_bar').html("Voici le Top Toujours !");
        }
        else{
            $('#message_bar').html("Bienvenue sur "+host_maj+" !");
        }

        //APPEL
        $.ajax({
            type : "GET",
            url : "http://" + host + "/api/items.xml?since=" + sub_section,
            dataType : "xml",
            success : execute_items_index_success,
            error : execute_items_index_error
        });
    }
    else if(current_section=="me"){
       	
       	
        if(sub_section=="items"){ 
            
            //APPEL ITEMS ME : TOUS en doublon avec le switch sur section "Me" c'est dommage (il faudrait faire un appel show_sub_section(New Event = e.data.attr=sub_section='me')
            if(check_session()) {
                $('#more_items').show();
                $('#refresh_btn').show();
                $('#message_bar').hide();

                //USER_BAR mode "Moi"
                $('#user_bar').html("");
                $('#user_bar_tpl').tmpl(session.user).appendTo('#user_bar');
                $('#user_bar').show();
                $("#user_bar_opt").hide();

                display_info_message("Chargement...");
                console.log("Subsection Contrib' = "+"http://" + host + "/api/users/"+localStorage.getItem(stored_login)+".xml?items=true");
                $.ajax({
                    type : "GET",
                    url : "http://" + host + "/api/users/"+localStorage.getItem(stored_login)+".xml?items=true",
                    dataType : "xml",
                    success : execute_items_index_success
                });

            }
        }
        else if(sub_section=="notices"){
            $('#message_bar').html("Toutes les notifications vous concernant :)");
            $('#message_bar').show();
            //APPEL Notices
            if(check_session()) {
                display_info_message("Chargement...");

                senddata = {};

                xhr_with_auth = {
                    level : 0, /* Obligatoirement mettre level : 0 !*/
                    type : "GET",
                    url : "http://" + host + "/api/notices.xml",
                    data : senddata,
                    dataType : "xml",
                    success : notices_index_success,
                    error : notices_index_error
                }
                execute_xhr_with_auth();
            }
        }
        else if(sub_section=="dms"){
            $('#message_bar').html("Tous vos Messages Privés (MP) sont ici !");
            $('#message_bar').show();
            //APPEL MP
            if(check_session()) {
                display_info_message("Chargement...");

                senddata = {};

                xhr_with_auth = {
                    level : 0, /* Obligatoirement mettre level : 0 !*/
                    type : "GET",
                    url : "http://" + host + "/api/dms.xml",
                    data : senddata,
                    dataType : "xml",
                    success : dms_index_success,
                    error : dms_index_error
                }
                execute_xhr_with_auth();
            }
            refresh_event(); //a voir si vraiment utile
        }
        else if(sub_section=="profil"){
            $('#message_bar').html("Bienvenue sur votre Profil !");
            $('#message_bar').show();

            //OPTIONS de Profil : Avatar, Sexe, Age, (formulaire + newsletter/DM options)
            $("#content_profil").show();
            hide_info_message();
        }
        else{
            $('#message_bar').html("Bienvenue sur votre Profil !");
            $('#message_bar').show();
        }

    }
    else if(current_section=="waluu"){
        var sub_section =  $(this).attr("sub_section");
        current_sub_section = sub_section;
		hide_info_message();

        if(sub_section=="faq"){
            $('#message_bar').html("Le Guide Waluu pour bien démarrer !");
            $('#message_bar').show();
            
            $("#content_faq").show();
        }
        else if(sub_section=="services"){
            $('#message_bar').html("Liste de tous les services / applications Waluu :)");
            $('#message_bar').show();
            
            $("#content_services").show();
        }
        else if(sub_section=="community"){
            $('#message_bar').html("Philosophie Waluu concernant la gestion communautaire");
            $('#message_bar').show();
            
            $("#content_community").show();

        }
        else if(sub_section=="invite"){
            $('#message_bar').html("Inviter vos amis à découvrir Waluu !");
            $('#message_bar').show();
            
            $("#content_invite").show();

        }
    }
}


/* SHOW ITEM FULL */
function show_item_full(event) {
    event.preventDefault();
    console.log("show_item_full");
    
    var item_id=$(this).attr("item_id");
    current_item_id=item_id; //pour display_item_row_full

    display_info_message("Chargement...");
    $.ajax({
        type : "GET",
        url : "http://" + host + "/api/items/"+item_id+".xml",
        dataType : "xml",
        success : show_item_full_success,
        error : show_item_full_error
    });


}
function show_item_full_success(xml) {

    console.log("show_item_full_success");
    items = parse_items(xml);

    $("#message_bar").hide();
    
    if(items.length > 0) {
        $('#top_items_list').html("");
        $('#item_row').tmpl(items[0]).appendTo('#top_items_list');
        
        // USER_BAR (je l'enleve car je la trouve "en trop" mais ca marche bien
       /* $('#user_bar').html("");
        $('#user_bar_tpl').tmpl(items[0].user).appendTo('#user_bar');
        $('#user_bar').show();
        $("#user_bar_opt").hide(); //cache bouton "s'abonner" et autre car il s'agit forcément de "moi" (et bug non-recacul de cette bar surtt...)
        */
        display_item_row_full(); //dépli l'item... Manque l'item_id car pas bon event, je tente un event vide & un current_item_id global

        refresh_event();
    }
    //FIN "Chargement"
    hide_info_message();
    console.log("FIN:show_item_full_success");
}

function show_item_full_error(xml) {
    console.log("show_item_full_error");
    display_info_message("Erreur",2500);
}
/*MORE_ITEMS*/
function execute_more_items(event) {
    event.preventDefault();

    current_page=current_page+1;
    
    display_info_message("Chargement...");
    
    //Flux user
    if(current_section=="user"){
        $.ajax({
            type : "GET",
            url : "http://" + host + "/api/users/"+current_user_id+".xml?items=true&page=" + current_page + "&per_page=20",
            dataType : "xml",
            success : execute_more_items_success,
            error : execute_items_index_error
        });
    }
    //Flux Friends
    else if(current_section=="friends"){
        $.ajax({
            type : "GET",
            url : "http://" + host + "/api/users/"+localStorage.getItem(stored_login)+".xml?items=true&follow=followings&page=" + current_page + "&per_page=20",
            dataType : "xml",
            success : execute_more_items_success,
        	error : execute_items_index_error
        });
    }
    //Flux Moi
    else if(current_section=="me"){
    	$.ajax({
            type : "GET",
            url : "http://" + host + "/api/users/"+localStorage.getItem(stored_login)+".xml?items=true&page=" + current_page + "&per_page=20",
            dataType : "xml",
            success : execute_more_items_success,
            error : execute_items_index_error
        });
    }
    //Flux Temps Réel Tous : Tops current_section=="tops"
    else{

        $.ajax({
            type : "GET",
            url : "http://" + host + "/api/items.xml?since=" + current_since + "&page=" + current_page + "&per_page=20",
            dataType : "xml",
            success : execute_more_items_success,
            error : execute_items_index_error
        });
        
    }
}


function execute_items_index_success(xml) {
    items = parse_items(xml);
    console.log("execute_items_index_success items:"+items);


    if(items.length > 0) {
        
        //refresh (à extraire / sette une var en appel de la fonction pour savoir si mode "auto-refresh"
        console.log("refresh="+refresh+" , current_page="+current_page+" , current_item_created_at="+current_item_created_at);
        if(refresh==true && current_item_created_at!=""){
            refresh=false;
            console.log("execute_items_index_success: Refresh");
            var date1 = create_date_from_string(current_item_created_at);
            //console.log("Date1 = "+date1);
            //purge les items déjà possédé (plus ancien ou = à current_item_created_at)
            var newItems = Array();
            $.each(items, function(i,item){
                // console.log("Date2 = "+create_date_from_string(item['created_at']));
                if(create_date_from_string(item['created_at']).getTime()>date1.getTime()){
                    newItems.push(item);
                // console.log("push = "+item['id']);
                }
            });
            //INFO_BAR
            display_info_message(newItems.length+" nouvelle(s) contribution(s)",2500);
            
            $('#item_row').tmpl(newItems).prependTo('#top_items_list');
            if(newItems[0])
                current_item_created_at=newItems[0]['created_at'];  //2011-09-24 16:54:56 +0200
        }
        else{
            console.log("execute_items_index_success: Non-refresh");
            $('#top_items_list').html("");
            $('#item_row').tmpl(items).appendTo('#top_items_list');
            current_item_created_at=items[0]['created_at'];  //2011-09-24 16:54:56 +0200
            current_more_item_created_at=items[items.length-1]['created_at'];
            
		    //FIN "Chargement"
		    hide_info_message();
        }
        refresh_event();
    }



    console.log("FIN:execute_items_index_success");
}

/* params: string ex: "2011-09-24 16:54:56 +0200" */
function create_date_from_string(str){
    //console.log(str+" <Date_from_string> "+str.substring(0,4)+"|"+(Number(str.substring(5,7))-1)+"|"+str.substring(8,10)+"|"+str.substring(11,13)+"|"+str.substring(14,16)+"|"+str.substring(17,19));
    var date1 = new Date(str.substring(0,4),Number(str.substring(5,7))-1,str.substring(8,10),str.substring(11,13),str.substring(14,16),str.substring(17,19));
    return date1;
}

/*MORE_ITEMS : sans .html("") */
function execute_more_items_success(xml) {
    items = parse_items(xml);
    console.log("execute_more_items_success");
    
    
    if(items.length > 0) {
        
        if(current_more_item_created_at!=""){
            console.log("execute_more_items_success: More");
            var date1 = create_date_from_string(current_more_item_created_at);
            //purge les items déjà possédé (plus recent ou = à current_more_item_created_at)
            var newItems = Array();
            $.each(items, function(i,item){
                // console.log("Date2 = "+create_date_from_string(item['created_at']));
                if(create_date_from_string(item['created_at']).getTime()<date1.getTime()){
                    newItems.push(item);
                // console.log("push = "+item['id']);
                }
            });
            
            $('#item_row').tmpl(newItems).appendTo('#top_items_list');
            if(newItems[newItems.length-1])
                current_more_item_created_at=newItems[newItems.length-1]['created_at'];  //2011-09-24 16:54:56 +0200
                
            console.log("execute_more_items_success: More "+current_more_item_created_at);
        }
        /*
        else{ //1er More / Normal
        	
	        $('#item_row').tmpl(items).appendTo('#top_items_list');
	        if(items[items.length-1])
                current_more_item_created_at=items[items.length-1]['created_at'];
	        
            console.log("execute_more_items_success: 1erMore "+current_more_item_created_at);
        }
        */
        refresh_event();
        
    	hide_info_message();
    }
    console.log("FIN:execute_more_items_success");
}

// DMs LIST
function dms_index_success(xml) {
    dms = parse_dms(xml);
    console.log("dms_index_success");

    $('#top_items_list').html("");
    $('#dm_line').tmpl(dms).appendTo('#top_items_list');
    //current_item_created_at=items[0]['created_at'];
    refresh_event();

    //FIN "Chargement"
    hide_info_message();
}

function dms_index_error(xhr) {
    console.log("dms_index_error");
    handle_error(xhr);
}


// DMs CONV LIST
function dms_conv_index_success(xml) {
    dms_conv = parse_dms(xml);
    console.log("dms_conv_index_success");

    if(dms_conv.length > 0) {
        dms_id = dms_conv[0]['id'];
        id = '#dm_line_full_comments_' + dms_id;
        console.log("dm_line_full_comments_" + dms_id);
        $(id).html("");
        $('#dm_line_full_comment').tmpl(dms_conv).appendTo(id);
        
        $(id).slideDown('slow');
    }
    hide_info_message();
}

function dms_conv_index_error(xhr) {
    console.log("dms_conv_index_error");
    handle_error(xhr);
}

// NOTICEs LIST
function notices_index_success(xml) {
    notice = parse_notices(xml);
    console.log("notices_index_success");


    $("#message_bar").show(); //hide en item_full

    $('#top_items_list').html("");
    $('#notice_line').tmpl(notice).appendTo('#top_items_list');
    refresh_event();
    //current_item_created_at=items[0]['created_at'];
    //refresh_event();

    //FIN "Chargement"
    hide_info_message();
}

function notices_index_error(xhr) {
    console.log("notices_index_error");
    handle_error(xhr);
}

// CONFIRM Dialog
function show_confirm(e){
    e.preventDefault();

    console.log("show_confirm !");
    if($("#confirm_dialog").css("display")=="block"){
        console.log("show_confirm : block déjà affiché");
        $("#confirm_dialog").fadeOut();
    }
    else if(check_session()){
        console.log("show_confirm : 1er affichage");
        
        //Cache boite de dialog avant de montrer Confirm (dialog_canvas sur dialog et options)
        $('.dialog_canvas').each(function(i,e) {
        	if($(e).css("display")=="block"){
		        $(e).hide();
		    }
        });
        
        var item_id=$(this).attr("item_id");
        var confirm_type=$(this).attr("confirm_type");
        var user_id=current_user_id;
        
        //CONFIRM
        var var_tpl = [];
        var_tpl[0] = {};
        var_tpl[0]['title']="Etes-vous sûr ?";
        var_tpl[0]['confirm_type']=confirm_type;
        var_tpl[0]['item_id']=item_id;
        var_tpl[0]['user_id']=user_id;

        //if(confirm_type=="flag"){
            clic_flag=true;
            console.log("confirm_type:"+confirm_type);
            $('#confirm_pan').html("");
            $('#confirm_tpl').tmpl(var_tpl).appendTo('#confirm_pan');
            $('#confirm_pan').hide();
            $('#confirm_pan').fadeIn();
        //}
    }
    refresh_event();
}
function execute_confirm(e){
    e.preventDefault();

    console.log("execute_confirm !");
    var confirm_type=$(this).attr("confirm_type");
    var item_id="";
    
    if(confirm_type=="flag"){
    	item_id=$(this).attr("item_id");
        execute_flags_create(e,item_id);
        $("#item_row_all_"+item_id).fadeOut("slow"); //devrait etre dans sucess
    }
    else if(confirm_type=="delete"){
    	
    	item_id=$(this).attr("item_id");
        execute_delete_item(e,item_id);
        $("#item_row_all_"+item_id).fadeOut("slow"); //devrait etre dans sucess
    }
    else if(confirm_type=="block_user"){
    }
    else if(confirm_type=="flag_user"){
    	user_id=$(this).attr("user_id");
        flag_user_create(e,user_id);
    }

    $("#confirm_dialog").fadeOut();
}

/* FLAG ITEM*/
function execute_flags_create(e,item_id){
    console.log("execute_flags_create");
    //INFOS
    //display_info_message("Signalement en cours...");

    /* */
    if(check_session()) {

        var senddata = {
            flag : "spam",
            item_id : item_id
        }

        xhr_with_auth = {
            level : 0, /* Obligatoirement mettre level : 0 !*/
            type : "POST",
            url : "http://" + host + "/api/flags.xml",
            data : senddata,
            dataType : "xml",
            success : execute_flags_create_success,
            error: execute_flags_create_error
        }
        execute_xhr_with_auth();
    }

//display_info_message("Déjà signalé, merci !"); //peut arrivé si on cache la contrib mais rafraichit timeline.

//cache item (transparence 0.1)
//$("#item_row_all_"+item_id).fadeOut("slow");

}

function execute_flags_create_success(xml) {
    //AFFICHAGE
    display_info_message("Signalé !",2000);
}

function execute_flags_create_error(xhr) {
    console.log("execute_flags_create_error");
    handle_error(xhr);

}

/* FLAG USER*/
function flag_user_create(e,user_id){
    console.log("execute_flags_create");
    //INFOS
    //display_info_message("Signalement en cours...");

    if(check_session()) {

        var senddata = {
            flag : "spam",
            user_id : user_id
        }

        xhr_with_auth = {
            level : 0, /* Obligatoirement mettre level : 0 !*/
            type : "POST",
            url : "http://" + host + "/api/flags.xml",
            data : senddata,
            dataType : "xml",
            success : flag_user_create_success,
            error: flag_user_create_error
        }
        execute_xhr_with_auth();
    }

}

function flag_user_create_success(xml) {
    //AFFICHAGE
    display_info_message("Signalé !",2000);
}

function flag_user_create_error(xhr) {
    console.log("flag_user_create_error");
    handle_error(xhr);

}


/* DELETE ITEM*/
function execute_delete_item(e,item_id){
    console.log("execute_flags_create");

    if(check_session()) {
    
        var senddata = {
            _method : "delete"
        }
        
        xhr_with_auth = {
            level : 0, /* Obligatoirement mettre level : 0 !*/
            type : "POST",
            url : "http://" + host + "/api/items/" + item_id + ".xml",
            data : senddata,
            dataType : "xml",
            success : execute_delete_item_success,
            error: execute_delete_item_error
        }
        execute_xhr_with_auth();
    }

}

function execute_delete_item_success(xml) {
    //AFFICHAGE
    display_info_message("Supprimé !");
}

function execute_delete_item_error(xhr) {
    console.log("execute_delete_create_error");
    handle_error(xhr);

}

// Signaler un membre
function execute_flags_create_user(e){
    e.preventDefault();
    console.log("execute_flags_create_user");
    if(check_session()) {
        var senddata = {};
        senddata.user_id = $(this).attr("user_id");
        senddata.flag = "insultes";
        
        $.ajax({
            type : "POST",
            url : "http://" + session.login + ":" + session.password + "@" + host + "/api/flags.xml",
            data : senddata,
            dataType : "xml",
            success : execute_flags_create_user_success,
            error : execute_flags_create_user_error
        });
    }
}

function execute_flags_create_user_success(xml) {
    display_info_message("Utilisateur signalé, merci.");
    console.log(xml);
}

function execute_flags_create_user_error(xhr,text,error) {
    console.log("execute_flags_create_user_error");
    display_xml_errors(xhr.responseXML);
    console.log(xhr);
    console.log(text);
    console.log(error);
}

/* FLAG ITEM*/
function execute_follows_create(e){
    console.log("execute_follows_create");

    var user_id =  $(this).attr('user_id');
    var follow_type =  $(this).attr('follow_type');



    console.log("execute_follows_create user_id: "+user_id);
    if(check_session()) {

        if(follow_type=="follow"){
            var senddata = {
                followed_user_id : user_id
            }

            xhr_with_auth = {
                level : 0, /* Obligatoirement mettre level : 0 !*/
                type : "POST",
                url : "http://" + host + "/api/follows.xml",
                data : senddata,
                dataType : "xml",
                success : execute_follows_create_success,
                error: execute_follows_create_error
            }
        }
        else if(follow_type=="unfollow"){
            var senddata = {
                _method : "delete"
            }

            xhr_with_auth = {
                level : 0, /* Obligatoirement mettre level : 0 !*/
                type : "POST",
                url : "http://" + host + "/api/follows/"+user_id+".xml",
                data : senddata,
                dataType : "xml",
                success : execute_follows_create_success,
                error: execute_follows_create_error
            }
        }
        execute_xhr_with_auth();
    }

//display_info_message("Déjà signalé, merci !"); //peut arrivé si on cache la contrib mais rafraichit timeline.

//cache item (transparence 0.1)
//$("#item_row_all_"+item_id).fadeOut("slow");

}

function execute_follows_create_success(xml) {
    //AFFICHAGE
    //display_info_message("Abonné !",2000);
    if($('#btn_user_follow').attr("follow_type")=="unfollow"){
        $('#btn_user_follow').removeClass("s");
        $('#btn_user_follow').html("+ S'abonner");
        $('#btn_user_follow').attr("follow_type","follow");
    }
    else{
        $('#btn_user_follow').addClass("s");
        $('#btn_user_follow').html("&#10003; Abonné");
        $('#btn_user_follow').attr("follow_type","unfollow");
    }

}

function execute_follows_create_error(xhr) {
    console.log("execute_follows_create_error");
    handle_error(xhr);

}

function execute_items_index_error(xhr,text,error) {
    console.log("execute_items_index_error");
    console.log(xhr);
    console.log(text);
    console.log(error);
    // alert("error");
    // alert(xhr.getAllResponseHeaders());
    // alert(xhr.getAllResponseHeaders);
    // alert(xhr.statusText);
    // alert(xhr.status);
    // alert(xhr.responseText);

    alert(xhr.getResponseHeader());
    
    hide_info_message();
}
/*
function execute_items_index_friends() {
    console.log("execute_items_index_friends");
    $('#friends_items_list').show();
    $('#friends_items_list').html("");
    //	$('#items_new').hide();
    $.ajax({
        type : "GET",
        url : "http://" + host + "/api/users/" + session['login'] + ".xml?follow=followings&items=true",
        dataType : "xml",
        success : execute_items_index_friends_success
    });
}

function execute_items_index_friends_success(xml) {
    console.log("execute_items_index_friends_success");
    items = parse_items(xml);
    $('#friends_items_list').html("");
    $('#item_row').tmpl(items).appendTo('#friends_items_list');
    refresh_event();
}
*/
function execute_items_create() {

    var id_body = $('#body_val').val().trim();
    senddata = {
        body: id_body
    };

    host_tmp=host;
    if(host=="www.waluu.com")
        host_tmp="www.twituu.com"

    // Configuration de la requete HTTP en Ajax
    xhr_with_auth = {
        level : 0, /* Obligatoirement mettre level : 0 !*/
        type : "POST",
        url : "http://" + host_tmp + "/api/items.xml",
        data : senddata,
        dataType : "xml",
        success : execute_items_create_success,
        error: execute_items_create_error
    }
    // Demande d'execution de la requete xhr_with_auth nécessitant l'authentification
    execute_xhr_with_auth();

}

function execute_items_create_success(xml) {
    // show_section("#tab_friends");
    console.log("execute_items_create_success" + xml);
    display_info_message("C'est envoyé, Merci! ");
    $("#body_val").val("");

    var item = parse_items(xml); //une seul item, mais ca devrait marcher quand mm

    $('#item_row').tmpl(item).prependTo('#top_items_list');
    refresh_event();
    $('#dialog_item').fadeOut("slow");//hide();
}

function execute_items_create_error(xhr) {
    console.log("execute_items_create_error");
    handle_error(xhr);
}


function execute_user_create() {

    var email = $('#email_signup_val').val().trim();
    var login = $('#login_signup_val').val().trim();
    var pwd = $('#password_signup_val').val().trim();
    senddata = {
        email: email,
        login: login,
        password: pwd
    };

    // Configuration de la requete HTTP en Ajax
    xhr_with_auth = {
        level : 0, /* Obligatoirement mettre level : 0 !*/
        type : "POST",
        url : "http://" + host + "/api/users.xml",
        data : senddata,
        dataType : "xml",
        success : execute_user_create_success,
        error: execute_user_create_error
    }
    // Demande d'execution de la requete xhr_with_auth nécessitant l'authentification
    execute_xhr_with_auth();

}

function execute_user_create_success(xml) {
    // show_section("#tab_friends");
    console.log("execute_user_create_success" + xml);
    display_info_message("Utilisateur créé !");


    $("#email_signup_val").val("");
    $("#login_signup_val").val("");
    $("#password_signup_val").val("");

    //CONNECTé le mec, comment ?
    create_session(new Event);

    //REDIRIGER sur Top 24h ?

    //var item = parse_items(xml); //une seul item, mais ca devrait marcher quand mm

    //$('#item_row').tmpl(item).prependTo('#top_items_list');
    //refresh_event();
    $('#dialog_signup').fadeOut("slow");//hide();
}

function execute_user_create_error(xhr) {
    console.log("execute_user_create_error");
    handle_error(xhr);
}

// Si l'erreur est dû à l'access_token qui a expiré alors il fait une demande d'access_token et retente la requete
// Si l'erreur contient un retour XML expliquant les erreurs, alors affiche a l'utilisateur les erreurs.
function handle_error(xhr){
     if (xhr.status == 401 || xhr.status == 403 ){ // Unauthenticated ou Forbidden
        // token a expiré il faut le supprimer (de la mémoire (objet session) + du stockage(localStorage))
        session.access_token = null;
        localStorage.removeItem(stored_access_token);
        // On incrément le compteur du nombre de tentatives d'execution de la requete HTTP
        xhr_with_auth.level++;
        // On relance l'execution de la requete qui va cette fois préalablement faire une demande d'access_token
        execute_xhr_with_auth();
    }
    else {
        // Parsage du retour XML et affichage à l'utilisateur des erreurs
        display_xml_errors(xhr.responseXML);
    }

}

function execute_votes_create() {
    console.log("execute_votes_create");
    var item_id = $(this).attr("item_id");
    
    clic_vote=true;
    //INFOS
    //display_info_message("Vote en cours...");

    /* */
    if(check_session()) {

        var senddata = {
            vote : 1,
            item_id : item_id
        }

        xhr_with_auth = {
            level : 0, /* Obligatoirement mettre level : 0 !*/
            type : "POST",
            url : "http://" + host + "/api/votes.xml",
            data : senddata,
            dataType : "xml",
            success : execute_votes_create_success,
            error: execute_votes_create_error
        }
        execute_xhr_with_auth();
    }
   
}

function execute_votes_create_success(xml) {
    var item_id="";
    $(xml).find('vote').each(function() {
        item_id = $(this).attr('item_id')
    });
    
    //AFFICHAGE SCORE++
    var score=0;
    var item_type = $("#vote_"+item_id).attr("item_type");
    if (item_type=="quote"){
        score=$("#vote_"+item_id).html();
        $("#vote_"+item_id).text(parseInt(score, 10)+1);
        console.log("execute_votes_create : "+(parseInt(score, 10)+1));
    }
    else if(item_type=="image"){
        score=$("#vote_"+item_id).children("h3").html();
        $("#vote_"+item_id).children("h3").text(parseInt(score, 10)+1);
    }
}

function execute_votes_create_success_item_id(item_id) {
    
    //AFFICHAGE SCORE++
    var score=0;
    var item_type = $("#vote_"+item_id).attr("item_type");
    if (item_type=="quote"){
        score=$("#vote_"+item_id).html();
        $("#vote_"+item_id).text(parseInt(score, 10)+1);
        console.log("execute_votes_create : "+(parseInt(score, 10)+1));
    }
    else if(item_type=="image"){
        score=$("#vote_"+item_id).children("h3").html();
        $("#vote_"+item_id).children("h3").text(parseInt(score, 10)+1);
    }
}

function execute_votes_create_error(xhr) {
    console.log("execute_votes_create_error");
    handle_error(xhr);

}

function execute_comments_create(e) {
    console.log("execute_comments_create");
    if(check_session()) {
        console.log($(e).attr("item_id"));

        var senddata = {}
        senddata['item_id'] = $(e).attr("item_id");
        senddata['body'] = $('#id_comments_body_' + senddata['item_id']).val();
        console.log(senddata);
        var url = "http://" + session['login'] + ":" + session['password'] + "@" + host + "/api/comments.xml";
        console.log(url);
        console.log(session);
        console.log(session['login']);
        console.log(session.login);
        $.ajax({
            type : "POST",
            url : url,
            data : senddata, //"title=John&link_url=http://www.coco.com" ,
            success : execute_comments_create_success,
            error : execute_comments_create_error
        });
    }
}

function execute_comments_create_success(xml) {
    console.log(xml);
    res = parse_comments($(xml));
    if(res.length > 0)
        $('#comments_show_row').tmpl(res).appendTo("#new_comment_" + res[0]['item_id']);
    refresh_event();

}

function execute_comments_create_error(xhr) {
    console.log("execute_comments_create_error");
    display_xml_errors(xhr.responseXML);
}

function execute_comments_destroy(e) {
    e.preventDefault();
    console.log("execute_comments_destroy");
    if(check_session()) {
        console.log($(this).attr("comment_id"));

        var comment_id = $(this).attr("comment_id");
        var url = "http://" + session['login'] + ":" + session['password'] + "@" + host + "/api/comments/" + comment_id + ".xml";
        console.log(url);
        var senddata = {};
        senddata['_method'] = "delete";
        $.ajax({
            type : "POST",
            url : url,
            data : senddata,
            success : execute_comments_destroy_success,
            error : execute_comments_destroy_error
        });
    }
}

function execute_comments_destroy_success(xml) {
    console.log(xml);
    comment_id = 0;
    $(xml).find("comment").each(function() {
        comment_id = $(this).attr("id")
    });
    if(comment_id != null && comment_id > 0) {
        display_info_message("Commentaire supprimé !");
        $("#comments_row_" + comment_id).hide();
    }
}

function execute_comments_destroy_error(xhr, text, error) {
    display_error_message("Suppression KO" + text);
    console.log(xhr);
    console.log(text);
    console.log(error);
}

function execute_items_destroy(e) {
    e.preventDefault();
    console.log("execute_items_destroy");
    if(check_session()) {
        console.log($(this).attr("item_id"));

        var item_id = $(this).attr("item_id");
        var url = "http://" + session['login'] + ":" + session['password'] + "@" + host + "/api/items/" + item_id + ".xml";
        console.log(url);
        var senddata = {};
        senddata['_method'] = "delete";
        $.ajax({
            type : "POST",
            url : url,
            data : senddata,
            success : execute_items_destroy_success,
            error : execute_items_destroy_error
        });
    }
}

function execute_items_destroy_success(xml) {
    console.log(xml);
    item_id = 0;
    $(xml).find("item").each(function() {
        item_id = $(this).attr("id");
    });
    if(item_id != null && item_id > 0) {
        display_info_message("Contribution supprimé !");
        $("#item_row_all_" + item_id).hide();
    }

}

function execute_items_destroy_error(xhr, text, error) {
    display_error_message("Suppression KO : " + text);
    console.log(xhr);
    console.log(text);
    console.log(error);
}

function execute_comments_index(item_id) {
    console.log("execute_comments_index");
    //console.log(event);
    //event.preventDefault();
    $.ajax({
        type : "GET",
        url : "http://" + host + "/api/comments.xml?item_id=" + item_id + "&sort=date_asc",
        success : execute_comments_index_success
    });
}

function execute_comments_index_success(xml) {
    // comments = [];
    console.log(xml);
    comments = parse_comments(xml);
    console.log("COMMENTS = "+comments);
    if(comments.length > 0) {
        item_id = comments[0]['item_id'];
        id = '#item_row_full_comments_' + item_id;
        console.log("comments item_id " + item_id);
        $(id).html("");
        $('#comments_show_row').tmpl(comments).appendTo(id);
        //$(id).hide(); //obligatoire pour l'effet
        $(id).slideDown('slow');
        refresh_event();
    }
}

// function display_items_new_edit() {
// $('#items_new').show();
// $('#items').hide();
// }

/********************
 * PARSING FUNCTIONS
 *******************/
// parse en mémoire du XML jquery contenant des <item></item>.
function parse_items(xml) {

    console.log("parse_items");
    var i = 0;
    var res = [];

    $(xml).find('item').each(function() {
        res[i] = {};
        res[i]['id'] = $(this).attr('id');
        res[i]['score'] = $(this).attr('score');
        res[i]['site_id'] = $(this).attr('site_id');
        if(res[i].site_id!=null || res[i].site_id!="" ){
            res[i]['site_name'] = sites_name['key'+res[i].site_id].name;
            res[i]['site_favicon'] = sites_name['key'+res[i].site_id].favicon_url;
        }
        else
            res[i]['site_name'] = "";
        res[i]['comments_count'] = $(this).attr('comments_count');
        //PLURIELS
        if(parseInt($(this).attr('comments_count'))>1){
            res[i]['str_comment'] = "Commentaires";
        }
        else
            res[i]['str_comment'] = "Commentaire";
        if(parseInt($(this).attr('score'))>1){
            res[i]['str_score'] = "Votes";
        }
        else
            res[i]['str_score'] = "Vote";
        res[i]['created_at'] = $(this).attr('created_at');
        res[i]['section'] = $(this).attr('section');
        
        // title
        res[i]['title'] = "";
        res[i]['title_light'] = "";
        $(this).find('element[name="title"] value').each(function() {
        	
        	//Pb avec le {{html }} de JQuery : crash l'injection des items
            res[i]['title'] = $(this).text().trim().replace("</","&lt;/");
        	
        	
            res[i]['title'] = res[i]['title'].replace("\n","<br/>");
            if($(this).text().length>200)
                res[i]['title_light'] = res[i]['title'].substring(0, 200).split(" ").slice(0, -1).join(" ").replace("\n","<br/>") + " [...]";
            else
                res[i]['title_light'] = res[i]['title'].replace("\n","<br/>");
        });
        // body
        res[i]['body'] = "";
        res[i]['body_light'] = "";
        $(this).find('element[name="body"] value').each(function() {
        	
        	//Pb avec le {{html }} de JQuery : crash l'injection des items
            res[i]['body'] = $(this).text().trim().replace("</","&lt;/");
            
        	
            res[i]['body'] = res[i]['body'].replace(/\n\n(\n)+/gi,"<br/><br/>");
            res[i]['body'] = res[i]['body'].replace(/\n\n/gi,"<br/><br/>");
            res[i]['body'] = res[i]['body'].replace(/(\n)+/gi,"<br/>");
            if(res[i]['body'].length>200)
                res[i]['body_light'] = res[i]['body'].substring(0, 200).split(" ").slice(0, -1).join(" ") + " [...]";
            else
                res[i]['body_light'] = res[i]['body'];
        });
        
         // link (title) = Ecrase "body" avec le Title officiel du lien, et ne prend pas en compte desc du lien.
        $(this).find('element[name="link"] value').each(function() {
        	res[i]['body'] = $(this).text(); //et "link value (le title) -- body", concaténé. Mais à voir apres item_magic.
        	res[i]['body_light'] = $(this).text(); //on pourrait mettre body ici
       	});
         // link (url)
        res[i]['url']="";
        $(this).find('element[name="link"] url').each(function() {
        	res[i]['url'] = $(this).text();
       	});
        
        $(this).find('element[name="image"] value').each(function() {
            res[i]['image_small_url'] = $(this).attr("small");
            res[i]['image_medium_url'] = $(this).attr("medium");
            res[i]['image_big_url'] = $(this).attr("big");
            res[i]['image_original_url'] = $(this).attr("original");
        });
        $(this).find('user').each(function() {
            res[i]['user'] = parse_user($(this));
        //res[i]['user_login'] = $(this).attr('login');
        // items[i]['userBio'] = $(this).find('bio')[0].text();
        });
        // url
        // image url small
        // image url medium
        // image url big
        i = i + 1;
    });
    console.log(res);
    return res;
}

function br2n(str){
	var res="";
	res = str.trim().replace(/<br\/><br\/>(<br\/>)+/gi,"\n\n");
	res = res.replace(/<br\/><br\/>/gi,"\n\n");
	res = res.replace(/(<br\/>)+/gi,"\n");
	
	return res;
}

// parse en mémoire du XML jquery contenant des <comment></comment>.
function parse_comments(xml) {
    var i = 0;
    var res = [];
    $(xml).find('comment').each(function() {
        res[i] = {};
        res[i]['id'] = $(this).attr('id')
        res[i]['item_id'] = $(this).attr('item_id')
        res[i]['created_at'] = $(this).attr('created_at')
        res[i]['iterator'] = i   //iterator pour affichage collapsé "afficher les commentaires manquants"
        res[i]['comment_length'] = $(xml).find('comment').length   //devrait pas etre une fois dans chaque... :s pour affichage collapsé "afficher les commentaires manquants"
        // body
        $(this).find('body').each(function() {
            res[i]['body'] = $(this).text();
        });
        $(this).find('user').each(function() {
            res[i]['user'] = parse_user($(this));
        });
        i = i + 1;
    });
    return res;
}

// parse en mémoire du XML jquery de la balise <user></user>.
function parse_user(user) {
    var res = {};
    res.id = user.attr('id');
    res.login = user.attr('login');
    res.access_token = user.attr('access_token');
    res.first_name = user.attr('first_name');
    if(res.first_name.length>15)
        res.first_name_light = res.first_name.trim().substring(0, 15).split(" ").slice(0, -1).join(" ") + "...";
    else
        res.first_name_light = user.attr('first_name');
    
    res.birthday = user.attr('birthday');
    res.age = age_from_birthday(user.attr('birthday'));
    res.created_at = user.attr('created_at');
    res.gender = user.attr('gender');
    res.location = user.attr('location');
    if(res.location.length>17)
        res.location_light = res.location.trim().substring(0, 17).split(" ").slice(0, -1).join(" ") + "...";
    else
        res.location_light = user.attr('location');

    res.followers_count = user.attr('followers_count');
    res.followings_count = user.attr('followings_count');
    res.items_count = user.attr('items_count');
    res.score = user.attr('score');
    // res['website'] = user.attr('website');



    user.find("followings_ids").each(function() {
        res.followings_ids = $(this).text();
    });
    user.find("bio").each(function() {
        res.bio = $(this).text();
    });
    user.find("avatar").each(function() {
        res.avatar_small_url = $(this).attr('small');
        res.avatar_medium_url = $(this).attr('medium');
        res.avatar_original_url = $(this).attr('original');
    });

    res.owner = "false";
    if (session.login) { //check_session() pb d'alerte non-connecté
        if(session.login.toLowerCase()==res.login.toLowerCase())
            res.owner = "true";
    }
    return res;
}
// parse en mémoire du XML jquery contenant des <item></item>.
function parse_dms(xml) {

    console.log("parse_dms");
    var i = 0;
    var res = [];
    $(xml).find('dm').each(function() {
        res[i] = {};
        res[i]['iterator'] = i;
        res[i]['id'] = $(this).attr('id');
        res[i]['to_user_id'] = $(this).attr('to_user_id');
        res[i]['to_user_login'] = $(this).attr('to_user_login');
        res[i]['user_id'] = $(this).attr('user_id');
        res[i]['user_login'] = $(this).attr('user_login');
        res[i]['created_at'] = $(this).attr('created_at');
        res[i]['body'] = $(this).attr('body');
        res[i]['user_avatar_medium'] = $(this).attr('user_avatar_medium');
        res[i]['user_avatar_small'] = $(this).attr('user_avatar_small');
        res[i]['to_user_avatar_medium'] = $(this).attr('to_user_avatar_medium');
        res[i]['to_user_avatar_small'] = $(this).attr('to_user_avatar_small');

        res[i]['conv_user_id'] = res[i]['user_id'];
        res[i]['conv_user_login'] = res[i]['user_login'];
        res[i]['conv_user_avatar_medium'] = res[i]['user_avatar_medium'];
        res[i]['conv_user_avatar_small'] = res[i]['user_avatar_small'];
        res[i]['last_dm_is_me'] = false;
        if(res[i]['user_id'] == session.user.id){
            res[i]['last_dm_is_me'] = true;
            res[i]['conv_user_id'] = res[i]['to_user_id'];
            res[i]['conv_user_login'] = res[i]['to_user_login'];
            res[i]['conv_user_avatar_medium'] = res[i]['to_user_avatar_medium'];
            res[i]['conv_user_avatar_small'] = res[i]['to_user_avatar_small'];
        }
        i = i + 1;
    });
    console.log(res);
    return res;
}
// parse en mémoire du XML jquery contenant des <item></item>.
function parse_notices(xml) {

    console.log("parse_notices");
    var i = 0;
    var res = [];
    $(xml).find('notice').each(function() {
        res[i] = {};
        res[i]['id'] = $(this).attr('id');
        res[i]['to_user_id'] = $(this).attr('to_user_id');
        res[i]['to_user_login'] = $(this).attr('to_user_login');
        res[i]['users_ids'] = $(this).attr('users_ids');
        res[i]['users_logins'] = $(this).attr('users_logins');
        res[i]['created_at'] = $(this).attr('created_at');
        res[i]['item_id'] = $(this).attr('item_id'); //ATTENTION pas forcément présent
        res[i]['comment_id'] = $(this).attr('comment_id'); //ATTENTION pas forcément présent
        res[i]['body'] = $(this).attr('body');
        i = i + 1;
    });
    console.log(res);
    return res;
}

/****************
 * UTILS FUNCTIONS
 ***************/
// Renvoi true si l'utilisateur est connecté (object session.login et session.password renseigné)
function is_logged() {
    return (session.user !=null && session.user.login != null && session.password != null) ? true : false;
}

// Renvoie false si l'utilisateur n'est pas logué 
// ET SURTOUT affiche un message d'erreur à l'utilisateur, pratique !
// @display_msg : bool FACULTATIF (rien = true = affiche "Vous devez vous connecter") (Utile pour 1er lancement & flux Amis)
function check_session(display_msg) {
    console.log("check_session. Display_msg:"+display_msg);
    if(display_msg==undefined)  //je ne peux utliser la méthode de set de var par : display_msg = display_msg || true (car display_msg=false=undefined pour JS)
        display_msg = true; //true par défaut
    console.log(session);

    //UI CACHE bouton "Connexion"
    if(!is_logged()) {
        //SHOW bouton "Connexion"
        $("#btn_login").show();
        $("#btn_delete_session").hide();

        console.log("is_logged=false");
        if(display_msg)
            display_error_message("Vous devez vous connecter :)");
            
        //Si Facebook_app : on affiche la boite de dialog de connexion/inscription
		if(mode_fb && display_msg){
			$("#dialog_fb_signup").show();
		}
		else if(display_msg){
			$("#dialog_login").show();
		}
            
        return false;
    }
    else{
        $("#btn_login").hide();
        $("#btn_delete_session").show();
    }

    return true;
}

function display_error_message(mess) {
    console.log("display_error_message=true");
    $('#error').html(mess);
    $('#error').fadeIn("fast").delay(2500).fadeOut("fast");
}
/*
 *@mess : string message
 *@time : durée d'affichage facultative
 **/
function display_info_message(mess,time) {
    time = time || 0; //définit valeur par défaut si non-renseigné = affichage pour tjs jusqu'a rappel de la fonction
    $('#info').html(mess);
    if(time==0 && $('#info').css("display")=="none")
        $('#info').fadeIn("fast");
    else if(time==0)
        $('#info').fadeOut("fast");
    else
        $('#info').fadeIn("fast").delay(time).fadeOut("fast");
}

function hide_info_message() {
    $('#info').hide();
}
// A partir d'un object jquery XML contenant des <error>, cette fonction les affiches à l'écran
function display_xml_errors(xml) {
    console.log("display_xml_errors");
    errors_txt = "";
    $("errors", xml).find("error").each(function() {
        errors_txt += $(this).text() + "<br />";
    });
    display_error_message(errors_txt);
}

function fb_sharer(e) {
    e.preventDefault();
	var title = br2n($(this).attr("item_title"));
	var type = $(this).attr("item_type");
	var id = $(this).attr("item_id"); //quote VS image
	var site_name = $(this).attr("site_name") ? $(this).attr("site_name") : "Waluu"; //quote VS image
	var site_favicon = $(this).attr("site_favicon"); //url favicon
	var url = "http://www.facebook.com/apps/application.php?id=163423353750493"; //http://waluu.com OU tous vers l'application FB Waluu dans un 1er temps...
	var description = "L'application bientôt n°1 sur Facebook en France !"; //http://waluu.com
	var caption = ""; //http://waluu.com
	var name = site_name+" - L'application Facebook par Waluu"; // ajout de " - "+site_short_desc ?
	clic_vote=true; //empeche depliement item_full
	
	/*
	var obj_application = {
		name : "Twituu FB",
		id: "163423353750493"
	}		
	*/
	
	//execute_votes_create(e);
	 
	display_info_message("Partage sur votre mur...");
	if(FB.getSession() != null) {
		if(type=="quote"){
			FB.api('/me/feed', 'post', { message: title, link:url, description:description, caption:caption, name:name, icon:site_favicon }, function(response) {
				if (!response || response.error) {
				  display_info_message("Erreur lors du partage :( "+strObjError(response.error),2000);
				} else {
				  display_info_message("C'est partagé !",2000);
				  //execute_votes_create_success_item_id(id);
				  $("#share_fb_"+id).html("Partagé !");
				}
			});
		}
		else{ //IMAGE
			var item_url_image = $(this).attr("item_url_image");
			FB.api('/me/feed', 'post', { message: title, link:url, picture: item_url_image, description:description, caption:caption, name:name }, function(response) {
				if (!response || response.error) {
				  display_info_message("Erreur lors du partage :(",2000);
				} else {
				  display_info_message("C'est partagé !",2000);
				  $("#share_fb_"+id).html("Partagé !");
				  //execute_votes_create_success_item_id(id);
				}
			  });
		}
	}
	else
		fbLog();
}

/*
Si user vote/ajout comment-item etc :
* Afficher une popup “Choississez ou Saissez votre login et un mot de passe Waluu”
** Si email non présent dans la DB Waluu 
*** ET si Login non utilisé, alor&&s on l’inscript et on le connecte.
** Si Email présent dans la DB Waluu et Login/Mdp juste, alors on connecte l’utilisateur.
** Sinon en fonction de l’erreur (email présent dans la db, mais login/mdp faux, on lui dit que le login/mdp est faux), Si email non présent, mais login déjà utilisé ou invalide (ou mdp invalide) alors on l’informe des erreurs.
*/
function fb_signup(){
	console.log("> fb_signup");
	
	display_info_message("Connexion en cours...");
	
//1. Récup des info 
    var login = "";
    var email = "";
    var password = "";
	
	//Si boite FB_Signup
	login = $('#login_fb_signup_val').val().trim();
	password = $('#password_fb_signup_val').val().trim();
	email = $('#email_fb_signup_val').val().trim();
	
    
//2. Connect : si tout bon (check_credential) : Vérification (check_credentials) du login/mdp. (= fct)
	session.login = login;
    session.password = password;
	
    senddata = {
        login : login,
        password : password
    };
    console.log(senddata);
    $.ajax({
        type : "POST",
        url : "http://" + host + "/api/users/check_credentials.xml",
        data : senddata,
        dataType : "xml",
        success : fb_signup_connect_success,
        error : fb_signup_connect_error
    });
}
//2. Si credential Ok : On le "Connecte" (Maj Storage session)  (= fct create_session_success)
function fb_signup_connect_success(xml){
	console.log(">> fb_signup_connect_success");
	hide_info_message();
	
	var user = {};
    $(xml).find("user").each(function() {
        user = parse_user($(this));

    });
    // On stock les credentials
    localStorage.setItem(stored_login, session.login);
    localStorage.setItem(stored_password, session.password);
    localStorage.setItem(stored_access_token, user.access_token);
    localStorage.setItem(stored_user, JSON.stringify(user));
    // On recup la session a partir des infos stockées.
    session = retrieve_stored_session();
    console.log(session);
    display_info_message("Bienvenue sur "+host_maj+" "+session.login+"!",2500);

    //UI CACHE DIALOG FB_signup
    $("#dialog_fb_signup").hide();

}
//3. Inscription (= fct create_session) - Si error pour la connexion de l'user : Tentative d'inscription (fb_signup) 
function fb_signup_connect_error(xhr){
	console.log("> fb_signup_connect_error : Inscription");
	
    var email = $('#email_fb_signup_val').val().trim();
    var login = $('#login_fb_signup_val').val().trim();
    var password = $('#password_fb_signup_val').val().trim();
	
    senddata = {
        login : login,
        password : password,
        email : email
    };
    console.log(senddata);
    $.ajax({
        type : "POST",
        url : "http://" + host + "/api/users.xml",
        data : senddata,
        dataType : "xml",
        success : fb_signup_success,
        error : fb_signup_error
    });
	
}
//4. Connecte si inscription OK 
function fb_signup_success(xml){
	console.log(">  Inscrit ! fb_signup_success");
	hide_info_message();
	
    display_info_message("Inscrit sur "+host_maj+" "+session.login+"!",2500);
	fb_signup_connect_success(xml); // ?
}
//5. Sinon affichage de l'erreur : email pris ou login pris ou mauvais format de Mdp
function fb_signup_error(xhr){
    console.log("> fb_signup_error : Connexion Fail & Inscription Fail");
	hide_info_message();
	
    //On vide login & password pour bien indiqué que c'est déjà utilisé/pas bon
    $('#login_fb_signup_val').val("");
    $('#password_fb_signup_val').val("");
    handle_error(xhr);
}

function refresh_event() {
    console.log("refresh_event");

	//Affiche composant si mode Facebook
	if(mode_fb){
		console.log("waluu");
    	$('.class_mode_fb').show();
	}
	
	
    //ITEM_FULL : affichage
    $("div.item_row").unbind('click').click(display_item_row_full);
    //DM_LINE_FULL : affichage
    $("div.dm_line").unbind('click').click(display_dm_line_full);

    //SECTIONS : switch/changement/show et set les var d'init de section
    /*$("#section_tops").unbind('click').click(show_section);
    $("#section_friends").unbind('click').click(show_section);
    $("#section_me").unbind('click').click(show_section);
    $("#section_waluu").unbind('click').click(show_section);
    */
    $(".sections ul li a").unbind('click').click(show_section);

    //SUBSECTIONS : switch/changement/show et set les var d'init de section
    $(".sub_section_link").unbind('click').click(show_sub_section);
    /*$("#sub_section_realtime").unbind('click').click(show_sub_section);
    $("#sub_section_24h").unbind('click').click(show_sub_section);
    $("#sub_section_7d").unbind('click').click(show_sub_section);
    $("#sub_section_forever").unbind('click').click(show_sub_section);
    */
    //MORE : ITEMS (encore plus) & COMMENTS (Afficher X com')
    $("#more_items").unbind('click').click(execute_more_items);
    $(".more_comments").unbind('click').click(display_more_comments);

    //DIALOG : Champ de saisie d'infos
    $("#btn_login").unbind('click').click(show_dialog);
    $(".dialog_btn_close").unbind('click').click(show_dialog);
    $("#dialog_btn_signup").unbind('click').click(show_dialog);

    //SESSION / LOGIN
    $("#dialog_login_submit").unbind('click').click(create_session);
    $("#dialog_signup_submit").unbind('click').click(create_user);
    $("#btn_delete_session").unbind('click').click(clear_session);


	//FB_SIGNUP
    $("#dialog_fb_signup_submit").unbind('click').click(fb_signup);

    //COMMENT (add)
    $(".add_comment_btn").unbind('click').click(show_dialog);
    $("#dialog_comment_submit").unbind('click').click(create_comment);
    //ITEM (add)
    $("#id_create_item").unbind('click').click(show_dialog); //
    $("#dialog_item_submit").unbind('click').click(execute_items_create);
    //MP (add)
    $(".add_dm_btn").unbind('click').click(show_dialog);
    $(".reply_dm_btn").unbind('click').click(show_dialog);
    $("#dialog_dm_submit").unbind('click').click(create_dm);
    $(".show_dialog").unbind('click').click(show_dialog); //ALL DIALOG (Depuis dlux user, btn option)
    $("#dialog_dm_id_submit").unbind('click').click(create_dm_id);
    
    //OPTIONS USER
    $("#btn_user_options").unbind('click').click(show_dialog); 
    $(".btn_cancel_opt").unbind('click').click(show_dialog); 
    $(".flag_user").unbind('click').click(show_confirm);

    //NOTICE > ITEM_FULL
    $(".notice_line").unbind('click').click(show_item_full);

	
  

    //SIGNALER item & SUPPRIMER item
    $(".flag_btn").unbind('click').click(show_confirm);
    $(".delete_btn").unbind('click').click(show_confirm);
    $(".btn_cancel").unbind('click').click(show_confirm);
    $(".btn_confirm").unbind('click').click(execute_confirm);

    //S'ABONNER FOLLOW
    $("#btn_user_follow").unbind('click').click(execute_follows_create);
    
	//*** IF MODE FB
	if(mode_fb){//FB PARTAGER
		$(".fb_sharer_btn").unbind('click').click(fb_sharer);
	}
	//else{//VOTES
		$(".vote_btn").unbind('click').click(execute_votes_create);
		$("a.votes_create").unbind('click').click(execute_votes_create);
	//}
    $("a.flags_create_user").unbind('click').click(execute_flags_create_user);
    $("a.comments_index").unbind('click').click(execute_comments_index);
    //$("a.item_row_full").unbind('click').click(display_item_row_full);
   
    //$("div.item_comments_title").unbind('click').click(display_item_comments_full);
    
    $("a.comment_row_destroy").unbind('click').click(execute_comments_destroy);
    $("a.item_row_destroy").unbind('click').click(execute_items_destroy);
    $("abbr.timeago").unbind('click').timeago(); // ??? click ?
	
    $("#refresh_btn").unbind('click').click(updateItems);
//var login_tmp=localStorage.getItem('stored_login');
   

}


// Execute une requete HTTP en Ajax
// La variable global xhr_with_auth doit avoir été correctement renseigné.
// A utiliser pour les requete demande une authentification par access_token.
// 
function execute_xhr_with_auth() {

    if (check_session()) {
        if (xhr_with_auth.level < 2) {
            if (  session.access_token != null) {
                console.log("access_token =" +   session.access_token);
                execute_xhr_with_auth_token(  session.access_token);
            }
            // demande d'access_token
            else {
                console.log("Pas d'access_token stocké en local : Demande d'access_token");
                retrieve_access_token();
            }
        }
        else {
            console.log("xhr_with_auth.level >= 2 ! Impossible de récupérer l'access_token de l'utilisateur !");
            display_error_message("Problème de connexion");
        }
    }
}

function execute_xhr_with_auth_token(access_token) {
    xhr_with_auth.data.access_token  = access_token;
    $.ajax(xhr_with_auth);
}

function retrieve_access_token() {

    // L'utilisateur doit être loggué
    if (check_session()) {
        senddata = {
            login : session.login,
            password : session.password
        };
        console.log(senddata);
        $.ajax({
            type : "POST",
            url : "http://" + host + "/api/users/check_credentials.xml",
            data : senddata,
            dataType : "xml",
            success : retrieve_access_token_success,
            error : retrieve_access_token_error
        });
    }
}


function retrieve_access_token_success(xml){
    console.log("retrieve_access_token_success");
    var access_token  = null;
    $(xml).find("user").each(function() {
        access_token = $(this).attr('access_token');
    });
    if (access_token != null ) {
        session.access_token = access_token;
        localStorage.setItem(stored_access_token,access_token);
        execute_xhr_with_auth_token(session.access_token);
    }
    else {
        console.log("error token is null ! :s");
    }
    console.log("access_token = "+  access_token);
}

function retrieve_access_token_error(){
    console.log("retrieve_access_token_error");
    console.log("Mauvais login/mdp ou serveur HS");
}

// getPageScroll() by quirksmode.com
function getPageScroll() {
    var xScroll, yScroll;
    if (self.pageYOffset) {
      yScroll = self.pageYOffset;
      xScroll = self.pageXOffset;
    } else if (document.documentElement && document.documentElement.scrollTop) {
      yScroll = document.documentElement.scrollTop;
      xScroll = document.documentElement.scrollLeft;
    } else if (document.body) {// all other Explorers
      yScroll = document.body.scrollTop;
      xScroll = document.body.scrollLeft;
    }
    return new Array(xScroll,yScroll)
}

function strObj(obj){
	var s="";
	for (i in obj) {
	  s+=i+" | ";
	}
	return s;
}

function strObjError(obj){
	return obj.message+" | "+obj.type;
}

//affiche le contenu d'un Objet JS sous forme de chaine.
function dump (sObjName, sTab) {
  var Obj = eval (sObjName);
  //
  if (sTab==null) sTab='';
  if (typeof(Obj)!='object')
    return sTab+sObjName+': '+typeof(Obj)+' = '+Obj+'\n';
  else if (Obj.length!=null)
    var sResult = sTab+sObjName+': array length '+Obj.length+'\n';
  else
    var sResult = sTab+sObjName+': object\n';
  //
  for (sProp in Obj)
    sResult += dump (sObjName+'[\''+sProp+'\']', sTab+'  ');
  return sResult;
}

/*************
 * OTHERS
 ************/
// implement JSON.stringify serialization a cause d'IE qui ne la pas par default...
JSON.stringify = JSON.stringify ||
    function(obj) {
        var t = typeof (obj);
        if(t != "object" || obj === null) {
            // simple data type
            if(t == "string")
                obj = '"' + obj + '"';
            return String(obj);
        } else {
            // recurse array or object
            var n, v, json = [], arr = (obj && obj.constructor == Array);
            for(n in obj) {
                v = obj[n];
                t = typeof (v);
                if(t == "string")
                    v = '"' + v + '"';
                else if(t == "object" && v !== null)
                    v = JSON.stringify(v);
                json.push(( arr ? "" : '"' + n + '":') + String(v));
            }
            return ( arr ? "[" : "{") + String(json) + ( arr ? "]" : "}");
        }
    };

///////////////////////////////////
//  DETECT MOBILE BROWSER (VS Facebook & Extension Chrome : pb ADS)
(function(a){jQuery.browser.mobile=/android.+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|e\-|e\/|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|xda(\-|2|g)|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))})(navigator.userAgent||navigator.vendor||window.opera);


