
/**
 * This is automatically executed when the "Message" tab is clicked
 */
Vetstoria.privatemessages.team = new (new Class({

    __construct: function(){
        
        this.folders = ['Inbox', 'Sent', 'Draft', 'Trash'];       
        this.messages = [];        
        //where in the dom this message class will work
        this.destination = '';        
    
        //dom 
        this.layout = {
            menu: false, //dom menu location 
            frame: false, //dom frame location
            ready: false
        };        

        this.owner_type =false;//"veterinarian";
        this.owner_id=false;
        //[{level, description}, ...]
        this.debug = []; // a simple debug array
        
    },
    
    //init this class, launched by the constructor
    init: function(){
		
        console.log('inited mails');

        this.owner_type =Vetstoria.session.getSubUserType();
        this.owner_id=Vetstoria.session.getSubUserID();

        this.messages = [];
        this.destination = $("div.mails.content.tab");
        this.init_layout();
        this.messages = Vetstoria.privatemessages.db_select_all(this.owner_type, this.owner_id);
        $("button.Inbox").trigger("click");
        
    },
	
    //init the layout
    init_layout: function(){

		this.destination.css("margin-top","25px");
        this.layout.menu = this.destination.append($('<div class="ui menu raised-buttons"  style="left:0px;" />')).find('div.menu');
        this.layout.frame = this.destination.append($('<div class="frame" />')).find('div.frame');
        this.layout.ready = true;
        this.init_menu();
       
    },
    
    //init the tabs
    init_menu: function(){
    if(Vetstoria.session.user.type=='petowner')
        return;
        var prt = this;
        
        this.layout.menu.empty();        
        this.layout.menu.append($('<button class="write"/>').text('Write').click(function(){
        
            if ($(this).hasClass('selected')) return;                
            
            $(this).parents().find('.mails > .menu > button').removeClass('selected');
            $(this).addClass('selected');
			          
            prt.write_form();
            
        }));
        
        for (x in this.folders) {
        
            var v = this.folders[x];
            
            this.layout.menu.append($('<button class="' + v + '" />').text(v).click(function(){
            
                v = $(this).text();
				
                if ($(this).hasClass('selected')) return;
                    
                $(this).parents().find('.mails > .menu > button').removeClass('selected');
                $(this).addClass('selected');
				
                console.log('click', v);                
                prt.show_folder(v);
                
            }));
            
        }
        
    },
	  
    //Generate a messages' list
    show_folder: function(folder){
    
        if (!Vetstoria.privatemessages.folder_exists(folder)) return false;            

        var table = $('<table/>').addClass("message_list style").attr({
            "cellspacing":0,
            "cellpadding":0
        });
        var thead = "<thead><tr><th style='width:25px;'><input type='checkbox' id='selectAll'/></th><th width='100'>From</th><th width='150'>Message Subject</th><th width='100'>When</th><th>To</th></tr></thead>";
        var prt = this;
        var k;
        var message = [];
        var messageID;
        
        $(thead).appendTo(table);
		
        for (var i = 0; i < this.messages.length; i++) {
		    
            if (this.messages[i].folder.toLocaleLowerCase() != folder.toLocaleLowerCase()) continue; 
            message.push(this.messages[i]);
			
        }

        if (message.length == 0) {
			
            var div = $('<div />').css({
                "text-align": "center",
                "line-height": 16
            }).text("Sorry,no message in this folder.");
           
            this.layout.frame.empty().append(div);
            return;
			
        }	

        for (var i = 0; i < message.length; i++) {
            // add a class "unread" on read messages		
            var messageREAD = message[i].read;
            if (messageREAD == 0) {
                var row = $('<tr class="unread"/>');
            }
            else {
                var row = $('<tr />');
            }

            var checkbox = $('<input type="checkbox" name="deleteId" />').val(message[i].id);
            var title, from;

            var fromname = $('<div />').append(
                $("<div class='information'/>").append(
                    $("<p class='name'/>").append($("<a href='"+"/"+message[i].from_type+"/"+message[i].from_id+"' />").text(message[i].from_name))
                    )
                );

            var toname = $('<div />').append(
                $("<div class='information'/>").append(
                    $("<p class='name'/>")
                    .append($(((message[i].to.length>0)?"<a href='"+"/"+message[i].to[0].to_type+"/"+message[i].to[0].to_id+"' />":"<a href='javascript:void(0)' />"))
                        .text(((message[i].to.length>0)?(message[i].to[0].to_name + ((message[i].to.length>1)?" ...":"")):"...")))
                    )
                );
            			
            (function(){
                //console.log(message.id);		
                var messageID = message[i].id;
                // read a class "unread" on read messages	
                var read = message[i].read;
                title = $('<a href="javascript:void(0)"/>').html(((message[i].title!="")?message[i].title:"...") + "<br/>").click(function(event){
                    event.stopPropagation();
                    prt.show_message(messageID);
                    if (read == 0) {
                        $(this).parent().parent().removeClass("unread");
                        prt.read(messageID,"read");
                    }
                });
               
            })();

            var message_date = message[i].date;
            with (row) {
                append(($('<td width="25"/>')).append(checkbox));
                append(($('<td width="100"/>')).append(fromname));
                append(($('<td width="150"/>')).append(title));
                append(($('<td width="100"/>')).append($("<em class='timestamp'/>").attr("rel", message_date)));
                append(($('<td/>')).append(toname));
                appendTo(table);
                }
        }		

        this.layout.frame.empty().append($('<div class="table-list" />').append(table));
        $(table).vetTable({
            'height': 'auto'
        });
        var date;
        $("em.timestamp").each(function(){
            date = $(this).attr('rel');
            $(this).text(prettyDate(date));
        });
	
        var div = $('<div />').css("padding","5px 0 5px 0px");
        var deleteBtn = $('<input type="button" value="Delete" class="deleteBtn"/>');
        var markReadBtn = $('<input type="button" value="Mark as read" class="markReadBtn"/>');
        var markUnreadBtn = $('<input type="button" value="Mark as unread" class="markUnreadBtn"/>');
        div.append(deleteBtn).append(markReadBtn).append(markUnreadBtn);
        this.layout.frame.append(div);
        
        deleteBtn.bind('click', function(){
            prt.confirmPlanel();
        });		
		
        markReadBtn.bind('click', function(){
            if ($("input[name='deleteId']:checked").length == 0) {
                $.msgbox('Please select at least one message');
                return false;
            }
            if ($("input[name='deleteId']:checked").length == 1) {
                var selectId = 0;
                selectId = $("input[name='deleteId']:checked").val();
            }
            else {
                var selectId = {};
                selectId.id = [];
                $("input[name='deleteId']:checked").each(function(){
                    selectId.id.push($(this).val());
                });
            }
            prt.read(selectId,"read");
        });
        markUnreadBtn.bind('click', function(){
            if ($("input[name='deleteId']:checked").length == 0) {
                $.msgbox('Please select at least one message');
                return false;
            }
            if ($("input[name='deleteId']:checked").length == 1) {
                var selectId = 0;
                selectId = $("input[name='deleteId']:checked").val();
            }
            else {
                var selectId = {};
                selectId.id = [];
                $("input[name='deleteId']:checked").each(function(){
                    selectId.id.push($(this).val());
                });
            }
            prt.read(selectId,"unread");
        });
        
        return true;
        
    },
    /**
     * delete a message
     * return true if success
     */
    remove: function(selectId, target){
        var prt = this;
        if (selectId.id) {
            var moveArray2 = this.select('id', selectId.id[0])[0];
            if (moveArray2.folder.toLocaleLowerCase() == "trash") {
                for (var k = 0; k < selectId.id.length; k++) {
                    $.each(prt.messages, function(i){
                        if (prt.messages[i] != undefined) {
                            if (prt.messages[i].id == selectId.id[k]) {
                                prt.messages.splice(i, 1);
                            }
                        }
                    });
                }
                Vetstoria.privatemessages.db_delete(prt.owner_type,prt.owner_id,selectId);
            }
            else {
                for (var k = 0; k < selectId.id.length; k++) {
                    $.each(prt.messages, function(i){
                        if (prt.messages[i] != undefined) {
                            if (prt.messages[i].id == selectId.id[k]) {
                                prt.messages[i].folder = "trash";
                            }
                        }
                    });
                }
                this.change_folder(selectId, "trash");
            }
            $("input[name='deleteId']:checked").parent().parent().remove();
            
        }
        else {
            var moveArray = this.select('id', selectId)[0];
            if (moveArray.folder.toLocaleLowerCase() == "trash") {
                $.each(prt.messages, function(i){
                    if (prt.messages[i] != undefined) {
                        if (prt.messages[i].id == selectId) {
                            prt.messages.splice(i, 1);                            
                        }
                    }
                });
                Vetstoria.privatemessages.db_delete(prt.owner_type,prt.owner_id,selectId);
                //change folder
                if (target) {
                    $(target).parent().parent().remove();
                }
                else {
                    $("input[name='deleteId']:checked").parent().parent().remove();
                }
            }
            else {
                $.each(prt.messages, function(i){
                    if (prt.messages[i] != undefined) {
                        if (prt.messages[i].id == selectId) {                            
                            prt.messages[i].folder = "trash";
                        }
                    }
                });
                console.log(prt.owner_type,prt.owner_id,selectId, "trash");
                prt.change_folder(selectId, "trash");
                if (target) {
                    $(target).parent().parent().remove();
                }
                else {
                    $("input[name='deleteId']:checked").parent().parent().remove();
                }
            }
        }
        
    },
    /**
     * change folder (used to move to trash)
     * return true if success
     */
    change_folder: function(id, folder){
		
        console.log("change folder");        
        Vetstoria.privatemessages.db_change_folder(this.owner_type,this.owner_id,id, folder);        
        var message = this.messages;
        
        $.each(message, function(i){
            if (message[i].id == id) {
                message[i].folder = folder;
                return true;
            }
            else {
                return false;
            }
        });
      
    },
    //Show the message in a facebox (sender, title, date, content)
    show_message: function(id){
		
        var message = this.messages;
		
        $.each(message, function(i){
			
            if (message[i].id == id) {
				
                var title = message[i].title;
                var content = message[i].content;
				
                if (message[i].folder.toLocaleLowerCase() == "draft") {
					
                    Vetstoria.privatemessages.draft_message = message[i];
					
                    $("button.write").trigger("click");
					
                }
                else {
				
                    var sender = '<div class="information">' + message[i].from_name + '</div>';
                    var recipients = '<div class="information">';
                    $.each(message[i].to, function(j){
                        recipients  = recipients + message[i].to[j].to_name + "; ";
                    });
                    recipients = recipients + "</div>";

                    var date = message[i].date;
                    var str = '<div class="ui block" id="faceboxContainer" style="width:610px"><div class="header text_left"><h3>Private Message</h3></div><div class="content" style="overflow-y:auto;overflow-x:hidden;height:400px"><table width="500" border="0" cellspacing="10" cellpadding="0" style="font-size:15px;color:#666666;"><tr><td width="100" align="right"><label style="font-weight:bold;padding-right:10px;">From:</label></td><td width="400" style="border:1px solid black !important;">' + sender + '</td></tr><tr><td width="100" align="right"><label style="font-weight:bold;padding-right:10px;">To:</label></td><td width="400" style="border:1px solid black !important;">' + recipients + '</td></tr><tr><td align="right"><label style="padding-right:10px;font-weight:bold;">Subject:</label></td><td style="border:1px solid black !important;"><span>' + title + '</span></td></tr><tr><td align="right"><label style="font-weight:bold;padding-right:10px;">Date:</label></td><td style="border:1px solid black !important;"><em rel="' + date + '" class="timestamp" style="margin-left:0">'+prettyDate(date)+'</em></td></tr><tr><td align="right" valign="top"><label style="font-weight:bold;padding-right:10px;">Message:</label></td><td style="border:1px solid black !important;"><textarea cols="470" rows="15" class="message_textarea" readonly="readonly">' + content + '</textarea></td></tr></table></div></div>';
                    $.facebox(str);	
                }
            }
        });
    },
    read: function(selectId,type){
	
        if(type =="read"){
            var read = 1;
            $("input[name='deleteId']:checked").attr("checked", '').parent().parent().removeClass("unread").removeClass("selected");
            Vetstoria.privatemessages.db_read(this.owner_type,this.owner_id,selectId);			
        }else if(type =="unread"){
            var read = 0;
            $("input[name='deleteId']:checked").attr("checked", '').parent().parent().addClass("unread").removeClass("selected");
            Vetstoria.privatemessages.db_unread(this.owner_type,this.owner_id,selectId);
        }
       
        if (selectId.id) {
            for (var k = 0; k < selectId.id.length; k++) {   
                this.markRead(this.messages,selectId.id[k],read);
            }
        }
        else {           
            this.markRead(this.messages,selectId,read);
        }

    },
    markRead: function(messages,id,read){
		
        var prt = this;
		 
        $.each(prt.messages, function(i){
            if (prt.messages[i] != undefined) {
                if (prt.messages[i].id == id) {
                    prt.messages[i].read = read;
                }
            }
        });
		 
    },
    //Display the write form
    write_form: function(is_external){

        if (is_external==undefined && !this.layout.ready) return false;
        else if(is_external!=undefined){
            this.owner_type =Vetstoria.session.getSubUserType();
            this.owner_id=Vetstoria.session.getSubUserID();
        }

        var id = -1;
        var cookie = (typeof $.cookie == "function") ? true : false;
        var saved_title = '';
        var saved_content = '';
        var recipients = [];
        var debug = [];
        var prt = this;
		
        var form = $('<form/>').addClass("write");
        var to = $('<select />').addClass("to").attr("name","to");
        var title = $('<input />').addClass("title").attr("type","text");
        var content = $('<textarea />').addClass("content");
        var sendSubmit = $('<input/>').addClass("sendSubmit").attr({
            "type":"button",
            "value":"Send"
        });
        var cancel = $('<input/>').addClass("sendCancel").attr({
            "type":"button",
            "value":"Clear"
        });
        var saveSubmit = $('<input/>').addClass("saveSubmit").attr({
            "type":"button",
            "value":"Save Draft"
        });
        
        if(Vetstoria.privatemessages.draft_message!=false){
            id = Vetstoria.privatemessages.draft_message.id;
            saved_title = Vetstoria.privatemessages.draft_message.title;
            saved_content = Vetstoria.privatemessages.draft_message.content;
            var temp = Vetstoria.privatemessages.draft_message.to;
            Vetstoria.privatemessages.draft_message = false;
            for (var i = 0; i < temp.length; i++) {
                var selectedoption = $("<option />").text(temp[i].to_name).attr('value',temp[i].to_type + "/" + temp[i].to_id).attr('selected','selected').addClass("selected");
                to.append(selectedoption);
            }
        }
        
        title.val(saved_title).bind('keyup', function(){
            saved_title = $(this).val();
        });
        
        content.autogrow({
             "width":"490px",
            "fontSize":"11.5px",
            "lineHeight":"normal"
        });
        content.val(saved_content).bind('keyup', function(){
            saved_content = $(this).val();
        }).trigger("change");
        
        cancel.bind('click', function(){
            //to.trigger('removeAll');
            title.val('');
            content.val('');
        });
        if(is_external!=undefined) {
            $(cancel).val("Reset");
        }

        var prt = this;
        sendSubmit.bind('click', function(){

            if (title.val() == "" || content.val() == "" || to.val() == null) {             
                $.msgbox("Please complete all fields of the message before sending it!", {
                    type: "error"
                });
            }
            else {
                var k, toTemp = to.val(), toA = [];
                
                for (var i = 0; i < toTemp.length; i++) {
                    var to_details = toTemp[i].split("/");
                    var a = {
                        to_type: to_details[0],
                        to_id: to_details[1]
                    };
                    toA.push(a);
                }
                
                var sentMsg = {
                    "id": id,
                    "to": toA,
                    "from_type": prt.owner_type,
                    "from_id": prt.owner_id,
                    'title': saved_title,
                    'content': saved_content,
                };

                prt.add(sentMsg);
                prt.remove_from_cache(id);

                if(is_external!=undefined) {
                    $.facebox.close();
                }
            }
        
        });
        saveSubmit.click(function(){
			
            if (title.val() == "" && content.val() == "" && to.val() == null) {             
                $.msgbox("Please complete at least one field before saving this message as a draft!", {
                    type: "error"
                });
            }
            else {
                var k, toTemp = to.val(), toA = [];
                
                if(to.val()!=null && toTemp.constructor==Array)
                {
                    for (var i = 0; i < toTemp.length; i++) {
                        var to_details = toTemp[i].split("/");
                        var a = {
                            to_type: to_details[0],
                            to_id: to_details[1]
                        };
                        toA.push(a);
                    }
                }
            
                var sentMsg = {
                    "id": id,
                    "to": toA,
                    "from_type": prt.owner_type,
                    "from_id": prt.owner_id,
                    'title': saved_title,
                    'content': saved_content,
                };
                
                prt.save(sentMsg);
                prt.remove_from_cache(id);

                if(is_external!=undefined) {
                    $.facebox.close();
                }
            }
						
        });
        
        with (form) {

            append("<label class='first'>To</label>");
            append(to);
            append("<p>");
            append("<label class='first'>Title</label>");
            append(title);
            append("<p>");
            append("<label class='second'>Content</label>");
            append(content);
            append("<p>");	
            append(sendSubmit);
            append(cancel);
            append(saveSubmit);
			
            }
        
        $(form).find('.to').fcbkcomplete({
            json_url: $BASE_PATH + "messagebox/" + prt.owner_type + "/" + prt.owner_id + "/getcontactlist/",
            cache: false,
            filter_case: false,
            filter_hide: true,
            firstselected: true,
            filter_selected: true,
            newel: false
        });

        if(is_external==undefined) {
            var div = $('<div />').css("padding", "5px 15px 5px 15px").append(form);
            this.layout.frame.empty().append(div);
        }
        else{
            var maindiv = $('<div style="width:500px;" />').append('<div class="header text_left"><h1>Compose Message</h1></div>');
            maindiv.append($('<div style="margin-top:20px;margin-bottom:20px;" />').append(form));
            $.facebox(maindiv);
        }
    },

    /**
     * Removes messafge from cache
     * return 0 if no success
     * return id if success
     */
    remove_from_cache: function(id){
		
        var message = this.messages;

        $.each(message, function(i){
			
            if (message[i].id == id) {
                message.splice(i,1);
            }
        });
    },

    /**
     * Add a message
     * return 0 if no success
     * return id if success
     */
    add: function(message_object){

        var addMsg = Vetstoria.privatemessages.db_add(this.owner_type,this.owner_id,message_object);

        if (addMsg.state == 1){
            $.msgbox("Message could not be sent due to an unknown error", {
                type: "error"
            });
            return false;			
        }
		
        if (addMsg.state == 0){
            this.messages = this.messages.reverse();
            this.messages.push(addMsg.data[0]);
            this.messages = this.messages.reverse();
            $("input.sendCancel").trigger("click");
            $.msgbox("Message has been successfully sent", {
                type: "info"
            });
        }
    },
    /**
     * Save a message
     * return 0 if no success
     * return id if success
     */
    save: function(message_object){
		
        var saveMsg = Vetstoria.privatemessages.db_save(this.owner_type,this.owner_id,message_object);
		
        if (saveMsg.state == 1){
            $.msgbox("Draft save failed", {
                type: "error"
            });
            return false;			
        }
		
        if (saveMsg.state == 0){
            this.messages = this.messages.reverse();
            this.messages.push(saveMsg.data[0]);
            this.messages = this.messages.reverse();
            $("input.sendCancel").trigger("click");
            $(".content").trigger("change");
            $.msgbox("Draft successfully saved", {
                type: "info"
            });
        }
    },
    select: function(key, value){
		
        return this.messages.filter(function(e, i, a){
            return (e[key] == value)
        });
		
    },		
 
    confirmPlanel: function(){
		
        if ($("input[name='deleteId']:checked").length == 0) {
            $.msgbox('Please select at least one message');
            return false;
        }
		
        var prt = this;
        /*
        var div = $("<div/>").css({
            "width":"32em",
            "height":"5em",
            "text-align":"center"
        });
        var p1 = $("<p/>").text("Are you sure to delete these messages?"); 
        var p2 = $("<p/>");
        var confirmBtn = $('<button/>').addClass("deleteBtn").text('confirm').click(function(){
			
            if ($("input[name='deleteId']:checked").length == 1) {
                var selectID = 0;
                selectID = $("input[name='deleteId']:checked").val();
            }
            else {
                var selectID = {};
                selectID.id = [];
                $("input[name='deleteId']:checked").each(function(){
                    selectID.id.push($(this).val());
                });
            }
			
            console.log(selectID);
            prt.remove(selectID);
            $.facebox.close();
			
        });
		
        p2.append(confirmBtn);       
        div.append(p1).append(p2);
        $.facebox(div);
*/
        var del_msg="";
        if ($("input[name='deleteId']:checked").length == 1) {
            del_msg="this message";
        }
        else
        {
            del_msg="these "+$("input[name='deleteId']:checked").length+" messages";
        }
        $.msgbox('Are you sure you wish to delete '+del_msg+'?',{
            type:'confirm',
            buttons:[{
                type:'submit',
                value:'Yes'
            },{
                type:'submit',
                value:'No'
            }]
        },
        function(result){
            if(result=='Yes'){
                $(this).addClass('processing');
                if ($("input[name='deleteId']:checked").length == 1) {
                    var selectID = 0;
                    selectID = $("input[name='deleteId']:checked").val();
                }
                else {
                    var selectID = {};
                    selectID.id = [];
                    $("input[name='deleteId']:checked").each(function(){
                        selectID.id.push($(this).val());
                    });
                }

                console.log(selectID);
                prt.remove(selectID);
            }
        });
    }
	
}));



