/*
 * SilverCollectionCore
 * Copyright(c) 2008, SilverBiology, LLC (Michael Giddens).
 * Website: www.SilverBiology.com
 */


SilverCollection.Image=Ext.extend(Ext.app.Module,{createWindow:function(SilverCollection,image_id){var tpl=new Ext.XTemplate('<div class="specimen-detail">','<span><label>Family:</label> {family}</span><br>','<span><label>Species:</label> {genus} {species} {subspecies}</span><br><br>','<span><label>Image Characters:</label></span><br>','<tpl for="attributes">','<span><label>{attrib}:</label> {value}</span><br>','</tpl>','<br>','<span><label>Exif Data:</label></span><br>','<tpl for="exif">','<span><label>Camera Make:</label> {Make}</span><br>','<span><label>Camera Model:</label> {Model}</span><br>','<span><label>Exposure Time:</label> {ExposureTime}</span><br>','<tpl for="COMPUTED">','<span><label>F Number:</label> {ApertureFNumber}</span><br>','</tpl>','<span><label>Date and time of data generation:</label> {DateTimeOriginal}</span><br>','<span><label>ISO speed rating:</label> {ISOSpeedRatings}</span><br>','<span><label>Software used:</label> {Software}</span><br>','</tpl>','</div>');var tpl_zoomify=new Ext.Template('<OBJECT CLASSID="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" CODEBASE="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" WIDTH="{width}" HEIGHT="{height}">'+'<PARAM NAME="FlashVars" VALUE="zoomifyImagePath=http://www.herbarium.lsu.edu/images/archive/zoom/{file}/">'+'<PARAM NAME="wmode" VALUE="opaque">'+'<PARAM NAME="MENU" VALUE="FALSE">'+'<PARAM NAME="SRC" VALUE="zoomifyViewer.swf">'+'<EMBED wmode="opaque" FlashVars="zoomifyImagePath=http://www.herbarium.lsu.edu/images/archive/zoom/{file}/" SRC="zoomifyViewer.swf\" MENU="false" PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"  WIDTH="{width}" HEIGHT="{height}"></EMBED>'+'</OBJECT>');var tpl_image=new Ext.Template(Config.Default.Image.image_tpl);var specimensheet=new Ext.Panel({title:'Specimen Sheet',iconCls:'icon_picture'});var specimendetails=new Ext.Panel({title:'Image Details',bodyStyle:'padding: 10px;'});this.sb=new Ext.StatusBar();var tabpanel=new Ext.TabPanel({activeTab:0,deferredRender:false,border:false,defaults:{border:false,autoScroll:true},items:[specimensheet,specimendetails],bbar:this.sb});var desktop=SilverCollection.getDesktop();var win=desktop.createWindow({id:'image_'+image_id,title:'Image #'+image_id,width:840,height:490,layout:'fit',iconCls:'icon_picture',animCollapse:false,maximizable:false,constrainHeader:true,items:[tabpanel],buttons:[{text:'View Original Image',iconCls:'icon_picture_save',handler:function(btn){window.open(Config.Default.Images.originals_location+image_id,'downloadImage');},tooltip:'View Original Image',disabled:true},{text:'Close',scope:win,handler:function(){win.close();}}]});var conn=new Ext.data.Connection();conn.request({url:'server/image.php',method:'POST',scope:this,params:{image_id:image_id},success:function(responseObject){var record=Ext.decode(responseObject.responseText).data;tpl.append(specimendetails.body,record);if((record.name!='')&&(record.name!=null)){win.buttons[0].setDisabled(false);win.buttons[0].imageName=record.name;this.sb.setStatus({text:'<a href="http://creativecommons.org/licenses/'+record.creative_commons+'/3.0/" target="_blank" ><img src="images/cc/'+record.creative_commons+'.png"></a>'});if(record.zoomEnabled=='1'){tpl_zoomify.overwrite(specimensheet.body,{file:record.name,width:'100%',height:'100%'});}else{tpl_image.overwrite(specimensheet.body,{file:record.name,family:record.family,genus:record.genus,species:record.species});win.setHeight(win.container.getHeight()-20);win.setWidth(this.calcDim(record.width,record.height,800));win.show();}}},failure:function(){Ext.Msg.alert('Status','Could not load specimen data.');}});},calcDim:function(width,height,maxDim){var dim=0;var invert=0;var ratio_1=(maxDim/height);var ratio_2=(maxDim/width);if(ratio_1<=ratio_2){return((width*ratio_1)+32);}else{return((width*ratio_2)+32);}}});

