var message_cache;var client;var login_form;if(!$defined(window.console)){console={log:$empty,debug:$empty,time:$empty,timeEnd:$empty,error:$empty};}
if(Browser.Engine.trident){domready_event='load'}else{domready_event='domready'}
window.addEvent(domready_event,function(){message_cache.init();login_form.init();client.init(marker);if($('refresh')){$('refresh').addEvent('click',function(){client.current_panel.poll(true);});}});message_cache={message_id_re:/\bm-(\d+)\b/,init:function(){this.messages=new Hash();this.parents=new Hash();init_messages.each(function(msg){this.createMessage(msg);},this);$$('ul.conversation li.card').each(function(el){var msg=this.get(el);msg.node=el.clone();},this);},get:function(obj){if($type(obj)=='element'){var matches=obj.className.match(this.message_id_re);var mid=parseInt(matches[1]);}else{var mid=obj;}
return this.messages[mid];},processNew:function(new_messages){var messages=[],removed_messages=[]
new_messages.each(function(message){if(message.data.type=='system'){if(message.data.subtype=='remove'){if(this.messages[message.data.target_id].kind=='parent'){delete this.parents[data.target_id];}
removed_messages.push(this.messages[message.data.target_id]);delete this.messages[message.data.target_id];}}else{var created_msg=this.createMessage(message.data,message.card);if(created_msg!==null){messages.push(created_msg);}}},this);client.remove(removed_messages);client.render(messages);},createMessage:function(data,html){if(this.messages[data.id]){if(this.messages[data.id].kind=='parent'&&this.messages[data.id].is_stub){this.messages[data.id].update(data,html);return this.messages[data.id];}
return null;}else{if(data.parent_id){if(!this.parents[data.parent_id]){this.messages[data.parent_id]=new ParentMessage();this.parents[data.parent_id]=this.messages[data.parent_id];}
this.messages[data.id]=new ChildMessage(this.messages[data.parent_id],data,html);;this.messages[data.parent_id].addChild(this.messages[data.id]);return this.messages[data.id];}else{this.messages[data.id]=new ParentMessage(data,html);this.parents[data.id]=this.messages[data.id];return this.messages[data.id];}}}}
Message=new Class({initialize:function(data,html){this.is_stub=true;if(data){this.is_stub=false;this.update(data,html);}},update:function(data,html){this.id=data.id;this.created_at=new Date(data.created_at);this.type=data.type;this.media=data.media;if(html){this.node=new Element('div').set('html',html).getFirst();}
this.is_stub=false;}});ChildMessage=new Class({Extends:Message,kind:'child',initialize:function(parent_msg,data,html){this.parent(data,html);this.parent_msg=parent_msg;}});ParentMessage=new Class({Extends:Message,kind:'parent',initialize:function(data,html){this.parent(data,html);this.children=[];},addChild:function(child){var child_is_added=false;for(var i=this.children.length-1;i>=0;i--){if(this.children[i].created_at<child.created_at){this.children.splice(i+1,0,child);child_is_added=true;break;}}
if(!child_is_added){this.children.push(child);}}});Panel=new Class({initialize:function(id,poll_url,page_url,marker,limit){this.id=id;this.marker=null;if($defined(marker)){this.marker=marker;}
this.limit=null;if($defined(limit)){this.limit=limit;}
this.offset=limit;this.el=$(id);this.page_el=$('page');this.page_el.addEvent('click',this.page.bind(this));window.addEvent('scroll',this.scrollPage.bind(this));this.page_load=$('page_loading');this.last_marker=$('last_marker');this.poll_info=$('poll_info');this.poll_timer=null;this.poll_req=new Request.DEQQ({url:poll_url,silentonerror:true,onComplete:this.pollComplete.bind(this),onSuccess:this.pollSuccess.bind(this),onFailure:this.pollFailure.bind(this)})
this.page_req=new Request.DEQQ({url:page_url,silentonerror:true,onComplete:this.pageComplete.bind(this),onSuccess:this.pageSuccess.bind(this),onFailure:this.pageFailure.bind(this)})
if(this.el){this.lastpolldate=new Date();this.el.getElements('li.card').each(function(el){this.wire(el);},this);this.loaded();this.show(false);}else{this.el=new Element('div',{id:id,'class':'loading'}).inject($('main'));this.is_visible=true;new Request.DEQQ({url:poll_url,onSuccess:this.load.bind(this)}).GET();}
this.el.store('panel',this);},load:function(response){this.el.removeClass('loading');this.marker=response.marker;this.el.set('html',response.pane);this.lastpolldate=new Date();this.update_timer=this.update.periodical(1000*10,this);this.poll_timer=this.poll.periodical(2*1000,this);message_cache.processNew(response.messages);this.el.getElements('li.card').each(function(el){this.wire(el);},this);this.loaded();},show:function(poll_right_away){this.poll_timer=this.poll.periodical(2*1000,this);this.poll(poll_right_away!==false);this.update_timer=this.update.periodical(1000*10,this);this.update();this.el.removeClass('hidden');this.is_visible=true;},hide:function(){if(this.poll_req){this.poll_req.cancel();}
$clear(this.poll_timer);$clear(this.update_timer);this.el.addClass('hidden');this.is_visible=false;},poll:function(override){if(this.processing_msg){return;}
if(this.poll_req.running){return;}
var polldate=new Date(this.lastpolldate.getTime());var interval=client.poll_interval;if(this.poll_failed){interval=client.intervals.slow;}
polldate.setSeconds(polldate.getSeconds()+interval);if(client.debug)this.poll_info.removeClass('hidden');if(client.debug)this.poll_info.set('html','Attempt to poll: '+(new Date())+', override => '+override+', polldate => '+polldate+', marker => '+this.marker);if(override||polldate<=new Date()){if(client.debug)this.poll_info.set('html','Actual Polling: '+(new Date())+', marker => '+this.marker);timestamp=new Date().getTime();this.poll_req.GET({view:'poll',marker:this.marker,ts:timestamp});}},pollComplete:function(response){this.lastpolldate=new Date();},pollSuccess:function(response){if(client.debug){this.poll_info.removeClass('hidden');this.poll_info.set('html','poll success: '+(new Date())+', response.messages => '+traceObj(response,2));}
if(response.marker){this.marker=response.marker;}
this.poll_failed=false;if(response.messages){this.processing_msg=true;message_cache.processNew(response.messages);this.processing_msg=false;}},pollFailure:function(){if(client.debug){this.poll_info.removeClass('hidden');this.poll_info.set('html','poll fail: '+(new Date()));}
this.poll_failed=true;},scrollPage:function(){var document_height=window.getScrollSize().y;var window_height=window.getSize().y;var scroll_top=window.getScroll().y;if(scroll_top==document_height-window_height){this.page();}},page:function(){if(this.last_marker.get('text')=='true'){return false;}
if(this.page_req.running){return false;}
this.page_req.GET({view:'page',marker:this.marker,limit:this.limit,offset:this.offset});this.page_load.addClass('loading');return false;},pageFailure:function(){this.page_failed=true;},pageComplete:function(response){this.lastpagedate=new Date();this.page_load.removeClass('loading');},renderMessages:function(messages){console.log('Render new messages in conversation: ',messages,this.thread_el);if(messages.length===0){return false;}
this.thread_el.removeClass('hidden');return true;},removeMessages:function(messages){console.log('removing messages from conversation: ',messages,this.thread_el);messages.each(function(msg){var conv_pane=$('main').getElement('conversation-'+msg.id);if(conv_pane){client.showRoot();conv_pane.dispose();}
$('main').getElements('li.m-'+msg.id).each(function(el){var ul_child=el.getParent('ul.child');if(ul_child){console.log('dipose(): ',ul_child)
ul_child.dispose();}else{console.log('dipose(): ',el)
el.dispose();}});});},wire:function(el,msg){if(!$defined(msg)){msg=message_cache.get(el);}
var delete_msg_button=el.getElement('div.moderator-tools li.delete-message');var ban_user_button=el.getElement('div.moderator-tools li.user-state');if(delete_msg_button){new DeleteMessageUtil(delete_msg_button,el,community.handle,msg.id);}
if(ban_user_button){new BanUserUtil(ban_user_button,getHandleFromElement(el.getElement('ul.moderator-menu'),'mod'),community.handle);}
el.getElements('div.message a').addEvent('click',client.openLink.bindWithEvent(client));switch(msg.type){case'music':var button=el.getElement('div.music span.play');client.get_deqq.addDeadElement(button);button.addEvent('click',function(){button.addClass('hidden');var player=new Element('div',{'class':'player'}).inject(button.getParent(),'top');new Swiff('/swf/button-player.swf',{id:'launchButton',width:23,height:23,container:player,vars:{audio_url:msg.media.url}});});break;case'youtube':var button=el.getElement('div.message div.thumb');button.addEvent('click',function(){console.log(msg.media);client.media_overlay.showYouTube(msg.media.url);});break;case'photo':var button=el.getElement('div.message div.thumb');button.addEvent('click',function(){client.media_overlay.showImage(msg.media.url);});break;}},update:function(){var now=new Date();this.el.getElements('ul.conversation li.card').each(function(el){var message=message_cache.get(el);var time_ago='';var delta=Math.floor((now.getTime()-message.created_at.getTime())/1000);if(delta<0){time_ago='about a minute ago'}else if(delta<(60*60*24)){if(delta<10){time_ago='just now'}else if(delta<60){time_ago='about a minute ago'}else if(delta<(60*60)){time_ago=Math.floor(delta/60)+' minutes ago'}else if(delta<(60*60*2)){time_ago='about an hour ago'}else{time_ago=Math.floor(delta/(60*60))+' hours ago'}}else{time_ago=Math.floor(delta/(60*60*24))+' days ago'}
var time_el=el.getElement('div.message span.time');var current_time_ago=time_el.get('text');if(current_time_ago!=time_ago){time_el.set('text',time_ago);}});}});RootPanel=new Class({Extends:Panel,initialize:function(filter,embed,marker){this.filter=filter;var poll_url='/community/'+community.handle+'?filter='+filter;if(embed){poll_url=poll_url+'&embed='+embed}
var page_url='/community/'+community.handle+'?filter='+filter;if(embed){page_url=page_url+'&embed='+embed}
var limit=50;this.parent('root-'+filter,poll_url,page_url,marker,limit);this.page_max=200;},loaded:function(){this.thread_el=this.el.getFirst('ul.conversation');},wire:function(el){var msg=message_cache.get(el);this.parent(el,msg);},enterConv:function(e,msg){e.preventDefault();this.hide();client.enterConversation(msg.id);},pageSuccess:function(response){console.log('page: success');this.page_failed=false;messages=response.messages;message_cache.processNew(messages);this.offset=this.offset+this.limit;console.log('client messages:',this.offset);console.log('page limit:',this.page_limit);if(this.offset>=this.page_limit){this.last_marker.set('text','true');}},renderMessages:function(messages){if(!this.parent(messages)){return false;}
var parent_messages=this.thread_el.getChildren('li.card');messages.each(function(new_msg){if(this.el.getElement('li.m-'+new_msg.id)){console.error('duplicate node found with id: '+new_msg.id)}else{if(new_msg.kind=='parent'){var updated_node=new_msg.node.clone();}else{var updated_node=this.thread_el.getFirst('li.m-'+new_msg.parent_msg.id);var child_conv=updated_node.getElement('ul.child');if(child_conv){var previous_child_msg=message_cache.get(child_conv.getFirst('li.card'));if(new_msg.created_at>previous_child_msg.created_at){child_conv.empty().grab(new_msg.node.clone())}}else{child_conv=new Element('ul',{'class':'child'}).inject(updated_node).grab(new_msg.node.clone());}}
var test_date=new Date(0);var closest_msg=null;console.log('rendering: ',new_msg);for(var i=0;i<parent_messages.length;i++){var om=parent_messages[i];var msg=message_cache.get(om);var msg_date=msg.children.length==0?msg.created_at:msg.children[msg.children.length-1].created_at;if(test_date<msg_date&&msg_date<new_msg.created_at){test_date=msg_date;closest_msg=om;}}
console.log('closest message: ',closest_msg);if(closest_msg===null){updated_node.inject(this.thread_el);}else{console.log('before')
updated_node.inject(closest_msg,'before');}
this.wire(updated_node);}},this);return true;}});ConversationPanel=new Class({Extends:Panel,initialize:function(id,marker){var poll_url='/community/'+community.handle+'/conversation/'+id;var page_url='/community/'+community.handle+'/conversation/'+id;var limit=50;this.parent('conversation-'+id,poll_url,page_url,marker,limit);this.conversation_count=0;},loaded:function(){this.thread_el=this.el.getElement('ul.conversation.replies');},pageSuccess:function(response){console.log('page: success');this.page_failed=false;messages=response.messages;message_cache.processNew(messages);this.offset=this.el.getElements('li.card').length-1;if(messages.length<=0){this.conversation_count=this.offset;}else{this.conversation_count=messages[0].data.conversation_count-1;if(!this.conversation_count)this.conversation_count=this.offset;}
console.log('messages:',messages[0].data.conversation_count);console.log('client messages:',this.offset);console.log('server messages:',this.conversation_count);if(this.offset>=this.conversation_count){this.last_marker.set('text','true');}},renderMessages:function(messages){if(!this.parent(messages)){return false;}
var ordered_messages=this.thread_el.getChildren('li.card');messages.each(function(new_msg){if(this.el.getElement('li.m-'+new_msg.id)){console.error('duplicate node found with id: '+new_msg.id)}else{var test_date=new Date(0);var closest_msg=null;console.log('rendering: ',new_msg);for(var i=0;i<ordered_messages.length;i++){var om=ordered_messages[i];var msg=message_cache.get(om);if(test_date<msg.created_at&&msg.created_at<new_msg.created_at){test_date=msg.created_at;closest_msg=om;}}
console.log('closest message: ',closest_msg);var rendered_msg=new_msg.node.clone();if(closest_msg===null){rendered_msg.inject(this.thread_el);}else{rendered_msg.inject(closest_msg,'before');}
this.wire(rendered_msg);}},this);return true;}});client={debug:false,intervals:{fast:30,slow:60*2},poll_failed:false,init:function(){if(Browser.Engine.trident){document.onfocusout=this.blur.bind(this);document.onfocusin=this.focus.bind(this);}else{window.addEvent('blur',this.blur.bind(this));window.addEvent('focus',this.focus.bind(this));}
var launchButton=new Swiff('/swf/button-launcher.swf',{id:'launchButton',width:295,height:175,container:'launch-community',vars:{user_factory:user_server+'/users',community:community_url,identity_server:identity_server,desktop_download_url:download_url,desktop_app_id:desktop_app_id,abtoken:abtoken}});if($('logout-button')){$('logout-button').addEvent('click',this.logout.bind(this));}
if($('inline-facebook-login')){$('inline-facebook-login').addEvent('click',this.facebookLogin.bindWithEvent(this));}
if($('inline-twitter-login')){$('inline-twitter-login').addEvent('click',this.twitterLogin.bindWithEvent(this));}
if($('inline-auth-plugin-login')){$('inline-auth-plugin-login').addEvent('click',this.authpluginLogin.bindWithEvent(this));}
var opts={close:$('launch').getElement('span.close')}
if($('launch-button')){opts.button='launch-button';}
this.get_deqq=new ShadowOverlay('launch',opts);if($('media'))this.media_overlay=new MediaDisplayOverlay('media',{close:$('media').getElement('span.close')});if($('root-'+filter)){this.current_panel=new RootPanel(filter,embed_flag,marker);this.root_panel=this.current_panel;}else{this.current_panel=new ConversationPanel(init_messages[0].id,marker);}
console.log('initial pane: ',this.current_panel);this.panels=[this.current_panel];this.poll_interval=this.intervals.fast;},filter:function(e){e.preventDefault();this.current_panel.hide();var li=e.target.getParent();$$('#community-filters li').removeClass('active');li.addClass('active');var filter=li.id.split('-')[1];if($('root-'+filter)){var panel=$('root-'+filter).retrieve('panel');panel.show();}else{var panel=new RootPanel(filter,embed_flag);}
this.current_panel=panel;this.root_panel=panel;},render:function(messages){this.current_panel.renderMessages(messages);},remove:function(messages){this.current_panel.removeMessages(messages);},showRoot:function(e){if(e){e.preventDefault();}
$('community-back').addClass('hidden');$('community-filters').removeClass('hidden');this.current_panel.hide();this.root_panel.show();},enterConversation:function(id){$('community-back').removeClass('hidden');$('community-filters').addClass('hidden');if($('conversation-'+id)){var panel=$('conversation-'+id).retrieve('panel');panel.show();}else{var panel=new ConversationPanel(id);}
this.current_panel=panel;},openLink:function(e){e.preventDefault();console.log('openLink!');window.open($(e.target).href);},retweet:function(e){msg=message_cache.get(this);msg_body=this.getElement('div.message div.body').get('html');msg_body=this.getElement('div.message div.body').get('html');if(Browser.Engine.trident){msg_box_raw=document.frames['post-message-iframe'].document.getElementById('id_message');}else{msg_box_raw=document.getElementById('post-message-iframe').contentDocument.getElementById('id_message');}
msg_box=$(msg_box_raw);msg_box.value=msg_body;if(!Browser.Engine.trident)msg_box.highlight('#ffffbb');message_form.autosizeTextarea(msg_box);message_form.updateIframeHeight();},twitterLogin:function(){var win=window.open('/login?view=twitter','twitterlogin','width=795,height=386,scrollbars=no');win.focus();},facebookLogin:function(){var win=window.open('/login?view=facebook','facebooklogin','width=980,height=640,scrollbars=no');win.focus();},authpluginLogin:function(){try{auth_plugin_type=$('inline-auth-plugin-login-type').value;}catch(e){auth_plugin_type='authplugin';}
try{auth_plugin_url=$('inline-auth-plugin-login-url').value;}catch(e){auth_plugin_url=null;}
if(auth_plugin_url){auth_plugin_url=auth_plugin_url+'?community='+community['handle'];var win=window.open(auth_plugin_url,auth_plugin_type+'login','width=400,height=380,scrollbars=no,location=no');win.focus();}},logout:function(){new Request.DEQQ({url:'/account',onSuccess:this.loggedOut.bind(this)}).POST({action:'logout'});},loggedOut:function(response){notifications.add(response.message);$('account').addClass('hidden');},blur:function(){if(client.debug){$('poll_info').removeClass('hidden');$('poll_info').set('html','Set Polling to Slow: '+(new Date()));}
this.poll_interval=this.intervals.slow;},focus:function(){if(client.debug){$('poll_info').removeClass('hidden');$('poll_info').set('html','Set Polling to Fast: '+(new Date()));}
this.poll_interval=this.intervals.fast;}}
login_form={auto_submit_post:false,link_service_post:false,link_service_count:0,init:function(){this.dialog=new ShadowOverlay('login');$('login-button').addEvent('click',this.loginButton.bindWithEvent(this));if($('login-link')){$('login-link').addEvent('click',this.loginButton.bindWithEvent(this));}},loginButton:function(e){if(!Browser.Engine.webkit){this.auto_submit_post=false;e.preventDefault();this.load();}},load:function(html){if(!html){var qs='?community='+community['handle'];var url='/login'+qs;var jsonRequest=new Request.JSON({url:url,onSuccess:function(response){login_form.load(response.logindialog);}}).get();}else{$$('#login div.content').set('html',html);$('login-form').addEvent('submit',this.submitLogin.bindWithEvent(this));$('register-form').addEvent('submit',this.submitRegister.bindWithEvent(this));$('twitter-login').addEvent('click',this.twitterLogin.bindWithEvent(this));$('facebook-login').addEvent('click',this.facebookLogin.bindWithEvent(this));$('deqq-login').addEvent('click',this.showDEQQForm.bindWithEvent(this));if($('auth-plugin-login')){$('auth-plugin-login').addEvent('click',this.authpluginLogin.bindWithEvent(this));}
$('login-form-link').addEvent('click',this.showLoginForm.bindWithEvent(this));$('register-form-link').addEvent('click',this.showRegisterForm.bindWithEvent(this));this.dialog.show();$('id_handle').focus();}},showDEQQForm:function(){$('service-fields').addClass('hidden');$('deqq-fields').removeClass('hidden');return false;},showLoginForm:function(){$('register-form').addClass('hidden');$('login-form').removeClass('hidden');return false;},showRegisterForm:function(){$('login-form').addClass('hidden');$('register-form').removeClass('hidden');return false;},twitterLogin:function(){var win=window.open('/login?view=twitter','twitterlogin','width=795,height=386,scrollbars=no');win.focus();this.dialog.hide();},facebookLogin:function(){var win=window.open('/login?view=facebook','facebooklogin','width=980,height=640,scrollbars=no');win.focus();this.dialog.hide();},authpluginLogin:function(){try{auth_plugin_type=$('auth-plugin-login-type').value;}catch(e){auth_plugin_type='authplugin';}
try{auth_plugin_url=$('auth-plugin-login-url').value;}catch(e){auth_plugin_url=null;}
if(auth_plugin_url){auth_plugin_url=auth_plugin_url+'?community='+community['handle'];var win=window.open(auth_plugin_url,auth_plugin_type+'login','width=400,height=380,scrollbars=no,location=no');win.focus();this.dialog.hide();}},submitLogin:function(e){e.preventDefault();$('login-form').set('send',{onSuccess:this.success.bind(this),onFailure:this.failure.bind(this)});$('login-form').store('send',new Request.DEQQ($('login-form').retrieve('send:options')))
$('login-form').send();},submitRegister:function(e){e.preventDefault();$('register-form').set('send',{onSuccess:this.success.bind(this),onFailure:this.failure.bind(this)});$('register-form').store('send',new Request.DEQQ($('register-form').retrieve('send:options')))
$('register-form').send();},success:function(response){login_form.dialog.hide();userLoggedIn(response.user);},failure:function(response){if(response.code==1000){this.load(response.logindialog);}}}
function userLoggedIn(user_data){user=user_data;$('user-handle').set('text',user_data.name);$(document.body).addClass('authenticated');$(document.body).removeClass('anonymous');$('participate-helper').addClass('hidden');if(login_form.auto_submit_post){message_form.submitForm();}else if(login_form.link_service_post){login_form.link_service_count--;if(login_form.link_service_count<=0){login_form.link_service_count=0;linked_twitter=user.linked_twitter;linked_facebook=user.linked_facebook;message_form.submitForm();}}}
BanUserUtil=new Class({initialize:function(button,user_handle,community_handle){this.community_handle=community_handle;this.user_handle=user_handle;button.addEvent('click',this.go.bindWithEvent(this));},go:function(e){if(e.target.hasClass('ban')){if(!this.confirm){this.confirm=new Confirm('Are you sure you want to ban <strong>'+users[this.user_handle].name+'</strong> from the <strong>'+community.name+'</strong> channel?','Ban','Cancel',{onOk:this.changeState.bind(this,'ban')});}
this.confirm.show();}},changeState:function(action){this.waiting=true;new Request.DEQQ({url:'/community/'+this.community_handle+'/user/'+this.user_handle,onSuccess:this.success.bind(this)}).POST({action:action});$$('ul.mod-'+this.user_handle+' li.user-state').toggleClass('banned');},success:function(response){notifications.add(response.message);}});DeleteMessageUtil=new Class({initialize:function(button,el,community_handle,message_id){this.el=el;this.community_handle=community_handle;this.message_id=message_id;button.addEvent('click',this.go.bindWithEvent(this));},go:function(e){if(this.el.hasClass('enabled')){if(!this.confirm){this.confirm=new Confirm('Are you sure you want to delete this message?','Delete','Cancel',{onOk:this.changeState.bind(this,['hide']),okdefault:true});}
test=this.confirm.show();}},changeState:function(action){new Request.DEQQ({url:'/community/'+this.community_handle+'/message/'+this.message_id,onSuccess:this.success.bind(this)}).POST({action:action});if(action=='hide'){this.el.removeClass('enabled').addClass('disabled');}},success:function(response){notifications.add(response.message);client.remove([{id:this.message_id}]);}});