/***************************************************************************
/*
/* Flickriver - "River of photos" Flickr browser
/* 
/* Written by Alex Sirota (alex@iosart.com), May 2007
/*
/* Copyright Alex Sirota 2007, all rights reserved
/*
/* Please ask for permission before using this code.
/*
/***************************************************************************/

if(typeof Flickriver=='undefined'){var Flickriver={};}
var gAllLoadedFlickrIds={};function fetchNewPage(){gPageLoaded++;if(gPageLoaded>gTotalPages){var footerElem=$('footer');if(footerElem&&!Element.visible(footerElem)){Element.show(footerElem);}
var bigProgressElem=$('big-progress');if(bigProgressElem&&Element.visible(bigProgressElem)){Element.hide(bigProgressElem);}
return;}
var progressPercentage=Math.round((gPageLoaded/gTotalPages)*100)+'%';var nPhotosLoaded=gPageLoaded*gPhotosPerPage;var nTotalPhotos=gTotalPages*gPhotosPerPage;$('progress-text').innerHTML='loaded '+nPhotosLoaded+' / '+nTotalPhotos+' - '+progressPercentage;;var sep=gMyURL.match(/\?/)?'&':'?';var url=gMyURL;url=url.replace(/#.*/,'');url+=sep+'ajax&page='+gPageLoaded;gbInAjaxCall=true;Element.show('progress-indicator');new Ajax.Request(url,{method:'get',onSuccess:function(transport){var response=transport.responseText;var newPageDiv=document.createElement('div');newPageDiv.className='photos-page';newPageDiv.innerHTML=response;$('photos').appendChild(newPageDiv);var newPhotos=document.getElementsByClassName('photo-panel',newPageDiv);for(var i=0;i<newPhotos.length;i++){var photoPanel=newPhotos[i];var isDuplicatePhoto=false;var imageElem=document.getElementsByClassName('photo-panel-img',photoPanel);if(imageElem.length>0){imageElem=imageElem[0];var flickrImageId=imageElem.id.replace(/photo-/,'')*1;if(flickrImageId){if(typeof gAllLoadedFlickrIds[flickrImageId]!='undefined'){isDuplicatePhoto=true;}else{gAllLoadedFlickrIds[flickrImageId]=1;}}}
if(!isDuplicatePhoto){gLastImage++;photoPanel.id='photo-panel-'+gLastImage;}else{Element.hide(photoPanel);}}},onFailure:function(){gTotalPages=gPageLoaded;var newPageDiv=document.createElement('div');newPageDiv.innerHTML="<p>Couldn't fetch more photos...";$('photos').appendChild(newPageDiv);},onComplete:function(){gbInAjaxCall=false;Element.hide('progress-indicator');var pathname=document.location.pathname;if(pathname.substr(pathname.length-1,1)!='/')pathname+='/';var urlToTrack='/ajax'+pathname+'page/'+gPageLoaded;setTimeout(function(){trackPageView(urlToTrack)},100);}});}
function trackPageView(url){if(typeof pageTracker!='undefined'){pageTracker._trackPageview(url);}}
function getLoadingHTML(text){if(typeof text=='undefined')text='Loading...';var loadingHTML='<span class="vertical-align">';loadingHTML+='<img src="'+gMyRoot+'/images/progress.gif" width="16" height="9" alt="">';loadingHTML+='&nbsp;<span>'+text+'</span>';loadingHTML+='</span>';return loadingHTML;}
var gbTagsLoaded=false;function toggleUserTagPanel(){var panelElem=$('user-tags');Element.toggle(panelElem);if(!Element.visible(panelElem))return;if(gbTagsLoaded)return;panelElem.innerHTML=getLoadingHTML();var url=gUserFlickriverGetTagsURL;new Ajax.Request(url,{method:'get',onSuccess:function(transport){var response=transport.responseText;panelElem.innerHTML=response;gbTagsLoaded=true;},onFailure:function(){panelElem.innerHTML="Couldn't get tags...";},onComplete:function(){}});}
function getCurrentScrollPos(){return document.documentElement.scrollTop?document.documentElement.scrollTop:document.body.scrollTop;}
function getWindowHeight(){var windowHeight=window.innerHeight?window.innerHeight:document.documentElement.clientHeight;return windowHeight;}
function getRemainingScroll(){var windowHeight=getWindowHeight();if(windowHeight==0)return-1;var docHeight=document.documentElement.scrollHeight;if(docHeight==0)return-1;var maxScrollHeight=docHeight-windowHeight;var currentScrollPos=getCurrentScrollPos();var percentage=(currentScrollPos/maxScrollHeight)*100;var remainingScroll=maxScrollHeight-currentScrollPos;return remainingScroll;}
function getCurrentPhotoIndex(){var currentScrollPos=getCurrentScrollPos();var images=document.getElementsByClassName('photo-panel',$('photos'));for(var i=0;i<images.length;i++){var imagePanel=images[i];if(imagePanel.offsetTop+40>=currentScrollPos){var id=imagePanel.getAttribute('id');var currentImage=id?id.replace(/photo-panel-/,'')*1.0:1;if(currentImage!=gCurrentImage){setCurrentPhotoClass(false);gCurrentImage=currentImage;setCurrentPhotoClass(true);}
break;}}}
function checkScrollPosition(){if(gbLoaded&&!gbInAjaxCall){var remainingScroll=getRemainingScroll();if(remainingScroll==-1){return;}
var thresh=gbViewLargeImages?3000:(gbKeyboardMode?1400:(gbIsEmbedded?400:600));if(remainingScroll<thresh){fetchNewPage();}}}
var gLastScrollTimeout=0;var gbProgrammaticScroll=false;function onScroll(){if(gbProgrammaticScroll){gbProgrammaticScroll=false;return;}else{setKeyboardMode(false);}
checkScrollPosition();clearTimeout(gLastScrollTimeout);gLastScrollTimeout=setTimeout(getCurrentPhotoIndex,500);}
function onResize(){if(gbKeyboardMode){var currentPhotoPanel=$('photo-panel-'+gCurrentImage);if(!currentPhotoPanel)return;positionPhotoPanel(currentPhotoPanel);}}
function handleEntry(event,fieldType){if(!event)event=window.event;if(!event)return;var target=typeof(event.srcElement)!='undefined'?event.srcElement:event.target;if(!target)return;if((event.which&&(event.which==13))||(event.keyCode&&(event.keyCode==13))){var val=target.value;val=encodeURIComponent(val);val=val.replace(/%20/g,'+');var url=null;switch(fieldType){case'tag':url=gUserFlickriverTagsURL+val+"/";break;}
if(url)document.location.href=url;}}
function togglePanel(id,show){if(typeof show=='undefined'){Element.toggle(id);return;}
if(show){Element.show(id);}else{Element.hide(id);}}
function toggleLinkPanel(show){togglePanel('tools',false);var imageIds=['link-tiny-button-img','link-medium-button-img','link-badge-img'];for(var i=0;i<imageIds.length;i++){var imgElem=$(imageIds[i]);if(imgElem){imgElem.src=imgElem.getAttribute('templatesrc');}}
togglePanel('link-panel',show);}
function toggleToolsPanel(show){togglePanel('link-panel',false);var imageIds=['add-to-igoogle-button','add-to-netvibes-button'];for(var i=0;i<imageIds.length;i++){var imgElem=$(imageIds[i]);if(imgElem){imgElem.src=imgElem.getAttribute('templatesrc');}}
togglePanel('tools',show);}
function onPageLoaded(){if(gbLoaded)return;gbLoaded=true;setInterval(checkScrollPosition,1000);setInterval(getCurrentPhotoIndex,4000);}
function setCurrentPhotoClass(bSet){var photoPanel=$('photo-panel-'+gCurrentImage);if(!photoPanel)return;if(bSet){Element.addClassName(photoPanel,'current-photo');}else{Element.removeClassName(photoPanel,'current-photo');}}
function positionPhotoPanel(photoPanel){var windowHeight=getWindowHeight();if(!windowHeight)return;var photoPanelPos=Position.cumulativeOffset(photoPanel);var suggestedOffset=(windowHeight-photoPanel.offsetHeight)/3;if(suggestedOffset>0){photoPanelPos[1]-=suggestedOffset;}
gbProgrammaticScroll=true;window.scrollTo(photoPanelPos[0],photoPanelPos[1]);checkScrollPosition();}
function navigatePhotos(step){setCurrentPhotoClass(true);var newImageIndex=gCurrentImage+step;if(newImageIndex<1)return;var photoPanel=$('photo-panel-'+newImageIndex);if(!photoPanel)return;setCurrentPhotoClass(false);gCurrentImage=newImageIndex;setCurrentPhotoClass(true);positionPhotoPanel(photoPanel);}
function openCurrentPhotoOriginalPage(){var photoPanel=$('photo-panel-'+gCurrentImage);if(!photoPanel)return;var link=photoPanel.getElementsByTagName('a')[0];if(!window.open(link.href)){alert('A popup blocker might be preventing Flickriver from opening this photo page.\nPlease configure your popup blocker to allow Flickriver to open new windows.');}}
var gbKeyboardMode=false;function setKeyboardMode(bIsInKeyboardMode){gbKeyboardMode=bIsInKeyboardMode;var bodyElem=document.getElementsByTagName('body');if(!bodyElem||(!bodyElem.length))return;bodyElem=bodyElem[0];if(gbKeyboardMode){Element.addClassName(bodyElem,'keyboard-mode');}else{Element.removeClassName(bodyElem,'keyboard-mode');}}
function onMouseMove(){}
function onMouseScroll(){setKeyboardMode(false);}
function onKeyPress(event){if(!event)event=window.event;if(!event)return;var target=typeof(event.srcElement)!='undefined'?event.srcElement:event.target;if(!target)return;if(target.tagName.toLowerCase()=='input')return;var keyCode=event.which?event.which:event.keyCode;var chr=String.fromCharCode(keyCode);if((chr=='j')||(chr==' ')){setKeyboardMode(true);navigatePhotos(1);Event.stop(event);}else if((chr=='k')||(keyCode==8)){setKeyboardMode(true);navigatePhotos(-1);Event.stop(event);}else if(chr=='v'){openCurrentPhotoOriginalPage();Event.stop(event);}else if(keyCode==27){setKeyboardMode(false);Event.stop(event);}}
function onEntryboxExpand(elem){Element.addClassName(elem,'focused');}
function onEntryboxCollapse(elem){Element.removeClassName(elem,'focused');}
function protectImage(imageId){var imageElem=$(imageId);var protectorElem=$('protect-'+imageId);if(!imageElem||!protectorElem)return;var protectorWidth=imageElem.width+4;var protectorHeight=imageElem.height+4;var protectorOffsetX=-imageElem.height-4;var protectorOffsetY=-imageElem.width-4;protectorElem.style.height=protectorHeight+'px';protectorElem.style.width=protectorWidth+'px';protectorElem.style.marginTop=protectorOffsetX+'px';protectorElem.style.marginLeft=protectorOffsetY+'px';}
function showDateChooser(){var dateChooserElem=$('date-chooser');var dateChooserLinkElem=$('date-chooser-link');if(!Element.visible(dateChooserElem)){Element.show(dateChooserElem);}else{return;}
var pos=Position.cumulativeOffset(dateChooserLinkElem);var height=Element.getHeight(dateChooserLinkElem);var top=pos[1]+height+4;dateChooserElem.style.left=pos[0]+'px';dateChooserElem.style.top=top+'px';var firstTime=true;var hideDateChooserFunc=function(e){if(firstTime){firstTime=false;return;}
var target=Event.element(e);if(target.descendantOf(dateChooserElem))return;Element.hide(dateChooserElem);Event.stopObserving(document,'click',hideDateChooserFunc);}
Event.observe(document,'click',hideDateChooserFunc);}
function dateChooserGo(){var year=$('date-chooser-year');var month=$('date-chooser-month');var day=$('date-chooser-day');if(!year||!month||!day)return;year=year.value;month=month.value;day=day.value;var dateObj=new Date(year,month-1,day);var dateYear=dateObj.getFullYear();var dateMonth=dateObj.getMonth()+1;var dateDay=dateObj.getDate();if((dateYear!=year)||(dateMonth!=month)||(dateDay!=day)){alert('This date does not exist');return;}
if(month.length==1)month='0'+month;if(day.length==1)day='0'+day;var url=gMyRoot+'/explore/interesting/'+year+'/'+month+'/'+day+'/';document.location=url;}
Flickriver.Search=function(){this._searchHintText={'photos':"Search for photos",'groups':"Search for groups",'users':"Search for a user by username",'tags':"Search by photo tags",'places':"Search for places in the world"};this._currentSearchType='photos';this._placesSearchCurrentQuery='';}
Flickriver.Search.prototype={getSeatchBoxElem:function(){return $('search-box');},getSearchResultsPanelElem:function(){return $('search-results-panel');},getCurrentHintText:function(){return(typeof this._searchHintText[this._currentSearchType]!='undefined')?this._searchHintText[this._currentSearchType]:'';},onSearchBoxFocus:function(elem){if(elem.value==this.getCurrentHintText()){elem.value='';Element.addClassName(elem,'hastext');}},onSearchBoxBlur:function(elem){this.setSearchboxHintState();},onSearchBoxKeydown:function(event){if(!event)event=window.event;if(!event)return;if((event.which&&(event.which==13))||(event.keyCode&&(event.keyCode==13))){this.doSearch();}},setSearchboxHintState:function(){var elem=this.getSeatchBoxElem();if(!elem)return;if((elem.value=='')||(elem.value==this.getCurrentHintText())){Element.removeClassName(elem,'hastext');elem.value=this.getCurrentHintText();}else{Element.addClassName(elem,'hastext');}},setSearchTabState:function(tabname,isCurrent){var searchPanelElem=$('search-panel');if(!searchPanelElem)return;var tabElem=document.getElementsByClassName('tab-search-'+tabname,searchPanelElem);if(tabElem.length!=1)return;if(!isCurrent){Element.removeClassName(tabElem[0],'current');}else{Element.addClassName(tabElem[0],'current');}},setSearchboxText:function(text){var elem=this.getSeatchBoxElem();if(!elem)return;elem.value=text;this.setSearchboxHintState();},changeSearchType:function(newType){var elem=this.getSeatchBoxElem();if(!elem)return;if(elem.value==this.getCurrentHintText())elem.value='';this.setSearchTabState(this._currentSearchType,false);this._currentSearchType=newType;this.setSearchTabState(this._currentSearchType,true);this.setSearchboxHintState();},showSearchResultsPanel:function(){var seatchBoxElem=this.getSeatchBoxElem();var searchResultsElem=this.getSearchResultsPanelElem();if(!seatchBoxElem||!searchResultsElem)return;var pos=Position.cumulativeOffset(seatchBoxElem);var height=Element.getHeight(seatchBoxElem);var width=Element.getWidth(seatchBoxElem);var top=pos[1]+height+4;searchResultsElem.style.left=pos[0]+'px';searchResultsElem.style.top=top+'px';Element.show(searchResultsElem);},hideSearchResultsPanel:function(){Element.hide(this.getSearchResultsPanelElem());},startPlacesSearch:function(query){this._placesSearchCurrentQuery=query;var searchResultsContentsElem=$('search-results-contents');this.showSearchResultsPanel();searchResultsContentsElem.innerHTML=getLoadingHTML('Searching...');var urlPath='/search-places/'+query+'/';var url=gMyRoot+urlPath;var me=this;new Ajax.Request(url,{method:'get',onSuccess:function(transport){if(me._placesSearchCurrentQuery==query){var response=transport.responseText;searchResultsContentsElem.innerHTML=response;}},onFailure:function(){if(me._placesSearchCurrentQuery==query){searchResultsContentsElem.innerHTML="Couldn't get places...";}},onComplete:function(){if(me._placesSearchCurrentQuery==query){setTimeout(function(){trackPageView(urlPath)},100);}}});},doSearch:function(){var seatchBoxElem=this.getSeatchBoxElem();if((seatchBoxElem.value=='')||(seatchBoxElem.value==this.getCurrentHintText()))return;var val=seatchBoxElem.value;var re1=new RegExp('http:\/\/(www.)?flickr.com\/groups\/([^/]+)\/?');var re2=new RegExp('http:\/\/(www.)?flickr.com\/photos\/([^/]+)\/?');var re3=new RegExp('http:\/\/(www.)?flickr.com\/people\/([^/]+)\/?');if(re1.test(val)||re2.test(val)||re3.test(val)){val=RegExp.$2;}
val=encodeURIComponent(val);val=val.replace(/%20/g,'+');var url=null;switch(this._currentSearchType){case'tags':url=gMyRoot+"/photos/tags/"+val+'/interesting/';break;case'photos':url=gMyRoot+"/search/"+val+"/";break;case'users':url=gMyRoot+"/search-username/"+val+"/";break;case'groups':url=gMyRoot+"/search-groups/"+val+"/";break;case'places':this.startPlacesSearch(val);return;break;}
if(url)document.location.href=url;}}