var TeamsPaceUser = {
    request : null,
 
    Config : {
	service : null,
       	authInfo: null,
	userInfo: '/me/profile',
	reqType : 'xml'
    },

    User : {
	userid   : null,
	username : null	
    },

    init: function() {
	var self = this;

	window.addEvent('domready',    cbInit);
	window.addEvent('userChanged', cbUserChanged);
        window.addEvent('userUpdate',  cbUpdateUser);

	function cbInit() {
	    self.initService();	
	    
	}

	function cbUserChanged() {
	    // console.log( 'update user info' );
	    self.displayUserInfo();
	}

        function cbUpdateUser(ev){
	    // console.log( 'update user info' );
            self.checkUser();
        }

    },

    initService : function() {
        //console.warn('init teamspace');
	this.Config.service  = $('userinfo').getAttribute('userService');
	this.Config.authInfo = $('userinfo').getAttribute('loginService');
	this.checkUser();
    },

    checkUser : function() {
	var _this = this;

	if ( _this.request ) {
	    // we need to cancel any old request in order to avoid confusion
	    _this.request.cancel();
	}

	if ( _this.Config.service ) {
            var url =  _this.Config.service + _this.Config.userInfo +'.' + _this.Config.reqType;
            //console.warn( url );
	    _this.request = new Request( {'url'       : url,
					  'method'    : 'get', 
					  'onSuccess' : cbUserProfile} );
	    _this.request.send();
	}
	else {
	    //console.warn('no service URL found');
	}
	
	function cbUserProfile(text, dom){
	    _this.parseUserDOM(dom);
	}
    },

    parseUserDOM : function(dom) {
	if ( dom ) {
	    var userid, username;
	    var aNode, vNode, aName;
	    var userattr = dom.getElementsByTagName('attribute');

	    if ( userattr ) {
		for ( var i = 0; i < userattr.length; i++ ) {
		    aNode = userattr[i].getElementsByTagName('name')[0];
		    if ( aNode ) { 
			aName = $pick(aNode.text, aNode.textContent);
			if ( aName == 'deliciousnick' ) {
			    vNode = userattr[i].getElementsByTagName('value')[0];
			    if ( vNode ) {
				userid = $pick(vNode.text, vNode.textContent);
			    }
			}
			else if ( aName == 'fullname' ) {
			    vNode = userattr[i].getElementsByTagName('value')[0];
			    username = $pick(vNode.text, vNode.textContent);
			}
		    }
		}
		
		// We store the information ONLY if we detected a change.
		if ( this.User.userid != userid && 
		     this.User.username != username ) { 
		    this.User.userid   = userid;
		    this.User.username = username;
		    
		    var ukNode = dom.getElementsByTagName('userkey')[0];
		    this.User.userkey = $pick(ukNode.text, ukNode.textContent);
		    // inform other modules that the user information has changed.
		    window.fireEvent('userChanged', this.User);
		}
		else if ( !userid && !username ) {
		    
		    window.fireEvent('userChanged', this.User);		    
		}
	    }
	} 
    },

    displayUserInfo: function() {
        var uname;
	if ( this.User.username && 
	     this.User.username.length ) {
            uname = new Element( 'div', {'class' : 'username', 
					      'id': 'TSLoginInfo' } );
            var uinfo= new Element('div', {'class': 'widget_title'});
            uinfo.appendText(this.User.username);
            uinfo.inject(uname);

            uinfo = new Element( 'div', {'class': 'widget_content'});
            uinfo.inject(uname);

            // append all activated modules to the users menu
            var umod,lnk;
            umod = new Element( 'div', {'class': 'ts_usermodule'});
            umod.inject(uinfo);
            lnk = new Element('a', {'href': this.Config.authInfo});
            lnk.appendText('Your Profile');
            lnk.inject(umod);

            umod = new Element( 'div', {'class': 'ts_usermodule'});
            umod.inject(uinfo);
            lnk = new Element('a', {'href': '/rescope/rescope_01.html'});
            lnk.appendText('ReScope Tags');
            lnk.inject(umod);
	}
        else {
            // in this case we need to point the user to the login page
	    uname = new Element( 'a', {'id': 'TSLoginInfo',
				       'class': 'TSLoginLink',
                                       'href': this.Config.authInfo} );
            uname.appendText("You are not logged in");
            
        }
        uname.replaces($("TSLoginInfo"));
    }
};


// *********************************************************************
// INIT THE SYSTEM WIDE EVENTS

//console.log( 'add dom ready event TS') ;
TeamsPaceUser.init();
