// global flags var ThumbW=180*1.0,ThumbH=120*1.0; var DateStamp=0,SessionID=0; var ThumbnailsDiv,PreviewDiv,StatusDiv; var DisplayOrder="Recent Last"; var ScrollToThumb=false; var TaggedFilesOnly; var CachedNextImage,CachedPreviousImage; var PreviewTabs; var Prefs,RemoteEditPrefs,RemoteEditTransmissionProfile,Caption; var Application="IRES"; var FileNames=[],FileInfo=[],FileFlags=[],CachedThumbs=[],NumFileNames=0; var PlayImage=new Image(); var SelectedFiles=[]; var HideUser=[]; var CaptionUser,CaptionFile; var Captions=[]; var IPTCDialog; var OptionsDialog; var ThumbColourNormal=[]; var ThumbColourSelected=[];//'#A2B6D8'; var ThumbColourHover=[];//'#C0D7FF'; var StarImagePath="url(../images/Star.png)"; var NoStarImagePath="url(../images/NoStar.png)"; var ModifiedRatings=[]; var ModifiedRatingsTime=0; var NG_ISREADONLY=8; var NG_HASTHUMBNAIL=16; var NG_HASAUDIO=32; var NG_RATINGBIT1=128; var NG_RATINGBIT2=256; var NG_RATINGBIT3=512; function initRemoteEdit() { PlayImage.src='../images/Play.png'; } function IRESFile(UserName,Path) { this.User=UserName; this.Path=Path; } function Caption(User,Path,XML) { this.User=User; this.XML=XML; this.Path=Path; this.Save=saveCaption; } function editCaption(User,File) { CaptionUser=User; CaptionImagePath=File; if(Captions[User]) { updateElementsFromXML(Captions[User].XML); } if(File) { var URL="../Live/" + User + "?User=" + User + "&GroupPassword=" + GroupPassword + "&Command=GetCaption&FileName="+escape(File); AjaxRequest.get({ 'url': URL, 'onSuccess': function(req){updateElementsFromXML(req.responseXML);IPTCDialog.show();}, 'onError': function(req){updateElementsFromXML(Captions[CaptionUser].XML);IPTCDialog.show();} }); } else { IPTCDialog.show(); } } function updateCaption(User,Path,XML) { Captions[User]=new Caption(User,Path,XML); } function saveCaption(CaptionImagePath) { var TempXML; // If caption belongs to an image, make a copy of the generic caption to avoid changing it if(CaptionImagePath) TempXML=this.XML.cloneNode(true); else TempXML=this.XML; updateXMLFromElements(TempXML); var str=new XMLSerializer().serializeToString(TempXML); var URL="../Live/" + User + "?User=" + this.User + "&GroupPassword=" + GroupPassword + "&Command=SetCaption&FileName=" + (CaptionImagePath ? escape(CaptionImagePath) : escape(this.Path)) + "&XML=" + escape(str); AjaxRequest.get({'url': URL}); TempXML=0; } function SetStarSelected(Div,Num) { var Count=0,Child; Child=Div.firstChild; while(Child) { Child.style.backgroundImage=NoStarImagePath; if(Num) if(Count1) Zoom=1; if(Image.IRESHeight*Zoom>MaxHeight) Zoom=MaxHeight/Image.IRESHeight; } NewWidth=Image.IRESWidth*Zoom; OldCenterX=(ImageDiv.scrollLeft+MaxWidth/2)/OldZoom; OldCenterY=(ImageDiv.scrollTop+MaxHeight/2)/OldZoom; Image.style.width=parseInt(NewWidth)+"px"; ImageDiv.scrollLeft=OldCenterX*Zoom-(MaxWidth/2); ImageDiv.scrollTop=OldCenterY*Zoom-(MaxHeight/2); } function IncImageZoom(ImageName) { var Zoom; Zoom=GetImageZoom(ImageName); Zoom*=1.25; SetImageZoom(ImageName,Zoom); } function DecImageZoom(ImageName) { var Zoom; Zoom=GetImageZoom(ImageName); Zoom*=0.75; SetImageZoom(ImageName,Zoom); } function GetAdjacentImage(User,Path,Direction) { var Index; Index=getFileIndexFromFileName(User,Path); if(Direction=="Next") Index++; else Index--; if(Index>=0 && IndexX'); YAHOO.util.Event.on(Tab.getElementsByClassName('TabClose')[0], 'click', handlePreviewTabClose, Tab); Flags=getFileFlagsFromFileName(ThisUser,Path); if(Flags & NG_HASAUDIO) { var WavPath=Path.substring(0,Path.length-3)+"wav"; AudioFile="../Live/" + ThisUser + "/" + WavPath + "?User=" + ThisUser + "&GroupPassword=" + GroupPassword + "&Command=GetFile&FileName=" + WavPath; AudioDiv="
" + _QTGenerate('myfunc',false,[AudioFile, '200', '12', '','autoplay',AutoPlayAudio,'emb#bgcolor', 'white','align', 'bottom']) + "
"; DownloadAudioDiv="Download Audio"; } else { AudioDiv=""; DownloadAudioDiv=""; } Content="
"; if(Application=="IRES") Content+= "
" + ""+ "" + "" + "" + "" + "" + "" + "" + "
" + "   " + "Download" + "   " + "Download Original" + "   " + "Caption" + "
" + AudioDiv + "" + DownloadAudioDiv + "
"+ "
"; var W,H; var IRESInstructionsDiv=document.getElementById("IRESInstructions"); W="100%"; H=document.height-IRESInstructionsDiv.offsetTop-40+"px"; Content+= "
" + "" + "
" + "
"; Tab.set('content',Content); } var handlePreviewTabClose = function(e, tab) { YAHOO.util.Event.preventDefault(e); PreviewTabs.removeTab(tab); }; function showPreview(Event,ThisUser,Path,AutoPlayAudio) { var Tab,NewTab=null,ImageID,n=0,TestDiv,Descendants,ShiftKey; // Allow user to right click without opening preview if(Event) if(Event.button>1) return; ImageID=Path+'Preview'; var Tabs=PreviewTabs.get('tabs'); for(var n=0;n1) { // Make sure not to replace instructions tab if(PreviewTabs.get('activeIndex')>1) NewTab=PreviewTabs.get('activeTab'); else NewTab=Tabs[1]; } } if(NewTab==null) { NewTab = new YAHOO.widget.Tab({ }); PreviewTabs.addTab(NewTab); } UpdateTab(NewTab,ThisUser,Path,AutoPlayAudio); PreviewTabs.set('activeTab', NewTab); SetImageZoom(ImageID,-1); } function addThumbnail(ThumbDiv,Command,Path,Flags,FileSize) { if(Command=="A") { var Extension=Path.substring(Path.length-3,Path.length); if(Extension=="WAV" || Extension=="wav") { var TempDiv,TempPath; TempPath=Path.substring(0,Path.length-3)+"JPG"; TempDiv=document.getElementById(TempPath); if(TempDiv==null) { TempPath=Path.substring(0,Path.length-3)+"jpg"; TempDiv=document.getElementById(TempPath); } if(TempDiv==null) { TempPath=Path.substring(0,Path.length-3)+"CRW"; TempDiv=document.getElementById(TempPath); } if(TempDiv==null) { TempPath=Path.substring(0,Path.length-3)+"CR2"; TempDiv=document.getElementById(TempPath); } if(TempDiv==null) { TempPath=Path.substring(0,Path.length-3)+"NEF"; TempDiv=document.getElementById(TempPath); } if(TempDiv!=null) { updateThumbnail(TempDiv,TempPath,Flags,FileSize); /*var AudioDiv=document.createElement("DIV"); AudioFile="../Live/" + User +"?User=" + User + "&GroupPassword=" + GroupPassword + "&Command=GetFile&FileName=" + Path.substring(0,Path.length-3)+"wav"; AudioDiv.innerHTML="
 
