//$Rev$
//$Date$
var TwitterModule;
if ($type(window['Module']) == 'class'){

	TwitterModule=new Class({

		Extends: Module, 

		options:{
		},

		loadSettings:function(panel){
			this.getPanel(panel).getElement('input[name=username]').focus();
			this.defaultLoadHandler(panel, this.saveSettings);
		},
		
		saveSettings : function(event, form){
			event.stop();
			var update = form.getProperty('update');
			var feedback = form.getElement('.feedback');
			if (feedback)
				feedback.removeClass('error');
			if (feedback)
				this.setFeedback('save:start',feedback);
			form.set('send',{
				onComplete:function(response){
					response = JSON.decode(response);
					var result = this.module.getElement('.'+update);
					if (this.isError(response)){
						if (feedback){
							feedback.empty();
							feedback.addClass('error');
							feedback.adopt(new Element('span', {html : response.errors.join('<br />')}));
						}else
							alert(response.errors.join('\n'));
					}else{
                        var username        = form.username.value
                            ,moduleinstid   = form.moduleinstid.value;

                        TwitterUsertimeline.load(username, moduleinstid);
						//if (result)
							//result.set('html', response.data);
						if (feedback)
							this.setFeedback('save:done', feedback);
					}
				}.bind(this)
			});
			form.send();
		},
		
		isError : function(obj){
			if (obj.success && !parseInt(obj.success)){
				return false;
			}else
				return true;
		}
	});
	
	$extend(TwitterModule,{ //static methods


	});
}

/**
 *
 * @date 2010-03-29
 * @author ly.tran - lcong@digication.com
 *
 */
var TwitterUsertimeline = {
    load: function(userid /* or screenname */, moduleinstid) {

        // ensure append twitter api script
        if (!document.getElementById('twitterapi')) {
            var twitterApiScriptEl = new Element('script', {
                id: 'twitterapi'
                ,type: 'text/javascript'
                ,src: 'http://platform.twitter.com/anywhere.js?id=API_KEY&v=1'
            });
            twitterApiScriptEl.addEvent('load', function() {
                doLoad();
            });
            
            var head = document.getElementsByTagName('head')[0];
            head.appendChild(twitterApiScriptEl);
        } else {
            doLoad.delay(500);
        }

        function doLoad() {
            twttr.anywhere(function(T) {
                var moduleEl = $('twitter-module-' + moduleinstid);
                var listEl = moduleEl.getElement('.items');
                var isClear = false;
                var itemText;

                listEl.set('html', '<img src="/images/help/loading.gif" alt="">');

                // get user info
                var user = T.User.find(userid, function(userInfo) {
                    // update profile image
                    moduleEl.getElement('.profile-image').set('src', userInfo.profileImageUrl).removeClass('hide');

                    // update username
                    moduleEl.getElement('.username').set('html', userid);

                    //update url
                    moduleEl.getElement('.url').set('href', 'http://www.twitter.com/' + userid).set('html', 'http://www.twitter.com/' + userid);
                });

                // get timeline items
                user.timeline(function(items) {
                    items.each(function(status) {
                        if (!isClear) {
                            listEl.set('html', '');
                            isClear = true;
                        }
                        var createdAt = TwitterUsertimeline.formatDateTime(new Date(status.createdAt));

                        var text = status.text.replace(/https?:\/\/[^\s]+/g, function(m) {
                            return '<a href="' + m + '" target="_blank">' + m + '</a>';
                        });

                        text = text.replace(/@([a-zA-Z0-9]+)/g, function(m, m1) {
                            return '<a href="http://twitter.com/' + m1 + '" target="_blank">' + m + '</a>';
                        });

                        itemText = '<p style="background:#fff; border-bottom:1px solid #aaa; padding:5px; margin-bottom:10px">';
                        itemText += text;
                        itemText +='<br />';
                        itemText += '<small style="color:#aaa">Posted on ' + createdAt + '</small>';
                        itemText += '</p>';
                        listEl.set('html', listEl.get('html') + itemText);
                    });
                });
            });
        }
    }

    ,formatDateTime: function(d) {
        var h = d.getHours();
        var m = d.getMinutes();
        var ap = h < 12? 'am' : 'pm';

        if (h == 0) {
            h = 12;
        }
        if (h > 12) {
            h = h - 12;
        }

        m = m + '';
        if (m.length == 1) {
            m = '0' + m;
        }
        return (d.getMonth() + 1) + '/' + d.getDate() + '/' + d.getFullYear() + ', ' + h + ':' + m + ' ' + ap;
    }
}
