ConstituencyNonContacts = Array();

var Membersnet = {
     
    // Local autocomplete from contacts
    getContactSelector: function(Element, Options) {

        SelectorHtml = '<input type="text" class="swc_SearchBox" name="Query" id="Query" style="width:300px;" /><div class="autocomplete" id="MemberAutocomplete"></div>';
        $(Element).update(SelectorHtml);
        $('Query').focus();

        ContactManager.autocomplete.init();
        new Autocompleter.Local('Query', 'MemberAutocomplete', ContactManager.autocomplete.list, { updateElement: Options.callback });

    },
    

    // Server autocomplete from all members
    getMemberSelector: function(Element, Options) {

        SelectorHtml = '<div id="ConstituenciesDropdown"><div class="swc_Loading"></div></div>';
        SelectorHtml+= '<input type="text" class="swc_SearchBox" name="Query" id="Query" style="width:100%;" /><div class="autocomplete" id="MemberAutocomplete"></div>';

        $(Element).update(SelectorHtml);

        ContactManager.autocomplete.initNonMembers();
        
        this.nonLocalAutoComplete = new Autocompleter.Local('Query', 'MemberAutocomplete', ContactManager.autocomplete.list, { updateElement: Options.callback });

        xajax_getConstituencyDropdown({callback:'Membersnet.memberSelectorInit', options: Options});
        $('Query').focus();
    },
 
 
    memberSelectorInit: function(ele, Options) {
        $('Query').enable().focus();
    },
    
    formatAutocompleteRequest: function(e, q) {
      //console.log(e, q);
      var query = $F('Query');
      var query_string = 'ConstituencyId='+$F('ConstituencyId')+'&Query='+query;
      return query_string;
    },
 

    // Highlights new content within the ele
    highlightNewContent: function(ele) {

        $$('#'+ele.identify()+' .CreatedDate').each(function(e){ 
            if(e.innerHTML >= Swc.getCookie('LastLogin')) { 
                if(ContentItem = e.up('.ContentItem')) { 
                    ContentItem.addClassName('NewItem'); 
                }
            }
        });
    },
    nonLocalAutoComplete: null,
	
	//tooltips
    tooltip:{
		init:function(){
			$$('.tooltip').each(function(e){
				e.observe("mouseover",function(evt){
					elm=Event.element(evt);
					if(elm.hasClassName('mark')||elm.hasClassName('info'))elm=elm.ancestors()[0];
					tip=elm.down('.info');
					tip.setStyle({display:'block'});
					tip.absolutize();
					tip.setStyle({top:String(elm.positionedOffset()['top']-tip.getDimensions()['height']-10)+"px"});
				});	
				e.observe("mouseout",function(evt){
					elm=Event.element(evt);
					if(elm.hasClassName('mark')||elm.hasClassName('info'))elm=elm.ancestors()[0];
					tip=elm.down('.info');
					tip.setStyle({display:'none'});
				});
			});
		}
	}
};




