
var sense={};sense.Base=Class.create({});
sense.ui={};sense.ui.Base=Class.create(sense.Base,{element:null,options:null,initialize:function($super,element,options){$super();this.element=element;this.options={};Object.extend(this.options,options);Object.extend(this.options,this.parseElementOptions());},parseElementOptions:function(){if(!this.element)return;var optString=this.element.readAttribute('_options');if(!optString)return;var opts={};var optPairs=optString.split(';');optPairs.each(function(pair){var pair=pair.split('=');var key=pair[0];var val=pair[1];if(val==="true")val=true;if(val==="false")val=false;if(val===Number(val).toString()){val=Number(val);}
opts[key]=val;});return opts;},px:function(){return Math.round(n)+'px';}});
sense.ui.widget={};sense.ui.widget.Base=Class.create(sense.ui.Base,{});
sense.ui.widget.Manager=new(Class.create(sense.Base,{registry:new Hash(),initialize:function($super,element,options){$super();document.observe('dom:loaded',this.initializeWidgets.bind(this));document.observe('dom:updated',this.initializeWidgets.bind(this));},register:function(widgetType){if(typeof widgetType=='string'){widgetType={constructor:widgetType};}
if(!widgetType.selector)widgetType.selector='.js'+widgetType.constructor;if(!widgetType.options)widgetType.options={};widgetType.instances=[];this.registry.set(widgetType.constructor,widgetType);},initializeWidgets:function(){this.registry.values().each(function(widgetType){if(typeof sense.ui.widget[widgetType.constructor]=='undefined')return;$$(widgetType.selector).each(function(el){if(typeof el[widgetType.constructor]!='undefined')return;if(widgetType.options){var instance=new sense.ui.widget[widgetType.constructor](el,widgetType.options);}else{var instance=new sense.ui.widget[widgetType.constructor](el);}
el[widgetType.constructor]=instance;widgetType.instances.push(instance);});});},getInstances:function(widgetType){var obj=this.registry.get(widgetType);return(obj)?obj.instances:false;}}))();var uim=sense.ui.widget.Manager;
sense.ui.widget.Manager.register({constructor:'ExternalLink',selector:'a[rel="external"]'});sense.ui.widget.ExternalLink=Class.create(sense.ui.widget.Base,{initialize:function($super,element,options){$super(element,options);this.element.observe('click',this.openLink.bind(this));},openLink:function(e){if(e)e.stop();window.open(this.element.href,'_blank');}});
var isIE=!!(navigator.appVersion.indexOf("MSIE")>-1);var isWin=!!(navigator.appVersion.toLowerCase().indexOf("win")>-1);var isOpera=!!(navigator.userAgent.indexOf("Opera")>-1);var isWinIE=!!(isIE&&isWin&&!isOpera);function flashGetVersion_ActiveX(){var value;var axobj;var funcs=[function(){axobj=new ActiveXObject('ShockwaveFlash.ShockwaveFlash.7');value=axobj.GetVariable('$version');},function(){axobj=new ActiveXObject('ShockwaveFlash.ShockwaveFlash.6');value='WIN 6,0,21,0';axobj.AllowScriptAccess='always';value=axobj.GetVariable('$version');},function(){axobj=new ActiveXObject('ShockwaveFlash.ShockwaveFlash.3');value=axobj.GetVariable('$version');},function(){axobj=new ActiveXObject('ShockwaveFlash.ShockwaveFlash.3');value='WIN 3,0,18,0';},function(){axobj=new ActiveXObject('ShockwaveFlash.ShockwaveFlash');value='WIN 2,0,0,11';}];for(i=0;i<funcs.length;i++){try{funcs[i]();break;}catch(e){}}
return(value)?value:-1;}
function flashGetVersion(){var version=false;var lowerUserAgent=navigator.userAgent.toLowerCase();if(navigator.plugins!=null&&navigator.plugins.length>0){if(navigator.plugins["Shockwave Flash 2.0"]||navigator.plugins["Shockwave Flash"]){var flashPlugin=navigator.plugins["Shockwave Flash"]||navigator.plugins["Shockwave Flash 2.0"];var descArray=flashPlugin.description.split(" ");var tempArrayMajor=descArray[2].split(".");var major=tempArrayMajor[0];var minor=tempArrayMajor[1];if(descArray[3]!=""){tempArrayMinor=descArray[3].split("r");}else{tempArrayMinor=descArray[4].split("r");}
var revision=tempArrayMinor[1]>0?tempArrayMinor[1]:0;var version=major+"."+minor+"."+revision;}}else if(lowerUserAgent.indexOf("webtv/2.6")>-1){version=4;}else if(lowerUserAgent.indexOf("webtv/2.5")>-1){version=3;}else if(lowerUserAgent.indexOf("webtv")>-1){version=2;}else if(isWinIE){version=flashGetVersion_ActiveX();}
return version;}
function flashDetect(reqMajorVer,reqMinorVer,reqRevision){var reqMinorVer=reqMinorVer||0;var reqRevision=reqRevision||0;var hasVersion=false;var versionStr=flashGetVersion();if(versionStr!=-1&&versionStr!=0){if(isWinIE){tempArray=versionStr.split(" ");tempString=tempArray[1];versionArray=tempString.split(",");}else{versionArray=versionStr.split(".");}
var versionMajor=versionArray[0];var versionMinor=versionArray[1];var versionRevision=versionArray[2];if(versionMajor>parseFloat(reqMajorVer)){hasVersion=true;}else if(versionMajor==parseFloat(reqMajorVer)){if(versionMinor>parseFloat(reqMinorVer)){hasVersion=true;}else if(versionMinor==parseFloat(reqMinorVer)){if(versionRevision>=parseFloat(reqRevision)){hasVersion=true;}}}}
return hasVersion;}
function flashGetAttributes(args,srcParamName,classid,mimeType){var ret={'objectAttrs':{'classid':classid},'paramAttrs':{},'embedAttrs':{}};for(var k in args){var v=args[k];switch(k){case"classid":break;case"pluginspage":ret.embedAttrs[k]=v;break;case"src":case"movie":ret.embedAttrs["src"]=v;ret.paramAttrs[srcParamName]=v;break;case"onafterupdate":case"onbeforeupdate":case"onblur":case"oncellchange":case"onclick":case"ondblClick":case"ondrag":case"ondragend":case"ondragenter":case"ondragleave":case"ondragover":case"ondrop":case"onfinish":case"onfocus":case"onhelp":case"onmousedown":case"onmouseup":case"onmouseover":case"onmousemove":case"onmouseout":case"onkeypress":case"onkeydown":case"onkeyup":case"onload":case"onlosecapture":case"onpropertychange":case"onreadystatechange":case"onrowsdelete":case"onrowenter":case"onrowexit":case"onrowsinserted":case"onstart":case"onscroll":case"onbeforeeditfocus":case"onactivate":case"onbeforedeactivate":case"ondeactivate":case"type":case"codebase":case"id":ret.objectAttrs[k]=v;break;case"width":case"height":case"align":case"vspace":case"hspace":case"class":case"title":case"accesskey":case"name":case"tabindex":ret.embedAttrs[k]=v;ret.objectAttrs[k]=v;break;default:ret.embedAttrs[k]=v;ret.paramAttrs[k]=v;}}
if(mimeType)ret.embedAttrs['type']=mimeType;return ret;}
function flashGetTags(objectAttrs,paramAttrs,embedAttrs){var objectStr='';var paramStr='';var embedStr='';if(isWinIE){for(var i in objectAttrs)objectStr+=i+'="'+objectAttrs[i]+'" ';for(var i in paramAttrs)paramStr+='<param name="'+i+'" value="'+paramAttrs[i]+'" />';var str='<object '+objectStr+'>'+paramStr+'</object>';}else{for(var i in embedAttrs)embedStr+=i+'="'+embedAttrs[i]+'" ';var str='<embed '+embedStr+'></embed>';}
return str;}
var flashPlayerUID=0;function flashReplace(el,args,majorVer,minorVer,revision){var version=(args.version)?args.version.split('.'):[];delete(args.version);var majorVer=majorVer||version[0]||-1;var minorVer=minorVer||version[1]||0;var revision=revision||version[2]||0;var defaults={'bgcolor':'#ffffff','align':'middle','quality':'high','wmode':'transparent','allowScriptAccess':'sameDomain','type':'application/x-shockwave-flash','codebase':'https://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab','pluginspage':'https://www.adobe.com/go/getflashplayer'}
for(var i in args)defaults[i]=args[i];var el=(typeof el=='string')?document.getElementById(el):el;if(el){var id=el.id.replace(/[^a-z0-9]+/gi,'')+'FlashMovie';if(id=='FlashMovie')id+=(++flashPlayerUID);defaults.id=args.id||args.name||id;defaults.name=args.name||defaults.id;var ret=flashGetAttributes(defaults,"movie","clsid:d27cdb6e-ae6d-11cf-96b8-444553540000","application/x-shockwave-flash");var str=flashGetTags(ret.objectAttrs,ret.paramAttrs,ret.embedAttrs);if(majorVer==-1||flashDetect(majorVer,minorVer,revision)){el.innerHTML=str;}}}
sense.ui.widget.Manager.register('FlashPlayer');sense.ui.widget.FlashPlayer=Class.create(sense.ui.widget.Base,{initialize:function($super,element,options){$super(element,options);Object.extend(this.options,this.parseLinkOptions());flashReplace(this.element,this.options);},parseLinkOptions:function(){this.paramLink=this.element.down('a.jsFlashParams');if(!this.paramLink||!this.paramLink.href)return;var params={};params.src=this.paramLink.href;if(this.paramLink.rel){var pairs=this.paramLink.rel.split('|');for(var i=0;i<pairs.length;i++){var keyVal=pairs[i].split(':');params[keyVal[0]]=unescape(keyVal[1]);}}
return params;}});
sense.ui.widget.Manager.register({constructor:'Overlay',selector:'a[rel^=overlay]'});sense.ui.widget.Overlay=Class.create(sense.ui.widget.Base,{defaults:{defaultWidth:500,viewportPadding:20,errorMessage:'Sorry, an unexpected error occurred',imageReplaceHeaders:false,backgroundClicksCloseOverlay:true},refs:{},overlayHtml:'<div class="uiOverlayHead"><a href="#" class="uiOverlayClose"><span>Close</span></a><h2></h2><div class="clear"></div></div><div class="uiOverlayBody"></div>',loadingHtml:'<div class="uiOverlayLoading"></div>',imageTemplate:new Template('<div class="uiOverlayImage" style="width:#{width}px;"><img src="#{src}" /></div>'),initialize:function($super,element,options){options=Object.extend(this.defaults,options);$super(element,options);if(this.element){switch(this.getType(this.element)){case'function':this.withFunc(this.element);break;case'link':this.withLink(this.element);break;default:this.withHTML(this.element);break;}}},getType:function(v){if(v===undefined){var type='undefined';}else if(typeof v=="string"){var type='string';}else if(v.nodeType){var type=(v.tagName=='A')?'link':'element';}else if(!!v&&typeof v!="string"&&!v.nodeName&&v.constructor!=Array&&/function/i.test(v+"")){var type='function';}
return type;},withFunc:function(func){this.loading();func.bind(this)();},withHTML:function(html){this.reveal(html);},withLink:function(link){var imgTypes=['png','jpg','jpeg','gif'];var imgRegEx=new RegExp('\.'+imgTypes.join('|')+'$','i');var divRegEx=/#/;this.imgHandler=this.image;this.urlHandler=this.load;if(divRegEx.test(link.href)){var clickHandler=this.divHandler.bind(this);}else if(imgRegEx.test(link.href)){var clickHandler=this.imgHandler.bind(this);}else{var clickHandler=this.urlHandler.bind(this);}
if(link.rel!='overlay'){var opts={};var optPairs=link.rel.split('|');optPairs.each(function(pair){var pair=pair.split('=');opts[pair[0]]=pair[1];});}
link.observe('click',function(e){e.stop();clickHandler(link.href,opts);}.bind(this));},divHandler:function(url,opts){var page=window.location.href.split('#')[0];var id=url.replace(page+'#','').replace('#','');var node=$(id);this.reveal(node,opts);},image:function(url,opts){this.loading();var img=new Image();img.onload=function(){this.reveal(this.imageTemplate.evaluate(img),opts);}.bind(this);img.src=url;},load:function(url,opts){var match=url.match(/:\/\/(.*?)(?:[:\/]|$)/)
var local=!(match&&document.domain!=match[1]);if(local){this.loading();new Ajax.Request(url,{method:'get',onSuccess:function(transport){var data=transport.responseJSON;if(data&&data.redirect){window.location.href=data.redirect;}else{this.reveal(transport.responseText,opts);}}.bind(this),onFailure:function(){this.reveal(this.options.errorMessage,opts);}.bind(this)});}else{this.iframe(url,opts);}},iframe:function(url,opts){var iframe=new Element('iframe',{'src':url,'scroll':'no','frameborder':'no'}).addClassName('uiOverlayIframe');this.reveal(iframe,Object.extend({'displayContentFlush':true,'displayContentFullScreen':true},opts));},create:function(){if(this.refs.inited){this.destroy();}
this.refs.inited=true;this.refs.container=new Element('div').addClassName('uiOverlay').hide();this.refs.background=new Element('div').addClassName('uiOverlayBackground').hide();this.refs.iframeShim=new Element('iframe',{'src':'/javascripts/blank.html','scroll':'no','frameborder':'no'}).addClassName('uiOverlayShim').hide();if(!this.refs.container||!this.refs.background||!this.refs.iframeShim)return;if(this.options.displayOverlayWithPositionFixed){this.refs.container.setStyle({position:'fixed'});}
this.refs.container.insert(this.overlayHtml);$(document.body).insert(this.refs.container);$(document.body).insert(this.refs.background);$(document.body).insert(this.refs.iframeShim);this.contentArea=this.refs.container.down('.uiOverlayBody');this.headingArea=this.refs.container.down('.uiOverlayHead');this.headingText=this.headingArea.down('h2');this.closeLink=this.headingArea.down('a.uiOverlayClose');if(this.temporaryOpts.displayContentFlush){this.contentArea.setStyle({'padding':0});}
this.refs.closeHandler=this.close.bindAsEventListener(this);this.refs.resizeAndPositionHandler=this.resizeAndPosition.bindAsEventListener(this);this.refs.positionHandler=this.position.bindAsEventListener(this);this.closeLink.observe('click',this.refs.closeHandler);Event.observe(window,'resize',this.refs.resizeAndPositionHandler);if(this.options.backgroundClicksCloseOverlay){this.refs.background.observe('click',this.refs.closeHandler);this.refs.background.setStyle({cursor:'pointer'});}
if(this.options.displayOverlayWithPositionOnScroll){Event.observe(window,'scroll',this.refs.positionHandler);}
window.currentOverlay=this;},destroy:function(){if(!this.refs.inited)return;Event.stopObserving(window,'resize',this.refs.resizeAndPositionHandler);if(this.options.backgroundClicksCloseOverlay){this.refs.background.stopObserving('click',this.refs.closeHandler);}
if(this.options.displayOverlayWithPositionOnScroll){Event.stopObserving(window,'scroll',this.refs.positionHandler);}
this.refs.container.remove();this.refs.background.remove();this.refs.iframeShim.remove();this.refs.inited=null;this.refs.container=null;this.refs.background=null;this.refs.iframeShim=null;if(window.currentOverlay)window.currentOverlay=null;},loading:function(){this.reveal(this.loadingHtml,{'isLoading':true});},display:function(){if(this.temporaryOpts.isLoading){this.headingArea.hide();}else{this.headingArea.show();}
this.refs.container.show();this.refs.background.show();this.refs.iframeShim.show();},close:function(e){if(e&&this.temporaryOpts.isLoading)return;this.toggleUnderlyingFlash(true);this.reinstateContent();this.destroy();if(e)e.stop();},getContentElement:function(){var elems=this.contentArea.childElements();return(elems.length==1)?elems.first():false;},resizeAndPosition:function(e){this.resize();this.position();this.resizeIframeShim();this.resizeBackground();},resize:function(){this.resizeWidth();this.resizeHeight();},resizeWidth:function(){var contentElement=this.getContentElement();var maxW=this.maxContentWidth();if(this.temporaryOpts.contentWidth){var w=parseInt(this.temporaryOpts.contentWidth,10);}else if(this.temporaryOpts.displayContentFullScreen){var w=maxW;}else if(contentElement){var w=contentElement.getWidth();}else{var w=this.options.defaultWidth;}
if(w>maxW)w=maxW;if(contentElement&&this.temporaryOpts.displayContentFlush&&this.temporaryOpts.displayContentFullScreen){contentElement.setStyle({'width':this.px(w)});}
this.refs.container.setStyle({'width':this.px(w+this.getHorizontalPadding())});},resizeHeight:function(){var contentElement=this.getContentElement();var maxH=this.maxContentHeight();if(this.temporaryOpts.contentHeight){var h=parseInt(this.temporaryOpts.contentHeight,10);}else if(this.temporaryOpts.displayContentFullScreen){var h=maxH;}else{this.contentArea.setStyle({'height':'auto'});var h=this.contentArea.getHeight()-this.getVerticalPadding();}
if(h>maxH)h=maxH;if(h==maxH){var w=this.refs.container.getWidth()-this.getHorizontalFurniture()+17;this.refs.container.setStyle({'width':this.px(w)});}
if(contentElement&&this.temporaryOpts.displayContentFlush&&this.temporaryOpts.displayContentFullScreen){contentElement.setStyle({'height':this.px(h)});if(h==maxH)contentElement.setStyle({'width':this.px(w-this.getHorizontalPadding())});}
this.contentArea.setStyle({'height':this.px(h)});},resizeIframeShim:function(){var t=this.refs.container.getStyle('top');var l=this.refs.container.getStyle('left');var w=this.refs.container.getWidth();var h=this.refs.container.getHeight();this.refs.iframeShim.setStyle({'top':t,'left':l,'width':this.px(w),'height':this.px(h)});},resizeBackground:function(){this.refs.background.setStyle({'height':'100%'});var h=document.documentElement.scrollHeight;this.refs.background.setStyle({'height':this.px(h)});},maxOverlayWidth:function(){return document.viewport.getWidth()-(this.options.viewportPadding*2);},maxOverlayHeight:function(){return document.viewport.getHeight()-(this.options.viewportPadding*2);},maxContentWidth:function(){return this.maxOverlayWidth()-this.getHorizontalFurniture()-this.getHorizontalPadding();},maxContentHeight:function(){return this.maxOverlayHeight()-this.getVerticalFurniture()-this.getVerticalPadding();},getHorizontalFurniture:function(){var w1=this.refs.container.getWidth();var w2=this.contentArea.getWidth();return w1-w2;},getHorizontalPadding:function(){var padLft=parseInt(this.contentArea.getStyle('paddingLeft'),10);var padRgt=parseInt(this.contentArea.getStyle('paddingRight'),10);return padLft+padRgt;},getVerticalFurniture:function(){var h1=this.refs.container.getHeight();var h2=this.contentArea.getHeight();return h1-h2;},getVerticalPadding:function(){var padTop=parseInt(this.contentArea.getStyle('paddingTop'),10);var padBtm=parseInt(this.contentArea.getStyle('paddingBottom'),10);return padTop+padBtm;},position:function(){var h1=document.viewport.getHeight();var w1=document.viewport.getWidth();var h2=this.refs.container.getHeight();var w2=this.refs.container.getWidth();if(this.options.displayOverlayWithPositionFixed){var scroll=[0,0];}else{var scroll=document.viewport.getScrollOffsets();}
var x=scroll[0]+(w1/2)-(w2/2);var y=scroll[1]+(h1/2)-(h2/2);if(y<this.options.viewportPadding)y=this.options.viewportPadding;this.refs.container.setStyle({top:this.px(y),left:this.px(x)});},px:function(n){return Math.round(n)+'px';},reveal:function(content,opts){if(!content)return;this.temporaryOpts=(typeof opts=='undefined')?{}:opts;this.create();this.display();if(typeof content!="string"){this.contentWasElement=true;this.contentWasAfter=content.previous();if(!this.contentWasAfter){var parent=content.up();if(parent&&parent.nodeName!='#document-fragment'){this.contentWasInside=parent;}}
if(!content.visible())content.show();}else{this.contentWasElement=false;}
this.contentArea.update();var values=this.getRadioValues(content);this.contentArea.insert(content);this.setRadioValues(content,values);var headingText=this.temporaryOpts.headingText||this.extractHeading();this.setHeadingText(headingText);if(!this.temporaryOpts.isLoading){document.fire('dom:updated');}
this.toggleUnderlyingFlash(false);this.resizeAndPosition();},setHeadingText:function(heading){if(heading&&this.options.imageReplaceHeaders){this.headingText.id=this.generateHeadingId(heading);this.headingText.update(new Element('span').addClassName('accessibility').update(heading));}else{this.headingText.update(heading);}},generateHeadingId:function(string){var words=string.replace(/[^a-z0-9 ]+/gi,'').split(/ +/);words=words.map(function(w){return w.slice(0,1).toUpperCase()+w.slice(1,w.length);});return'h'+words.join('');},extractHeading:function(content){var headingText='';var descendants=this.contentArea.descendants();for(var i=0;i<descendants.length;i++){if(descendants[i].tagName.match(/h[1-6]/i)){headingText=descendants[i].innerHTML;headingText=headingText.replace(/<[^>]*>/g,'');descendants[i].hide();break;}}
return headingText;},reinstateContent:function(){if(!this.contentWasElement)return;var content=this.contentArea.down();if(!content)return;var values=this.getRadioValues(content);if(this.contentWasAfter){this.contentWasAfter.insert({after:content.hide()});}else if(this.contentWasInside){this.contentWasInside.insert(content.hide());}
this.setRadioValues(content,values);},toggleUnderlyingFlash:function(toggle){var flashInOverlay=this.contentArea.select('object, embed');if(flashInOverlay||navigator.platform=='Linux i686'){$$('object, embed').each(function(flash){if(flashInOverlay&&flashInOverlay.include(flash))return;flash.setStyle({visibility:toggle?'visible':'hidden'});});}},getRadioValues:function(content){if(!this.refs.contentWasElement)return;var checks=content.select('input[type=radio], input[type=checkbox]');var values={};for(var i=0;i<checks.length;i++){if(checks[i].checked)values[checks[i].name]=checks[i].value;}
return values;},setRadioValues:function(content,values){if(!this.refs.contentWasElement)return;var checks=content.select('input[type=radio], input[type=checkbox]');for(var i=0;i<checks.length;i++){var key=checks[i].name;var val=checks[i].value;if(values[key]==val)checks[i].checked=true;}}});
