~jstys-z/helioviewer.org/client5

« back to all changes in this revision

Viewing changes to lib/helioviewer/build/helioviewer-all-min.js

  • Committer: V. Keith Hughitt
  • Date: 2009-03-26 19:20:57 UTC
  • Revision ID: hughitt1@kore-20090326192057-u0x8rf8sf5lmmnwh
nightly build 03-26-2009: Using alpha-channel JPEG 2000 dataset

Show diffs side-by-side

added added

removed removed

Lines of Context:
9
9
else if(timeDiff>0){label.addClassName("timeAhead");}
10
10
this.label=label;this.container.appendChild(label);},getLabelText:function(eventType){var labelText=null;switch(eventType){case"Active Region":labelText=this.eventId;break;case"CME":labelText=this.time.startTime;break;case"Type II Radio Burst":labelText=this.time.startTime;break;default:labelText=this.time.startTime;break;}
11
11
return labelText;},createPopup:function(){var properties=$H(this.properties),t,content="<div class='event-popup-container'>"+"<strong>"+this.type+" "+this.eventId+"</strong><br>"+"<p>"+this.catalogName+"</p><br>"+"<strong>start:</strong> "+this.time.startTime+"<br>"+"<strong>end:</strong> "+this.time.endTime+"<br><br>";properties.keys().each(function(key){content+="<strong>"+key+":</strong> "+properties.get(key);if(key.search(/angle/i)!==-1){content+="&deg;";}
12
 
content+="<br>";});content+="<strong>Source:</strong> <a href='"+this.sourceUrl+"' class='event-url' target='_blank'>"+this.sourceUrl+"</a><br></div>";t=new Tip(this.container,content,{title:'Details:',style:'protogrey',stem:'topLeft',closeButton:true,showOn:'click',hideOn:'click',hook:{target:'bottomRight',tip:'topLeft'},offset:{x:14,y:14}});this.container.observeOnce('click',function(e){var tip=$$('body > .prototip');if(tip.length>0){this.insert(tip.first().remove().setStyle({'top':'12px','left':'8px'}));Event.observe(this,'click',function(e){$(this.select('.prototip')).first().setStyle({'top':'12px','left':'8px'});});}});},remove:function(){this.container.remove();},refresh:function(sunRadius){this.sunRadius=sunRadius;this.pos={x:this.sunX*sunRadius,y:this.sunY*sunRadius};this.container.setStyle({left:(this.pos.x-2)+'px',top:(this.pos.y-2)+'px'});},toggleLabel:function(){this.label.toggle();},togglePopup:function(){this.popup.toggle();}});var EventTimeline=Class.create(UIElement,{initialize:function(controller,container){this.controller=controller;this.container=container;this.resizeTimerID=null;this.eventSource=new Timeline.DefaultEventSource();var bandInfos=[Timeline.createBandInfo({eventSource:this.eventSource,width:"70%",intervalUnit:Timeline.DateTime.MONTH,intervalPixels:100}),Timeline.createBandInfo({eventSource:this.eventSource,width:"30%",intervalUnit:Timeline.DateTime.YEAR,intervalPixels:200})],self=this;bandInfos[1].syncWith=0;bandInfos[1].highlight=true;this.timeline=Timeline.create($(this.container),bandInfos);this.timeline.loadJSON("http://localhost/dev/test.json",function(json,url){self.eventSource.loadJSON(json,url);});},resize:function(){if(this.resizeTimerID===null){this.resizeTimerID=window.setTimeout(function(){this.resizeTimerID=null;this.timeline.layout();},500);}}});var Helioviewer=Class.create({defaultOptions:{defaultZoomLevel:12,baseZoom:10,baseScale:2.63,defaultPrefetchSize:0,timeIncrementSecs:86400,minZoomLevel:8,maxZoomLevel:16,tileAPI:'api/index.php',imageAPI:'api/index.php',eventAPI:'api/index.php'},initialize:function(options){Object.extend(this,this.defaultOptions);Object.extend(this,options);this.loadingIndicator=new LoadingIndicator();this.loadUserSettings();this.date=new Date(parseInt(this.userSettings.get('obs-date'),10));$('date').writeAttribute('value',this.date.toYmdUTCString());$('time').writeAttribute('value',this.date.toHmUTCString());this.layerManager=new LayerManager(this);this.initViewports();this.initUI();this.initEvents();this.initKeyBoardListeners();this.userSettings.get('tile-layers').each((function(settings){this.layerManager.addLayer(new TileLayer(this.viewports[0],settings));}).bind(this));},initUI:function(){var centerBtn,mouseCoords;this.calendar=new Calendar(this,'date','time');this.zoomControl=new ZoomControl(this,{id:'zoomControl',zoomLevel:this.userSettings.get('zoom-level'),minZoomLevel:this.minZoomLevel,maxZoomLevel:this.maxZoomLevel});this.timeControls=new TimeControls(this,'timestep-select','timeBackBtn','timeForwardBtn',this.timeIncrementSecs);this.messageConsole=new MessageConsole(this,'message-console','helioviewer-viewport-container-outer');this.tileLayerAccordion=new TileLayerAccordion(this.layerManager,'layerManager');this.eventLayerAccordion=new EventLayerAccordion(this.viewports[0],'eventAccordion');this.initToolTips();centerBtn=Builder.node('div',{className:'center-button'},Builder.node('span',{},"center"));Event.observe(centerBtn,'click',this.viewports[0].center.bindAsEventListener(this.viewports[0]));this.viewports[0].innerNode.insert(centerBtn);mouseCoords=Builder.node('div',{id:'mouse-coords',style:'display: none'});Element.extend(mouseCoords);mouseCoords.insert(Builder.node('div',{id:'mouse-coords-x',style:'width:50%; float: left'}));mouseCoords.insert(Builder.node('div',{id:'mouse-coords-y',style:'width:50%; float: left'}));this.viewports[0].innerNode.insert(mouseCoords);jQuery('#about-dialog').dialog({autoOpen:false,title:"Helioviewer - About",width:480,height:300,draggable:true});jQuery('#helioviewer-about').click(function(e){if(jQuery('#about-dialog').dialog('isOpen')){jQuery('#about-dialog').dialog('close');}
 
12
content+="<br>";});content+="<strong>Source:</strong> <a href='"+this.sourceUrl+"' class='event-url' target='_blank'>"+this.sourceUrl+"</a><br></div>";t=new Tip(this.container,content,{title:'Details:',style:'protogrey',stem:'topLeft',closeButton:true,showOn:'click',hideOn:'click',hook:{target:'bottomRight',tip:'topLeft'},offset:{x:14,y:14}});this.container.observeOnce('click',function(e){var tip=$$('body > .prototip');if(tip.length>0){this.insert(tip.first().remove().setStyle({'top':'12px','left':'8px'}));Event.observe(this,'click',function(e){$(this.select('.prototip')).first().setStyle({'top':'12px','left':'8px'});});}});},remove:function(){this.container.remove();},refresh:function(sunRadius){this.sunRadius=sunRadius;this.pos={x:this.sunX*sunRadius,y:this.sunY*sunRadius};this.container.setStyle({left:(this.pos.x-2)+'px',top:(this.pos.y-2)+'px'});},toggleLabel:function(){this.label.toggle();},togglePopup:function(){this.popup.toggle();}});var EventTimeline=Class.create(UIElement,{initialize:function(controller,container){this.controller=controller;this.container=container;this.resizeTimerID=null;this.eventSource=new Timeline.DefaultEventSource();var bandInfos=[Timeline.createBandInfo({eventSource:this.eventSource,width:"70%",intervalUnit:Timeline.DateTime.MONTH,intervalPixels:100}),Timeline.createBandInfo({eventSource:this.eventSource,width:"30%",intervalUnit:Timeline.DateTime.YEAR,intervalPixels:200})],self=this;bandInfos[1].syncWith=0;bandInfos[1].highlight=true;this.timeline=Timeline.create($(this.container),bandInfos);this.timeline.loadJSON("http://localhost/dev/test.json",function(json,url){self.eventSource.loadJSON(json,url);});},resize:function(){if(this.resizeTimerID===null){this.resizeTimerID=window.setTimeout(function(){this.resizeTimerID=null;this.timeline.layout();},500);}}});var Helioviewer=Class.create({defaultOptions:{defaultZoomLevel:12,baseZoom:10,baseScale:2.63,defaultPrefetchSize:0,timeIncrementSecs:86400,minZoomLevel:8,maxZoomLevel:16,tileAPI:'api/index.php',imageAPI:'api/index.php',eventAPI:'api/index.php'},initialize:function(options){Object.extend(this,this.defaultOptions);Object.extend(this,options);this.loadingIndicator=new LoadingIndicator();this.loadUserSettings();this.date=new Date(this.userSettings.get('obs-date'));$('date').writeAttribute('value',this.date.toYmdUTCString());$('time').writeAttribute('value',this.date.toHmUTCString());this.layerManager=new LayerManager(this);this.initViewports();this.initUI();this.initEvents();this.initKeyBoardListeners();this.userSettings.get('tile-layers').each((function(settings){this.layerManager.addLayer(new TileLayer(this.viewports[0],settings));}).bind(this));},initUI:function(){var centerBtn,mouseCoords;this.calendar=new Calendar(this,'date','time');this.zoomControl=new ZoomControl(this,{id:'zoomControl',zoomLevel:this.userSettings.get('zoom-level'),minZoomLevel:this.minZoomLevel,maxZoomLevel:this.maxZoomLevel});this.timeControls=new TimeControls(this,'timestep-select','timeBackBtn','timeForwardBtn',this.timeIncrementSecs);this.messageConsole=new MessageConsole(this,'message-console','helioviewer-viewport-container-outer');this.tileLayerAccordion=new TileLayerAccordion(this.layerManager,'layerManager');this.eventLayerAccordion=new EventLayerAccordion(this.viewports[0],'eventAccordion');this.initToolTips();centerBtn=Builder.node('div',{className:'center-button'},Builder.node('span',{},"center"));Event.observe(centerBtn,'click',this.viewports[0].center.bindAsEventListener(this.viewports[0]));this.viewports[0].innerNode.insert(centerBtn);mouseCoords=Builder.node('div',{id:'mouse-coords',style:'display: none'});Element.extend(mouseCoords);mouseCoords.insert(Builder.node('div',{id:'mouse-coords-x',style:'width:50%; float: left'}));mouseCoords.insert(Builder.node('div',{id:'mouse-coords-y',style:'width:50%; float: left'}));this.viewports[0].innerNode.insert(mouseCoords);jQuery('#about-dialog').dialog({autoOpen:false,title:"Helioviewer - About",width:480,height:300,draggable:true});jQuery('#helioviewer-about').click(function(e){if(jQuery('#about-dialog').dialog('isOpen')){jQuery('#about-dialog').dialog('close');}
13
13
else{jQuery('#about-dialog').dialog('open');}});jQuery('#keyboard-shortcuts-dialog').dialog({autoOpen:false,title:"Helioviewer - Usage Tips",width:480,height:430,draggable:true});jQuery('#helioviewer-shortcuts').click(function(e){if(jQuery('#keyboard-shortcuts-dialog').dialog('isOpen')){jQuery('#keyboard-shortcuts-dialog').dialog('close');}
14
 
else{jQuery('#keyboard-shortcuts-dialog').dialog('open');}});this.timeline=new EventTimeline(this,"timeline");},loadUserSettings:function(){this.userSettings=new UserSettings(this);if(this.load["obs-date"]){this.userSettings.set('obs-date',parseInt(this.load["obs-date"],10)*1000);}
 
14
else{jQuery('#keyboard-shortcuts-dialog').dialog('open');}});},loadUserSettings:function(){this.userSettings=new UserSettings(this);if(this.load["obs-date"]){this.userSettings.set('obs-date',parseInt(this.load["obs-date"],10)*1000);}
15
15
if(this.load["img-scale"]){this.userSettings.set('zoom-level',this.scaleToZoomLevel(parseInt(this.load["img-scale"],10)));}
16
16
if(this.load.layers){var layers=[];$A(this.load.layers).each(function(layer){layers.push({tileAPI:"api/index.php",observatory:layer.substr(0,3),instrument:layer.substr(3,3),detector:layer.substr(6,3),measurement:layer.substr(9,3)});});this.userSettings.set('tile-layers',layers);}},initViewports:function(){this.viewports=$A([new Viewport(this,{id:this.viewportId,zoomLevel:this.userSettings.get('zoom-level'),prefetch:this.defaultPrefetchSize,debug:false})]);this.viewports.each(function(viewport){Event.observe(window,'resize',viewport.resize.bind(viewport));});},initEvents:function(){this.observe(this.zoomControl,'change',this.handlers.zoom);this.observe(this.calendar,'observationDateChange',this.handlers.observationDateChange);this.observe(this.layerManager,'newLayer',this.handlers.newLayer);Event.observe(this.calendar.timeField,'change',this.handlers.observationTimeChange.bindAsEventListener(this));},initKeyBoardListeners:function(){var self=this;Event.observe(document,'keypress',function(e){if(e.target.tagName!=="INPUT"){var code,character;if(!e){e=window.event;}
17
17
if(e.keyCode){code=e.keyCode;}
32
32
else if((x===0)&&(y>0)){radians=Math.PI/2;}
33
33
else if((x===0)&&(y<0)){radians=(3*Math.PI)/2;}
34
34
return{r:Math.sqrt(Math.pow(x,2)+Math.pow(y,2)),theta:(180/Math.PI)*radians};};Math.lg=function(x){return(Math.log(x)/Math.log(2));};var IconPicker=Class.create({initialize:function(id){this.id=id;this.AVAILABLE_ICON_SHAPES=$A(["circle","square","diamond"]);this.AVAILABLE_ICON_COLORS=$A(["red","orange","green","yellow","blue","lightblue"]);this.focus=null;this._buildIconList();},_buildIconList:function(){var i,closeBtn,menu,self=this;menu=jQuery("<div id='"+this.id+"' style='display: none;'></div>");menu.append(jQuery('<div id=event-icon-menu-title><span style="vertical-align: middle">Chose an icon:</span></div><div id="event-icon-menu-body">'));i=1;this.AVAILABLE_ICON_COLORS.each(function(color){self.AVAILABLE_ICON_SHAPES.each(function(shape){var icon=jQuery('<img class="event-icon-menu-icon" src="images/events/small-'+color+"-"+shape+'.png" alt="'+color+'-'+shape+'">');icon.click(function(){self.focus.updateIcon(this.alt);jQuery('#event-icon-menu').fadeOut();});menu.append(icon);if(i%3===0){menu.append(jQuery("<br>"));}
35
 
i+=1;});});closeBtn=jQuery('<br><div style="text-align: right"><a class="event-url" href="#" style="margin-right: 2px;">[Close]</a></div>').click(function(){jQuery('#event-icon-menu').fadeOut();});menu.append(closeBtn);menu.append("</div>");jQuery('body').append(menu);},toggle:function(layer,pos){this.focus=layer;jQuery('#'+this.id).css({'left':pos.left+16,'top':pos.top+16}).slideToggle();}});var LayerManager=Class.create(UIElement,{initialize:function(controller){this.controller=controller;this.layers=$A([]);},addLayer:function(layer){this.layers.push(layer);},numTileLayers:function(){var n=0;this.layers.each(function(l){if(l.type==="TileLayer"){n+=1;}});return n;},getMaxDimensions:function(){var maxWidth=0,maxHeight=0;this.layers.each(function(l){if(l.type==="TileLayer"){if(Object.isNumber(l.relWidth)){maxWidth=Math.max(maxWidth,l.relWidth);maxHeight=Math.max(maxHeight,l.relHeight);}}});return{width:maxWidth,height:maxHeight};},hasEventCatalog:function(catalog){return(this.eventLayers().find(function(l){return l.catalog===catalog;})?true:false);},eventLayers:function(){return this.layers.findAll(function(l){return l.type==="EventLayer";});},tileLayers:function(){return this.layers.findAll(function(l){return l.type==="TileLayer";});},numEventLayers:function(){var n=0;this.layers.each(function(l){if(l.type==="EventLayer"){n+=1;}});return n;},removeLayer:function(layer){layer.domNode.remove();this.layers=this.layers.without(layer);},reloadLayers:function(){this.layers.each(function(layer){layer.reload();});},resetLayers:function(visible){this.layers.each(function(layer){layer.reset(visible);});},refreshSavedTileLayers:function(){var tilelayers=[];this.tileLayers().each(function(layer){var settings={tileAPI:layer.tileAPI,observatory:layer.observatory,instrument:layer.instrument,detector:layer.detector,measurement:layer.measurement};tilelayers.push(settings);});this.controller.userSettings.set('tile-layers',tilelayers);}});var MessageConsole=Class.create(UIElement,{initialize:function(controller,container,viewport){this.controller=controller;this.console=$(container);this.viewportId=viewport;},log:function(msg){this.console.update(new Element('p',{style:'color: #6495ED; font-weight: bold;'}).insert(msg));var self=this,trash=new Effect.Appear(this.console,{duration:3.0});window.setTimeout(function(){var trash=new Effect.Fade(self.console,{duration:3.0});},6500);},warn:function(msg){this.console.update(new Element('p',{style:'color: yellow; font-weight: bolder;'}).insert(msg));var self=this,trash=new Effect.Appear(this.console,{duration:3.0});window.setTimeout(function(){var trash=new Effect.Fade(self.console,{duration:3.0});},6500);},error:function(msg){this.console.update(new Element('p',{style:'color: red'}).insert(msg));var self=this,trash=new Effect.Shake(this.viewportId,{distance:15,duration:0.1});trash=new Effect.Appear(this.console,{duration:3.0});window.setTimeout(function(){var trash=new Effect.Fade(self.console,{duration:3.0});},6500);},link:function(msg,linkText){var self=this,linkId,wrapper,link,trash;linkId='link-'+this.controller.date.getTime()/1000;wrapper=new Element('span');link=new Element('a',{href:'#',id:linkId,'class':'message-console-link'}).update(linkText);wrapper.insert(msg);wrapper.insert(link);this.console.update(new Element('p',{style:'color: #6495ED;'}).insert(wrapper));trash=new Effect.Appear(this.console,{duration:2.0});Event.observe(linkId,'click',function(){self.console.hide();});return linkId;}});var MovieBuilder=Class.create(UIElement,{defaultOptions:{active:false,url:"api/index.php",minZoomLevel:13,numFrames:40,frameRate:8,sharpen:false,edgeEnhance:false,format:{win:"asf",mac:"mov",linux:"mp4"}},initialize:function(options){Object.extend(this,this.defaultOptions);Object.extend(this,options);var self=this;Event.observe(this.id,'click',function(){if(!self.active){var hv=self.controller,hqFormat,displayRange,xhr;self.active=true;hqFormat=self.format[getOS()];displayRange=hv.viewports[0].displayRange();xhr=new Ajax.Request(self.url,{method:'POST',parameters:{action:"buildQuickMovie",layers:"SOHEITEIT304,SOHLAS0C20WL",startDate:hv.date.getTime()/1000,zoomLevel:hv.viewports[0].zoomLevel,numFrames:self.numFrames,frameRate:self.frameRate,edges:self.edgeEnhance,sharpen:self.sharpen,format:hqFormat,xRange:displayRange.xStart+", "+displayRange.xEnd,yRange:displayRange.yStart+", "+displayRange.yEnd},onComplete:function(transport){var linkId=self.controller.messageConsole.link('','Quick-Video ready! Click here to start watching.');self.active=false;Event.observe(linkId,'click',function(){Shadowbox.open({player:'iframe',title:'Helioviewer Movie Player',height:650,width:550,content:self.url+'?action=playMovie&format='+hqFormat+'&url='+transport.responseJSON});});}});}});}});var TileLayer=Class.create(Layer,{defaultOptions:{type:'TileLayer',rootDir:'tiles/',cacheEnabled:true,opacity:100,autoOpacity:true,startOpened:false},initialize:function(viewport,options){Object.extend(this,this.defaultOptions);Object.extend(this,options);this.viewport=viewport;this.tileSize=viewport.tileSize;this.layerManager=viewport.controller.layerManager;this.id='tilelayer'+new Date().getTime();this.domNode=new Element('div',{className:'tile-layer-container',style:'position: absolute;'});viewport.movingContainer.appendChild(this.domNode);this.viewport.addObserver('move',this.viewportMove.bind(this));this.tiles=[];this.loadClosestImage();},reload:function(){this.loadClosestImage();},removeTiles:function(){this.tiles=[];},reset:function(visible){var i,j,zoomOffset,old,numTiles,numTilesLoaded,indices,tile,onLoadComplete,self=this;this.viewport.controller.loadingIndicator.loadingStarted();zoomOffset=this.lowestRegularZoom-this.viewport.zoomLevel;this.relWidth=this.width*Math.pow(2,zoomOffset);this.relHeight=this.height*Math.pow(2,zoomOffset);if((this.viewport.zoomLevel<this.minZoom)&&(this.viewport.controller.userSettings.get('warn-zoom-level')==="false")){this.viewport.controller.messageConsole.log("Note: "+this.name+" is not available at this resolution. Images will be artificially enlarged.");this.viewport.controller.userSettings.set('warn-zoom-level',true);}
 
35
i+=1;});});closeBtn=jQuery('<br><div style="text-align: right"><a class="event-url" href="#" style="margin-right: 2px;">[Close]</a></div>').click(function(){jQuery('#event-icon-menu').fadeOut();});menu.append(closeBtn);menu.append("</div>");jQuery('body').append(menu);},toggle:function(layer,pos){this.focus=layer;jQuery('#'+this.id).css({'left':pos.left+16,'top':pos.top+16}).slideToggle();}});var LayerManager=Class.create(UIElement,{initialize:function(controller){this.controller=controller;this.layers=$A([]);},addLayer:function(layer){this.layers.push(layer);},addNewLayer:function(){var priorityQueue,currentLayers,p,defaultChoice="SOHEITEIT171";priorityQueue=$A(["SOHEITEIT195","SOHLAS0C20WL","SOHLAS0C30WL","SOHLAS0C20WL","SOHMDIMDImag","SOHMDIMDIint","SOHEITEIT171","SOHEITEIT284","SOHEITEIT304"]);currentLayers=$A([]);this.tileLayers().each(function(l){currentLayers.push(l.observatory+l.instrument+l.detector+l.measurement);});currentLayers.each(function(id){priorityQueue=priorityQueue.without(id);});p=priorityQueue.first()||defaultLayer;this.addLayer(new TileLayer(this.controller.viewports[0],{tileAPI:this.controller.tileAPI,observatory:p.substr(0,3),instrument:p.substr(3,3),detector:p.substr(6,3),measurement:p.substr(9,3),startOpened:true}));this.refreshSavedTileLayers();},numTileLayers:function(){var n=0;this.layers.each(function(l){if(l.type==="TileLayer"){n+=1;}});return n;},getMaxDimensions:function(){var maxWidth=0,maxHeight=0;this.layers.each(function(l){if(l.type==="TileLayer"){if(Object.isNumber(l.relWidth)){maxWidth=Math.max(maxWidth,l.relWidth);maxHeight=Math.max(maxHeight,l.relHeight);}}});return{width:maxWidth,height:maxHeight};},hasEventCatalog:function(catalog){return(this.eventLayers().find(function(l){return l.catalog===catalog;})?true:false);},eventLayers:function(){return this.layers.findAll(function(l){return l.type==="EventLayer";});},tileLayers:function(){return this.layers.findAll(function(l){return l.type==="TileLayer";});},numEventLayers:function(){var n=0;this.layers.each(function(l){if(l.type==="EventLayer"){n+=1;}});return n;},removeLayer:function(layer){layer.domNode.remove();this.layers=this.layers.without(layer);},reloadLayers:function(){this.layers.each(function(layer){layer.reload();});},resetLayers:function(visible){this.layers.each(function(layer){layer.reset(visible);});},refreshSavedTileLayers:function(){var tilelayers=[];this.tileLayers().each(function(layer){var settings={tileAPI:layer.tileAPI,observatory:layer.observatory,instrument:layer.instrument,detector:layer.detector,measurement:layer.measurement};tilelayers.push(settings);});this.controller.userSettings.set('tile-layers',tilelayers);}});var MessageConsole=Class.create(UIElement,{initialize:function(controller,container,viewport){this.controller=controller;this.console=$(container);this.viewportId=viewport;},log:function(msg){this.console.update(new Element('p',{style:'color: #6495ED; font-weight: bold;'}).insert(msg));var self=this,trash=new Effect.Appear(this.console,{duration:3.0});window.setTimeout(function(){var trash=new Effect.Fade(self.console,{duration:3.0});},6500);},warn:function(msg){this.console.update(new Element('p',{style:'color: yellow; font-weight: bolder;'}).insert(msg));var self=this,trash=new Effect.Appear(this.console,{duration:3.0});window.setTimeout(function(){var trash=new Effect.Fade(self.console,{duration:3.0});},6500);},error:function(msg){this.console.update(new Element('p',{style:'color: red'}).insert(msg));var self=this,trash=new Effect.Shake(this.viewportId,{distance:15,duration:0.1});trash=new Effect.Appear(this.console,{duration:3.0});window.setTimeout(function(){var trash=new Effect.Fade(self.console,{duration:3.0});},6500);},link:function(msg,linkText){var self=this,linkId,wrapper,link,trash;linkId='link-'+this.controller.date.getTime()/1000;wrapper=new Element('span');link=new Element('a',{href:'#',id:linkId,'class':'message-console-link'}).update(linkText);wrapper.insert(msg);wrapper.insert(link);this.console.update(new Element('p',{style:'color: #6495ED;'}).insert(wrapper));trash=new Effect.Appear(this.console,{duration:2.0});Event.observe(linkId,'click',function(){self.console.hide();});return linkId;}});var MovieBuilder=Class.create(UIElement,{defaultOptions:{active:false,url:"api/index.php",minZoomLevel:13,numFrames:40,frameRate:8,sharpen:false,edgeEnhance:false,format:{win:"asf",mac:"mov",linux:"mp4"}},initialize:function(options){Object.extend(this,this.defaultOptions);Object.extend(this,options);var self=this;Event.observe(this.id,'click',function(){if(!self.active){var hv=self.controller,hqFormat,displayRange,xhr;self.active=true;hqFormat=self.format[getOS()];displayRange=hv.viewports[0].displayRange();xhr=new Ajax.Request(self.url,{method:'POST',parameters:{action:"buildQuickMovie",layers:"SOHEITEIT304,SOHLAS0C20WL",startDate:hv.date.getTime()/1000,zoomLevel:hv.viewports[0].zoomLevel,numFrames:self.numFrames,frameRate:self.frameRate,edges:self.edgeEnhance,sharpen:self.sharpen,format:hqFormat,xRange:displayRange.xStart+", "+displayRange.xEnd,yRange:displayRange.yStart+", "+displayRange.yEnd},onComplete:function(transport){var linkId=self.controller.messageConsole.link('','Quick-Video ready! Click here to start watching.');self.active=false;Event.observe(linkId,'click',function(){Shadowbox.open({player:'iframe',title:'Helioviewer Movie Player',height:650,width:550,content:self.url+'?action=playMovie&format='+hqFormat+'&url='+transport.responseJSON});});}});}});}});var TileLayer=Class.create(Layer,{defaultOptions:{type:'TileLayer',rootDir:'tiles/',cacheEnabled:true,opacity:100,autoOpacity:true,startOpened:false,sharpen:false},initialize:function(viewport,options){Object.extend(this,this.defaultOptions);Object.extend(this,options);this.viewport=viewport;this.tileSize=viewport.tileSize;this.layerManager=viewport.controller.layerManager;this.id='tilelayer'+new Date().getTime();this.domNode=new Element('div',{className:'tile-layer-container',style:'position: absolute;'});viewport.movingContainer.appendChild(this.domNode);this.viewport.addObserver('move',this.viewportMove.bind(this));this.tiles=[];this.loadClosestImage();},reload:function(){this.loadClosestImage();},removeTiles:function(){this.tiles=[];},reset:function(visible){var i,j,currentScale,scaleOffset,old,numTiles,numTilesLoaded,indices,tile,onLoadComplete,self=this;this.viewport.controller.loadingIndicator.loadingStarted();currentScale=this.viewport.controller.baseScale*Math.pow(2,this.viewport.zoomLevel-this.viewport.controller.baseZoom);scaleOffset=this.naturalImageScale/currentScale;this.relWidth=this.width*scaleOffset;this.relHeight=this.height*scaleOffset;if((this.viewport.zoomLevel<this.minZoom)&&(this.viewport.controller.userSettings.get('warn-zoom-level')==="false")){this.viewport.controller.messageConsole.log("Note: "+this.name+" is not available at this resolution. Images will be artificially enlarged.");this.viewport.controller.userSettings.set('warn-zoom-level',true);}
36
36
this.removeTiles();this.refreshUTCDate();old=[];this.domNode.childElements().each(function(tile){old.push(tile);});numTiles=0;numTilesLoaded=0;indices=this.viewport.visibleRange;onLoadComplete=function(e){numTilesLoaded+=1;if(numTilesLoaded===numTiles){old.each(function(tile){if(tile.parentNode){tile.remove();}});self.viewport.controller.loadingIndicator.loadingFinished();}};for(i=indices.xStart;i<=indices.xEnd;i+=1){for(j=indices.yStart;j<=indices.yEnd;j+=1){if(visible[i][j]){tile=$(this.domNode.appendChild(this.getTile(i,j,this.viewport.zoomLevel)));if(!this.tiles[i]){this.tiles[i]=[];}
37
37
this.tiles[i][j]={};this.tiles[i][j].img=tile;numTiles+=1;Event.observe(this.tiles[i][j].img,'load',onLoadComplete);}}}},refreshUTCDate:function(){var date=new Date(this.timestamp*1000);date.toUTCDate();this.utcDate=date;},setImageProperties:function(imageProperties){if(imageProperties.imageId===this.imageId){this.fire('obs_time_change',this);return;}
38
38
Object.extend(this,imageProperties);this.fire('obs_time_change',this);this.setZIndex(parseInt(this.opacityGroupId,10)-10);if(this.autoOpacity){this.setInitialOpacity();this.autoOpacity=false;}
39
39
this.fire('change',this);this.viewport.checkTiles(true);this.reset(this.viewport.visible);},setImage:function(imageId){if(imageId===this.imageId){return;}
40
40
this.imageId=imageId;this.loadImageProperties();this.reset(this.viewport.visible);},setInitialOpacity:function(){var self=this,opacity=1,counter=0;this.layerManager.layers.each(function(layer){if(parseInt(layer.opacityGroupId,10)===parseInt(self.opacityGroupId,10)){counter+=1;}});if(counter>1){opacity=opacity/counter;this.domNode.setOpacity(opacity);this.opacity=opacity*100;}},setOpacity:function(opacity){this.opacity=opacity;opacity=opacity/100;this.domNode.setOpacity(opacity);},loadClosestImage:function(){var date=this.viewport.controller.date,processResponse,xhr;processResponse=function(transport){this.setImageProperties(transport.responseJSON);var hv=this.viewport.controller;this.viewport.updateSandbox();if(!hv.tileLayerAccordion.hasId(this.id)){hv.tileLayerAccordion.addLayer(this);}
41
 
else{hv.tileLayerAccordion.updateTimeStamp(this);hv.tileLayerAccordion.updateLayerDesc(this.id,this.name);hv.tileLayerAccordion.updateOpacitySlider(this.id,this.opacity);}};xhr=new Ajax.Request(this.viewport.controller.imageAPI,{method:'POST',parameters:{action:'getClosestImage',observatory:this.observatory,instrument:this.instrument,detector:this.detector,measurement:this.measurement,timestamp:date.getTime()/1000,debug:false},onSuccess:processResponse.bind(this)});},viewportMove:function(position){var visible=this.viewport.visible,indices=this.viewport.visibleRange,i,j;for(i=indices.xStart;i<=indices.xEnd;i+=1){for(j=indices.yStart;j<=indices.yEnd;j+=1){if(!this.tiles[i]){this.tiles[i]=[];}
 
41
else{hv.tileLayerAccordion.updateTimeStamp(this);hv.tileLayerAccordion.updateLayerDesc(this.id,this.name);hv.tileLayerAccordion.updateOpacitySlider(this.id,this.opacity);}};xhr=new Ajax.Request(this.viewport.controller.imageAPI,{method:'POST',parameters:{action:'getClosestImage',observatory:this.observatory,instrument:this.instrument,detector:this.detector,measurement:this.measurement,timestamp:date.getTime()/1000,debug:false},onSuccess:processResponse.bind(this)});},toggleSharpening:function(){if(this.sharpen===true){}else{}
 
42
this.sharpen=!this.sharpen;},viewportMove:function(position){var visible=this.viewport.visible,indices=this.viewport.visibleRange,i,j;for(i=indices.xStart;i<=indices.xEnd;i+=1){for(j=indices.yStart;j<=indices.yEnd;j+=1){if(!this.tiles[i]){this.tiles[i]=[];}
42
43
if(visible[i][j]&&(!this.tiles[i][j])){this.tiles[i][j]=$(this.domNode.appendChild(this.getTile(i,j,this.viewport.zoomLevel)));}}}},getTile:function(x,y){var left=x*this.tileSize,top=y*this.tileSize,zoom=this.viewport.zoomLevel,ts=this.tileSize,rf=function(){return false;},img;img=$(new Image());img.addClassName('tile');img.setStyle({left:left+'px',top:top+'px'});img.unselectable='on';img.onmousedown=rf;img.ondrag=rf;img.onmouseover=rf;img.oncontextmenu=rf;img.galleryimg='no';img.alt="";Event.observe(img,'error',function(){this.src='images/transparent_'+ts+'.gif';});img.src=this.tileAPI+'?action=getTile&x='+x+'&y='+y+'&zoom='+zoom+'&imageId='+this.imageId+'&ts='+ts;return img;}});var TileLayerAccordion=Class.create(Layer,{initialize:function(layerManager,containerId){this.layerManager=layerManager;this.container=jQuery('#'+containerId);this.queryURL="api/index.php";this.options={};this._setupUI();this.domNode=jQuery('#TileLayerAccordion-Container');this.domNode.dynaccordion({startClosed:true});this.layerSettings=new Hash();},addLayer:function(layer){var processResponse=function(transport){var visibilityBtn,removeBtn,head,body,slider;visibilityBtn="<button class='layerManagerBtn visible' id='visibilityBtn-"+layer.id+"' value=true type=button title='toggle layer visibility'></button>";removeBtn="<button class='layerManagerBtn remove' id='removeBtn-"+layer.id+"' type=button title='remove layer'></button>";head="<div class=layer-Head><span class=tile-accordion-header-left>"+layer.name+"</span><span class=tile-accordion-header-right><span class=timestamp></span> |"+visibilityBtn+removeBtn+"</span></div>";this.options.observatories=transport.responseJSON.observatories;this.options.instruments=transport.responseJSON.instruments;this.options.detectors=transport.responseJSON.detectors;this.options.measurements=transport.responseJSON.measurements;body=this._buildEntryBody(layer);this.domNode.dynaccordion("addSection",{id:layer.id,header:head,cell:body,open:layer.startOpened});slider=new Control.Slider("opacity-slider-handle-"+layer.id,"opacity-slider-track-"+layer.id,{sliderValue:layer.opacity,range:$R(1,100),values:$R(1,100),onSlide:function(v){layer.setOpacity(v);}});this.layerSettings.set(layer.id,{header:head,body:body,opacitySlider:slider});this._setupEventHandlers(layer);this.updateTimeStamp(layer);},xhr=new Ajax.Request(this.queryURL,{method:'POST',onSuccess:processResponse.bind(this),parameters:{action:"getLayerAvailability",observatory:layer.observatory,instrument:layer.instrument,detector:layer.detector,measurement:layer.measurement,format:"json"}});},hasId:function(id){return(this.layerSettings.keys().grep(id).length>0?true:false);},_buildEntryBody:function(layer){var id,options,opacitySlide,obs,inst,det,meas,fits;id=layer.id;options=this.options;opacitySlide="<div class='layer-select-label'>Opacity: </div>";opacitySlide+="<div class='opacity-slider-track' id='opacity-slider-track-"+id+"' style='width:120px; height:10px;'>";opacitySlide+="<div class='opacity-slider-handle' id='opacity-slider-handle-"+id+"' style='10px; 19px;'></div>";opacitySlide+="</div>";obs="<div class=layer-select-label>Observatory: </div> ";obs+="<select name=observatory class=layer-select id='observatory-select-"+id+"'>";jQuery.each(options.observatories,function(i,o){obs+="<option value='"+o.abbreviation+"'";if(layer.observatory===o.abbreviation){obs+=" selected='selected'";}
43
44
obs+=">"+o.name+"</option>";});obs+="</select><br>";inst="<div class=layer-select-label>Instrument: </div> ";inst+="<select name=instrument class=layer-select id='instrument-select-"+id+"'>";jQuery.each(options.instruments,function(i,o){inst+="<option value='"+o.abbreviation+"'";if(layer.instrument===o.abbreviation){inst+=" selected='selected'";}
44
45
inst+=">"+o.name+"</option>";});inst+="</select><br>";det="<div class=layer-select-label>Detector: </div> ";det+="<select name=detector class=layer-select id='detector-select-"+id+"'>";jQuery.each(options.detectors,function(i,o){det+="<option value='"+o.abbreviation+"'";if(layer.detector===o.abbreviation){det+=" selected='selected'";}
45
46
det+=">"+(o.name===""?o.abbreviation:o.name)+"</option>";});det+="</select><br>";meas="<div class=layer-select-label>Measurement: </div> ";meas+="<select name=measurement class=layer-select id='measurement-select-"+id+"'>";jQuery.each(options.measurements,function(i,o){meas+="<option value='"+o.abbreviation+"'";if(layer.measurement===o.abbreviation){meas+=" selected='selected'";}
46
 
meas+=">"+o.name+"</option>";});meas+="</select><br><br>";fits="<a href='#' id='showFITSBtn-"+id+"' style='margin-left:160px; color: white; text-decoration: none;'>FITS Header</a><br>";return(opacitySlide+obs+inst+det+meas+fits);},updateOpacitySlider:function(id,opacity){this.layerSettings.get(id).opacitySlider.setValue(opacity);},_setupUI:function(){var title,addLayerBtn,hv,self=this;title=jQuery('<span class="accordion-title">Overlays</span>').css({'float':'left'});addLayerBtn=jQuery('<a href=# class=gray>[Add]</a>').css({'margin-right':'14px'});this.container.append(jQuery('<div></div>').css('text-align','right').append(title).append(addLayerBtn));this.container.append(jQuery('<div id="TileLayerAccordion-Container"></div>'));hv=this.layerManager.controller;addLayerBtn.click(function(){self.layerManager.addLayer(new TileLayer(hv.viewports[0],{tileAPI:hv.tileAPI,observatory:'SOH',instrument:'LAS',detector:'0C2',measurement:'0WL',startOpened:true}));self.layerManager.refreshSavedTileLayers();});},_setupEventHandlers:function(layer){var toggleVisibility,removeLayer,showFITS,visible,icon,accordion,dialogId,processResponse,response,formatted,xhr,self=this,visibilityBtn=jQuery("#visibilityBtn-"+layer.id),removeBtn=jQuery("#removeBtn-"+layer.id),fitsBtn=jQuery("#showFITSBtn-"+layer.id);toggleVisibility=function(e){visible=layer.toggleVisible();icon=(visible?'LayerManagerButton_Visibility_Visible.png':'LayerManagerButton_Visibility_Hidden.png');jQuery("#visibilityBtn-"+layer.id).css('background','url(images/blackGlass/'+icon+')');e.stopPropagation();};removeLayer=function(e){accordion=e.data;accordion.layerManager.removeLayer(layer);accordion.domNode.dynaccordion('removeSection',{id:layer.id});accordion.layerSettings.unset(layer.id);accordion.layerManager.refreshSavedTileLayers();e.stopPropagation();};showFITS=function(){dialogId="fits-header-"+layer.id;if(jQuery("#"+dialogId).length===0){processResponse=function(transport){response=transport.responseJSON;formatted="<div id='"+dialogId+"' style='overflow: auto; padding:0px'><div style='background: white; color: black; padding:1.5em 1.7em'>";$A(response).each(function(line){formatted+=line+"<br>";});formatted+="</div></div>";jQuery("body").append(formatted);jQuery("#"+dialogId).dialog({autoOpen:true,title:"FITS Header: "+layer.name,width:400,height:350,draggable:true});};xhr=new Ajax.Request("api/index.php",{method:'POST',onSuccess:processResponse.bind(this),parameters:{action:"getJP2Header",imageId:layer.imageId}});}else{if(!jQuery("#"+dialogId).dialog("isOpen")){jQuery("#"+dialogId).dialog("open");}else{jQuery("#"+dialogId).dialog("close");}}};jQuery.each(jQuery('#'+layer.id+' > div > select'),function(i,item){jQuery(item).change(function(e){if(this.name==="observatory"){layer.observatory=this.value;}
 
47
meas+=">"+o.name+"</option>";});meas+="</select><br><br>";fits="<a href='#' id='showFITSBtn-"+id+"' style='margin-left:160px; color: white; text-decoration: none;'>FITS Header</a><br>";return(opacitySlide+obs+inst+det+meas+fits);},updateOpacitySlider:function(id,opacity){this.layerSettings.get(id).opacitySlider.setValue(opacity);},_setupUI:function(){var title,addLayerBtn,hv,self=this;title=jQuery('<span class="accordion-title">Overlays</span>').css({'float':'left'});addLayerBtn=jQuery('<a href=# class=gray>[Add]</a>').css({'margin-right':'14px'});this.container.append(jQuery('<div></div>').css('text-align','right').append(title).append(addLayerBtn));this.container.append(jQuery('<div id="TileLayerAccordion-Container"></div>'));hv=this.layerManager.controller;addLayerBtn.click(function(){self.layerManager.addNewLayer();});},_setupEventHandlers:function(layer){var toggleVisibility,removeLayer,showFITS,visible,icon,accordion,dialogId,processResponse,response,formatted,xhr,self=this,visibilityBtn=jQuery("#visibilityBtn-"+layer.id),removeBtn=jQuery("#removeBtn-"+layer.id),fitsBtn=jQuery("#showFITSBtn-"+layer.id);toggleVisibility=function(e){visible=layer.toggleVisible();icon=(visible?'LayerManagerButton_Visibility_Visible.png':'LayerManagerButton_Visibility_Hidden.png');jQuery("#visibilityBtn-"+layer.id).css('background','url(images/blackGlass/'+icon+')');e.stopPropagation();};removeLayer=function(e){accordion=e.data;accordion.layerManager.removeLayer(layer);accordion.domNode.dynaccordion('removeSection',{id:layer.id});accordion.layerSettings.unset(layer.id);accordion.layerManager.refreshSavedTileLayers();e.stopPropagation();};showFITS=function(){dialogId="fits-header-"+layer.id;if(jQuery("#"+dialogId).length===0){processResponse=function(transport){response=transport.responseJSON;formatted="<div id='"+dialogId+"' style='overflow: auto; padding:0px'><div style='background: white; color: black; padding:1.5em 1.7em'>";$A(response).each(function(line){formatted+=line+"<br>";});formatted+="</div></div>";jQuery("body").append(formatted);jQuery("#"+dialogId).dialog({autoOpen:true,title:"FITS Header: "+layer.name,width:400,height:350,draggable:true});};xhr=new Ajax.Request("api/index.php",{method:'POST',onSuccess:processResponse.bind(this),parameters:{action:"getJP2Header",imageId:layer.imageId}});}else{if(!jQuery("#"+dialogId).dialog("isOpen")){jQuery("#"+dialogId).dialog("open");}else{jQuery("#"+dialogId).dialog("close");}}};jQuery.each(jQuery('#'+layer.id+' > div > select'),function(i,item){jQuery(item).change(function(e){if(this.name==="observatory"){layer.observatory=this.value;}
47
48
else if(this.name==="instrument"){layer.instrument=this.value;}
48
49
else if(this.name==="detector"){layer.detector=this.value;}
49
50
else if(this.name==="measurement"){layer.measurement=this.value;}
54
55
else{layer.reload();this.layerManager.refreshSavedTileLayers();}},_updateOptions:function(id,field,newOptions){var select,opt;$$('#'+field+'-select-'+id+' > option').each(function(o){o.remove();});select=$(field+'-select-'+id);$A(newOptions).each(function(o){opt=new Element('option',{value:o.abbreviation}).insert(o.name===""?o.abbreviation:o.name);select.insert(opt);});},updateTimeStamp:function(layer){var domNode,date,dateString,timeDiff,ts;domNode=$(layer.id).select('.timestamp').first();domNode.removeClassName("timeBehind");domNode.removeClassName("timeAhead");domNode.removeClassName("timeSignificantlyOff");date=new Date(layer.timestamp*1000);dateString=date.toYmdUTCString()+' '+date.toHmUTCString();timeDiff=layer.timestamp-this.layerManager.controller.date.getTime()/1000;domNode.update(dateString);ts=this.layerManager.controller.timeIncrementSecs;if(timeDiff<0){if(Math.abs(timeDiff)>(4*ts)){domNode.addClassName("timeSignificantlyOff");}
55
56
else{domNode.addClassName("timeBehind");}}
56
57
else if(timeDiff>0){if(timeDiff>(4*ts)){domNode.addClassName("timeSignificantlyOff");}
57
 
else{domNode.addClassName("timeAhead");}}},updateLayerDesc:function(id,desc){$(id).select("span.tile-accordion-header-left").first().update(desc);}});var TimeControls=Class.create(UIElement,{initialize:function(controller,incrementSelect,backBtn,forwardBtn,timeIncrement){this.controller=controller;this.className="TimeControls";this.timeIncrement=timeIncrement;this.addTimeIncrements(incrementSelect);Event.observe(backBtn,'click',this.timePrevious.bind(this));Event.observe(forwardBtn,'click',this.timeNext.bind(this));},addTimeIncrements:function(selectId){var timeSteps,select,opt;timeSteps=[{numSecs:1,txt:"1&nbsp;Sec"},{numSecs:60,txt:"1&nbsp;Min"},{numSecs:300,txt:"5&nbsp;Mins"},{numSecs:900,txt:"15&nbsp;Mins"},{numSecs:3600,txt:"1&nbsp;Hour"},{numSecs:21600,txt:"6&nbsp;Hours"},{numSecs:43200,txt:"12&nbsp;Hours"},{numSecs:86400,txt:"1&nbsp;Day"},{numSecs:604800,txt:"1&nbsp;Week"},{numSecs:2419200,txt:"28&nbsp;Days"}];select=$(selectId);$A(timeSteps).each(function(o){opt=new Element('option',{value:o.numSecs}).insert(o.txt);select.insert(opt);});select.select('option[value='+this.timeIncrement+']')[0].writeAttribute('selected','selected');Event.observe(select,'change',this.onChange.bindAsEventListener(this));},onChange:function(e){this.timeIncrement=parseInt(e.target.value,10);this.fire('timeIncrementChange',this.timeIncrement);},timePrevious:function(){var newDate=this.controller.date.addSeconds(-this.timeIncrement);this.controller.setDate(newDate);this.controller.calendar.updateFields();},timeNext:function(){var newDate=this.controller.date.addSeconds(this.timeIncrement);this.controller.setDate(newDate);this.controller.calendar.updateFields();}});var UserSettings=Class.create({initialize:function(controller){this.controller=controller;this._DEFAULTS=$H({'obs-date':1065312000000,'zoom-level':this.controller.defaultZoomLevel,'tile-layers':[{tileAPI:"api/index.php",observatory:'SOH',instrument:'EIT',detector:'EIT',measurement:'195'}],'warn-zoom-level':false,'warn-mouse-coords':false,'event-icons':{'VSOService::noaa':'small-blue-circle','GOESXRayService::GOESXRay':'small-green-diamond','VSOService::cmelist':'small-yellow-square'}});this.cookies=new CookieJar({expires:31536000,path:'/'});if(!this._exists()){this._loadDefaults();}},set:function(key,value){if(this._validate(key,value)){this.cookies.put(key,value);}else{}},get:function(key){return this.cookies.get(key);},_exists:function(){return(this.cookies.getKeys().length>0);},_validate:function(setting,value){switch(setting){case"obs-date":if(isNaN(value)){return false;}
 
58
else{domNode.addClassName("timeAhead");}}},updateLayerDesc:function(id,desc){$(id).select("span.tile-accordion-header-left").first().update(desc);}});var TimeControls=Class.create(UIElement,{initialize:function(controller,incrementSelect,backBtn,forwardBtn,timeIncrement){this.controller=controller;this.className="TimeControls";this.timeIncrement=timeIncrement;this.addTimeIncrements(incrementSelect);Event.observe(backBtn,'click',this.timePrevious.bind(this));Event.observe(forwardBtn,'click',this.timeNext.bind(this));},addTimeIncrements:function(selectId){var timeSteps,select,opt;timeSteps=[{numSecs:1,txt:"1&nbsp;Sec"},{numSecs:60,txt:"1&nbsp;Min"},{numSecs:300,txt:"5&nbsp;Mins"},{numSecs:900,txt:"15&nbsp;Mins"},{numSecs:3600,txt:"1&nbsp;Hour"},{numSecs:21600,txt:"6&nbsp;Hours"},{numSecs:43200,txt:"12&nbsp;Hours"},{numSecs:86400,txt:"1&nbsp;Day"},{numSecs:604800,txt:"1&nbsp;Week"},{numSecs:2419200,txt:"28&nbsp;Days"}];select=$(selectId);$A(timeSteps).each(function(o){opt=new Element('option',{value:o.numSecs}).insert(o.txt);select.insert(opt);});select.select('option[value='+this.timeIncrement+']')[0].writeAttribute('selected','selected');Event.observe(select,'change',this.onChange.bindAsEventListener(this));},onChange:function(e){this.timeIncrement=parseInt(e.target.value,10);this.fire('timeIncrementChange',this.timeIncrement);},timePrevious:function(){var newDate=this.controller.date.addSeconds(-this.timeIncrement);this.controller.setDate(newDate);this.controller.calendar.updateFields();},timeNext:function(){var newDate=this.controller.date.addSeconds(this.timeIncrement);this.controller.setDate(newDate);this.controller.calendar.updateFields();}});var UserSettings=Class.create({initialize:function(controller){this.controller=controller;this._DEFAULTS=$H({'obs-date':1065312000000,'zoom-level':this.controller.defaultZoomLevel,'tile-layers':[{tileAPI:"api/index.php",observatory:'SOH',instrument:'EIT',detector:'EIT',measurement:'195'}],'warn-zoom-level':false,'warn-mouse-coords':false,'event-icons':{'VSOService::noaa':'small-blue-circle','GOESXRayService::GOESXRay':'small-green-diamond','VSOService::cmelist':'small-yellow-square'}});this._INTEGER_PARAMS=$A(['obs-date','zoom-level']);this._FLOAT_PARAMS=$A([]);this._BOOLEAN_PARAMS=$A(['warn-zoom-level','warn-mouse-coords']);this.cookies=new CookieJar({expires:31536000,path:'/'});if(!this._exists()){this._loadDefaults();}},set:function(key,value){if(this._validate(key,value)){this.cookies.put(key,value);}else{}},get:function(key){if(this._INTEGER_PARAMS.include(key)){return parseInt(this.cookies.get(key));}
 
59
else if(this._FLOAT_PARAMS.include(key)){return parseFloat(this.cookies.get(key));}
 
60
else if(this._BOOLEAN_PARAMS.include(key)){return this.cookies.get(key)=="true"?true:false;}
 
61
return this.cookies.get(key);},_exists:function(){return(this.cookies.getKeys().length>0);},_validate:function(setting,value){switch(setting){case"obs-date":if(isNaN(value)){return false;}
58
62
break;case"zoom-level":if((isNaN(value))||(value<this.controller.minZoomLevel)||(value>this.controller.maxZoomLevel)){return false;}
59
63
break;default:break;}
60
64
return true;},_resetSetting:function(setting){this.set(setting,this._getDefault(setting));},_getDefault:function(setting){return this._DEFAULTS.get(setting);},_loadDefaults:function(){var self=this;this._DEFAULTS.each(function(setting){self.set(setting.key,setting.value);});}});var Viewport=Class.create(UIElement,{defaultOptions:{zoomLevel:0,headerId:'middle-col-header',footerId:'footer',tileSize:512,minHeight:450,debug:false,prefetch:0},isMoving:false,dimensions:{width:0,height:0},initialize:function(controller,options){Object.extend(this,this.defaultOptions);Object.extend(this,options);var center,centerBox;this.domNode=$(this.id);this.innerNode=$(this.id+'-container-inner');this.outerNode=$(this.id+'-container-outer');this.controller=controller;this.mouseCoords="disabled";this.ViewportHandlers=new ViewportHandlers(this);this.headerAndFooterHeight=$(this.headerId).getDimensions().height+$(this.footerId).getDimensions().height+4;this.resize();center=this.getCenter();this.sandbox=$(this.domNode.appendChild(Builder.node('div',{className:'sandbox'})));this.sandbox.setStyle({'position':'absolute','width':'0px','height':'0px','left':center.x+'px','top':center.y+'px'});this.movingContainer=$(this.sandbox.appendChild(Builder.node('div',{className:'movingContainer'})));this.movingContainer.setStyle({'left':0,'top':0});if(this.debug){this.movingContainer.setStyle({'border':'1px solid red'});centerBox=new Element('div',{id:'vp-debug-center',style:'position: absolute; width: 50px; height: 50px; border: 1px dashed red; '});centerBox.setStyle({'left':(center.x-25)+'px','top':(center.y-25)+'px'});this.domNode.insert(centerBox);}},center:function(){var sb=this.sandbox.getDimensions();this.moveTo(0.5*sb.width,0.5*sb.height);},moveTo:function(x,y){this.movingContainer.setStyle({left:x+'px',top:y+'px'});this.checkTiles();this.fire('move',{x:x,y:y});},moveBy:function(x,y){var sandbox=this.sandbox.getDimensions(),pos={x:Math.min(Math.max(this.startMovingPosition.x-x,0),sandbox.width),y:Math.min(Math.max(this.startMovingPosition.y-y,0),sandbox.height)};this.movingContainer.setStyle({left:pos.x+'px',top:pos.y+'px'});this.checkTiles();this.fire('move',{x:pos.x,y:pos.y});},startMoving:function(){this.startMovingPosition=this.getContainerPos();},getCenter:function(){return{x:Math.round(this.domNode.getWidth()/2),y:Math.round(this.domNode.getHeight()/2)};},getContainerPos:function(){return{x:parseInt(this.movingContainer.getStyle('left'),10),y:parseInt(this.movingContainer.getStyle('top'),10)};},currentPosition:function(){return this.getContainerPos();},helioCenter:function(){return this.getContainerPos();},endMoving:function(){},checkTiles:function(){var i,j,indices;this.visible=[];indices=this.displayRange();for(i=indices.xStart;i<=indices.xEnd;i+=1){for(j=indices.yStart;j<=indices.yEnd;j+=1){if(!this.visible[i]){this.visible[i]=[];}
61
 
this.visible[i][j]=true;}}},updateSandbox:function(){var maxDimensions,old,center,newSize,change,movingContainerOldPos,newHCLeft,newHCTop;this.dimensions=this.domNode.getDimensions();maxDimensions=this.controller.layerManager.getMaxDimensions();old=this.sandbox.getDimensions();center=this.getCenter();newSize={width:Math.max(0,maxDimensions.width-this.dimensions.width),height:Math.max(0,maxDimensions.height-this.dimensions.height)};if(this.debug){$('vp-debug-center').setStyle({'left':center.x-25+'px','top':center.y-25+'px'});}
 
65
this.visible[i][j]=true;}}},updateSandbox:function(){var maxDimensions,old,center,newSize,change,movingContainerOldPos,newHCLeft,newHCTop,padHeight,shiftTop;this.dimensions=this.domNode.getDimensions();maxDimensions=this.controller.layerManager.getMaxDimensions();old=this.sandbox.getDimensions();center=this.getCenter();newSize={width:Math.max(0,maxDimensions.width-this.dimensions.width),height:Math.max(0,maxDimensions.height-this.dimensions.height)};if(this.debug){$('vp-debug-center').setStyle({'left':center.x-25+'px','top':center.y-25+'px'});}
62
66
change={x:newSize.width-old.width,y:newSize.height-old.height};movingContainerOldPos=this.movingContainer.positionedOffset();this.sandbox.setStyle({width:newSize.width+'px',height:newSize.height+'px',left:center.x-(0.5*newSize.width)+'px',top:center.y-(0.5*newSize.height)+'px'});newHCLeft=Math.max(0,Math.min(newSize.width,movingContainerOldPos[0]+(0.5*change.x)));newHCTop=Math.max(0,Math.min(newSize.height,movingContainerOldPos[1]+(0.5*change.y)));this.movingContainer.setStyle({left:newHCLeft+'px',top:newHCTop+'px'});},displayRange:function(){var vp,ts;vp=this.getHCViewportPixelCoords();ts=this.tileSize;vp={top:vp.top-ts-(vp.top%ts),left:vp.left-ts-(vp.left%ts),bottom:vp.bottom+ts-(vp.bottom%ts),right:vp.right+ts-(vp.right%ts)};this.visibleRange={xStart:vp.left/ts,xEnd:(vp.right/ts)-1,yStart:vp.top/ts,yEnd:(vp.bottom/ts)-1};return this.visibleRange;},getHCViewportPixelCoords:function(){var sb,mc,vpDimensions;sb=this.sandbox.positionedOffset();mc=this.movingContainer.positionedOffset();vpDimensions=this.domNode.getDimensions();return{left:-(sb[0]+mc[0]),top:-(sb[1]+mc[1]),right:vpDimensions.width-(sb[0]+mc[0]),bottom:vpDimensions.height-(sb[1]+mc[1])};},zoomTo:function(zoomLevel){this.zoomLevel=zoomLevel;this.checkTiles();this.controller.layerManager.resetLayers(this.visible);this.updateSandbox();this.controller.userSettings.set('zoom-level',zoomLevel);},resize:function(){var oldDimensions,h,viewportOuter;oldDimensions=this.dimensions;h=Math.max(this.minHeight,document.viewport.getHeight()-this.headerAndFooterHeight);viewportOuter=this.outerNode;viewportOuter.setStyle({height:h+'px'});this.dimensions=this.domNode.getDimensions();this.dimensions.width+=this.prefetch;this.dimensions.height+=this.prefetch;if(this.dimensions.width!==oldDimensions.width||this.dimensions.height!==oldDimensions.height){if(this.controller.layerManager.layers.length>0){this.updateSandbox();this.checkTiles();this.controller.layerManager.resetLayers(this.visible);}}}});var ViewportHandlers=Class.create({startingPosition:{x:0,y:0},mouseStartingPosition:{x:0,y:0},mouseCurrentPosition:{x:0,y:0},mouseCoords:{x:0,y:0},moveCounter:0,moveThrottle:2,naturalZoomLevel:10,naturalResolution:2.63,rSunArcSeconds:975,initialize:function(viewport){this.viewport=viewport;Event.observe(document,'mousemove',this.mouseMove.bindAsEventListener(this));Event.observe(document,'mouseup',this.mouseUp.bindAsEventListener(this));Event.observe(viewport.domNode,'mousedown',this.mouseDown.bindAsEventListener(this));Event.observe(this.viewport.domNode,'dblclick',this.doubleClick.bindAsEventListener(this));Event.observe(this.viewport.domNode,"mousewheel",this.mouseWheel.bindAsEventListener(this),false);Event.observe(this.viewport.domNode,"DOMMouseScroll",this.mouseWheel.bindAsEventListener(this),false);Event.observe(document,'keypress',this.keyPress.bindAsEventListener(this));Event.observe(window,'keypress',this.keyPress.bindAsEventListener(this));},mouseDown:function(event){this.viewport.isMoving=true;this.startingPosition=this.viewport.currentPosition();this.mouseStartingPosition={x:Event.pointerX(event),y:Event.pointerY(event)};this.viewport.domNode.setStyle({cursor:'all-scroll'});if(this.viewport.domNode.setCapture){this.viewport.domNode.setCapture();}
63
67
this.viewport.startMoving();},doubleClick:function(e){var pos,viewport=this.viewport;if((e.shiftKey||(viewport.zoomLevel>viewport.controller.minZoomLevel))&&(viewport.zoomLevel<viewport.controller.maxZoomLevel)){if(e.isLeftClick()){pos=this.getRelativeCoords(e.pointerX(),e.pointerY());viewport.center();this.viewport.startMoving();if(e.shiftKey){viewport.moveBy(0.5*pos.x,0.5*pos.y);viewport.controller.zoomControl.zoomButtonClicked(1);}
64
68
else{viewport.moveBy(2*pos.x,2*pos.y);viewport.controller.zoomControl.zoomButtonClicked(-1);}}}else{}},mouseWheel:function(e){this.viewport.controller.zoomControl.zoomButtonClicked(-Event.wheel(e));},getRelativeCoords:function(screenx,screeny){var vp,offset,mouseCoords;vp=this.viewport;offset=$('helioviewer-viewport-container-inner').positionedOffset();mouseCoords={x:screenx-offset[0]-1,y:screeny-offset[1]-1};return mouseCoords;},keyPress:function(e){var key=e.keyCode;if(e.target.tagName!=="INPUT"){if(key===37||key===38||key===39||key===40){this.startingPosition=this.viewport.currentPosition();this.viewport.startMoving();this.moveCounter=(this.moveCounter+1)%this.moveThrottle;if(this.moveCounter!==0){return;}