" + _QTGenerate('myfunc',false,[AudioFile, '100', '12', '','autoplay', 'false','emb#bgcolor', 'white','align', 'middle']) + "
"; TempDiv.insertBefore(AudioDiv,TempDiv.childNodes[2]);*/ } } else { var NewDiv=document.createElement("DIV"); updateThumbnail(NewDiv,Path,Flags,FileSize); if(DisplayOrder=="Recent Last") { var ScrollDiv=ThumbnailsDiv.parentNode.parentNode,Scroll=false; if(ScrollDiv.clientHeight+ScrollDiv.scrollTop==ScrollDiv.scrollHeight) Scroll=true; ThumbnailsDiv.appendChild(NewDiv); //if(ScrollToThumb==true) if(Scroll==true) ScrollDiv.scrollTop=ScrollDiv.scrollHeight; } else { ThumbnailsDiv.insertBefore(NewDiv,ThumbDiv.firstChild); if(ScrollToThumb==true) ThumbnailsDiv.scrollTop=0; } } } else if(Command=="U") { var TempDiv=document.getElementById(Path); // Will receive an update command if a file was tagged when show tagged files only selected if(TempDiv) { // If the update is saying the file is not tagged, and we are only showing tagged files, remove it if((!(Flags & 8)) && TaggedFilesOnly) ThumbnailsDiv.removeChild(TempDiv); else updateThumbnail(TempDiv,Path,Flags,FileSize); } else { if(TaggedFilesOnly) { if(Flags & 8) addThumbnail(ThumbDiv,"A",Path,Flags,FileSize); } else { addThumbnail(ThumbDiv,"A",Path,Flags,FileSize); } } } else if(Command=="D") { var TempDiv=document.getElementById(Path); if(TempDiv!=null) ThumbnailsDiv.removeChild(TempDiv); } } function playAudio(Path) { var AudioDiv,AudioFile; AudioDiv=document.getElementById(Path+"AudioDiv"); if(AudioDiv!=null) { AudioFile="../Live/" + User +"?User=" + User + "&GroupPassword=" + GroupPassword + "&Command=GetFile&FileName=" + Path.substring(0,Path.length-3)+"wav"; AudioDiv.innerHTML="
" + _QTGenerate('myfunc',false,[AudioFile, '100', '12', '','autoplay', 'true','emb#bgcolor', 'white','align', 'middle']) + "
"; } } function updateThumbnail(ThumbDiv,Path,Flags,FileSize) { var FileName,AudioButton="",Checked,ThumbHTML; FileName=filePart(Path); if(parseInt(Flags) & NG_ISREADONLY) Checked="checked"; else Checked=""; if(parseInt(Flags) & NG_HASAUDIO) { AudioButton="
"; } if(parseInt(Flags) & NG_HASTHUMBNAIL) { ThumbHTML=""; } else { ThumbHTML="
 
