var OLCTwitter = function(){}
Object.extend( OLCTwitter, {
	init: function(){
		Event.observe( $('olcTwitterForm'), 'submit', OLCTwitter.update );
		//setInterval( OLCTwitter.get, 120000 );
	},

	update: function( aEvent ){
		var form = $( 'olcTwitterForm' );
		Element.removeClassName( form.name, 'INVALID' );
		Element.removeClassName( form.msg, 'INVALID' );

		var validation = true;
		if( $F( form.name) == '' ){
			Element.addClassName( form.name, 'INVALID' );
			validation = false;
		}
		if( $F( form.msg ) == '' ){
			Element.addClassName( form.msg, 'INVALID' );
			validation = false;
		}

		var onSuccessFunc = function( aReq ){

			var obj = eval( '(' + aReq.responseText + ')' );
			if( obj === undefined || obj.user.name != 'GreenSpace' ){
				alert('書き込みに失敗しました...');
			}
			else {
				var func = function(){
					Form.enable( $('olcTwitterForm') );
					$('olcTwitterForm').msg.value = '';
					OLCTwitter.get();
				};
				setTimeout( func, 500 );
			}
		};
		var onFailureFunc = function(){
			alert('書き込みに失敗しました...');
			Form.enable( $('olcTwitterForm') );
		};

		
		if( validation ){
		
			new Ajax.Request( '/script/olc_twitter/olc_twitter.php', {
				method: 'post',
				postBody: $H( {
					method: 'update',
					name: $F( form.name ),
					msg: $F( form.msg )
				} ).toQueryString(),
				onSuccess: onSuccessFunc,
				onFailure: onFailureFunc,
				onException: onFailureFunc
			} );
			Form.disable( form );
		}
		Event.stop( aEvent );
		return false;
	},

	get: function( aWithFriend ){
		$('olcTwitter').innerHTML = 'ロード中...'
		var onSuccessFunc = function( aReq ){
			try{
				var obj = eval( aReq.responseText );
				if( ! (obj instanceof Array) || obj.length < 1 ){
					$('olcTwitter').innerHTML = 'メッセージがありません。'
				}
				else {
					var outputArray = ['<ul>'];
					var expName = /^\[([^\]]+)\] (.+)/;
					var template = new Template( '<li class="olctLine"><span class="msg">#{msg}</span><span class="name">#{name}</span><span class="time">(#{time})</span></li>' );

					obj.each( function( item, index ){
						if( index > 5 ){ throw $break; }

						var date = null;

						if( /MSIE/.test(navigator.userAgent) && !window.opera){
							var d = item.created_at.split(' ');
							date = new Date( d[1] + ', ' + d[2] + ' ' + d[5] + ' ' + d[3] + ' UTC' );
						}
						else {
							date = new Date( item.created_at );
						}

						item.text.match(expName);
						var userName = RegExp.$1 || 'someone';
						var text = RegExp.$2;

						outputArray[outputArray.length] = template.evaluate( {
							name: userName.escapeHTML(),
							msg: text.escapeHTML(),
							time: date.toLocaleString()
						} );
					} );

					outputArray.push('</ul>');
					$('olcTwitter').innerHTML = outputArray.join('');
				}
			}
			catch( e ) {
				$('olcTwitter').innerHTML = 'ロードに失敗しました...';
			}
		};

		var onErrorFunc = function(){
			$('olcTwitter').innerHTML = 'ロードに失敗しました...';
		};

	
		var param = aWithFriend ? 'friend=1' : '';
		new Ajax.Request( '/script/olc_twitter/olc_twitter.php', {
			method: 'get',
			parameters: param,
			onSuccess: onSuccessFunc,
			onFailure: onErrorFunc,
			onException: onErrorFunc
		} );
	}

} )