SilverCollection.Images=Ext.extend(Ext.app.Module,{reseting:0,init:function(){this.launcher={text:Lang.Get('Core','images','title'),iconCls:'icon_pictures',handler:this.createWindow,scope:this,windowId:++SilverCollection.windowIndex}},createWindow:function(src){var desktop=this.app.getDesktop();var win=desktop.getWindow('images_'+src.windowId);if(!win){var enabled_characters='';var image_tree=new Ext.tree.TreePanel({title:Lang.Get('Core','images','filter_title'),iconCls:'icon_picture',border:false,id:'image_tree',rootVisible:false,autoScroll:true,useArrows:true,loader:new Ext.tree.TreeLoader({dataUrl:'server/tree_nodes.php',baseParams:{lib:'images'}}),tools:[{id:'refresh',on:{click:function(){image_tree.suspendEvents();var list=image_tree.getChecked();for(i=0;i<list.length;i++){list[i].getUI().toggleCheck();list[i].attributes.checked=false;}
image_tree.resumeEvents();ds.load();}}}],listeners:{'beforeLoad':function(node){this.loader.baseParams={lib:'images',nodeApi:node.attributes.nodeApi,nodeValue:node.attributes.nodeValue}
if(node.attributes.nodeApi!='root'&&node.attributes.nodeApi!='alpha'){SilverCollection.stats.log('Images/Browse/'+node.attributes.nodeApi+'/'+node.attributes.nodeValue);}},'checkchange':function(node){ds.load();SilverCollection.stats.log('Images/View/'+node.attributes.nodeApi+'/'+node.attributes.nodeValue);},'collapse':function(){Ext.getCmp('character_tree').expand();}}});var root=new Ext.tree.AsyncTreeNode({id:'root',nodeApi:'root'});image_tree.setRootNode(root);root.expand(false,false);var character_tree=new Ext.tree.TreePanel({width:240,id:'character_tree',title:Lang.Get('Core','images','char_title'),region:'center',iconCls:'icon_characters',useArrows:true,rootVisible:false,autoScroll:true,lines:false,border:false,loader:new Ext.tree.TreeLoader({dataUrl:'server/tree_nodes.php'}),tools:[{id:'expand',on:{click:function(){character_tree.expandAll();}}},{id:'collapse',on:{click:function(){character_tree.collapseAll();}}},{id:'refresh',scope:this,on:{click:function(){var list=character_tree.getChecked();character_tree.suspendEvents();for(i=0;i<list.length;i++){list[i].getUI().toggleCheck();list[i].attributes.checked=false;}
character_tree.resumeEvents();ds.load();}}}],listeners:{'beforeLoad':function(node){this.loader.baseParams={lib:'characters',nodeApi:node.attributes.nodeApi}
if(node.attributes.nodeApi!='root'){SilverCollection.stats.log('Images/Characters/Browse/'+node.attributes.text);}},'beforeexpandnode':function(node){filterCharacters(node);},'checkchange':function(node){ds.load();if(node.attributes.checked){SilverCollection.stats.log('Images/Characters/View/'+node.parentNode.attributes.text+'/'+node.attributes.text);}},'collapse':function(){Ext.getCmp('image_tree').expand();}}});var character_root=new Ext.tree.AsyncTreeNode({id:'root',nodeApi:'root'});character_tree.setRootNode(character_root);character_root.expand(false,false);var ds=new Ext.data.Store({proxy:new Ext.data.HttpProxy({url:'server/images.php'}),reader:new Ext.data.JsonReader({root:'images',totalProperty:'totalCount',id:'id'},[{name:'filename'},{name:'extension'},{name:'barcode'},{name:'family'},{name:'genus'},{name:'species'},{name:'zoomEnabled'}]),listeners:{'loadexception':function(){Ext.Msg.alert('Error','Load Exception.');},'beforeload':function(){var selected=image_tree.getChecked();var output='';for(var i=0;i<selected.length;i++){if(i!=0)
output+=',';if(selected[i].attributes.nodeApi=='species'){output+='{"node_type":"'+selected[i].attributes.nodeApi+'", "node_value":"'+selected[i].attributes.nodeValue+'", "genus":"'+selected[i].attributes.genus+'"}';}else{output+='{"node_type":"'+selected[i].attributes.nodeApi+'", "node_value":"'+selected[i].attributes.nodeValue+'"}';}}
this.baseParams.browse="["+output+"]";selected=character_tree.getChecked();output='';for(var i=0;i<selected.length;i++){if(i!=0)
output+=',';output+='{"node_type":"'+selected[i].attributes.nodeApi+'", "node_value":"'+selected[i].attributes.nodeValue+'"}';}
this.baseParams.characters="["+output+"]";this.baseParams.search_value=search_value.getValue();this.baseParams.search_type=search_filter_menu.getValue();findCharacter=function(id){for(i=0;i<enabled_characters.length;i++){if(enabled_characters[i].id==id)
return(true);}
return(false);}
filterCharacters=function(node){node.cascade(function(){if(this.attributes.nodeApi=="character"){if(findCharacter(this.attributes.nodeValue)){this.ui.show();this.enable();}else{this.ui.hide();this.disable();}}})}
var conn=new Ext.data.Connection();conn.request({url:'server/characters.php',method:'POST',scope:this,params:this.baseParams,success:function(responseObject){enabled_characters=Ext.decode(responseObject.responseText);filterCharacters(character_tree.getRootNode());},failure:function(){Ext.Msg.alert('Status','Could not load specimen data.');}});}}});var tpl=new Ext.XTemplate(Config.Default.Images.view_tpl);var search_value=new Ext.ux.SearchField({store:ds,width:120,paramName:'search_value'});var search_filter_menu=new Ext.ux.SelectBox({listClass:'x-combo-list-small',width:80,value:['Family'],store:new Ext.data.SimpleStore({fields:['name','value'],data:[['Family','family'],['Genus','genus'],['Species','species']]}),displayField:'name',valueField:'value',listeners:{'beforeselect':function(){ds.load();}}});var image_view=new Ext.Panel({region:'center',id:'images-view',autoScroll:true,border:false,tbar:[Lang.Get('Core','images','title'),' ',search_filter_menu,' ',search_value,' ',{text:'PicLens Viewer',iconCls:'icon_piclens',scope:this,handler:function(){SilverCollection.stats.log('Images/Piclens');var feedData={api:'piclens'};var selected=image_tree.getChecked();var output='';for(var i=0;i<selected.length;i++){if(i!=0)
output+=',';if(selected[i].attributes.nodeApi=='species'){output+='{"node_type":"'+selected[i].attributes.nodeApi+'", "node_value":"'+selected[i].attributes.nodeValue+'", "genus":"'+selected[i].attributes.genus+'"}';}else{output+='{"node_type":"'+selected[i].attributes.nodeApi+'", "node_value":"'+selected[i].attributes.nodeValue+'"}';}}
feedData.browse="["+output+"]";selected=character_tree.getChecked();output='';for(var i=0;i<selected.length;i++){if(i!=0)
output+=',';output+='{"node_type":"'+selected[i].attributes.nodeApi+'", "node_value":"'+selected[i].attributes.nodeValue+'"}';}
feedData.characters="["+output+"]";feedData.search_value=search_value.getValue();feedData.search_type=search_filter_menu.getValue();if(ds.lastOptions.params){feedData.start=ds.lastOptions.params.start||{};feedData.limit=ds.lastOptions.params.limit||{};}else{feedData.start={};feedData.limit={};}
feedData.api='piclens';PicLensLite.start({feedUrl:'server/images.php?'+Ext.urlEncode(feedData)});}}],items:new Ext.DataView({store:ds,tpl:tpl,autoHeight:true,multiSelect:false,singleSelect:true,overClass:'x-view-over',itemSelector:'div.thumb-wrap',emptyText:'<div style="padding:20px;">No images displayed.<br><br>Check the species you wish to view.</div>',listeners:{'dblclick':function(image){var win=SilverCollection.getDesktop().getWindow('image_'+this.getSelectedRecords()[0].id);if(!win){SilverCollection.stats.log('Image/'+this.getSelectedRecords()[0].id);var tmpImage=new SilverCollection.Image();tmpImage.createWindow(SilverCollection,this.getSelectedRecords()[0].id);}else{win.show();}}}}),bbar:new Ext.PagingToolbar({pageSize:Config.Default.Images.pageSize,store:ds,displayInfo:true,displayMsg:'Displaying Images {0} - {1} of {2}',emptyMsg:"No Images to Display"})});win=desktop.createWindow({id:'images_'+src.windowId,title:src.text,width:820,height:490,iconCls:src.iconCls,shim:false,animCollapse:false,constrainHeader:true,layout:'border',onEsc:Ext.emptyFn,items:[new Ext.Panel({layout:'accordion',region:'west',split:true,width:260,border:false,hideCollapseTool:true,layoutConfig:{animate:false},items:[character_tree,image_tree]}),image_view]});Ext.getCmp('image_tree').expand();ds.load();win.maximize();SilverCollection.stats.log('Images');}
win.show();}});