var ContactManager = {
    
    autocomplete: {
    
        initResult: false,
        
        list: [],
        
        init: function() {
      
            if(ContactManager.autocomplete.initResult) return true;
            ContactManager.autocomplete.initResult = true;
            ContactManager.autocomplete.list = [];
            
            var ContactTemplate = new Template('#{Avatar_Mini} #{FullName}<span class="PersonId" style="display:none;">#{PersonId}</span>');
            Contacts.each(function(s, index) {
                ContactManager.autocomplete.list.push(ContactTemplate.evaluate(Contacts[index]));
            });
            
            var GroupTemplate = new Template('#{GroupName} <span class="swc_Tip">Group of Contacts</span><span class="GroupId" style="display:none;">#{GroupId}</span>');
            ContactGroups.each(function(s, index) {
                ContactManager.autocomplete.list.push(GroupTemplate.evaluate(ContactGroups[index]));
            });
        },
        initNonMembers: function() {
            if(ContactManager.autocomplete.initResult) return true;
            ContactManager.autocomplete.initResult = true;
            ContactManager.autocomplete.list = [];
        },
        updateNonMembers: function(NonContacts) {
            //alert('Updating 1');
            ContactManager.autocomplete.list = [];
            //alert('Updating 2');
            var ContactTemplate = new Template('#{Avatar_Mini} #{FullName} <span class="PersonId" style="display:none;">#{PersonId}</span>');
            //alert('Updating 3');
            NonContacts.each(function(s, index) {
                ContactManager.autocomplete.list.push(ContactTemplate.evaluate(NonContacts[index]));
            });
            Membersnet.nonLocalAutoComplete.options.array = ContactManager.autocomplete.list;
            $('Query').enable().focus();
            

        }
    },

    prepareNonContacts: function(NonContacts){
        //alert("length "+ConstituencyNonContacts.length);
        ContactManager.autocomplete.updateNonMembers(NonContacts);
    },

    applyNonContacts: function(NonContacts){
        Membersnet.nonLocalAutoComplete.options.array = ContactManager.autocomplete.list;
        $('Query').enable().focus();
        return ContactManager.autocomplete.list.length;
    },
    addContactToGroup: function(PersonId, GroupId) {
       xajax_addContactToGroup(PersonId, GroupId);
    },


    deleteContactFromGroup: function(PersonId, GroupId) {
       xajax_deleteContactFromGroup(PersonId, GroupId);
    },


    createGroup: function(GroupName) {
       xajax_addContactGroup(GroupName);
    },

    createGroupGet: function() {
       var GroupName = prompt('Enter the name of new group','');
       if(GroupName) {
          ContactManager.createGroup(GroupName);
       }
    },

    deleteGroup: function(GroupId) {
        if(confirm('Are you sure you want to delete group: '+$('GroupName').innerHTML)) {
            xajax_deleteContactGroup(GroupId);
        }
    },

    renameGroup: function(GroupId) {
        var GroupName = prompt('Enter new name for '+$('GroupName').innerHTML,$('GroupName').innerHTML);
        if(GroupName) {
            xajax_renameContactGroup(GroupId,GroupName);
        }
    },


    loadGroup: function(GroupId) {

        Swc.progress($('Contacts'));
        $$('#GroupsList li').each(function(e){e.removeClassName('Active')});
        $('Group_'+GroupId).addClassName('Active');
        
        if(GroupId == 'All') {
            xajax_getContacts();
            $$('.DeleteFromGroup').first().hide();
        }
        else {
            xajax_getGroupContacts(GroupId);
            TrashEle = $$('.DeleteFromGroup').first();
            TrashEle.show();
            TrashEle.id = 'Delete_'+GroupId;
            Droppables.add(TrashEle.identify(),{
                accept:'Contact',
                hoverclass:'Active',
                onDrop:function(ele){ 
                        DeleteEle = $$('.DeleteFromGroup').first();
                        DeleteEle.highlight();
                        ContactId = ele.identify().split('_').pop();
                        GroupId = DeleteEle.identify().split('_').pop();
                        ContactManager.deleteContactFromGroup(ContactId, GroupId);
                        ContactManager.hasDropped = true;
                    }
            });
        }
    },

    loadContacts: function() {
        Swc.progress($('Contacts'));
        xajax_getContacts();
    },

    loadGroups: function() {
        Swc.progress($('Groups'));
        xajax_getContactGroups();
    },


    initContacts: function() {
      //Tao.order($('ContactsList'),'li','LastName');
      $$('#ContactsList .Contact').each(
        function(e){
            new Draggable(e.identify(),{revert:true});
            $(e.identify()).observe('click', ContactManager.processClick );
        });
    },
    //used to ensure that a drag event doesn't cause a link
    processClick: function(event) {
            if ( ContactManager.hasDropped ) {
                event.stop();
            }
            ContactManager.hasDropped = false;
    },
    initGroups: function() {
      $$('#GroupsList .Group').each(
        function(e){
            Droppables.add(e.identify(),{
                accept:'Contact',
                hoverclass:'Active',
                onDrop:function(ele){ 
                        e.highlight();
                        ContactId = ele.identify().split('_').pop();
                        GroupId = e.identify().split('_').pop();
                        ContactManager.addContactToGroup(ContactId, GroupId);
                        ContactManager.hasDropped = true;
                    }
            });
        });
    },
    
    increaseGroupCounter: function(GroupId) {
        $('Counter_'+GroupId).innerHTML = parseInt($('Counter_'+GroupId).innerHTML)+1;
    },
    
    decreaseGroupCounter: function(GroupId) {
        $('Counter_'+GroupId).innerHTML = parseInt($('Counter_'+GroupId).innerHTML)-1;
    },
    hasDropped: false


};
document.observe("dom:loaded",function(){
	Membersnet.tooltip.init();									   
});
