var appTitle='Discussr';var dividerSize=9;var headingSize=25;var marginSize=2;var spacing=5;var infoPaneHeight=65;var blockElement=document.getElementById('block');var authElement=document.getElementById('auth');var pageElement=document.getElementById('page');var leftColElement=document.getElementById('leftCol');var groupsPaneElement=document.getElementById('groupsPane');var groupsElement=document.getElementById('groups');var hDivider1Element=document.getElementById('hDivider1');var topicsPaneElement=document.getElementById('topicsPane');var topicsElement=document.getElementById('topics');var hDivider2Element=document.getElementById('hDivider2');var infoPaneElement=document.getElementById('infoPane');var reloadButtonElement=document.getElementById('reloadButton');var openFindButtonElement=document.getElementById('openFindButton');var catchupButtonElement=document.getElementById('catchupButton');var unsubscribeButtonElement=document.getElementById('unsubscribeButton');var vDividerElement=document.getElementById('vDivider');var commentsPaneElement=document.getElementById('commentsPane');var commentsElement=document.getElementById('comments');var findDialogElement=document.getElementById('findDialog');var findStrElement=document.getElementById('findStr');var findResultsElement=document.getElementById('findResults');var subscribeButtonElement=document.getElementById('subscribeButton');var geometry;var hashGroup,hashGroupSaved,hashTopic,hashComment;var currentGroups;var groupsSelectElement;var findGroups;var findSelectElement;var currentTopics;var topicsSelectElement;var iframeElement;var numNewTopics;function Setup()
{acme.Initialize();acme.flickr.Initialize('Discussr');NonIdle();var width=250;var height=200;geometry=width+'+'+height;GetVars();var geometryParts=geometry.split('x');if(IsNumeric(geometryParts[0]))
width=+geometryParts[0];if(IsNumeric(geometryParts[1]))
height=+geometryParts[1];SetLeftColWidth(width);SetGroupsPaneHeight(height);MakeDraggableEW(vDividerElement,VDividerCallback);MakeDraggableNS(hDivider1Element,HDivider1Callback);window.onresize=ResizeCallback;Disable(openFindButtonElement);Disable(catchupButtonElement);Disable(unsubscribeButtonElement);SaveHash();try
{Show(blockElement);Show(authElement);acme.flickr.Auth(authElement,acme.flickr.authPermIdNone,AuthCallback);}
catch(e)
{Log('acme.flickr.Auth: '+e);}}
function SaveHash()
{var hash=location.hash;if(hash.charAt(0)=='#')
hash=hash.substr(1);var hashParts=hash.split('.');if(hashParts.length>=1&&hashParts[0]!='')
{hashGroup=hashParts[0];if(hashParts.length>=2&&hashParts[1]!='')
{hashTopic=hashParts[1];if(hashParts.length>=3&&hashParts[2]!='')
hashComment=hashParts[2];else
hashComment=null;}
else
hashTopic=hashComment=null;}
else
hashGroup=hashTopic=hashComment=null;}
function AuthCallback(token)
{if(token)
{Hide(blockElement);Hide(authElement);GroupsFetch();}}
function GroupsFetch()
{ClearGroups();ClearTopics();ClearComments();groupsElement.innerHTML='
Fetching groups....
';currentGroups=null;HttpGet('api.cgi?method=get_groups&user_id='+encodeURIComponent(acme.flickr.AuthGetNsid())+'&auth_token='+encodeURIComponent(acme.flickr.AuthGetToken()),GroupsOkCallback,GroupsFailCallback);SetHash(null,null,null);}
function GroupsOkCallback(request)
{var topNode=request.responseXML.documentElement;if(!RspOk(topNode))
{groupsElement.innerHTML='
'+RspMessage(topNode)+'';return;}
var groupsNode=FindChildNamed(topNode,'groups');if(!groupsNode)
{Log('groups node not found');return;}
currentGroups=ParseGroups(groupsNode);if(currentGroups.length==0)
{groupsElement.innerHTML='
No groups added yet.';groupsSelectElement=null;}
else
InitGroupsSelectElement();CheckGroupsNew();Enable(openFindButtonElement);if(hashGroup)
{for(var i in groupsSelectElement.options)
if(groupsSelectElement.options[i].group.id==hashGroup)
{FSSetSelectedIndex(groupsSelectElement,i);break;}
OpenGroup(hashGroup);hashGroupSaved=hashGroup;hashGroup=null;}}
function GroupsFailCallback(request)
{Log('get_groups.cgi failed - '+request.status+' '+request.statusText);}
function CheckGroupsNew()
{var gotNewGroups=false;for(var i in currentGroups)
if(currentGroups[i].isNew)
gotNewGroups=true;if(gotNewGroups)
document.title=appTitle+' NEW';else
document.title=appTitle;}
function GroupsSelectChanged()
{NonIdle();ClearTopics();ClearComments();topicsElement.innerHTML='
Fetching topics....
';currentTopics=null;var group=groupsSelectElement.options[groupsSelectElement.selectedIndex].group;OpenGroup(group.id);}
function OpenGroup(groupId)
{HttpGet('api.cgi?method=get_topics&user_id='+encodeURIComponent(acme.flickr.AuthGetNsid())+'&auth_token='+encodeURIComponent(acme.flickr.AuthGetToken())+'&group_id='+encodeURIComponent(groupId),TopicsOkCallback,TopicsFailCallback);SetHash(groupId,null,null);}
function TopicsOkCallback(request)
{var topNode=request.responseXML.documentElement;if(!RspOk(topNode))
{topicsElement.innerHTML='
'+RspMessage(topNode)+'';return;}
var topicsNode=FindChildNamed(topNode,'topics');if(!topicsNode)
{Log('topics node not found');return;}
var groupId=topicsNode.getAttribute('groupid');currentTopics=ParseTopics(topicsNode);if(currentTopics.length==0)
{topicsElement.innerHTML='
No topics found.';topicsSelectElement=null;}
else
InitTopicsSelectElement(groupId);Enable(unsubscribeButtonElement);if(hashTopic)
{for(var i in topicsSelectElement.options)
if(topicsSelectElement.options[i].topic.id==hashTopic)
{FSSetSelectedIndex(topicsSelectElement,i);break;}
OpenTopic(hashGroupSaved,hashTopic,hashComment);hashGroupSaved=hashTopic=hashComment=null;}}
function TopicsFailCallback(request)
{Log('get_topics.cgi failed - '+request.status+' '+request.statusText);}
function Reload()
{NonIdle();SaveHash();GroupsFetch();}
function OpenFindDialog()
{NonIdle();ClearElement(findResultsElement);findSelectElement=null;Show(findDialogElement);Disable(subscribeButtonElement);findStrElement.focus();}
function CloseFindDialog()
{NonIdle();Hide(findDialogElement);ClearElement(findResultsElement);findSelectElement=null;}
function Find()
{NonIdle();var findStr=findStrElement.value;ClearElement(findResultsElement);findResultsElement.innerHTML='
Searching....
';findGroups=null;HttpGet('api.cgi?method=groups_search_info&user_id='+encodeURIComponent(acme.flickr.AuthGetNsid())+'&auth_token='+encodeURIComponent(acme.flickr.AuthGetToken())+'&text='+encodeURIComponent(findStr),FindOkCallback,FindFailCallback);}
function FindOkCallback(request)
{var topNode=request.responseXML.documentElement;ClearElement(findResultsElement);if(!RspOk(topNode))
{findResultsElement.innerHTML='
'+RspMessage(topNode)+'';return;}
var groupsNode=FindChildNamed(topNode,'groups');if(!groupsNode.nodeName)
{Log('groups node not found');return;}
findGroups=ParseGroups(groupsNode);if(findGroups.length==0)
findResultsElement.innerHTML='
No matching groups found.';else
{findSelectElement=MakeGroupsSelect(findResultsElement,findGroups);if(currentGroups!=null)
for(var i in findGroups)
for(var j in currentGroups)
if(findGroups[i].id==currentGroups[j].id)
{Disable(findGroups[i].optionElement);break;}
findSelectElement.onchange=FindSelectChanged;}}
function FindFailCallback(request)
{Log('groups_search_info.cgi failed - '+request.status+' '+request.statusText);}
function FindSelectChanged()
{NonIdle();Enable(subscribeButtonElement);}
function Subscribe()
{NonIdle();var option=findSelectElement.options[findSelectElement.selectedIndex];FSSetSelectedIndex(findSelectElement,-1);Disable(option);HttpGet('api.cgi?method=subscribe&user_id='+encodeURIComponent(acme.flickr.AuthGetNsid())+'&auth_token='+encodeURIComponent(acme.flickr.AuthGetToken())+'&group_id='+encodeURIComponent(option.group.id),SubscribeOkCallback,SubscribeFailCallback);}
function SubscribeOkCallback(request)
{var topNode=request.responseXML.documentElement;if(!RspOk(topNode))
{alert(RspMessage(topNode));return;}
var subscribedNode=FindChildNamed(topNode,'subscribed');if(!subscribedNode)
{Log('subscribed node not found');return;}
var groupNode=FindChildNamed(subscribedNode,'group');if(!groupNode)
{Log('group node not found');return;}
if(!groupsSelectElement)
InitGroupsSelectElement();var group=ParseGroup(groupNode);currentGroups.push(group);MakeGroupOption(groupsSelectElement,group);if(group.optionElement!=groupsSelectElement.options[0])
{groupsSelectElement.removeChild(group.optionElement);groupsSelectElement.insertBefore(group.optionElement,groupsSelectElement.options[0]);}
groupsSelectElement.scrollTop=0;CheckGroupsNew();if(findGroups!=null)
for(var i in findGroups)
if(findGroups[i].id==group.id)
Disable(findGroups[i].optionElement);FSSetSelectedIndex(findSelectElement,-1);Disable(subscribeButtonElement);}
function SubscribeFailCallback(request)
{Log('subscribe.cgi failed - '+request.status+' '+request.statusText);}
function Unsubscribe()
{NonIdle();if(!confirm('Unsubscribe from this group on Discussr?'))
return;ClearTopics();ClearComments();var i=groupsSelectElement.selectedIndex;FSSetSelectedIndex(groupsSelectElement,-1);var group=groupsSelectElement.options[i].group;DestroyElement(groupsSelectElement.options[i]);for(var j in currentGroups)
if(currentGroups[j]==group)
{currentGroups.splice(j,1);break;}
HttpGet('api.cgi?method=unsubscribe&user_id='+encodeURIComponent(acme.flickr.AuthGetNsid())+'&auth_token='+encodeURIComponent(acme.flickr.AuthGetToken())+'&group_id='+encodeURIComponent(group.id),UnsubscribeOkCallback,UnsubscribeFailCallback);SetHash(null,null,null);}
function UnsubscribeOkCallback(request)
{}
function UnsubscribeFailCallback(request)
{Log('unsubscribe.cgi failed - '+request.status+' '+request.statusText);}
function CatchUp()
{NonIdle();var group=groupsSelectElement.options[groupsSelectElement.selectedIndex].group;HttpGet('api.cgi?method=mark_red_all&user_id='+encodeURIComponent(acme.flickr.AuthGetNsid())+'&auth_token='+encodeURIComponent(acme.flickr.AuthGetToken())+'&group_id='+encodeURIComponent(group.id),MarkAllOkCallback,MarkAllFailCallback);for(var i in currentTopics)
MarkRed(currentTopics[i],group);}
function MarkAllOkCallback(request)
{}
function MarkAllFailCallback(request)
{Log('mark_red_all.cgi failed - '+request.status+' '+request.statusText);}
function ClearGroups()
{ClearElement(groupsElement);}
function ClearTopics()
{ClearElement(topicsElement);Disable(catchupButtonElement);Disable(unsubscribeButtonElement);}
function ClearComments()
{ClearElement(commentsElement);iframeElement=null;}
function ParseGroups(groupsNode)
{var groups=[];var groupNode=groupsNode.firstChild;while(groupNode)
{if(groupNode.nodeName=='group')
groups.push(ParseGroup(groupNode));groupNode=groupNode.nextSibling;}
return groups;}
function ParseGroup(groupNode)
{var group={};group.id=groupNode.getAttribute('id');group.name=groupNode.getAttribute('name');group.iconFarm=groupNode.getAttribute('iconfarm');group.iconServer=groupNode.getAttribute('iconserver');group.isPoolModerated=groupNode.getAttribute('ispoolmoderated');group.members=groupNode.getAttribute('members');group.privacy=groupNode.getAttribute('privacy');group.updated=+groupNode.getAttribute('updated');group.isNew=groupNode.getAttribute('new')=='yes';return group;}
function InitGroupsSelectElement()
{ClearElement(groupsElement);currentGroups.sort(SortbyReverseUpdated);groupsSelectElement=MakeGroupsSelect(groupsElement,currentGroups);groupsSelectElement.onchange=GroupsSelectChanged;}
function MakeGroupsSelect(parentElement,groups)
{var selectElement=FSAppend(parentElement,{style:{width:'100%',height:'100%'}});for(var i in groups)
MakeGroupOption(selectElement,groups[i]);return selectElement;}
function MakeGroupOption(selectElement,group)
{var iconUrl;if(group.iconFarm==0&&group.iconServer==0)
iconUrl='http://l.yimg.com/g/images/buddyicon.jpg';else
iconUrl='http://farm'+group.iconFarm+'.static.flickr.com/'+group.iconServer+'/buddyicons/'+group.id+'.jpg';group.optionElement=FSAppendOption(selectElement,{group:group});group.newElement=AppendElement(group.optionElement,'img',{src:'images/new.gif',className:'new'});if(!group.isNew)
Hide(group.newElement);AppendElement(group.optionElement,'img',{src:iconUrl,width:16,height:16,style:{verticalAlign:'middle',paddingLeft:'1px',paddingRight:'1px'}});AppendText(group.optionElement,group.name);}
function ParseTopics(topicsNode)
{var topics=[];var topicNode=topicsNode.firstChild;while(topicNode)
{if(topicNode.nodeName=='topic')
topics.push(ParseTopic(topicNode));topicNode=topicNode.nextSibling;}
return topics;}
function ParseTopic(topicNode)
{var topic={};topic.id=topicNode.getAttribute('id');topic.title=topicNode.getAttribute('title');topic.updated=+topicNode.getAttribute('updated');topic.redComment=topicNode.getAttribute('redcomment');topic.lastComment=topicNode.getAttribute('lastcomment');return topic;}
function InitTopicsSelectElement(groupId)
{var group=null;for(var i in currentGroups)
if(currentGroups[i].id==groupId)
{group=currentGroups[i];break;}
var gotNewTopics=false;for(var i in currentTopics)
if(currentTopics[i].redComment!=currentTopics[i].lastComment)
{currentTopics[i].isNew=true;gotNewTopics=true;}
else
currentTopics[i].isNew=false;if(gotNewTopics&&group!=null)
{group.isNew=true;Show(group.newElement);CheckGroupsNew();}
ClearElement(topicsElement);topicsSelectElement=FSAppend(topicsElement,{style:{width:'100%',height:'100%'}});numNewTopics=0;currentTopics.sort(SortbyReverseUpdated);for(var i in currentTopics)
{currentTopics[i].optionElement=FSAppendOption(topicsSelectElement,{topic:currentTopics[i]});currentTopics[i].newElement=AppendElement(currentTopics[i].optionElement,'img',{src:'images/new.gif',className:'new'});if(currentTopics[i].isNew)
++numNewTopics;else
Hide(currentTopics[i].newElement);AppendText(currentTopics[i].optionElement,currentTopics[i].title);}
topicsSelectElement.onchange=TopicsSelectChanged;if(numNewTopics>0)
Enable(catchupButtonElement);}
function SortbyReverseUpdated(a,b)
{return b.updated-a.updated;}
function TopicsSelectChanged()
{NonIdle();ClearComments();var group=groupsSelectElement.options[groupsSelectElement.selectedIndex].group;var topic=topicsSelectElement.options[topicsSelectElement.selectedIndex].topic;OpenTopic(group.id,topic.id,topic.redComment);HttpGet('api.cgi?method=mark_red&user_id='+encodeURIComponent(acme.flickr.AuthGetNsid())+'&auth_token='+encodeURIComponent(acme.flickr.AuthGetToken())+'&topic_id='+encodeURIComponent(topic.id)+'&red_comment='+encodeURIComponent(topic.lastComment),MarkOkCallback,MarkFailCallback);MarkRed(topic,group);}
function OpenTopic(groupId,topicId,commentId)
{var url='http://www.flickr.com/groups/'+groupId+'/discuss/'+topicId+'/';if(commentId!=null&&commentId!=''&&commentId!=0)
{url+=commentId+'/';SetHash(groupId,topicId,commentId);}
else
SetHash(groupId,topicId,null);iframeElement=AppendElement(commentsElement,'iframe',{src:url,style:{overflow:'auto'}});SetIframeSize();}
var checkIframeCount;var checkIframeLimit=10;var checkIframeMsec=5000;var checkIframeTimer=null;function CheckIframe()
{var iframeDoc=iframeElement.contentDocument;if(!iframeDoc)
iframeDoc=iframeElement.contentWindow.document;if(!iframeDoc)
iframeDoc=iframeElement.document;if(!iframeDoc)
{++checkIframeCount;if(checkIframeCount160&&width100&&height