"; } ThumbDiv.id=Path; ThumbDiv.innerHTML="
"+ //"

" + "" + "" + "" + "" + "" + "" + "" + "" + "
" + AudioButton + "" + "" + ThumbHTML + "" + "
" + "
" + "" + FileName +" (" + Math.round(FileSize*10/1024/1024)/10 + "MB)" + "
" + //"Original (" + Math.round(FileSize*10/1024/1024)/10 + "MB)

" + "
"; } // Transmission Profiles function loadTransmissionProfile(ProfileName,CallbackFunction) { var URL="../Live/" + User + "?User=" + User + "&GroupPassword=" + GroupPassword + "&Command=GetTransmissionProfile&FileName=" + ProfileName; AjaxRequest.get({ 'url': URL, 'onSuccess': function(req){CallbackFunction(req.responseXML);} }); } function saveTransmissionProfile(XML,ProfileName) { var str=new XMLSerializer().serializeToString(XML); var URL="../Live/" + User + "?User=" + User + "&GroupPassword=" + GroupPassword + "&Command=SetTransmissionProfile&FileName=" + ProfileName + "&Data=" + escape(str); AjaxRequest.get({'url': URL}); } function setTransmissionOption(XML,NameSpace,Option,Value) { var CurrentValue,Elements; Elements=XML.getElementsByTagName(Option); if(Elements.length==0) { // For Firefox, search without the namespace var TagSplit=Option.split(":"); var Tag=TagSplit[TagSplit.length-1]; Elements=XML.getElementsByTagName(Tag); } if(Elements[0]) { CurrentValue=Elements[0].firstChild; // Add the node if not present if(!CurrentValue) { var newtext=XML.createTextNode(Value); Elements[0].appendChild(newtext); CurrentValue=Elements[0].firstChild; } } if(CurrentValue) { CurrentValue.nodeValue=Value; } else { alert("Option " + Option + " Not Found"); } } function getTransmissionOption(XML,NameSpace,Option) { var CurrentValue=null,Elements; Elements=XML.getElementsByTagName(Option); if(Elements.length==0) { // For Firefox, search without the namespace var TagSplit=Option.split(":"); var Tag=TagSplit[TagSplit.length-1]; Elements=XML.getElementsByTagName(Tag); } if(Elements[0]) CurrentValue=Elements[0].firstChild; if(CurrentValue) { return CurrentValue.nodeValue; } else { return null; } } function updateElementsFromXML(xml) { var Items = xml.getElementsByTagName("*"); var str; for (var i = 0; i < Items.length; i++) { // Get rid of namespace prefix eg (TransmissionOption:Option) //var TagSplit=Items[i].tagName.split(":"); //var ID=TagSplit[TagSplit.length-1]; updateElementFromXML(xml,Items[i].tagName); str+=Items[i].tagName+"\n"; } //alert(str); } function updateElementFromXML(xml,Name) { var Element,Value; if(Element=document.getElementById(Name)) { Value=getTransmissionOption(xml,"",Name); // null is a valid value if(Element.type=="text") { Element.value=Value; } if(Element.type=="number") { Element.value=Value; } else if(Element.type=="textarea") { Element.value=Value; } else if(Element.type=="select-one") { Element.selectedIndex=Value; } else if(Element.type=="checkbox") { if(Value==1) Element.checked=true; else Element.checked=false; } else { if(Element.className=="toggle") { if(Value=="1") Element.setAttribute("toggled",true); else Element.setAttribute("toggled",false); } } } } function updateXMLFromElements(xml) { var Items = xml.getElementsByTagName("*"); for (var i = 0; i < Items.length; i++) { updateXMLFromElement(xml,Items[i].tagName); } } function updateXMLFromElement(xml,Name) { var Element,Value; if(Element=document.getElementById(Name)) { if(Element.type=="text") { Value=Element.value; } if(Element.type=="number") { Value=Element.value; } else if(Element.type=="textarea") { Value=Element.value; } else if(Element.type=="select-one") { Value=Element.selectedIndex; } else if(Element.type=="checkbox") { if(Element.checked==true) Value=1; else Value=0; } else { if(Element.className=="toggle") { var Toggled=Element.getAttribute("toggled"); if(Toggled=="true") Value=1; else Value=0; } } setTransmissionOption(xml,"",Name,Value); } } function isRemoteEditIncluded() { return 1; } var LastRow=-1; function parseFileListChanges(UpdateFileNames,UpdateFileFlags) { //console.log("parseRemoteEditXML",UpdateFileNames,UpdateFileFlags); if(UpdateFileNames.length==0) return; FileNames=UpdateFileNames; FileFlags=UpdateFileFlags; NumFileNames=countFileNames(FileNames); LastRow=-1; var ScrollDiv=ThumbnailsDiv,Scroll=false; if(DisplayOrder=="Recent Last") { if(ScrollDiv.clientHeight+ScrollDiv.scrollTop==ScrollDiv.scrollHeight) Scroll=true; } renderThumbsList(); if(Scroll==true) ScrollDiv.scrollTop=ScrollDiv.scrollHeight; /*for(var i=0;i0) { FileNames.splice(Found,1); FileInfo.splice(Found,1); } } else { if(Found>0) { FileInfo[Found]=UpdateFileInfo[i]; } else { if((TaggedFilesOnly) && (IsTagged==false)) continue; //UpdateFileInfo[i][3]=new Image(); //UpdateFileInfo[i][3].src="../Live/" + User +"?User=" + User + "&GroupPassword=" + GroupPassword + "&Command=GetThumb&FileName=" + File; if(DisplayOrder=="Recent Last") { FileNames.push(File); FileInfo.push(UpdateFileInfo[i]); } else { FileNames.unshift(File); FileInfo.unshift(UpdateFileInfo[i]); } } } } var ScrollDiv=ThumbnailsDiv,Scroll=false; if(DisplayOrder=="Recent Last") { if(ScrollDiv.clientHeight+ScrollDiv.scrollTop==ScrollDiv.scrollHeight) Scroll=true; } LastRow=-1; renderThumbsList(); if(Scroll==true) ScrollDiv.scrollTop=ScrollDiv.scrollHeight; } */ } function getFileNameNumber(FileName) { var len,extension=0,framestart=0,FileNumber; len=FileName.length; extension=len-4; for(var i=extension-1;i>=0;i--) { if(isDigit(FileName.charAt(i))==false) { framestart=i+1; break; } } FileNumber=FileName.substring(framestart,extension); return parseInt(FileNumber,10); } function changeFileNameNumber(FileName,NewNumber) { var len,extension=0,framestart=0; len=FileName.length; extension=len-4; for(var i=extension-1;i>=0;i--) { if(isDigit(FileName.charAt(i))==false) { framestart=i+1; break; } } FileName=FileName.substring(0,framestart) + padDigits(NewNumber,extension-framestart) + FileName.substring(extension); return FileName; } function countFileNames(FileNames) { var Count=0; //console.log("countFileNames",FileNames.length); for(var i=0;i=Count && FileNum=Count && FileNum=Count && FileNum=LastRow) && (StartRow<=LastRow)) return; LastRow=StartRow; HTML="
"; //console.log("NumFileNames,VisibleRows,VisibleColumns",NumFileNames,VisibleRows,VisibleColumns); StartFileNum=StartRow*VisibleColumns; EndFileNum=StartFileNum+(VisibleRows+2)*VisibleColumns; if(EndFileNum>NumFileNames) EndFileNum=NumFileNames; for(FileNum=StartFileNum;FileNum
"; AudioButton=""; } else { AudioButton=""; } if(Flags & NG_HASTHUMBNAIL) { ThumbSrc="../Live/" + User +"?User=" + User + "&GroupPassword=" + GroupPassword + "&Command=GetThumb&FileName=" + Path; if(!CachedThumbs[Path]) { CachedThumbs[Path]=new Image(); CachedThumbs[Path].src=ThumbSrc; } ThumbHTML=""; } else { ThumbHTML="
 
