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....atom
';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....atom
';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....atom
';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