/*
----------------------------------------------------------------
Title : ArteoConversationLib.js
Author : Dominique Porta
Description :
    Cette librairie exposent des methodes pour rechercher et realiser 
    des traitements sur la messagerie privee Arteo.
Lib externes utilise:
    - jQuery: http://jquery.com/
Created : 2009/02/10
Modified : 2009/02/10
----------------------------------------------------------------
*/

(function(Arteo) {
    Arteo.extend({ Conversation: function() { } });
    Arteo.Conversation.extend = extend;
    Arteo.Conversation.extend({
        /* =INIT */
        /* Initialisation globale */
    	WebService: Arteo.domain + "/Utility/ConversationWebService.asmx/",
    	STATUS_ALL: 0,
    	STATUS_READ: 1,
    	STATUS_UNREAD: 2,
    	STATUS_NONE: -1,
    	
    	initConversation: function() {
            Arteo.debug("[Conversation]: Initialisation");
    	},

    	/* Se produit lors d'un changement de selection */
    	selectionOnChange: function(obj) {
            Arteo.debug("[Conversation]: Methode: selectionOnChange()");
    	    this.updateStatusButtons();
    	},
    	
    	/* Met a jours le menu en fonction des items selectionnee */
    	updateStatusButtons: function() {
            Arteo.debug("[Conversation]: Methode: updateStatusButtons()");
            var buttons=jQuery('#inbox_status_buttons');
            if(!buttons) {
                return;
            }
            var items=this.getSelectedItems();
            var unread_disabled=true;
            var read_disabled=true;
            for(var i=0;i<items.length;i++){
                var status=this.getStatus(jQuery('#item_'+items[i]));
                Arteo.debug("[Conversation]: Stauts: " + status);
                if(status==this.STATUS_UNREAD){
                    read_disabled=false;
                }
                else{
                    unread_disabled=false;
                }
            }
            var message_selector=jQuery('#message_selector');
            if(!items.length&&message_selector){
                message_selector.selectedIndex=0;
            }
            var delete_disabled=read_disabled&&unread_disabled;
            var li=jQuery('#inbox_status_buttons li');
            var loop=[{l:li[0],d:unread_disabled},{l:li[1],d:read_disabled},{l:li[2],d:delete_disabled}];
            li.each(function (i) {
                if(loop[i].d) {
                    Arteo.debug("[Conversation]: ADD Classe: 'conversationMenuDisabled'");
                    jQuery(this).addClass('conversationMenuDisabled');
                }
                else{
                    Arteo.debug("[Conversation]: REMOVE Classe: 'conversationMenuDisabled'");
                    jQuery(this).removeClass('conversationMenuDisabled');
                }
            });
            Arteo.Conversation.refreshUnreadCounter();
    	},

        selectDropdownOnChange: function(obj){
            Arteo.debug("[Conversation]: Méthode: selectDropdownOnChange()");
            Arteo.debug("[Conversation]: Object: " + obj);
            if(obj.value=='^_^'){
                return false;
            }
            var status=obj.value?this['STATUS_'+obj.value.toUpperCase()]:this.STATUS_NONE;
            this.setSelection(status);
        },

        setSelection: function(status){
            Arteo.debug("[Conversation]: selectedValue: " + status);
            var rows=jQuery("#items div.tr");
            Arteo.debug("[Conversation]: rows: " + rows);
            var items=[];
            rows.each(function (i) {
                if(!status||Arteo.Conversation.getStatus(jQuery(this))==status){
                    items.push(Arteo.Conversation.getItemId(jQuery(this)));
                }
            });
            Arteo.Conversation.setSelectedItems(items); 
        },
        
        refreshConversation: function(){
            Arteo.debug("[Conversation]: Rafraichissement de la liste des conversation");
            Arteo.Conversation.refreshUnreadCounter();
            window.__doPostBack(Arteo.Conversation.updatePanelId, '');
        },

        /* Obtient le statut de l'item de la ligne specifiee */
        getStatus: function(row){
            Arteo.debug("[Conversation]: Methode: getStatus()");
            Arteo.debug("[Conversation]: Ligne utilisé: "+row);
            if(row.attr("className").indexOf('newMessage')!=-1){
                Arteo.debug("[Conversation]: STATUS_UNREAD");
                return this.STATUS_UNREAD;
            }
            else{
                Arteo.debug("[Conversation]: STATUS_READ");
                return this.STATUS_READ;
            }
        },
        
        /* Definit le statut des items specifiees par le statut specifie */
        setStatus: function(status, items){
            Arteo.debug("[Conversation]: Methode: setStatus()");
            Arteo.debug("[Conversation]: Items: "+items);
      	    var rows = [];
      	    for(var i=0;i<items.length;i++){
                rows.push(jQuery('#item_'+items[i]));
            }
            for(var i=0;i<rows.length;i++){
                Arteo.debug("[Conversation]: Row: "+rows[i]);
                if(status == Arteo.Conversation.STATUS_READ) {
                    Arteo.debug("[Conversation]: REMOVE classe: 'newMessage'");
                    rows[i].removeClass("newMessage");
                }
                else if(status == Arteo.Conversation.STATUS_UNREAD) {
                    Arteo.debug("[Conversation]: ADD classe: 'newMessage'");
                    rows[i].addClass("newMessage");
                }
            }
            Arteo.Conversation.updateStatusButtons();
        },
        
        
        
        //Selectionne les case a cocher determinee par la liste d'id specifiee
        setSelectedItems: function(items){
            Arteo.debug("[Conversation]: Methode: setSelectedItems()");
            Arteo.debug("[Conversation]: Items: " + items);
            var checkboxes=jQuery("#items div.tr input:checkbox");
            checkboxes.each(function (i) {
                if(items.toString().indexOf(Arteo.Conversation.getItemId(jQuery(this).parent().parent()), 0)!=-1)
                    checkboxes.eq(i).attr( 'checked', true );
                else
                    checkboxes.eq(i).attr( 'checked', false );
            });
            Arteo.Conversation.updateStatusButtons();
        },

    	/* Recupere la liste des items selectionnees grace aux cases a cocher*/
    	getSelectedItems: function() {
            Arteo.debug("[Conversation]: Recuperation des cases a cochee selectionnees");
	        var checkboxes=jQuery("#items div.tr input:checked");
            var items=[];
            checkboxes.each(function (i) {
                items.push(Arteo.Conversation.getItemId(jQuery(this).parent().parent()));
            });
            return items;
    	},
    	
    	/* Marque la conversation specifie par l'id comme lu si elle est non lue et inversement.*/
    	toggleStatus: function(obj){
            Arteo.debug("[Conversation]: Methode: toggleStatus()");
            var row = jQuery(obj).parent().parent();
            var status = Arteo.Conversation.getStatus(row);
            var items=[];
            items.push(Arteo.Conversation.getItemId(row));
            if(status == Arteo.Conversation.STATUS_READ)
                Arteo.Conversation.markUnread(items);
            else 
                Arteo.Conversation.markRead(items);
        },
    	
    	
    	/* Marque comme lu les conversations specifie par la liste d'id.
    	    si la liste est null les conversation a marquer comme lu sont specifie 
    	    par les cases a cocher */
    	markRead: function(obj) {
            Arteo.debug("[Conversation]: Methode: markRead()");
            Arteo.debug("[Conversation]: Objet: " + obj);
    	    var items = obj;
    	    if(obj==null) {
    	    	var link =jQuery("#read");
    	        if(link.parent().attr('className')=="conversationMenuDisabled") {
                    Arteo.debug("[Conversation]: Impossible");
    	            return;
    	        }
    	        items = this.getSelectedItems();
    	    }
            Arteo.debug("[Conversation]: WS MarkRead");
            Arteo.debug("[Conversation]: Items: "+items);
            jQuery.ajaxDotNet(Arteo.Conversation.WebService + "MarkRead", {
                verb: "POST",
                data: {conversationIds: items},
                success: function(obj) {
                    Arteo.debug("[Conversation]: FIN WS MarkRead");
                    Arteo.debug("[Conversation]: Object success: "+obj);
                    Arteo.Conversation.setStatus(Arteo.Conversation.STATUS_READ, items);
                },
                error: function(obj) {
                    Arteo.debug("[Conversation]: Proleme WS MarkRead");
                    alert("Un probleme est survenue durant la phase de tri");
                }
            });
    	},
    	
    	markThisUnread: function(obj, url){
    	    var items=[];
    	    items.push(obj);
            Arteo.Conversation.markUnread(items);
            document.location=url;
    	},
    	
    	deleteThisConversation: function(obj, url){
    	    var items=[];
    	    items.push(obj);
            Arteo.debug("[Conversation]: WS DeleteConversation");
            jQuery.ajaxDotNet(Arteo.Conversation.WebService + "DeleteConversation", {
                verb: "POST",
                data: {conversationIds: items},
                success: function(obj) {
                    Arteo.debug("[Conversation]: Fin WS DeleteConversation");
                    document.location=url;
                },
                error: function(obj) {
                    Arteo.debug("[Conversation]: Probleme WS DeleteConversation");
                    alert("Un probleme est survenue durant la phase de tri");
                }
            });
    	},
    	
        deleteThisSendedConversation: function(obj, url){
    	    var items=[];
    	    items.push(obj);
    	    Arteo.debug("[Conversation]: WS DeleteSendedConversation");
            jQuery.ajaxDotNet(Arteo.Conversation.WebService + "DeleteSendedConversation", {
                verb: "POST",
                data: {conversationIds: items},
                success: function(obj) {
                    Arteo.debug("[Conversation]: Fin WS DeleteSendedConversation");                    
                    document.location=url;
                },
                error: function(obj) {
                    Arteo.debug("[Conversation]: Probleme WS DeleteSendedConversation");
                    alert("Un probleme est survenue durant la phase de tri");
                }
            });
    	}
    	,
    	
    	/* Marque les conversations selectionnees comme non lu */
    	markUnread: function(obj){
            Arteo.debug("[Conversation]: Methode: markUnread()");
            Arteo.debug("[Conversation]: Object: "+obj);
	        var items = obj;
	        if(obj==null) {
                var link =jQuery("#unread");
                if(link.parent().attr('className')=="conversationMenuDisabled") {
                    Arteo.debug("[Conversation]: Impossible");
                    return;
                }
	            items = this.getSelectedItems();
	        }
            Arteo.debug("[Conversation]: WS MarkUnread");
            Arteo.debug("[Conversation]: Items: "+items);
    	    jQuery.ajaxDotNet(Arteo.Conversation.WebService + "MarkUnread", {
                verb: "POST",
                data: {conversationIds: items},
                success: function(obj) {
                    Arteo.debug("[Conversation]: Fin WS MarkUnread");
                    Arteo.Conversation.setStatus(Arteo.Conversation.STATUS_UNREAD, items);
                },
                error: function(obj) {
                    Arteo.debug("[Conversation]: Probleme WS MarkUnread");
                    alert("Un probleme est survenue durant la phase de tri");
                }
            });
    	},
 
    	refreshUnreadCounter: function(obj){
            Arteo.debug("[Conversation]: Methode: refreshUnreadCounter()");
            Arteo.debug("[Conversation]: WS GetUnreadCount");
    	    jQuery.ajaxDotNet(Arteo.Conversation.WebService + "GetUnreadCount", {
                verb: "POST",
                data: {},
                success: function(obj) {
                    Arteo.debug("[Conversation]: Message id: " + Arteo.Conversation.unreadCounterLabelId);
                    var UnreadCounterLabel = jQuery("#"+Arteo.Conversation.unreadCounterLabelId);
                    Arteo.debug("[Conversation]: Counter label: " + UnreadCounterLabel);
    	            UnreadCounterLabel.text(obj);
    	            if (obj == 0)
    	                jQuery("a.inboxCount").hide();
                    else
    	                jQuery("a.inboxCount").show();
                    Arteo.debug("[Conversation]: Fin WS GetUnreadCount");
                },
                error: function(obj) {
                    Arteo.debug("[Conversation]: Probleme WS GetUnreadCount");
                    alert("Un probleme est survenue durant la phase de tri");
                }
            });
    	},
    	
    	setUnreadCounterLabelId: function(obj){
            Arteo.debug("[Conversation]: Methode: setUnreadCounterLabelId()");
    	    Arteo.Conversation.unreadCounterLabelId = obj;
    	},
    	
    	setUpdatePanelId: function(obj){
            Arteo.debug("[Conversation]: Methode: setUpdatePanelId()");
    	    Arteo.Conversation.updatePanelId = obj;
    	},
    	
    	/* Supprime les conversations selectionnees */
    	deleteConversation: function(obj){
            Arteo.debug("[Conversation]: Methode: deleteConversation()");
    	    var items =[];
            if(obj==null) {
                var link =jQuery("#delete");
                if(link.parent().attr('className')=="conversationMenuDisabled") {
                    Arteo.debug("[Conversation]: Impossible");
                    return;
                }
                items = this.getSelectedItems();
                Arteo.debug("[Conversation]: Items: " + items);
            }
    	    else {
                var row = jQuery(obj).parent().parent();
                items.push(Arteo.Conversation.getItemId(row));
    	    }
    	   
            Arteo.debug("[Conversation]: WS DeleteConversation");
            jQuery.ajaxDotNet(Arteo.Conversation.WebService + "DeleteConversation", {
                verb: "POST",
                data: {conversationIds: items},
                success: function(obj) {
                    Arteo.debug("[Conversation]: Fin WS DeleteConversation");
                    Arteo.Conversation.refreshConversation();
                },
                error: function(obj) {
                    Arteo.debug("[Conversation]: Probleme WS DeleteConversation");
                    alert("Un probleme est survenue durant la phase de tri");
                }
            });
    	},
    	
    	/* Supprime les messages selectionnes */
    	deleteSendedConversation: function(obj){
            Arteo.debug("[Conversation]: Methode: deleteSendedConversation()");
    	    var items =[];
            if(obj==null) {
                var link =jQuery("#delete");
                if(link.parent().attr('className')=="conversationMenuDisabled") {
                    Arteo.debug("[Conversation]: Impossible");
                    return;
                }
                items = this.getSelectedItems();
                Arteo.debug("[Conversation]: Items: " + items);
            }
    	    else {
                var row = jQuery(obj).parent().parent();
                items.push(Arteo.Conversation.getItemId(row));
    	    }
    	   
            Arteo.debug("[Conversation]: WS DeleteSendedConversation");
            jQuery.ajaxDotNet(Arteo.Conversation.WebService + "DeleteSendedConversation", {
                verb: "POST",
                data: {conversationIds: items},
                success: function(obj) {
                    Arteo.debug("[Conversation]: Fin WS DeleteSendedConversation");
                    Arteo.Conversation.refreshConversation();
                },
                error: function(obj) {
                    Arteo.debug("[Conversation]: Probleme WS DeleteSendedConversation");
                    alert("Un probleme est survenue durant la phase de tri");
                }
            });
    	},
    	
    	/* Obtient l'identifiant de l'item pour la ligne specifiee. */
    	getItemId: function(row) {
            Arteo.debug("[Conversation]: Methode: getItemId();");
    	    return/item_([0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12})/.exec(row.attr('id'))[1];
    	}
    });
})(Arteo);