"; } if(isThumbSelected(User,Path)==false) Style="background-color: " + ThumbColourNormal[User]; else Style="background-color: " + ThumbColourSelected[User]; StarHTML="
"; for(var i=0;i<5;i++) StarHTML+="
 
"; StarHTML+="
"; Style+="; width: " + ElementW + "px; height: " + ElementH + "px; "; HTML+="
" + "" + "" + "" + "" + "" + "" + "" + "
" + AudioButton + "" + ThumbHTML + "
" + StarHTML + "
" + FileName +"
"; } HTML+=""; if(LastThumbsHTML!=HTML) { ThumbnailsDiv.innerHTML=HTML; LastThumbsHTML=HTML; } if(Date()>ModifiedRatingsTime+10000) { ModifiedRatings=new Array(); } } function parseRemoteEditXML(xml) { var NewSessionID,Command,Path,Checked,FileSize,Flags,More,UpdateFileNames,UpdateFileFlags; //console.log("parseRemoteEditXML"); NewSessionID=getElementTextNS("","SessionID",xml,0); More=getElementTextNS("","More",xml,0); if(NewSessionID>=0) { updateStatusDiv(xml); DateStamp=getElementTextNS("","TransactionID",xml,0); if(NewSessionID!=SessionID) { ThumbnailsDiv.innerHTML=""; SessionID=NewSessionID; FileNames=null; FileInfo=null; FileNames=[]; FileInfo=[]; } UpdateFileNames=getElementTextNS("","FileNames",xml,0); UpdateFileFlags=getElementTextNS("","FileFlags",xml,0); if(UpdateFileNames && UpdateFileFlags) parseFileListChanges(eval(UpdateFileNames),eval(UpdateFileFlags)); } else { ThumbnailsDiv.innerHTML=""; updateStatusDiv(0); } window.setTimeout('updateThumbnails()',1000); xml=null; } function updatePreferences(xml) { Prefs=xml; updateElementsFromXML(Prefs); } function updateRemoteEditPreferences(xml) { RemoteEditPrefs=xml; updateElementsFromXML(RemoteEditPrefs); } function updateRemoteEditTransmissionProfile(xml) { RemoteEditTransmissionProfile=xml; updateElementsFromXML(xml); TaggedFilesOnly=parseInt(getTransmissionOption(RemoteEditTransmissionProfile,"","TransmissionOption:TaggedFilesOnly")); } function savePreferences() { updateXMLFromElements(Prefs); updateXMLFromElements(RemoteEditPrefs); updateXMLFromElements(RemoteEditTransmissionProfile); //TaggedFilesOnly=parseInt(getTransmissionOption(RemoteEditTransmissionProfile,"","TransmissionOption:TaggedFilesOnly")); var str=new XMLSerializer().serializeToString(Prefs); var URL="../Live/" + User + "?User=" + User + "&GroupPassword=" + GroupPassword + "&Command=SetPrefs&File=Prefs.xml&XML=" + escape(str); AjaxRequest.get({'url': URL}); var str=new XMLSerializer().serializeToString(RemoteEditPrefs); var URL="../Live/" + User + "?User=" + User + "&GroupPassword=" + GroupPassword + "&Command=SetPrefs&File=RemoteEditPrefs.xml&XML=" + escape(str); AjaxRequest.get({'url': URL}); var str=new XMLSerializer().serializeToString(RemoteEditTransmissionProfile); var URL="../Live/" + User + "?User=" + User + "&GroupPassword=" + GroupPassword + "&Command=SetPrefs&File=RemoteEditTransmissionProfile.xml&XML=" + escape(str); AjaxRequest.get({'url': URL}); } function saveLocalPreferences() { updateXMLFromElements(Prefs); updateXMLFromElements(RemoteEditPrefs); updateXMLFromElements(RemoteEditTransmissionProfile); //TaggedFilesOnly=parseInt(getTransmissionOption(RemoteEditTransmissionProfile,"","TransmissionOption:TaggedFilesOnly")); var str=new XMLSerializer().serializeToString(Prefs); var URL="../Local/" + User + "?User=" + User + "&GroupPassword=" + GroupPassword + "&Command=SetPrefs&File=Prefs.xml&XML=" + escape(str); AjaxRequest.get({'url': URL}); var str=new XMLSerializer().serializeToString(RemoteEditPrefs); var URL="../Local/" + User + "?User=" + User + "&GroupPassword=" + GroupPassword + "&Command=SetPrefs&File=RemoteEditPrefs.xml&XML=" + escape(str); AjaxRequest.get({'url': URL}); var str=new XMLSerializer().serializeToString(RemoteEditTransmissionProfile); var URL="../Local/" + User + "?User=" + User + "&GroupPassword=" + GroupPassword + "&Command=SetPrefs&File=RemoteEditTransmissionProfile.xml&XML=" + escape(str); AjaxRequest.get({'url': URL}); } function chooseRemoteEditPath() { var Path; Path=document.getElementById("TransmissionOption:RemoteEditPath").value; var URL="../Live/" + User + "?User=" + User + "&GroupPassword=" + GroupPassword + "&Command=ShowFolderChooser&Title=" + escape('Select a Path') +"&Path=" + escape(Path); AjaxRequest.get({ 'url': URL, 'onSuccess': function(req){if(req.responseText.length) document.getElementById("TransmissionOption:RemoteEditPath").value=req.responseText;} }); }