

YAHOO.util.Event.onDOMReady(
  function(){
    var elements = YAHOO.util.Dom.getElementsByClassName('messageCheckboxElement');     
      for (x in elements) elements[x].checked = false;    
  }
);


CreatoorSN.namespace('messages');
CreatoorSN.messages = {

     container: 'messagesBox', //container
     ajaxResponsTo : 'ajaxWorkingStatus', // wher ajax dumps error messages
     messageClassName : 'messageContainer',
     messageTarget : 'messageCentralContent', //wher ajay dumps message list
     selectedNodId : '',//id of selected not
     firstTreeNodeLabel : 'ygtvlabelel1',
     treeNodeLableClass : 'ygtvlabel',
     composeMessageWindow : 0,
     curentCategory : 'inbox',
     categoriesTree: null,
     total: null,
     timer: 0,
   

    /**
     * Set of methods for manipulation with messages checkbox elements.
     * -> checkAll, unCheckAll, checkRead and checkInverse
     *
     * @method checkAllMessages
     * @method unCheckAllMessages
     * @method checkReadMessages
     * @method checkInverseMessages
     *
     * @param {String} elementClass
     *
     */
    checkAllMessages : function (elementClass) {
    
        var elements = YAHOO.util.Dom.getElementsByClassName(elementClass);
        for (x=0;x<elements.length;x++){
            elements[x].checked = true;
        }
    },
       
    unCheckAllMessages : function (elementClass) {
    
      var elements = YAHOO.util.Dom.getElementsByClassName(elementClass);     
      for (x=0;x<elements.length;x++){
            elements[x].checked = false;
      }
    },
    
    checkReadMessages : function (elementClass) {
    
      var elements = YAHOO.util.Dom.getElementsByClassName(elementClass);     
        for (x=0;x<elements.length;x++){
          elements[x].checked = true;
        }
    },    

    checkInverseMessages : function (elementClass) {
    
      var elements = YAHOO.util.Dom.getElementsByClassName(elementClass);     
      for (x=0;x<elements.length;x++){
        
        if (elements[x].checked) {elements[x].checked = false;}
        else {elements[x].checked = true;}           
      }
    },       


    /**
     * Togle batoons for manipulation with checked messages
     *
     * @method togleMessageBatoon
     *
     * @param {String} elementClass
     *
     */
    togleMessageBatoon : function (elementClass) {

		var elements = YAHOO.util.Dom.getElementsByClassName(elementClass);
		var readIndikator = false, unreadIndikator = false;

    	for (x=0;x<elements.length;x++){
			if (elements[x].checked && elements[x].className == 'messageCheckboxElement') readIndikator = true;
			if (elements[x].checked && elements[x].className == 'messageCheckboxElement messageCheckboxElementRead') unreadIndikator = true;
		}

		var element = document.getElementById('messageBatoonRead');
		if (readIndikator) YAHOO.util.Dom.addClass(element, 'messageBatoonActive');
		else YAHOO.util.Dom.removeClass(element, 'messageBatoonActive');

		element = document.getElementById('messageBatoonUnread');
		if (unreadIndikator) YAHOO.util.Dom.addClass(element, 'messageBatoonActive');
		else YAHOO.util.Dom.removeClass(element, 'messageBatoonActive');

		element = document.getElementById('messageBatoonDelete');
		if (readIndikator || unreadIndikator) YAHOO.util.Dom.addClass(element, 'messageBatoonActive');
		else YAHOO.util.Dom.removeClass(element, 'messageBatoonActive');
    },


    /**
     * Set messages as read
     *
     * @method setMessagesAsRead
     *
     *
     * @return {Boolean|String}
     * @exception TypeError
     */
    setMessagesAsRead : function () {
     
        var selected = CreatoorSN.messages.getSelectedMessages('setR');
    
      
      if(selected.selectedMessages == ''){
        CreatoorSN.messages.showResponseMessages(CreatoorSN.common.translate('No messages selected'));
        return;
      } 
      CreatoorSN.messages.showResponseMessages('<img src="/images/ajax-loader.gif" alt="nalagam..." style="margin-top: 1px; margin-left: 20px;" />');
      var oCallback = {                
            success : function (o) {
                if (YAHOO.lang.JSON.isSafe(o.responseText)) {
                  var response = YAHOO.lang.JSON.parse(o.responseText);
                  if (response.noAuth) {
                      var login = new noAuth(function(noAuthObj){
                      CreatoorSN.messages.setMessagesAsRead();
                    }, response.message);
                    return;
                  }
                
                  if(response.success){
                        
                            var category = YAHOO.util.History.getCurrentState("section");
                            CreatoorSN.messages.updateCategoryLabel(category,-selected.count);
                            if(category != 'inbox')
                                    CreatoorSN.messages.setInboxUnreadCount(-selected.count);
                            else
                                    CreatoorSN.messages.updateCategoriescountMarkers(selected,true);
                          var messages = selected.selectedMessages.split('id_');
                           for(var i in messages){
                              
                                if(i > 0 && YAHOO.util.Dom.hasClass('id_'+messages[i],'messageUnread'))
                                        YAHOO.util.Dom.removeClass('id_'+messages[i], 'messageUnread');
                            }
                     }
                  CreatoorSN.messages.showResponseMessages(response.message);
                 
              }
       
            },
            
            failure : function (o) {
              CreatoorSN.messages.showResponseMessages(CreatoorSN.common.translate(' Something went wrong..'));    
            }
            
            //timeout: CreatoorSN.common.iAjaxTimeout
            
        };
        YAHOO.util.Connect.asyncRequest(
            "POST",
            "/members/messages/toogle-read-unread/",
            oCallback,
            "messagesids=" + selected.selectedMessages+"&status=1"
        );
    
     },
     treeReRender : function(){
           if(CreatoorSN.messages.categoriesTree != null){
                        for(var i in CreatoorSN.messages.categoriesTree._nodes){
                                var count = CreatoorSN.messages.categoriesTree._nodes[i].label.match(/>\((\d+)\)</);
                                if(count && count[1] > 0)
                                         YAHOO.util.Dom.addClass(CreatoorSN.messages.categoriesTree._nodes[i].labelElId, 'messagesUnread');
                                else
                                        YAHOO.util.Dom.removeClass(CreatoorSN.messages.categoriesTree._nodes[i].labelElId, 'messagesUnread');
                        }
                    }
     },
    addCategory : function(input, node){
        
          window.location.hash = 'section='+node.data.node_id.replace(/[^a-z0-9A-Z\s]+/g, '');
          if(CreatoorSN.messages.categoriesTree != null){
                        for(var i in CreatoorSN.messages.categoriesTree._nodes){
                          
                            if(CreatoorSN.messages.categoriesTree._nodes[i].data.node_id == node.data.node_id ){
                                
                                CreatoorSN.messages.categoriesTree._nodes[i].data.node_id  = CreatoorSN.messages.categoriesTree._nodes[i].data.node_id .replace(/[^a-z0-9A-Z\s]+/g, '');
                                
                                CreatoorSN.messages.categoriesTree._nodes[i].label = CreatoorSN.messages.categoriesTree._nodes[i].label.replace(/[^a-z0-9A-Z\s]+/g, '');
                                
                                CreatoorSN.messages.categoriesTree._nodes[i].label += ' <span class="count">(0)</span>';
                                
                                CreatoorSN.messages.categoriesTree._nodes[i].data.categoryName = CreatoorSN.messages.categoriesTree._nodes[i].data.categoryName.replace(/[^a-z0-9A-Z\s]+/g, '');
                                CreatoorSN.messages.categoriesTree._nodes[i].data.categoryName += ' <span class="count">(0)</span>';
                                 _$(CreatoorSN.messages.categoriesTree._nodes[i].labelElId).innerHTML =  _$(CreatoorSN.messages.categoriesTree._nodes[i].labelElId).innerHTML.replace(/[^a-z0-9A-Z\s]+/g, '');
                                _$(CreatoorSN.messages.categoriesTree._nodes[i].labelElId).innerHTML += ' <span class="count">(0)</span>';
                                break;
                            }

                        }
           }
         
     },
     removeCategory : function(input, node){
            
            window.location.hash = 'section=inbox';
         //CreatoorSN.messages.treeReRender();
     },
    setSelectedNode:function (category){
       
         var elements =YAHOO.util.Dom.getElementsByClassName(CreatoorSN.messages.treeNodeLableClass);
         for(var x in elements){
              
             var pos = elements[x].innerHTML.indexOf('<');
             if( pos != -1){
               
                if(category == elements[x].innerHTML.substring(0,pos-1))
                       CreatoorSN.messages.selectedNodId = elements[x].id;
             }else{
               
                 if(category == elements[x].innerHTML)
                       CreatoorSN.messages.selectedNodId = elements[x].id;
             }
        }

          if( CreatoorSN.messages.selectedNodId == '' )
                 CreatoorSN.messages.selectedNodId = CreatoorSN.messages.firstTreeNodeLabel;
         // CreatoorSN.messages.treeReRender();
       
     },
   

     /**
     * Set messages as unRead
     *
     * @method setMessagesAsUnRead
     *
     */
    setMessagesAsUnRead : function () {
    
     
    var selected = CreatoorSN.messages.getSelectedMessages('setU');
          
      if(selected.selectedMessages == ''){
        CreatoorSN.messages.showResponseMessages(CreatoorSN.common.translate('No messages selected'));
        return;
      }        
      CreatoorSN.messages.showResponseMessages('<img src="/images/ajax-loader.gif" alt="nalagam..." style="margin-top: 1px; margin-left: 20px;" />');
      var oCallback = {                
        success : function (o) {
                if (YAHOO.lang.JSON.isSafe(o.responseText)) {
                 
                  var response = YAHOO.lang.JSON.parse(o.responseText);
                    if (response.noAuth) {
                      var login = new noAuth(function(noAuthObj){
                                    CreatoorSN.messages.setMessagesAsUnRead();
                      }, response.message);
                        return;
                    }
                    if(response.success){
                            var category = YAHOO.util.History.getCurrentState("section");
                            CreatoorSN.messages.updateCategoryLabel(category,selected.count);
                            if(category != 'inbox')
                                CreatoorSN.messages.setInboxUnreadCount(selected.count);
                            else
                                CreatoorSN.messages.updateCategoriescountMarkers(selected);
                          
                            //TODO change message class
                            var messages = selected.selectedMessages.split('id_');
                            for(var i in messages){
                                if(i > 0 && !YAHOO.util.Dom.hasClass('id_'+messages[i],'messageUnread'))
                                        YAHOO.util.Dom.addClass('id_'+messages[i], 'messageUnread');
                            }
                    }
                               //CreatoorSN.messages.treeReRender();
                 
                  CreatoorSN.messages.showResponseMessages(response.message);  
                }
      
            },
            
            failure : function (o) {
             CreatoorSN.messages.showResponseMessages(CreatoorSN.common.translate('Sorry, something went wrong. Please try again later.'));
            }
        };
        YAHOO.util.Connect.asyncRequest(
            "POST",
            "/members/messages/toogle-read-unread/",
            oCallback,
            "messagesids=" + selected.selectedMessages+"&status=0"
        );
        
   
     },
       

     /**
     * Delete selected messages
     *
     * @method setMessagesAsDelete
     *
     * @param {String} messageID
     *
     */
    setMessagesAsDelete : function (messageID) {
         
      var messagesIds = '';
      var goBack = false;
      var selected;
      if(messageID){
          selected = {selectedMessages: messageID, count : 0};
          goBack =  true;
      }else{
            selected =  CreatoorSN.messages.getSelectedMessages();
      }
      
      if( selected.selectedMessages == '') {
         CreatoorSN.messages.showResponseMessages(CreatoorSN.common.translate('No messages selected'));
         return;
      }
    CreatoorSN.messages.showResponseMessages('<img src="/images/ajax-loader.gif" alt="nalagam..." style="margin-top: 1px; margin-left: 20px;" />');
    var oCallback = {                
            success : function (o) {
                if (YAHOO.lang.JSON.isSafe(o.responseText)) {
                    var r = YAHOO.lang.JSON.parse(o.responseText);
                    if (r.noAuth) {
                        var login = new noAuth(function(noAuthObj){
                            CreatoorSN.messages.setMessagesAsDelete(messageID);
                        }, r.message);
                        return;
                    }else{
                        if(r.success){
                            if(selected.count > 0){
                                    var category = YAHOO.util.History.getCurrentState("section");
                                    CreatoorSN.messages.updateCategoryLabel(category,-selected.count);
                                    if(category != 'inbox')
                                        //CreatoorSN.messages.setInboxUnreadCount(-selected.count); TODO get read of this function
                                        CreatoorSN.messages.updateCategoryLabel('inbox',-selected.count);
                                    else
                                    CreatoorSN.messages.updateCategoriescountMarkers(selected,true);
                                    //CreatoorSN.messages.treeReRender();
                                    
                            }
                          var messages = selected.selectedMessages.split('id_');
                          for(var i in messages){
                              if(i > 0){
                                 _$('id_'+messages[i]).parentNode.removeChild(_$('id_'+messages[i]));
                              }
                          }
                          if(goBack)   history.back();
                        }
                        
                      CreatoorSN.messages.showResponseMessages(r.message);
                      
                    }
                }
             },
            
            failure : function (o) {
              CreatoorSN.messages.showResponseMessages(CreatoorSN.common.translate('Sorry, something went wrong. Please try again later.'));
            }
            
            //timeout: CreatoorSN.common.iAjaxTimeout
            
        };
        YAHOO.util.Connect.asyncRequest(
            "POST",
            "/members/messages/set-messages-as-deleted/",
            oCallback,
            "messagesids=" + selected.selectedMessages
        );          
  
     }, 
  
    /*
    * sending Abuse report
    */
     sendAbuseReport : function (messageID) { 
        
        var recordsDiv = new creaDomObject({
            tag: 'textarea',
            id: 'abuseText',
            width:180
        });
        var send = new creaDomInput({
          type: 'button',
          value: CreatoorSN.common.translate('Send'),
          className: 'submitBotton right',
          wrapper: {
              tag: 'div',
              params: {
                className: 'align-right'
              }
          }
        });
        var close = new creaDomInput({
          type: 'button',
          value: CreatoorSN.common.translate('Close'),
          className: 'submitBotton right',
          wrapper: {
              tag: 'div',
              params: {
                className: 'align-right'
              }
          }
        });
        send.domElement.onclick = function (){
            if(CreatoorSN.messages.sendAbuseContent(messageID)){
              
               //abuseReportWindow.close();
            }
        }; 
        close.domElement.onclick = function (){
            abuseReportWindow.close();
        };  

        abuseReportWindow = new creaDomWindow({
            header: {title: CreatoorSN.common.translate('Abuse Report')},
            width: 200,
            content: {
              elements: [recordsDiv, send,close]
            }
        });
        abuseReportWindow.open();

        
    
     },
     sendAbuseContent : function(messageID){
        
        var swindow=_$('abuseText');
        var overlay = disableElement(swindow);
           var oCallback = {                
            success : function (o) {
            removeElement(overlay);

              if (YAHOO.lang.JSON.isSafe(o.responseText)) {
                var response = YAHOO.lang.JSON.parse(o.responseText);
                 if (response.noAuth) {
                      var login = new noAuth(function(noAuthObj){
                                    CreatoorSN.messages.sendAbuseContent();
                      }, response.message);
                        return;
                    }
                if(response.success){
                  CreatoorSN.common.showErrorAlert('Your report secessfuly was sent.','Report noticed');
                  abuseReportWindow.close();
                }else{
                 
                  CreatoorSN.common.showErrorAlert( CreatoorSN.common.translate('Sorry, something went wrong. Please try again later.'),'Report noticed');
                 
                }
              } 
          
            },
            failure : function (o) {return false;}
        };
        var input = _$('abuseText');
       
       
        var extraReport = '<br><span style="color:red;">Report for message '+messageID+'</span>';
        if(input.value!=''){
          YAHOO.util.Connect.asyncRequest(
              'GET',
              '/members/ajax/send-abuse-report-mail?message=' + encodeURIComponent(input.value+extraReport),
              oCallback
          );
        }
     },         

     /**
      *  function for composing new messages
      *
      *   @param <array>  recipients --optional, set if message is part of converstion or recipent is known (user token)
      *   @param <string> replayTo  --optional, set if message in part of converstion (message token)
      */
    
      
    composeMessage : function (recipients, replayTo) {
        //prevent to open anatherone

        var composeMessageInner = _$('composeMessageInner'); 
        if (composeMessageInner !== null) return; 
             
        var content = new creaDomObject({
                      tag: 'div',
                      id: 'composeMessageInner'
                    });  
      
        // create message content div
        CreatoorSN.messages.composeMessageWindow = new creaDomWindow({
                      width: 522,
                      header: {title: CreatoorSN.common.translate('Compose message')},
                      content: {elements: [content]}
                });
       
        CreatoorSN.messages.composeMessageWindow.open();
        var composeMessageInner = _$('composeMessageInner');
        CreatoorSN.messages.composeMessageWindow.disable();
    
        var oCallback = {                
            success : function (o) {
               CreatoorSN.messages.composeMessageWindow.enable();
                if (YAHOO.lang.JSON.isSafe(o.responseText)) {
                    var r = YAHOO.lang.JSON.parse(o.responseText);
                    if (r.noAuth) {
                      CreatoorSN.messages.composeMessageWindow.close();
                      var login = new noAuth(function(noAuthObj){
                                    CreatoorSN.messages.composeMessage(recipients, replayTo);
                      }, r.message);
                        return;
                    }
                    if(r.success){
                      
                      composeMessageInner.innerHTML = r.html
                      CreatoorSN.messages.autoComplete(); 
                      
                    }else{
                      if (r.noAuth) {
                        
                        CreatoorSN.messages.composeMessageWindow.close();
                        var login = new noAuth(function(noAuthObj){
                            CreatoorSN.messages.composeMessage (recipientId,replyTo);
                        }, r.message);
                        return;
                      }else{
                        
                        CreatoorSN.messages.composeMessageWindow.close();
                      }  
                  } 
               }else{
                    CreatoorSN.messages.composeMessageWindow.close();
               }
            },
            
            failure : function (o) {
              composeMessageInner.innerHTML = CreatoorSN.common.translate('Sorry, something went wrong. Please try again later.') + '<br />';
            }
            
            //timeout: CreatoorSN.common.iAjaxTimeout
            
        };
        var postData = '';
        if(recipients){
            
            for(i in recipients ){
                postData += recipients[i].screenName+':'+recipients[i].token+':'+recipients[i].type+';';
            }

        }
        YAHOO.util.Connect.asyncRequest(
            "GET",
            "/members/messages/compose-message/?recipients="+postData+'&replay='+replayTo ,
            oCallback          
        );
        
        

    },    
    
    closeMessageWindow : function () {  
       for (x=0;x<CreatoorSN.messages.selectedMessagesDetailsHolder.length;x++){
            CreatoorSN.messages.oDS.liveData.push(CreatoorSN.messages.selectedMessagesDetailsHolder[x]);
            CreatoorSN.messages.selectedMessagesDetailsHolder.splice(x,1);
            CreatoorSN.messages.selectedMessagesRecipients.splice(x,1);
          }
      CreatoorSN.messages.selectedMessagesRecipients.length = 0;
     
      CreatoorSN.messages.composeMessageWindow.close();
    }, 
    addRecipientWrap : function (id, name,type){
        var r = _$('recipients');//recipiend drop of
         var rW = document.createElement('span');
         rW.setAttribute('id',type+':'+id);
         rW.setAttribute('class','messageRecipient');
         var iW = document.getElementById('inputWrap');
         r.insertBefore(rW,iW);
         rW.innerHTML = name +'<a class="removeRecipient" onclick="CreatoorSN.messages.removeFromRecipientsList(this);">X</a>';
    },

     /**
     * Autocomplete recipients for field message recipients
     *
     * @method setMessagesAsDelete
     *
     * @param {String} elementClass
     *
     */
    //holder for message recipients

    oDS : '',
    selectedMessagesRecipients :  new Array (),
    removedMessagesRecipients :  new Array (),
    selectedMessagesDetailsHolder : new Array (),
    selectedMessagesRecipientsHTML :  '',
    
    autoComplete: function () {

      CreatoorSN.messages.oDS = new YAHOO.util.LocalDataSource(messagesRecipientData.accounts);
     
      CreatoorSN.messages.oDS.responseSchema = {fields : ["name","token","type"]};
 
      var numOfElemnetst = CreatoorSN.messages.removedMessagesRecipients.length;
      for(var i = 0; i < numOfElemnetst ; i ++){
             var tempElement = CreatoorSN.messages.removedMessagesRecipients.splice(0,1);
             CreatoorSN.messages.oDS.liveData.push(tempElement[0]);
      }

      var elements = YAHOO.util.Dom.getElementsByClassName('messageRecipient');
    
      if(elements){

            for(var t in elements){
                for(var h in CreatoorSN.messages.oDS.liveData) {
                    
                      if(elements[t].id == CreatoorSN.messages.oDS.liveData[h].token){
                                CreatoorSN.messages.removedMessagesRecipients.push(CreatoorSN.messages.oDS.liveData.splice(h,1)[0]);
                                break;
                      }
                }
              
                CreatoorSN.messages.selectedMessagesRecipients.push(elements[t].id);

            }
      }
      // Instantiate the AutoComplete
      var oAC = new YAHOO.widget.AutoComplete(
                        "composeMessagesInput",
                        "composeMessagesContainer",
                        CreatoorSN.messages.oDS,{
                           // prehighlightClassName : 'yui-ac-prehighlight',
                            minQueryLength : 0,
                            maxResultsDisplayed : 20,
                            autoHighlight : false,
                            resultTypeList : false ,
                            autoSnapContainer : false,
                            delimChar : ';'
                        });
                        
        oAC.doBeforeExpandContainer = function(elTextbox, elContainer, sQuery, aResults) {
             var pos = YAHOO.util.Dom.getXY('composeMessagesAutoComplete');
             pos[1] += YAHOO.util.Dom.get('composeMessagesAutoComplete').offsetHeight + 2;
             YAHOO.util.Dom.setXY(elContainer,pos);
            return true;
        };

      oAC.itemSelectEvent.subscribe(function(oSelf, elItem){
                  
                    recipientsLenght = CreatoorSN.messages.selectedMessagesRecipients.push(elItem[2].type+':'+elItem[2].token);
                     for(var i in CreatoorSN.messages.oDS.liveData){
                        if(CreatoorSN.messages.oDS.liveData[i].token == elItem[2].token){
                            var tempElement = CreatoorSN.messages.oDS.liveData.splice(i,1);
                            CreatoorSN.messages.removedMessagesRecipients.push(tempElement[0]);
                            break;
                        }
                    }
                    var input = _$('composeMessagesInput');
                    input.value = '';
                    CreatoorSN.messages.addRecipientWrap(elItem[2].token,elItem[2].name,elItem[2].type);
      });

    
      
      
     var keyHandler = function(e) {
            var display = _$('inputShadow');
            var input = _$('composeMessagesInput');
            if(e.keyCode == '13' && input.value != ''){
                CreatoorSN.messages.checkMessageRecipients();
            }else{
                display.innerHTML = input.value + "^__^";
            }   
      };
      YAHOO.util.Event.addListener('composeMessagesInput', "keyup", keyHandler);
      return {
          oDS: CreatoorSN.messages.oDS,
          oAC: oAC
      };
    },
    checkMessageRecipients: function(){
            var display = _$('inputShadow');
            var input = _$('composeMessagesInput');
            if (input.value != ''){
            var oCallback = {
                        success : function (o) {
                           if (YAHOO.lang.JSON.isSafe(o.responseText)) {
                              var r = YAHOO.lang.JSON.parse(o.responseText);
                             if (r.noAuth) {
                                    var login = new noAuth(function(noAuthObj){
                                        CreatoorSN.messages.checkMessageRecipients();
                                    }, r.message);
                                    return;
                             }
                              if(r.success){
                                var elements = YAHOO.util.Dom.getElementsByClassName('messageRecipient');
                                var alreadyIn = new Array();
                                for(var i in elements){
                                  alreadyIn.push(elements[i].id);
                                }
                                for(var i in r.check){
                                  if(typeof(r.check[i])=='object' && !r.check[i].error){
                                    var add = true;
                                    for(var key in alreadyIn){
                                      if(alreadyIn[key] == r.check[i].type+':'+r.check[i].token){
                                        add = false;
                                        break;
                                      }
                                    }
                                    if(add){

                                      CreatoorSN.messages.addRecipientWrap( r.check[i].token,r.check[i].screenName, r.check[i].type);
                                      //delete from selection options
                                      for (x = 0; x < CreatoorSN.messages.oDS.liveData.length;x++){
                                            if (CreatoorSN.messages.oDS.liveData[x].id == r.check[i].token) {
                                              CreatoorSN.messages.removedMessagesRecipients.push(CreatoorSN.messages.oDS.liveData.splice(x,1)[0]);
                                              break;
                                            }
                                      }
                                      CreatoorSN.messages.selectedMessagesRecipients.push(r.check[i].type+':'+r.check[i].token);
                                    }
                                  }
                                
                                 /* if(typeof(r.check[i])=='string'){
                                    add = true;
                                    for(var key in alreadyIn){
                                      if(alreadyIn[key] == r.check[i]){
                                        add = false;
                                        break;
                                      }
                                    }
                                    if(add){
                                      CreatoorSN.messages.addRecipientWrap( r.check[i], r.check[i]);
                                      CreatoorSN.messages.selectedMessagesRecipients.push(r.check[i]);
                                    }
                                  }*/
                                }
                              }else{
                                CreatoorSN.messages.showResponseMessages(r.message);
                              }
                           }else{
                             CreatoorSN.messages.showResponseMessages(CreatoorSN.common.translate('Sorry, something went wrong. Please try again later.'));
                           }
                           input.value ='';
                           display.innerHTML = "^__^";

                        },
                        failure : function (o) {
                            CreatoorSN.messages.showResponseMessages(CreatoorSN.common.translate('Sorry, something went wrong. Please try again later.'));
                        }
                };
                 
                        YAHOO.util.Connect.asyncRequest(
                            "POST",
                            "/members/messages/check",
                            oCallback,
                            'input=' + input.value
                        );
                 }
    },
       
    removeFromRecipientsList: function (el) {
        var id = el.parentNode.id;
        el.parentNode.parentNode.removeChild(el.parentNode);
        for (x=0;x<CreatoorSN.messages.selectedMessagesRecipients.length;x++){                
              if (CreatoorSN.messages.selectedMessagesRecipients[x] == id){ 
                CreatoorSN.messages.selectedMessagesRecipients.splice(x,1);
                break;
              }  
        }

          //remove curent recipient from recipient data holder
        for (x = 0; x < CreatoorSN.messages.removedMessagesRecipients.length; x++){
           
            if (CreatoorSN.messages.removedMessagesRecipients[x].id == id) {
              CreatoorSN.messages.oDS.liveData.push(CreatoorSN.messages.removedMessagesRecipients[x]);
              CreatoorSN.messages.removedMessagesRecipients.splice(x,1);
              break;
            }
        }  
   
   
    },
    /**
     * function for sending messages
     *
     * @param <string> replayTo -- optionl, set if message is part of conversation (message token)
     */
    sendMessage: function (replayTo) {
     
      var recipients = CreatoorSN.messages.selectedMessagesRecipients;
  
      var subject = _$('composeMessagesSubject');
      var body = _$('composeMessagesText');
   
   
      if(typeof(recipients)=='object' && (recipients instanceof Array) && recipients.length > 0 && body != ''){
        CreatoorSN.messages.composeMessageWindow.disable();
        
        var oCallback = {                
            success : function (o) {
                 CreatoorSN.messages.composeMessageWindow.enable();
                if (YAHOO.lang.JSON.isSafe(o.responseText)) {
                    var r = YAHOO.lang.JSON.parse(o.responseText);
                    if (r.noAuth) {
                        CreatoorSN.messages.composeMessageWindow.close();
                        var login = new noAuth(function(noAuthObj){
                            CreatoorSN.messages.sendMessage (replayTo);
                        }, r.message);
                        return;
                    }
                    
                    if(r.success){
                      
                      CreatoorSN.messages.composeMessageWindow.close();
                      CreatoorSN.messages.resetRecipientData();
                      CreatoorSN.messages.showResponseMessages(r.message);
                    }else{
                      
                      CreatoorSN.messages.showResponseMessages(r.message);
                    }
                }else{
                      CreatoorSN.messages.composeMessageWindow.close();
                      CreatoorSN.messages.resetRecipientData();
                }
                
        
            },
            
            failure : function (o) {
              CreatoorSN.messages.showResponseMessages(CreatoorSN.common.translate('Sorry, something went wrong. Please try again later.'));
              CreatoorSN.messages.resetRecipientData();
            }
         };
         var postData = 'recipients=' + recipients+'&body='+body.value+'&subject='+subject.value;
         if(replayTo)
             postData += '&replay='+replayTo;
         var systemMessage = _$('systemMessageSelector');
         if(systemMessage && systemMessage.checked){
             postData += '&systemMessage=1'
         }
         
       
            //timeout: CreatoorSN.common.iAjaxTimeout
            YAHOO.util.Connect.asyncRequest(
            "POST",
            "/members/messages/send-messages/",
            oCallback,
            postData
            );
       
      }

     },
    resetRecipientData : function(){
       CreatoorSN.messages.selectedMessagesRecipients.length = 0;
       for (x = 0; x < CreatoorSN.messages.removedMessagesRecipients.length; x++){
              CreatoorSN.messages.oDS.liveData.push(CreatoorSN.messages.removedMessagesRecipients[x]);
              CreatoorSN.messages.removedMessagesRecipients.splice(x,1);
           
        } 
     },
     /**
      *seting inbox count state
      *
      *@param <int> count -- for substracion count shuld be negative
      */
     setInboxUnreadCount : function(count){
          
                 if(CreatoorSN.messages.selectedNodId !=  CreatoorSN.messages.firstTreeNodeLabel){
                           CreatoorSN.messages.updateCategoryLabel('inbox',count);
                }else{
                           CreatoorSN.messages.updateCategoryLabel('inbox',0);
                 }
                
     },
    /**
     * function to for making ajay call and retriving data for specifid section
     *
     * @param <string> category
     */
   loadSection : function(category){
      
      var messageBox = _$(CreatoorSN.messages.messageTarget);
      var overlay = disableElement(messageBox);
        var oCallback = {
            success : function (o) {
              removeElement(overlay);
                if (YAHOO.lang.JSON.isSafe(o.responseText)) {
                  var r = YAHOO.lang.JSON.parse(o.responseText);
                   if (r.noAuth) {
                        CreatoorSN.messages.composeMessageWindow.close();
                        var login = new noAuth(function(noAuthObj){
                            CreatoorSN.messages.loadSection (category);
                        }, r.message);
                        return;
                    }
                  if(r.success){
                        CreatoorSN.messages.setSelectedNode(category);
            
                    var check = category.substring(0,category.indexOf('/')+1);
                    var categoryOptions = _$('messagesmessages-boxcategories');
                    switch(check){
                        case 'read/':
      
                            if(r.unreadCount > 0){
                                if(CreatoorSN.messages.curentCategory != 'inbox'){
                                        CreatoorSN.messages.updateCategoryLabel('inbox',-1);
                                        CreatoorSN.messages.updateCategoryLabel(CreatoorSN.messages.curentCategory,-1);
                                }else{
                                        CreatoorSN.messages.updateCategoryLabel(CreatoorSN.messages.curentCategory,-1);
                                        CreatoorSN.messages.updateCategoryLabel(r.categoryName,-1);
                                }
                            }
                             categoryOptions.style.display = 'none';
                              _$('userMessageFilters').style.display = 'none';
                            break;
                        case 'search/':
      
                             categoryOptions.style.display = 'none';
                              _$('userMessageFilters').style.display = 'none';
                            break;
                       default:
      
                           CreatoorSN.messages.updateCategoryLabel(category,r.unreadCount,true);
                            if(r.unreadCount == 0)   YAHOO.util.Dom.removeClass(CreatoorSN.messages.selectedNodId, 'messagesUnread');
                                //else    _$(CreatoorSN.messages.firstTreeNodeLabel).setAttribute('class','ygtvlabel messagesState messagesUnread');
                            if(r.filters){
                                    
                                    _$('userMessageFilters').style.display = 'block';
                                    _$('messageFilterList').innerHTML = r.filters;
                            }else{
                                    _$('userMessageFilters').style.display = 'none';
                            }
                            if(category == 'inbox')
                                categoryOptions.children[0].style.display = 'block';
                            else
                                categoryOptions.children[0].style.display = 'none';
                            if(category == 'sent' || category == 'trash' || category == 'system' ){
                                categoryOptions.style.display = 'none';
                            }else{
                                categoryOptions.style.display = 'block';
                            }
                    }
                   
                    CreatoorSN.messages.treeReRender();
                    messageBox.innerHTML = r.html;
                   
                    
                    if(r.total > r.rowsPerPage)
                        CreatoorSN.messages.pagination(r.page,r.rowsPerPage,r.total);
                }else{
                     
                    CreatoorSN.messages.showResponseMessages(r.message);
                  }
                   CreatoorSN.messages.treeReRender();
                }
            },
            failure : function (o) {
               CreatoorSN.messages.showResponseMessages(CreatoorSN.common.translate('Sorry, something went wrong. Please try again later.'));
            }
        };
    
        YAHOO.util.Connect.asyncRequest(
            "GET",
            "/members/messages/get-messages/?section=" + category,
            oCallback
        );
   },
   handlePagination : function (state){
       CreatoorSN.common.total = state.paginator.getTotalRecords();
       var page = state.page;
       var currentCategory = YAHOO.util.History.getCurrentState("section").split('/');
       
       switch(currentCategory[0]){
           case 'read':
                    window.location.hash = 'section='+currentCategory[0]+'/'+currentCategory[1]+'/'+page;
               break;
           case 'search':
                    window.location.hash = 'section='+currentCategory[0]+'/'+currentCategory[1]+'/'+page;
               break;
           default :
                    window.location.hash ='section='+currentCategory[0]+'/'+page;
              break;
       }
     
   },
   pagination : function (page, rpp, total){
        var paginator = new YAHOO.widget.Paginator({
                                    rowsPerPage : rpp,
                                    totalRecords : total,
                                    containers : ["pageNavigation-top","pageNavigation-bottom"]
               });
               var state ={page:page,recordOffset :(page-1) * rpp };
               paginator.setState(state);
               paginator.subscribe('changeRequest', CreatoorSN.messages.handlePagination);
               paginator.render();
   },
   /**
    * Callback function for tree  node click
    *
    * @param <string> category // category to load
    * @param <object> selected node
    */
   showMessages : function (category,selectedNode){
     
      if(selectedNode){
            CreatoorSN.messages.selectedNodId =selectedNode.data.node_id.replace(/[^a-z0-9A-Z\s]+/g, '');
            CreatoorSN.messages.curentCategory = selectedNode.data.node_id.replace(/[^a-z0-9A-Z\s]+/g, '');
            category = category.replace(/[^a-z0-9A-Z\s]+/g, '');
      }
     
      window.location.hash = 'section='+category;
     
      try {
	                YAHOO.util.History.navigate("section", category);
	     } catch (e) {
                 
	          CreatoorSN.messages.loadSection(category);
    }
      
     
   },
   //TODO this function is similar to delete function, mybe  marge
   setCategory : function(category){
      
      
         var querySection = YAHOO.util.History.getCurrentState("section");
       
        if(querySection == 'sent' || querySection == 'trash' || querySection == 'system' ){
             CreatoorSN.messages.showResponseMessages(CreatoorSN.common.translate('This messages can\'t be moved'));
        }else{
            var selected = CreatoorSN.messages.getSelectedMessages();
           
        if(selected.selectedMessages == ''){
                CreatoorSN.messages.showResponseMessages(CreatoorSN.common.translate('No messages selected'));
                return;
        }
           var oCallback = {
            success : function (o) {
            if (YAHOO.lang.JSON.isSafe(o.responseText)) {
                    var r = YAHOO.lang.JSON.parse(o.responseText);
                     if (r.noAuth) {
                        CreatoorSN.messages.composeMessageWindow.close();
                        var login = new noAuth(function(noAuthObj){
                            CreatoorSN.messages.setCategory (category);
                        }, r.message);
                        return;
                    }
                    if(r.success ){
                         
                          CreatoorSN.messages.updateCategoryLabel(category,selected.count);
                          if(querySection != 'inbox')
                            CreatoorSN.messages.updateCategoryLabel(querySection,-selected.count);
                          else
                              CreatoorSN.messages.updateCategoriescountMarkers(selected);
                            var messages = selected.selectedMessages.split('id_');

                             for(var i in messages){
                                 if(i>0){
                                        if(querySection != 'inbox'){
                                                _$('id_'+messages[i]).parentNode.removeChild(_$('id_'+messages[i]));
                                        }else{
                                                _$('id_'+messages[i]).children[0].innerHTML= category;
                                        }
                                 }
                             }
                    }
                        
                    
                   if (r.noAuth) {
                        var login = new noAuth(function(noAuthObj){
                            CreatoorSN.messages.quickMessage (recipientId);
                        }, r.message);
                        return;
                    }
                    CreatoorSN.messages.showResponseMessages(r.message);
                }
            },
            failure : function (o) {
              CreatoorSN.messages.showResponseMessages(CreatoorSN.common.translate('Sorry, something went wrong. Please try again later.'));
            }
        };
         YAHOO.util.Connect.asyncRequest(
            "POST",
            "/members/messages/set-category/",
            oCallback,
            'messageids='+selected.selectedMessages+'&category='+category
        );
      }
   },
   /**
    * function for displaying messages
    */
   showResponseMessages: function(message){
      var ajaxTarget = document.getElementById(CreatoorSN.messages.ajaxResponsTo);
     
      if(ajaxTarget){
          if(CreatoorSN.messages.timer)
              clearTimeout(CreatoorSN.messages.timer);
          ajaxTarget.style.display= 'block';
          var fadeIn = new YAHOO.util.Anim(ajaxTarget, {opacity: {to: 1}}, 1);
          fadeIn.animate();
          ajaxTarget.innerHTML = message;
          CreatoorSN.messages.timer = setTimeout('CreatoorSN.messages.fadeOut()',4000);
      }
      else
          CreatoorSN.common.showErrorAlert(message,CreatoorSN.common.translate(''));
   },
   fadeOut : function (){
        var el = document.getElementById(CreatoorSN.messages.ajaxResponsTo);
        var fadeOut = new YAHOO.util.Anim(el, {opacity: {to: 0}}, 2);
            fadeOut.onComplete.subscribe(function() {
	        el.style.display = 'none';
	    });
        fadeOut.animate();
   },
   /**
    * Toggling display of elemnet oElement and changing class on element  e
    */
   toggleDisplay : function(e, oElement) {

	   if(typeof(oElement) === 'string')
		  oElement = _$(oElement);
              
	   if (YAHOO.lang.isObject(oElement) === false) {
                 throw new TypeError('HTMLElement expected');
           }


    		if (oElement.style.display === 'none') {
			oElement.style.display = 'block';
                         var topPos = leftPos = 'none';
                       
                         if (typeof(e) === 'object') {
                                var position = absolutePosition(e);
                                 if (position) {
                                        var demensions = getDimensions(e);
                                        
                                        topPos = parseInt(position.y+demensions.height );
                                        leftPos = parseInt(position.x);
                                }
                        }
                        
                        oElement.style.top = topPos+'px';
                        oElement.style.left = leftPos+'px';
			YDom.replaceClass(e.target, 'collapsed', 'expanded');
		} else {
			oElement.style.display = 'none';

			YDom.replaceClass(e.target, 'expanded', 'collapsed');
		}

	},

   getSelectedMessages : function( action){
            var elements = YAHOO.util.Dom.getElementsByClassName(CreatoorSN.messages.messageClassName);
            
            var selectedElements = '';
            var count =0;
            for (x=0;x<elements.length;x++){
                    var selected = YAHOO.util.Dom.getChildren (elements[x]);
                   if( elements[x].children[1].children[0].checked ){
                                    switch(action){
                                        case 'setR':
                                             if(  YAHOO.util.Dom.hasClass(elements[x].id,'messageUnread')){
                                                    selectedElements += elements[x].id;
                                                    count++;
                                             }
                                            break;
                                        case 'setU':
                                            if(! YAHOO.util.Dom.hasClass(elements[x].id,'messageUnread')){
                                                    selectedElements += elements[x].id;
                                                    count++;
                                            }
                                            break;
                                        default:
                                            selectedElements += elements[x].id;
                                             if(  YAHOO.util.Dom.hasClass(elements[x].id,'messageUnread')) count++;
                                    }
                           
                 }
          }
      
     return {count: count,selectedMessages : selectedElements};
        },

   /**
   *    function for setting filter on messages (selected messegas senders will be filtered to category)
    */
   setFilter : function(category){
            var querySection = YAHOO.util.History.getCurrentState("section");
              
            if(querySection == 'sent' || querySection == 'trash' || querySection == 'system' ){
                    CreatoorSN.messages.showResponseMessages(CreatoorSN.common.translate('This messages can\'t be filtered'));
            }else{
                    var selected = CreatoorSN.messages.getSelectedMessages();
            }

            if(selected.selectedMessages == ''){
                CreatoorSN.messages.showResponseMessages(CreatoorSN.common.translate('No messages selected'));
                return;
            }
            var overlay = disableElement('messageFilterList');
                     
            _$('messageFilterList')
            var oCallback = {
                    success : function (o) {
                        if (YAHOO.lang.JSON.isSafe(o.responseText)) {
                            var r = YAHOO.lang.JSON.parse(o.responseText);
                            if (r.noAuth) {
                                CreatoorSN.messages.composeMessageWindow.close();
                                var login = new noAuth(function(noAuthObj){
                                    CreatoorSN.messages.setFilter (category);
                                }, r.message);
                                return;
                            }
                             
                            CreatoorSN.messages.showResponseMessages(r.message);
                        }
                         removeElement(overlay);
                    },
                    failure : function (o) {
                         removeElement(overlay);
                        CreatoorSN.messages.showResponseMessages(CreatoorSN.common.translate('Sorry, something went wrong. Please try again later.'));
                    }
            };
             YAHOO.util.Connect.asyncRequest(
                "POST",
                "/members/messages/set-filter/",
                oCallback,
                'messageids='+selected.selectedMessages+'&category='+category
            );
   },
   updateCategoriescountMarkers: function(selected,invert){
          
            var currentCategory = YAHOO.util.History.getCurrentState("section");
            var messages = selected.selectedMessages.split('id_');
            
            for(var m in messages){
               
                if(m>0){
                    //must be first child in message container
                    var category = _$('id_'+messages[m]).children[0].innerHTML;
                   
                    if(category != '' && category != currentCategory && CreatoorSN.messages.categoriesTree != null){

                        for(var i in CreatoorSN.messages.categoriesTree._nodes){
                          
                            var nLabel = CreatoorSN.messages.categoriesTree._nodes[i].data.node_id;
                           
                            if(nLabel == category){
                                var count = CreatoorSN.messages.categoriesTree._nodes[i].label.match(/>\((\d+)\)</)[1];
                                if(invert)
                                    count = (Number(count) -1);
                                else
                                    count = (Number(count) +1);
                               
                                var s = CreatoorSN.messages.categoriesTree._nodes[i].label;
                                if(_$(CreatoorSN.messages.categoriesTree._nodes[i].labelElId).children.length > 0){
                                        CreatoorSN.messages.categoriesTree._nodes[i].label = s.replace(/>\(\d+\)</, '>('+count+')<');
                                       
                                        CreatoorSN.messages.categoriesTree._nodes[i].data.categoryName = s.replace(/>\(\d+\)</,  '>('+count+')<');
                                        _$(CreatoorSN.messages.categoriesTree._nodes[i].labelElId).children[0].innerHTML = '('+count+')';
                                        if(count > 0)
                                                YAHOO.util.Dom.addClass(CreatoorSN.messages.categoriesTree._nodes[i].labelElId, 'messagesUnread');
                                        else
                                                YAHOO.util.Dom.removeClass(CreatoorSN.messages.categoriesTree._nodes[i].labelElId, 'messagesUnread');
                                }
                                
                               
                            }
                        }
                    }
                }
            }

           
        },

   updateCategoryLabel: function(category, add, replace){
      
             if(category  && CreatoorSN.messages.categoriesTree != null){
                        for(var i in CreatoorSN.messages.categoriesTree._nodes){
                          
                            var nLabel = CreatoorSN.messages.categoriesTree._nodes[i].data.node_id;
                            
                            if(nLabel == category){
                              
                                var count = 0;
                                if(replace){
                                    count = add;
                                }else{
                                    var test = CreatoorSN.messages.categoriesTree._nodes[i].label.match(/>\((\d+)\)</);
                                   
                                    if(test ){
                                       count = (Number(test[1]) +Number(add));
                              
                                    }
                                }
                              
                                var s = CreatoorSN.messages.categoriesTree._nodes[i].label;
                             
                                if(_$(CreatoorSN.messages.categoriesTree._nodes[i].labelElId).children.length > 0){
                                  
                                    CreatoorSN.messages.categoriesTree._nodes[i].label = s.replace(/>\(\d+\)</, '>('+count+')<');
                                    CreatoorSN.messages.categoriesTree._nodes[i].data.categoryName = s.replace(/>\(\d+\)</,  '>('+count+')<');
                                    _$(CreatoorSN.messages.categoriesTree._nodes[i].labelElId).children[0].innerHTML = '('+count+')';
                                     if(count > 0)
                                            YAHOO.util.Dom.addClass(CreatoorSN.messages.categoriesTree._nodes[i].labelElId, 'messagesUnread');
                                    else
                                            YAHOO.util.Dom.removeClass(CreatoorSN.messages.categoriesTree._nodes[i].labelElId, 'messagesUnread');
                                }
                               break;
                            }
                        }
                    }
        },
   messageSearch: function(el){
           if(typeof(el)== 'string')
               el =_$(el);
            var query = el.value;
            
            if(query != ''){
                window.location.hash='section=search/'+query;
            }
            
       },
   removeFilter: function(el){
           if(typeof(el) != 'object')
                return;
          var token = el.parentNode.id.split('filter_')[1]
            var overlay = disableElement(el.parentNode);
          var oCallback = {
                success : function (o) {
                if (YAHOO.lang.JSON.isSafe(o.responseText)) {
                  var r = YAHOO.lang.JSON.parse(o.responseText);
                  if (r.noAuth) {                       
                      var login = new noAuth(function(noAuthObj){
                      CreatoorSN.messages.removeFilter(el);
                    }, r.message);
                    return;
                  }else{
                        if(r.success){

                            el.parentNode.parentNode.removeChild(el.parentNode);
                           if (_$('messageFilterList').children.length == 0)
                                _$('messageFilterList').innerHTML = CreatoorSN.common.translate('There are no filters')
                        }
                        CreatoorSN.messages.showResponseMessages(r.message);
                         removeElement(overlay);
                  }

              }

            },

            failure : function (o) {
              CreatoorSN.messages.showResponseMessages(CreatoorSN.common.translate(' Something went wrong..'));
            }

            //timeout: CreatoorSN.common.iAjaxTimeout

        };
           YAHOO.util.Connect.asyncRequest(
            "POST",
            "/members/messages/remove-filter/",
            oCallback,
            'token='+token
        );
       }
        
};

