
if(typeof Object.getPrototypeOf!=="function"){if(typeof"test".__proto__==="object"){getPrototypeOf=function(object){return object.__proto__;};}else{getPrototypeOf=function(object){return object.constructor.prototype;};}}else{getPrototypeOf=Object.getPrototypeOf;}
instanceOf=function(object,constructor){var counter=0;while(object!=null){if(object==constructor.prototype)return true;object=getPrototypeOf(object);counter++;if(counter>100){Debug.warn('instanceOf appears to be stuck in an infinite loop: '+object);return false;}}
return false;}
Extend=function(extender,base){if(typeof base=='object'){for(prop in base)extender[prop]=base[prop];extender.superclass=base;return base;}else{var baseInstance=new base();for(prop in baseInstance)extender.prototype[prop]=baseInstance[prop];extender.constructor=extender;extender.prototype.superclass=base.prototype;return baseInstance;}}
function Base(){var instanceCount=0;};Base.prototype._instance;Base.prototype.toString=function(){return'[object Base]';}
Base.prototype.enforceSingleton=function(){return getPrototypeOf(this)._singleton(this);}
Base.prototype.getInstance=function(){return this._instance;};Base.prototype.getInstanceCount=function(){return instanceCount;}
Base.prototype.incrementInstanceCount=function(){if(!this.getInstance())instanceCount++;}
Base.prototype._singleton=function($instance){if($instance&&this.getInstance()){return false;}else{if($instance){this._instance=$instance;instanceCount=1;}
return true;}}
Extend(EventDispatcher,Base);function EventDispatcher(){}
EventDispatcher.prototype.listeners;EventDispatcher.prototype.toString=function(){return'[object EventDispatcher]';}
EventDispatcher.prototype.removeEventListener=function(type,method){if(!this.listeners)this.listeners=[];for(var i=0;i<this.listeners.length;i++){if(this.listeners[i].method==method&&this.listeners[i].type==type)this.listeners.splice(i,1);}
this.eListenersChange();}
EventDispatcher.prototype.getTotalListeners=function(){if(!this.listeners)this.listeners=[];return this.listeners.length;}
EventDispatcher.prototype.addEventListener=function(type,method){if(!this.listeners)this.listeners=[];if(type!=undefined&&method!=undefined){var shouldPush=true;for(var i=0;i<this.listeners.length;i++)
if(this.listeners[i].method==method&&this.listeners[i].type==type)shouldPush=false;if(shouldPush){this.listeners.push({type:type,method:method});}
this.eListenersChange();}else{Debug.log('invalid listener: type- '+type+', method- '+method);}}
EventDispatcher.prototype.dispatchEvent=function(eventType,e){if(!this.listeners)this.listeners=[];for(var i=0;i<this.listeners.length;i++){if(this.listeners[i].type==eventType)this.listeners[i].method(e);}}
EventDispatcher.prototype.eListenersChange=function(){}
String.prototype.toCamelCase=function(){return this.replace(/&/g,'and').replace(/\s(.)/g,function($1){return $1.toUpperCase();}).replace(/\s/g,'').replace(/^(.)/,function($1){return $1.toLowerCase();});}
String.prototype.trim=function(){str=this.replace(/^\s+/,'');for(var i=str.length-1;i>=0;i--){if(/\S/.test(str.charAt(i))){str=str.substring(0,i+1);break;}}
return str;}
function getElementById2(id,node){if(node==undefined||node==document)return document.getElementById(id);if(node.id==id)return node;for(var x=node.children.length-1;x>=0;x--){var result=getElementById2(id,node.children[x]);if(result)return result;}}
var isMac=false;var isSafari=false;var isFirefox=false;var isMSIE=false;var isMSIE6=false;if(navigator.userAgent.indexOf("Macintosh")!=-1){isMac=true;}
if(navigator.userAgent.indexOf("Safari")!=-1){isSafari=true;}else if(navigator.userAgent.indexOf("MSIE")!=-1){isMSIE=true;if(navigator.userAgent.indexOf("MSIE 6.0")!=-1){isMSIE6=true;}}else if(navigator.userAgent.indexOf("Firefox")!=-1){isFirefox=true;}
var Utils={getQueryParam:function(name){name=name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");var regexS="[\\?&]"+name+"=([^&#]*)";var regex=new RegExp(regexS);var results=regex.exec(window.location.href);if(results==null)return'';else return decodeURIComponent(results[1].replace(/\+/g," "));},jsonParse:function(value){return eval('('+value+')');},ajaxCall:function(url,callback){$.ajax({url:url,success:callback,complete:function(xhr,status){if(status!='success')Debug.error('ajax error: '+status);}});},setCookie:function(name,value,expiration){var cookieString=name+'='+value;if(expiration){cookieString+=';expires='+expiration.toGMTString();}
document.cookie=cookieString;return cookieString;},getCookie:function(cookieName){var cookies=document.cookie;var cookieLength=cookieName.length;var cookieStart=cookies.indexOf(cookieName);var cookieEnd=cookies.indexOf(';',cookieStart);var cookieNotFound=(cookieStart==-1);if(cookieNotFound){return"";}else{return cookies.substring(cookieStart+cookieLength+1,(cookieEnd==-1?cookies.length:cookieEnd));}}}
var debugConsole;var debugOutput;var injectionField;var Debug={enabled:(Utils.getQueryParam('debug')=='true')||(window.location.host.indexOf('localhost')!=-1),nativeConsole:("console"in window),log:function(val){if(this.enabled){if(this.nativeConsole)console.log(val);if(debugConsole){var newText=document.createElement('span');newText.style.color='#000000';newText.style.display='block';newText.appendChild(document.createTextNode(val));debugOutput.appendChild(newText);debugOutput.scrollTop=debugOutput.scrollHeight;}}},info:function(val){if(this.enabled){if(this.nativeConsole)console.info(val);if(debugConsole){var newText=document.createElement('span');newText.style.color='#0000FF';newText.style.display='block';newText.appendChild(document.createTextNode(val));debugOutput.appendChild(newText)
debugOutput.scrollTop=debugOutput.scrollHeight;}}},warn:function(val){if(this.enabled){if(this.nativeConsole)console.warn(val);if(debugConsole){var newText=document.createElement('span');newText.style.color='#FFCC00';newText.style.display='block';newText.appendChild(document.createTextNode(val));debugOutput.appendChild(newText);debugOutput.scrollTop=debugOutput.scrollHeight;}}},error:function(val){if(this.enabled){if(this.nativeConsole)console.error(val);if(debugConsole){var newText=document.createElement('span');newText.style.color='#FF0000';newText.style.display='block';newText.appendChild(document.createTextNode(val));debugOutput.appendChild(newText);debugOutput.scrollTop=debugOutput.scrollHeight;}}},init:function(){if(this.enabled&&!debugConsole){debugConsole=document.createElement('div');debugConsole.id='debugConsole';debugConsole.style.width='100%';debugConsole.style.height='200px';debugConsole.style.overflow='hidden';debugConsole.style.backgroundColor='#FFFFFF';debugConsole.style.border='1px solid #000';debugConsole.style.position='fixed';debugConsole.style.bottom='0px';debugConsole.style.left='0px';debugConsole.style.padding='0px';debugConsole.style.zIndex='1000';debugConsole.style.display='none';debugOutput=document.createElement('div');debugOutput.id='debugOutput';debugOutput.style.width='100%';debugOutput.style.height='180px';debugOutput.style.overflowX='hidden';debugOutput.style.overflowY='scroll';debugOutput.style.padding='0px';debugConsole.appendChild(debugOutput);injectionField=document.createElement('input');injectionField.id='injectionField';injectionField.type='text';injectionField.style.width='100%';injectionField.style.padding='0px';debugConsole.appendChild(injectionField);injectionField.onkeyup=function(e){e=window.event?window.event:e;if(e.keyCode==13){Debug.info("injecting: "+injectionField.value);try{var response=eval(injectionField.value);if(response!=undefined)Debug.info(response);}catch(e){Debug.error(e);}
injectionField.value="";}};var bodyTag=document.getElementsByTagName("body")[0];bodyTag.appendChild(debugConsole);document.onkeydown=function(e){e=window.event?window.event:e;if(e.keyCode==192&&e.ctrlKey){debugConsole.style.display=(debugConsole.style.display=='none')?'block':'none';}}}}}
Extend(JsprSite,EventDispatcher);function JsprSite($indexPage){this.enforceSingleton();var self=this;var _pageManager=undefined;var _indexPage=$indexPage;var lastHash='';var hashCache='';var hashInterval;var forcedHashChange=null;var _msie=false;var _swfAddress=false;var _navManager;this.showDeepLinks=true;this.removeDeepLinkForIndex=false;init=function(){var agent=navigator.userAgent.toLowerCase()
_msie=/msie/.test(agent)&&!/opera/.test(agent);_swfAddress=(typeof SWFAddress!='undefined');}
this.create=function($configData){if(typeof $configData=='string'){Utils.ajaxCall($configData,configDataLoaded);}else{finalizeCreate($configData);}}
this.showPage=function(newPage,pageSource){var pageInst=_pageManager.showPage(newPage,pageSource);pageInst.addEventListener(JsprEvents.DEEP_LINK_CHANGED,eDeepLinkChanged);return pageInst}
this.queuePage=function(newPage){var pageInst=_pageManager.queuePage(newPage);pageInst.addEventListener(JsprEvents.DEEP_LINK_CHANGED,eDeepLinkChanged);return pageInst;}
this.getDeepLink=function(){var fullHash=document.location.hash;if(fullHash.substr(0,1)=="#")fullHash=fullHash.substr(1);if(fullHash.substr(0,1)=="!")fullHash=fullHash.substr(1);if(fullHash.substr(0,1)=="/")fullHash=fullHash.substr(1);return fullHash;}
this.pageManager=function(val){if(val!==undefined)_pageManager=val;return _pageManager;}
this.indexPage=function(val){if(val!==undefined)_indexPage=val;return _indexPage;}
this.currentPage=function(){return _pageManager.currentPage();}
this.pages=function(){return _pageManager.pages();}
this.deeplinks=function(){return _pageManager.deeplinks();}
var configDataLoaded=function(data,status){finalizeCreate(data);}
var finalizeCreate=function($configData){if($configData!=undefined){if(typeof $configData=='string')$configData=Utils.jsonParse($configData);if($configData.css){for(var i=$configData.css.length-1;i>=0;i--){$("<link>").prependTo($('head')).attr({type:'text/css',rel:'stylesheet'}).attr('href',$configData.css[i]);}}
if($configData.pageManager)_pageManager=eval($configData.pageManager);this.showDeepLinks=$configData.showDeepLinks===true;this.removeDeepLinkForIndex=$configData.removeDeepLinkForIndex===true;_pageManager.custom404=eval($configData.custom404);if($configData.navManager){if($configData.navManager.itemContainer)
NavManagerOptions.itemContainer=eval($configData.navManager.itemContainer);if($configData.navManager.wildcard)
NavManagerOptions.wildcard=$configData.navManager.wildcard;if($configData.navManager.itemTemplate)
NavManagerOptions.itemTemplate=eval($configData.navManager.itemTemplate);if($configData.navManager.rolloverTemplate)
NavManagerOptions.rolloverTemplate=$configData.navManager.rolloverTemplate;if($configData.navManager.itemPrefix)
NavManagerOptions.itemPrefix=$configData.navManager.itemPrefix;if($configData.navManager.rolloverClass)
NavManagerOptions.rolloverClass=$configData.navManager.rolloverClass;if($configData.navManager.selectedClass)
NavManagerOptions.selectedClass=$configData.navManager.selectedClass;if($configData.navManager.defaultClass)
NavManagerOptions.defaultClass=$configData.navManager.defaultClass;if($configData.navManager.pages){var pageData=$configData.navManager.pages;for(var x=0;x<pageData.length;x++){NavManagerOptions.pages.push(eval(pageData[x]));}
_indexPage=NavManagerOptions.pages[0];}
_navManager=new JsprNavManager();}
if($configData.subPages){for(var x=0;x<$configData.subPages.length;x++){try{_pageManager.queuePage(eval($configData.subPages[x]));}catch(e){}}}}
if(_indexPage==undefined)
_indexPage=(_pageManager.pages().length>0)?_pageManager.pages()[0]:new JsprPage('index');if(_pageManager==undefined)_pageManager=new JsprPageManager();if($configData.deeplinks){_pageManager.setDeeplinks($configData.deeplinks);}
_pageManager.addEventListener(JsprEvents.PAGE_CHANGED,ePageChangeHandler);if(this.showDeepLinks)startDeepLinkListener();eHashChangeHandler({init:true});}
var startDeepLinkListener=function(){if(_swfAddress){Debug.info('using SWFAddress for detecting hash changes')
SWFAddress.setStrict(false);SWFAddress.addEventListener(SWFAddressEvent.CHANGE,eHashChangeHandler);}else if("onhashchange"in window){Debug.info('using native hashchange event');window.addEventListener("hashchange",eHashChangeHandler,false);}else{Debug.info('using setInterval to check for hash changes');Debug.warn('Warning: Back button will not work properly in IE unless SWFAddress is used.');hashCache=document.location.hash;hashInterval=setInterval(checkHash,400);}}
var checkHash=function(){if(hashCache!=document.location.hash){hashCache=document.location.hash;eHashChangeHandler();}}
var eHashChangeHandler=function(e){var fullHash=e.path?e.path:document.location.hash;if(fullHash.substr(0,1)=="#")fullHash=fullHash.substr(1);if(fullHash.substr(0,1)=="!")fullHash=fullHash.substr(1);if(fullHash.substr(0,1)=="/")fullHash=fullHash.substr(1);if(fullHash.lastIndexOf("/")==(fullHash.length-1))fullHash=fullHash.substr(0,fullHash.length-1);if((fullHash!=lastHash)&&(fullHash!="/")&&(fullHash!="")){if((fullHash.indexOf("home/")==0)&&(fullHash.length>5)){_gaq.push(['_trackEvent','View','HomePageModule',fullHash.substring(5)]);}
if(((lastHash=="")&&(fullHash.indexOf("home/")==0))||(fullHash.indexOf("home/")==-1)){var pagePath=(fullHash.indexOf("home/")==0)?"home":fullHash;_gaq.push(['_trackPageview','/'+pagePath]);}
lastHash=fullHash;}
var shortHash=fullHash;if(fullHash==forcedHashChange){forcedHashChange=null;return;}else if(fullHash==""){shortHash=_indexPage.shortName;}else{shortHash=fullHash.split('/')[0];}
if(e.init){_pageManager.showPage(shortHash);}else{if(typeof _pageManager.currentPage()!='undefined'){if(shortHash!=_pageManager.currentPage().shortName){_pageManager.showPage(shortHash);}}}
if(typeof _pageManager.currentPage()!='undefined')
_pageManager.currentPage().deepLinkChanged(fullHash);}
var ePageChangeHandler=function(e){if(_pageManager.currentPage()==_indexPage&&self.removeDeepLinkForIndex){forcedHashChange='';if(_swfAddress)SWFAddress.setValue('/');else document.location.hash='';}else if(self.getDeepLink().indexOf(_pageManager.currentPage().shortName)!=0){forcedHashChange=_pageManager.currentPage().shortName;if(_swfAddress){try{SWFAddress.setValue("!/"+forcedHashChange);}catch(e){Debug.error(e);}}
else
document.location.hash="#!/"+forcedHashChange;}}
var eDeepLinkChanged=function(e){if(e.target==_pageManager.currentPage()){var dl=e.deepLink;if(dl.substr(0,1)=="#")dl=dl.substr(1);if(dl.substr(0,1)=="!")dl=dl.substr(1);if(dl.substr(0,1)=="/")dl=dl.substr(1);if(dl.indexOf(_pageManager.currentPage().shortName)!=0)dl=_pageManager.currentPage().shortName+'/'+dl;if(_swfAddress){try{SWFAddress.setValue('!/'+dl);}catch(e){Debug.error(e);}}
else
document.location.hash='#!/'+dl;}}
init();}
JsprSite.prototype.toString=function(){return'[object JsprSite]'};
Extend(JsprPageManager,EventDispatcher);function JsprPageManager($rootElement){var self=this;var _pages=[];var _deeplinks=[];var _currentPage;this.rootElement;this.custom404;init=function(){self.rootElement=$rootElement==undefined?document.getElementsByTagName('body')[0]:$rootElement;}
this.showPage=function(newPage,pageSource){newPage=self.queuePage(newPage,pageSource);if(newPage&&newPage!=_currentPage){if(newPage.pageName==undefined)newPage.pageName=generatePageName();Debug.log("showing page: "+newPage.pageName);while(self.rootElement.firstChild)self.rootElement.removeChild(self.rootElement.firstChild);self.rootElement.appendChild(newPage.content());if(_currentPage)_currentPage.lostFocus();_currentPage=newPage;self.dispatchEvent(JsprEvents.PAGE_CHANGED,{newPage:newPage});newPage.gainedFocus();}else if(newPage==_currentPage){_currentPage.setDeepLink('');}
return newPage;}
this.queuePage=function(newPage,pageSource){switch(typeof newPage){case'string':for(var x=0;x<_pages.length;x++){if(_pages[x].pageName==newPage||_pages[x].shortName==newPage)return _pages[x];}
for(var x=0;x<_deeplinks.length;x++){if(_deeplinks[x].pageName==newPage||_deeplinks[x].shortName==newPage){pageSource=_deeplinks[x].pageSource;break;}}
if(pageSource!=null){var scriptLoaded=false;var scriptNode=document.createElement('script');scriptNode.onload=function(){if(!scriptLoaded){scriptLoaded=true;Debug.log("script loaded for: "+newPage);self.showPage(newPage);SWFAddress.dispatchEvent(new SWFAddressEvent(SWFAddressEvent.CHANGE));}}
scriptNode.onreadystatechange=function(){if((this.readyState=='loaded'||this.readyState=='complete')&&!scriptLoaded){scriptLoaded=true;Debug.log("script loaded for: "+newPage);self.showPage(newPage);SWFAddress.dispatchEvent(new SWFAddressEvent(SWFAddressEvent.CHANGE));}}
scriptNode.type='text/javascript';scriptNode.src=pageSource;document.body.appendChild(scriptNode);return false;}
if(self.custom404){var custom404=new self.custom404();custom404.pageName=custom404.shortName=newPage;return custom404;}else{Debug.warn("Warning: No page was found with the specified pageName: '"+newPage+"'");return false;}
case'object':for(var y=0;y<_pages.length;y++){if(_pages[y]==newPage)return _pages[y];}
Debug.log('adding new page: '+newPage.pageName);_pages.push(newPage);return newPage;case'function':newPage=new newPage();_pages.push(newPage);return newPage;}}
this.setDeeplinks=function(deeplinks){_deeplinks=deeplinks;}
var generatePageName=function(){var indexNum=_pages.length;while(getPageIndexByName("page"+indexNum)!=-1)indexNum++;return"page"+indexNum;}
var getPageIndexByName=function(pageName){for(var x=0;x<_pages.length;x++){if(_pages[x].pageName==pageName)return x;}
return-1;}
this.currentPage=function(){return _currentPage;}
this.pages=function(){return _pages;}
this.deeplinks=function(){return _deeplinks;}
init();}
JsprPageManager.prototype.toString=function(){return'[object JsprPageManager]'};
Extend(JsprPage,EventDispatcher);function JsprPage($pageName,$contentSource){var self=this;var _content;this.pageName=$pageName;this.shortName=$pageName!=undefined?$pageName.toCamelCase():undefined;init=function(){_content=document.createElement('div');if($contentSource!=undefined){Utils.ajaxCall($contentSource,contentLoaded);}}
var contentLoaded=function(data,status){_content.innerHTML=data;}
this.content=function(){return _content;}
init();}
JsprPage.prototype.lostFocus=function(){Debug.log(this.shortName+' lost focus');}
JsprPage.prototype.gainedFocus=function(){Debug.log(this.shortName+' gained focus');}
JsprPage.prototype.deepLinkChanged=function(newDeepLink){Debug.log('deepLinkChanged: '+newDeepLink);}
JsprPage.prototype.setDeepLink=function(deepLink){this.dispatchEvent(JsprEvents.DEEP_LINK_CHANGED,{deepLink:deepLink,target:this});}
JsprPage.prototype.toString=function(){return'[object JsprPage]';}
var JsprEvents={PAGE_CHANGED:'pageChanged',DEEP_LINK_CHANGED:'deepLinkChanged'};
Extend(JsprNavManager,EventDispatcher);function JsprNavManager(){var self=this;var _pages=[];var _navItems=[];var _itemContainer;var _wildcard;var _itemTemplate;var _rolloverTemplate;var _itemPrefix;var _jspr;var _defaultClass;var _rolloverClass;var _selectedClass;init=function(){_jspr=JsprSite.prototype.getInstance();_itemContainer=NavManagerOptions.itemContainer;_wildcard=NavManagerOptions.wildcard;_itemTemplate=NavManagerOptions.itemTemplate;_rolloverTemplate=NavManagerOptions.rolloverTemplate;_itemPrefix=NavManagerOptions.itemPrefix;_defaultClass=NavManagerOptions.defaultClass;_rolloverClass=NavManagerOptions.rolloverClass;_selectedClass=NavManagerOptions.selectedClass;while(_itemContainer.firstChild)_itemContainer.removeChild(_itemContainer.firstChild);for(var x=0;x<NavManagerOptions.pages.length;x++){self.addPage(NavManagerOptions.pages[x]);}
_jspr.pageManager().addEventListener(JsprEvents.PAGE_CHANGED,ePageChangedHandler);ePageChangedHandler({newPage:_jspr.currentPage()});}
this.addPage=function(newPage){newPage=_jspr.queuePage(newPage);if(!_itemContainer)createItemContainer();if(!_itemTemplate)createItemTemplate();var newItem;if(typeof _itemTemplate=='string'&&_itemTemplate!=''){newItem=document.createElement('div');var itemOff=document.createElement('div');itemOff.id='navItemOff';var templateHTML=_itemTemplate;while(templateHTML.indexOf(_wildcard)!=-1){templateHTML=templateHTML.replace(_wildcard,newPage.pageName);}
itemOff.innerHTML=templateHTML;newItem.appendChild(itemOff);if(typeof _rolloverTemplate=='string'&&_rolloverTemplate!=''){var itemOn=document.createElement('div');itemOn.id='navItemOn';var rolloverHTML=_rolloverTemplate;while(rolloverHTML.indexOf(_wildcard)!=-1){rolloverHTML=rolloverHTML.replace(_wildcard,newPage.pageName);}
itemOn.innerHTML=rolloverHTML;itemOn.style.display='none';newItem.appendChild(itemOn);}}else{newItem=_itemTemplate.cloneNode(false);}
var itemRollOver=function(){newItem.onmouseover=function(){return;};newItem.onmouseout=itemRollOut;newItem.className=_rolloverClass;var rolloverDiv=getElementById2('navItemOn',newItem);var rolloffDiv=getElementById2('navItemOff',newItem);if(rolloverDiv&&rolloffDiv){rolloverDiv.style.display='inline';rolloffDiv.style.display='none';}}
var itemRollOut=function(){var isCurPage=(_jspr.currentPage()==newItem.jsprPage);newItem.onmouseout=function(){return;};newItem.onmouseover=itemRollOver;newItem.className=isCurPage?_selectedClass:_defaultClass;var rolloverDiv=getElementById2('navItemOn',newItem);var rolloffDiv=getElementById2('navItemOff',newItem);if(rolloverDiv&&rolloffDiv){rolloverDiv.style.display=isCurPage?'inline':'none';rolloffDiv.style.display=isCurPage?'none':'inline';}}
newItem.className=_defaultClass;newItem.id=_itemPrefix+''+(_navItems.length+1);newItem.jsprPage=newPage;newItem.onclick=function(){_jspr.showPage(newPage);};newItem.onmouseover=itemRollOver;_itemContainer.appendChild(newItem);_pages.push(newPage);_navItems.push(newItem);return newItem;}
var createItemContainer=function(){_itemContainer=document.createElement('ul');_itemContainer.style.display='block';_itemContainer.style.litStyleItem='none';_itemContainer.style.margin='10px';_itemContainer.style.padding='0px';var bodyTag=document.getElementsByTagName('body')[0];bodyTag.insertBefore(_itemContainer,bodyTag.firstChild);}
var createItemTemplate=function(){switch(_itemContainer.tagName.toLowerCase()){case'ul':_itemTemplate=document.createElement('li');break;case'tr':case'table':_itemTemplate=document.createElement('td');break;default:_itemTemplate=document.createElement('a');break;}
_itemTemplate.style.display='inline';_itemTemplate.style.padding='0px 10px';_itemTemplate.className=_defaultClass;}
var ePageChangedHandler=function(e){for(var x=_pages.length-1;x>=0;x--){var thisItem=_navItems[x];thisItem.className=(_pages[x]==e.newPage)?_selectedClass:_defaultClass;thisItem.onmouseover.call(self);thisItem.onmouseout.call(self);}}
this.pages=function(){return _pages;}
this.navItems=function(){return _navItems;}
this.itemContainer=function(val){if(val){for(var x=0;x<_navItems.length;x++){val.appendChild(_navItems.children[x]);}
_itemContainer=val;}
return _itemContainer;}
init();}
JsprNavManager.prototype.toString=function(){return'[object JsprNavManager]';}
var NavManagerOptions={itemContainer:undefined,wildcard:undefined,itemTemplate:undefined,rolloverTemplate:undefined,itemPrefix:'navItem_',rolloverClass:'navItemOver',selectedClass:'navItemSelected',defaultClass:'navItem',pages:[],deeplinks:[]}
Extend(ResizeListener,EventDispatcher);function ResizeListener(){this.enforceSingleton();var self=this;window.onresize=function(){self.dispatchEvent('onresize');}}
ResizeListener.prototype.toString=function(){return'[object ResizeListener]';}
Extend(ResizeManager,EventDispatcher);function ResizeManager($rootElement){var self=this;var _rootElement;var _elements=[];var _resizeListener=ResizeListener.prototype.getInstance();var _running=false;this.minWidth=0;this.minHeight=0;this.maxWidth=0;this.maxHeight=0;this.callback;init=function(){_rootElement=$rootElement?$rootElement:window;if(!_resizeListener)_resizeListener=new ResizeListener();}
this.start=function(){_resizeListener.addEventListener('onresize',eResizeHandler);eResizeHandler();_running=true;}
this.stop=function(){_resizeListener.removeEventListener('onresize',eResizeHandler);_running=false;}
this.addElement=function($elem,$hAnchor,$vAnchor,$fill,$maintainAspect,$offset){if(typeof $elem=='string')$elem=findElement($elem);if(!$elem){Debug.warn('Unable to find element');return;}
$elem.style.position='absolute';var newElement={};newElement.elem=$elem;newElement.hAnchor=validateAnchor($hAnchor,true);newElement.vAnchor=validateAnchor($vAnchor,false);newElement.fill=validateFill($fill);newElement.maintainAspect=validateMaintainAspect($maintainAspect);if(newElement.maintainAspect)newElement.aspectRatio=$elem.offsetWidth/$elem.offsetHeight;newElement.offset=validateOffset($offset);_elements.push(newElement);}
this.removeElement=function($elem){if(typeof $elem=='string')$elem=findElement($elem);for(var x=_elements.length-1;x>=0;x--){var thisElement=_elements[x];if(thisElement.elem==$elem){_elements.splice(x,1);return true;}}
return false;}
this.forceUpdate=function(){eResizeHandler();}
var eResizeHandler=function(e){var sizeObj=getElementSize(_rootElement);if(sizeObj.width==0||sizeObj.height==0)return;var ltWidth,ltHeight,gtWidth,gtHeight;ltWidth=ltHeight=gtWidth=gtHeight=false;if(sizeObj.width<self.minWidth&&self.minWidth>0){sizeObj.width=self.minWidth;ltWidth=true;}else if(sizeObj.width>self.maxWidth&&self.maxWidth>0){sizeObj.width=self.maxWidth;gtWidth=true;}
if(sizeObj.height<self.minHeight&&self.minHeight>0){sizeObj.height=self.minHeight;ltHeight=true;}else if(sizeObj.height>self.maxHeight&&self.maxHeight>0){sizeObj.height=self.maxHeight;gtHeight=true;}
for(var x=_elements.length-1;x>=0;x--){var thisElement=_elements[x];if(thisElement.fill>0){var targetWidth,targetHeight;var rootRatio=(sizeObj.width*thisElement.fill-thisElement.offset.left-thisElement.offset.right)/(sizeObj.height*thisElement.fill-thisElement.offset.top-thisElement.offset.bottom);if(thisElement.maintainAspect==ResizeManager.LETTERBOX){if(rootRatio>thisElement.aspectRatio){targetHeight=(sizeObj.height*thisElement.fill-thisElement.offset.top-thisElement.offset.bottom);targetWidth=(targetHeight*thisElement.aspectRatio);}else{targetWidth=(sizeObj.width*thisElement.fill-thisElement.offset.left-thisElement.offset.right);targetHeight=(targetWidth/thisElement.aspectRatio);}}else if(thisElement.maintainAspect==ResizeManager.CROP){if(rootRatio>thisElement.aspectRatio){targetWidth=(sizeObj.width*thisElement.fill-thisElement.offset.left-thisElement.offset.right);targetHeight=(targetWidth/thisElement.aspectRatio);}else{targetHeight=(sizeObj.height*thisElement.fill-thisElement.offset.top-thisElement.offset.bottom);targetWidth=(targetHeight*thisElement.aspectRatio);}}else{targetWidth=(sizeObj.width*thisElement.fill-thisElement.offset.left-thisElement.offset.right);targetHeight=(sizeObj.height*thisElement.fill-thisElement.offset.top-thisElement.offset.bottom);}
if(ltWidth||gtWidth)thisElement.elem.style.width=targetWidth+'px';else thisElement.elem.style.width=(targetWidth/sizeObj.width*100)+"%";if(ltHeight||gtHeight)thisElement.elem.style.height=targetHeight+'px';else thisElement.elem.style.height=(targetHeight/sizeObj.height*100)+"%";}
if(thisElement.hAnchor==ResizeManager.CENTER){var targetLeft=(sizeObj.width/2-thisElement.elem.offsetWidth/2-thisElement.offset.left);if(ltWidth||gtWidth)thisElement.elem.style.left=targetLeft+'px';else thisElement.elem.style.left=(targetLeft/sizeObj.width*100)+'%';}else if(thisElement.hAnchor==ResizeManager.RIGHT){if(ltWidth||gtWidth){thisElement.elem.style.left=(sizeObj.width-thisElement.elem.offsetWidth-thisElement.offset.right)+'px';thisElement.elem.style.right='auto';}else{thisElement.elem.style.right=thisElement.offset.right+'px';thisElement.elem.style.left='auto';}}else{thisElement.elem.style.left=thisElement.offset.left+'px';}
if(thisElement.vAnchor==ResizeManager.CENTER){var targetTop=(sizeObj.height/2-thisElement.elem.offsetHeight/2-thisElement.offset.top);if(ltHeight||gtHeight)thisElement.elem.style.top=targetTop+'px';else thisElement.elem.style.top=(targetTop/sizeObj.height*100)+'%';}else if(thisElement.vAnchor==ResizeManager.BOTTOM){if(ltHeight||gtHeight){thisElement.elem.style.top=(sizeObj.height-thisElement.elem.offsetHeight-thisElement.offset.bottom)+'px';thisElement.elem.style.bottom='auto';}else{thisElement.elem.style.bottom=thisElement.offset.bottom+'px';thisElement.elem.style.top='auto';}}else{thisElement.elem.style.top=thisElement.offset.top+'px';}}
if(typeof self.callback==='function')
self.callback.call(self,sizeObj);}
var getElementSize=function($elem){var sizeObj={};if($elem==window){if(window.innerWidth){sizeObj.width=window.innerWidth;sizeObj.height=window.innerHeight;}else if(document.documentElement.offsetWidth){if((document.documentElement.offsetWidth>0)&&(document.documentElement.offsetHeight>0)){sizeObj.width=document.documentElement.offsetWidth;sizeObj.height=document.documentElement.offsetHeight;}else{sizeObj.width=document.body.offsetWidth;sizeObj.height=document.body.offsetHeight;}}else{sizeObj.width=document.body.offsetWidth;sizeObj.height=document.body.offsetHeight;}}else{sizeObj.width=$elem.offsetWidth;sizeObj.height=$elem.offsetHeight;}
return sizeObj;}
var findElement=function(id){return _rootElement==window?document.getElementById(id):getElementById2(id,_rootElement);}
var validateAnchor=function(anchor,horizontal){if(horizontal){switch(anchor){case ResizeManager.LEFT:case ResizeManager.CENTER:case ResizeManager.RIGHT:return anchor;default:return ResizeManager.LEFT;}}else{switch(anchor){case ResizeManager.TOP:case ResizeManager.CENTER:case ResizeManager.BOTTOM:return anchor;default:return ResizeManager.TOP;}}}
var validateFill=function(fill){if(typeof fill=='boolean')fill=fill?1:0;if(typeof fill!='number')fill=parseInt(fill);if(isNaN(fill))fill=0;if(fill>1)fill=1;if(fill<0)fill=0;return fill;}
var validateMaintainAspect=function(maintainAspect){if(typeof maintainAspect=='string'){switch(maintainAspect){case ResizeManager.LETTERBOX:case ResizeManager.CROP:case ResizeManager.NONE:return maintainAspect;break;default:return ResizeManager.NONE;}}}
var validateOffset=function(offset){if(typeof offset!='object')offset=parseInt(offset);if(typeof offset=='number')offset={left:offset,top:offset,right:offset,bottom:offset};if(offset instanceof Array)offset={left:offset[0],top:offset[1],right:offset[2],bottom:offset[3]};if(!offset.left)offset.left=0;if(!offset.top)offset.top=0;if(!offset.right)offset.right=0;if(!offset.bottom)offset.bottom=0;return offset;}
this.rootElement=function(){return _rootElement;}
this.running=function(){return _running;}
init();}
ResizeManager.TOP='top';ResizeManager.CENTER='center';ResizeManager.BOTTOM='bottom';ResizeManager.LEFT='left';ResizeManager.RIGHT='right';ResizeManager.LETTERBOX='letterbox';ResizeManager.CROP='crop';ResizeManager.NONE='none';
Environment.MOBILE="mobile";Environment.TABLET="tablet";Environment.DESKTOP="desktop";Environment.BB6="bb6";Environment.BLACKBERRY="bb";Environment.IOS="ios";Environment.ANDROID="android";Environment.IE="ie";Environment.UNKNOWN="unknown";function Environment(){if(Environment.prototype.instance)return Environment.prototype.instance;else Environment.prototype.instance=this;var self=this,_clientType,_clientPlatform,_isHTML5,_pixelRatio,_screenSize;this.clientType=function(){if(_clientType==undefined)_clientType=testForClientEnvironment();return _clientType;}
this.clientPlatform=function(){if(_clientPlatform==undefined)_clientPlatform=testClientPlatform();return _clientPlatform;}
this.isHTML5=function(){if(_isHTML5==undefined)_isHTML5=!!document.createElement('canvas').getContext;return _isHTML5;}
this.pixelRatio=function(){if(_pixelRatio==undefined)_pixelRatio=getDevicePixelRatio();return _pixelRatio;}
this.screenWidth=function(){if(_screenSize==undefined)_screenSize=getScreenSize();return _screenSize.width;}
this.screenHeight=function(){if(_screenSize==undefined)_screenSize=getScreenSize();return _screenSize.height;}
var testForClientEnvironment=function(){var isMobile=window.orientation!=undefined||window.blackberry!=undefined;var isTablet=isMobile&&self.screenWidth()>=768;if(isTablet)return Environment.TABLET;else if(isMobile)return Environment.MOBILE;else return Environment.DESKTOP;}
var testClientPlatform=function(){if(window.blackberry!=undefined){if(self.isHTML5())return Environment.BB6;else return Environment.BLACKBERRY;}else{if(navigator.userAgent.match(/iPod/i)||navigator.userAgent.match(/iPhone/i)||navigator.userAgent.match(/iPad/i))return Environment.IOS;else if(navigator.userAgent.match(/Android/i))return Environment.ANDROID;else if(window.ActiveXObject)return Environment.IE;}
return Environment.UNKNOWN;}
var getDevicePixelRatio=function(){if(typeof window.devicePixelRatio==='number')
return window.devicePixelRatio;else
return 1;}
var getScreenSize=function(){if(self.clientPlatform()===Environment.ANDROID){if(Math.abs(window.orientation)===90)
return{width:window.outerHeight/self.pixelRatio(),height:window.outerWidth/self.pixelRatio()};else
return{width:window.outerWidth/self.pixelRatio(),height:window.outerHeight/self.pixelRatio()};}else{return{width:screen.width,height:screen.height};}}}
Environment.prototype.toString=function(){return"[object Environment]";}
Environment.prototype.instance=new Environment();Environment.clientType=function(){return Environment.prototype.instance.clientType();}
Environment.clientPlatform=function(){return Environment.prototype.instance.clientPlatform();}
Environment.screenWidth=function(){return Environment.prototype.instance.screenWidth();}
Environment.screenHeight=function(){return Environment.prototype.instance.screenHeight();}
