var ChatRooms = {
	rooms : new Array(),

	add : function( room , jid ){
		this.rooms[this.rooms.length] = {room:room, jid:jid};
	},
	
	getRoom : function( jid ){
		for(var i=0; i < this.rooms.length; i++){
			var t = this.rooms[i];
			try{if(t.jid == jid) return t.room;}catch(e){return null;}
		}

		return null;
	},

	removeRoom : function( room_jid ){
		for(var i=0; i < this.rooms.length; i++){
			var t = this.rooms[i];
			if(t.room == room_jid) {
				delete this.rooms[i];
				return true;
			}
		}
		
		return false;
	}
}
// MUC plugin
Strophe.addConnectionPlugin('muc', {

	my_nick : '', //one nick for all rooms

    init: function (connection) {
        this.connection = connection;
        Strophe.addNamespace('CONFERENCE', 'jabber:x:conference');
    },

    // to be implemented if needed
    /*statusChanged: function (status) {
    	return true;
    },*/

	presenceChanged:function( presence ){
		var from = $(presence).find('item').attr('jid');//because this is non-anonymous chat room
		
		//try{console.log('strophe.muc.presenceChanged',presence)}catch(e){}

		if( ($(presence).find('status').length > 0 && $(presence).find('status').attr('code') == '201')
				|| from == Me.jid) //This presence is ours that is rebroadcast back to us.
			return;

		if($(presence).attr('type') == 'error') //An error has occured. Tap the error in the <error> tag. By default, we cancel.
			return;

		$(presence).attr("from",from);
		var pres = $(presence).get(0);
		connection.roster.presenceChanged(pres);
	},

    /*
     * JOIN A ROOM
     * 
     * If a room doesn't exist it is created by the server.
     * Joining also makes sure you DON'T receieve any history of the room
     */ 
    joinRoom: function (jid, nickname, room_jid, id, name, image, mood, language_code, language_id, language_name) {
		this.my_nick = nickname;

    	var p = $pres({from: jid, to: room_jid+'/'+nickname})
						.c('x',{xmlns:Strophe.NS.MUC}).c('history',{maxchars:0})
						.up().up().c('user',{id:id, name:name, image:image, mood:mood, jid:jid})
						.up().c('language',{id:language_id, code:language_code}).t(language_name);
    	this.connection.send(p.tree());
    },
    
    leaveRoom: function (jid, room_jid) {
    	var p = $pres({from: jid, to: room_jid, type : 'unavailable'}).c('x',{xmlns:Strophe.NS.MUC});
		this.connection.send(p.tree());

		if(ChatRooms) ChatRooms.removeRoom(room_jid);
    },
    
    /*
     * Invite a member (to) to join the chat room room_jid
     */
    invite : function(from, to, room_jid, name) {
    	var p = $msg({from: from, to: to, type:"join-request", name:name}).c('x', {xmlns:Strophe.NS.CONFERENCE, jid:room_jid, reason:'Chat with visitor to the site'});
    	this.connection.send(p.tree());
    },

	denyInvite : function(from, to, room_jid) {
    	var p = $msg({from: from, to: to, type:"deny-join-request"}).c('x', {xmlns:Strophe.NS.CONFERENCE, jid:room_jid});
    	this.connection.send(p.tree());
    },

	approveInvite : function(from, to, room_jid) {
    	var p = $msg({from: from, to: to, type:"approve-join-request"}).c('x', {xmlns:Strophe.NS.CONFERENCE, jid:room_jid});
    	this.connection.send(p.tree());
    },
    
    /*
	 * Send a <presence> to the room
	 */
    sendPresence : function(jid, room_jid, id, name, image, mood, language_code, language_id, language_name) {
		var p = $pres({from: jid, to: room_jid})
						.c('user',{id:id, name:name, image:image, mood:mood, jid:jid})
						.up().c('language',{id:language_id, code:language_code}).t(language_name);
    	this.connection.send(p.tree());
    }
});
