if (!window.CHATLAZY)
		var CHATLAZY = {};

CHATLAZY = function(){
		var C = YAHOO.util.Connect,
				D = YAHOO.util.Dom,
				E = YAHOO.util.Event,
				L = YAHOO.lang;
		
		return {
	
				init: function(){
						var frm = document.forms['shout'],
								usrname = frm.usrname,
								val = frm.talk;
						
						usrname.focus();
						usrname.select();
						
						E.on(frm, 'submit', function(e){
								if (L.trim(val.value)){
										this.refreshRoom(false);
										this.putItem(frm);
										frm.shoutout.disabled = true;
										val.value = '';
								}
								E.stopEvent(e);
						}, this, true);

						E.on(usrname, 'focus', function(e){
								this.select();
						});
						
						this._scrollToBottom();
						this._initUserColor();
						
						this.refreshRoom(true);
				},

				refreshRoom: function(on){
						var _this = this;
						if (on){
								this._timer = setInterval(function(){
										_this.getItems();
								}, 5000);
						} else {
								clearInterval(this._timer);
						}
				},

				putItem: function(frm){
						C.setForm(frm);
						C.asyncRequest('POST', '/chat', {
								success: function(o){
										if (o.responseText == 'ok'){
												this.getItems();
												this.refreshRoom(true);
												var frm = document.forms['shout'];
												frm['shoutout'].disabled = false;
												frm['talk'].focus();
										} else {
												alert('Google App Engine 出问题了，请刷新之。');
												this.refreshRoom(false);
										}
								},
								failure: function(o){
										alert('Google App Engine 出问题了，请刷新之。');
										this.refreshRoom(false);
										document.forms['shout']['shoutout'].disabled = false;
								},
								scope: this
						})
				},

				getItems: function(){
						var lis = D.get('list').getElementsByTagName('li'),
								last = lis[lis.length-1];
						C.asyncRequest('GET', '/refresh/'+last.getAttribute('timestamp'), {
								success: function(o){
										try {
												var res = eval('(' +o.responseText+ ')');
										} catch (ex){
												alert('Google App Engine 出问题了，请刷新之。');
												this.refreshRoom(false);
												return;
										}
										this.insertItemsToView(res);
										document.forms['shout']['shoutout'].disabled = false;
								},
								failure: function(o){},
								scope: this
						});
				},
				
				insertItemsToView: function(res){
						var ul = D.get('list').getElementsByTagName('ul')[0];
						for (var i=0, n=res.length; i<n; ++i){
								var li = document.createElement('li'),
										str = [],
										t = res[i];
								str.push('<div class="user"><strong>');
								str.push(t['n']);
								str.push('</strong> @ <em>');
								str.push(t['dt']);
								str.push('</em></div><div class="content">');
								str.push(t['c']);
								str.push('</div>');
								li.innerHTML = str.join('');
								li.setAttribute('timestamp', t['t']);
								ul.appendChild(li);
								var _this = this;
								setTimeout(function(){
										_this._scrollToBottom();
										_this._animateItem(li);
										_this._setUserColor(li);
								}, 0);
						}
				},

				_timer: null,

				_userColorHash: {},
				
				_assignRamdomColor: function(){
						var n = Math.abs(6 - Math.round(Math.random()*10));
						return 'looknfeel-' + n;
				},

				_initUserColor: function(){
						var lis = D.get('list').getElementsByTagName('li');
						for (var i=0, n=lis.length; i<n; ++i){
								this._setUserColor(lis[i]);
						}
				},

				_setUserColor: function(li){
						var userNode = li.getElementsByTagName('strong')[0],
								user = userNode.innerHTML;
						if (!this._userColorHash[user]){
								this._userColorHash[user] = this._assignRamdomColor();
						}
						D.addClass(userNode.parentNode.parentNode, this._userColorHash[user]);
				},

				_animateItem: function(el){
						var anim = new YAHOO.util.ColorAnim(el, {backgroundColor:{from:'#fffb87', to:'#fff'}});
						anim.animate();
				},

				_scrollToBottom: function(){
						var list = D.get('list');
						anim = new YAHOO.util.Scroll(list, {scroll: {to:[0 ,list.scrollHeight]}});
						anim.animate();
				}
		}
}();

CHATLAZY.init();
