pH8={};pH8.Version='2.0';pH8.CompatibleWithPrototype='1.6';if(Prototype.Version.indexOf(pH8.CompatibleWithPrototype)!==0&&console&&console.warn)
console.warn("This version of pH8 extensions is tested with Prototype "+pH8.CompatibleWithPrototype+" it may not work as expected with this version ("+Prototype.Version+")");pH8.Mixin={};if(!window.console){window.console={log:function(message){}};}
Element.addMethods({getClassParameters:function(element,prefix){element=$(element);if(arguments.length<2){prefix='param';}
var regex=new RegExp(prefix+'-(\\w*)=(\\S*)','g');var params={};while((result=regex.exec(element.className))!=null){params[result[1]]=result[2];}
return params;},getClassParameter:function(element,param,prefix){if(arguments.length<3){prefix='param';}
var regex=new RegExp(prefix+'-'+param+'=(\\S*)');var parts=regex.exec(element.className);if(parts){return parts[1];}}});Object.extend(String.prototype,{isDigits:function(){return(this.match(/^\d+$/)!==null);}});Object.extend(Number.prototype,{isInteger:function(){return(Math.round(this)===this);}});;Object.extend(Number.prototype,{toRadians:function(){return this*Math.PI/180;},toDegrees:function(){return this*180/Math.PI;}});pH8.Geo={};pH8.Geo.Point=Class.create({initialize:function(latitude,longitude){this.lat=latitude;this.lon=longitude;},calculatePointAtBearingAndDistance:function(bearing,distance){var a=6378388,b=6356911.946,f=1/297;var s=distance;var alpha1=bearing.toRadians();var sinAlpha1=Math.sin(alpha1),cosAlpha1=Math.cos(alpha1);var tanU1=(1-f)*Math.tan(this.lat.toRadians());var cosU1=1/Math.sqrt((1+tanU1*tanU1)),sinU1=tanU1*cosU1;var sigma1=Math.atan2(tanU1,cosAlpha1);var sinAlpha=cosU1*sinAlpha1;var cosSqAlpha=1-sinAlpha*sinAlpha;var uSq=cosSqAlpha*(a*a-b*b)/(b*b);var A=1+uSq/16384*(4096+uSq*(-768+uSq*(320-175*uSq)));var B=uSq/1024*(256+uSq*(-128+uSq*(74-47*uSq)));var sigma=s/(b*A),sigmaP=2*Math.PI;while(Math.abs(sigma-sigmaP)>1e-12){var cos2SigmaM=Math.cos(2*sigma1+sigma);var sinSigma=Math.sin(sigma),cosSigma=Math.cos(sigma);var deltaSigma=B*sinSigma*(cos2SigmaM+B/4*(cosSigma*(-1+2*cos2SigmaM*cos2SigmaM)-
B/6*cos2SigmaM*(-3+4*sinSigma*sinSigma)*(-3+4*cos2SigmaM*cos2SigmaM)));sigmaP=sigma;sigma=s/(b*A)+deltaSigma;}
var tmp=sinU1*sinSigma-cosU1*cosSigma*cosAlpha1;var lat2=Math.atan2(sinU1*cosSigma+cosU1*sinSigma*cosAlpha1,(1-f)*Math.sqrt(sinAlpha*sinAlpha+tmp*tmp));var lambda=Math.atan2(sinSigma*sinAlpha1,cosU1*cosSigma-sinU1*sinSigma*cosAlpha1);var C=f/16*cosSqAlpha*(4+f*(4-3*cosSqAlpha));var L=lambda-(1-C)*f*sinAlpha*(sigma+C*sinSigma*(cos2SigmaM+C*cosSigma*(-1+2*cos2SigmaM*cos2SigmaM)));var revAz=Math.atan2(sinAlpha,-tmp);return new pH8.Geo.Point(lat2.toDegrees(),this.lon+L.toDegrees());},calculateBoundingBoxForDistance:function(distance){return this.calculateBoundingBoxForDistances(distance,distance);},calculateBoundingBoxForDistances:function(vertical,horizontal){var left=this.calculatePointAtBearingAndDistance(-90,horizontal).lon;return new pH8.Geo.Box(this.calculatePointAtBearingAndDistance(0,vertical).lat,this.calculatePointAtBearingAndDistance(180,vertical).lat,left,2*this.lon-left);},calculateDistanceToPoint:function(point){var a=6378388,b=6356911.946,f=1/297;var L=(point.lon-this.lon).toRadians();var U1=Math.atan((1-f)*Math.tan(this.lat.toRadians()));var U2=Math.atan((1-f)*Math.tan(point.lat.toRadians()));var sinU1=Math.sin(U1),cosU1=Math.cos(U1);var sinU2=Math.sin(U2),cosU2=Math.cos(U2);var lambda=L,lambdaP,iterLimit=100;do{var sinLambda=Math.sin(lambda),cosLambda=Math.cos(lambda);var sinSigma=Math.sqrt((cosU2*sinLambda)*(cosU2*sinLambda)+
(cosU1*sinU2-sinU1*cosU2*cosLambda)*(cosU1*sinU2-sinU1*cosU2*cosLambda));if(sinSigma==0)return 0;var cosSigma=sinU1*sinU2+cosU1*cosU2*cosLambda;var sigma=Math.atan2(sinSigma,cosSigma);var sinAlpha=cosU1*cosU2*sinLambda/sinSigma;var cosSqAlpha=1-sinAlpha*sinAlpha;var cos2SigmaM=cosSigma-2*sinU1*sinU2/cosSqAlpha;if(isNaN(cos2SigmaM))cos2SigmaM=0;var C=f/16*cosSqAlpha*(4+f*(4-3*cosSqAlpha));lambdaP=lambda;lambda=L+(1-C)*f*sinAlpha*(sigma+C*sinSigma*(cos2SigmaM+C*cosSigma*(-1+2*cos2SigmaM*cos2SigmaM)));}while(Math.abs(lambda-lambdaP)>1e-12&&--iterLimit>0);if(iterLimit==0)return NaN;var uSq=cosSqAlpha*(a*a-b*b)/(b*b);var A=1+uSq/16384*(4096+uSq*(-768+uSq*(320-175*uSq)));var B=uSq/1024*(256+uSq*(-128+uSq*(74-47*uSq)));var deltaSigma=B*sinSigma*(cos2SigmaM+B/4*(cosSigma*(-1+2*cos2SigmaM*cos2SigmaM)-
B/6*cos2SigmaM*(-3+4*sinSigma*sinSigma)*(-3+4*cos2SigmaM*cos2SigmaM)));var s=b*A*(sigma-deltaSigma);s=s.toFixed(3);return s;}});pH8.Geo.Box=Class.create({initialize:function(top,bottom,left,right){this.top=top;this.bottom=bottom;this.left=left;this.right=right;},size:function(){return{height:this.top-this.bottom,width:this.right-this.left};},position:function(){return new pH8.Geo.Point(this.top,this.left);},northWest:function(){return this.position();},southWest:function(){return new pH8.Geo.Point(this.bottom,this.left);},northEast:function(){return new pH8.Geo.Point(this.top,this.right);},southEast:function(){return new pH8.Geo.Point(this.bottom,this.right);}});;pH8.Storage=(function(){var _instance=null;return function(type){if(_instance!==null){return _instance;}
_instance=this;this.ttl=3600;this.set=function(name,value,ttl){ttl=ttl||this.ttl;var time=new Date();time.setTime(time.getTime()+ttl);document.cookie=name+'='+escape(Object.toJSON(value))+';expires='+time.toLocaleString();};this.get=function(name){var value=null;var cookie=document.cookie.match(name+'=([^;]+)');if(cookie){value=unescape(cookie[1].gsub('+','%20')).evalJSON(true);}
return value;};};})();;pH8.Dictionary=(function(){var _instance=null;var _list=null;return function(language){if(_instance!==null){return _instance;}
_instance=this;language=language||'';new Ajax.Request("/api/ajax.php?action=listDictionary&language="+language,{method:'get',onSuccess:function(transport){_list=transport.responseJSON;document.fire("dictionary:loaded");}});this.isLoaded=function(){return(null!==_list);};this.getText=function(key){if(_list[key]){return _list[key];}else{return key;}};};})();pH8.Mixin.needsDictionary={waitForDictionary:function(callback,language){var dictionary=new pH8.Dictionary(language);if(dictionary.isLoaded()){callback();}else{document.observe("dictionary:loaded",callback);}}};pH8.Mixin.needsTemplates={waitForTemplates:function(templates,callback){this._templatesLoadedCallback=callback;this._templateUrlsByName=new Hash(templates);this._templateNamesByUrl=new Hash();this.templates={};this._templateUrlsByName.each(function(pair){this._templateNamesByUrl.set(pair.value,pair.key);new Ajax.Request(pair.value,{method:'get',onSuccess:this.checkTemplates.bind(this)});}.bind(this));},checkTemplates:function(response){var name=this._templateNamesByUrl.get(response.request.url);if(name){var check=true;this.templates[name]=response.responseText;this._templateNamesByUrl.each(function(pair){if(!this.templates[pair.value]){check=false;}}.bind(this));if(check&&this._templatesLoadedCallback){this._templatesLoadedCallback();}}}};pH8.Pages=(function(){var _instance=null;var _list=null;return function(language){if(_instance!==null){return _instance;}
_instance=this;new Ajax.Request("/api/ajax.php?action=listPages",{method:'get',onSuccess:function(transport){_list=transport.responseJSON;document.fire("pages:loaded");}});this.isLoaded=function(){return(null!==_list);};this.getList=function(){return _list;};this.getPage=function(key){if(_list[key]){return _list[key];}else{return key;}};};})();pH8.Mixin.needsPages={waitForPages:function(callback){var pages=new pH8.Pages();if(pages.isLoaded()){callback();}else{document.observe("pages:loaded",callback);}}};pH8.Menu=Class.create({initialize:function(element,options){this.element=$(element);this.position=this.element.cumulativeOffset();this.dimensions=this.element.getDimensions();options=options||{};this.options={};this.options.activeClassName=options.activeClassName||'active';this.state={activeElement:element.down('li.active'),hoveredElement:null};if(this.state.activeElement){this.showSubmenu(this.state.activeElement)}
this.element.observe('mouseover',this.onMouseOver.bindAsEventListener(this));this.element.observe('mouseout',this.onMouseOut.bindAsEventListener(this));this.element.observe('click',this.onClick.bindAsEventListener(this));},positionSubmenu:function(menuElement){var maxOffset=this.element.positionedOffset().left+this.element.getWidth();var submenuElement=menuElement.down('ul');var offsetMiddle=menuElement.positionedOffset().left+Math.round(menuElement.getWidth()/2);console.log(offsetMiddle);var width=0;if(submenuElement){submenuItemElements=submenuElement.select('li');submenuItemElements.each(function(element){width+=element.getWidth();console.log(width);});var offsetLeft=offsetMiddle-Math.round(width/2);if(offsetLeft<8){offsetLeft=8;}
if(offsetLeft+width>maxOffset){offsetLeft=maxOffset-width;}
submenuElement.setStyle({left:offsetLeft+'px'});}},contains:function(x,y){return(x>this.position.left&&x<(this.position.left+this.dimensions.width)&&y>this.position.top&&y<(this.position.top+this.dimensions.height));},showSubmenu:function(menuElement){menuElement.addClassName(this.options.activeClassName);menuElement.siblings().each(function(otherMenuElement){otherMenuElement.removeClassName(this.options.activeClassName);}.bind(this));this.state.hoveredElement=menuElement;if(window['Cufon']){Cufon.refresh('.menu li a');}},onMouseOver:function(event){me=event.findElement('li');if(me&&me.up('ul')==this.element){this.showSubmenu(me);}},onMouseOut:function(event){me=event.element();if(!this.contains(event.pointerX(),event.pointerY())){if(this.state.hoveredElement){this.state.hoveredElement.removeClassName(this.options.activeClassName);}
if(this.state.activeElement){this.showSubmenu(this.state.activeElement);}else{Cufon.refresh('.menu li a');}}},onClick:function(event){me=event.findElement('li');if(me&&me.up('ul')==this.element){event.stop();}}});;Accordion=Class.create({initialize:function(element,options){this.element=$(element);this.options={};this.options.openClass=options.openClass||'active';this.options.duration=options.duration||0.5;this.openElement=element.down('dd.'+this.options.openClass);this.isAnimating=false;this.element.observe('click',this.clickHandler.bindAsEventListener(this));},clickHandler:function(event){var me=event.findElement('a');if(me&&me.match('dt a')){event.stop();var dt=me.up('dt');if(dt&&!dt.hasClassName(this.options.openClass)){this.animateElement(dt.next('dd'));}}},animateElement:function(element){if(!this.isAnimating){var effects=new Array();var options={sync:true,scaleFrom:0,scaleContent:false,scaleMode:'contents',transition:Effect.Transitions.sinoidal,scaleX:false,scaleY:true};effects.push(new Effect.Scale(element,100,options));if(this.openElement){options={sync:true,scaleContent:false,scaleMode:'contents',transition:Effect.Transitions.sinoidal,scaleX:false,scaleY:true};effects.push(new Effect.Scale(this.openElement,0,options));}
new Effect.Parallel(effects,{duration:this.options.duration,fps:35,queue:{position:'end',scope:'accordion'},beforeStart:function(){this.isAnimating=true;element.addClassName(this.options.openClass);element.previous('dt').addClassName(this.options.openClass);}.bind(this),afterFinish:function(){if(this.openElement){this.openElement.removeClassName(this.options.openClass);this.openElement.previous('dt').removeClassName(this.options.openClass);}
this.openElement=element;this.isAnimating=false;}.bind(this)});}}});;TabRotator=Class.create({initialize:function(element,options){this.element=$(element);this.options=Object.extend({contentElementSelector:'.detail',tabsElementSelector:'.list',interval:3,parameterName:'id',activeClass:'active',animateLoader:false,animatingLoaderClass:'loader-animating',animationClassPrefix:'state-',animationDuration:1,animationFrames:1,useActivatorOrder:true},options||{});this.contentElement=this.element.down(this.options.contentElementSelector);this.contentElements=this.contentElement.childElements();this.tabsElement=this.element.down(this.options.tabsElementSelector);this.tabElements=this.tabsElement.childElements();this.linkElements=this.tabsElement.select('a');this.activeIndex=this.tabElements.indexOf(this.tabsElement.down('.'+this.options.activeClass));this.zIndex=2;Event.observe(this.tabsElement,'click',this.clickHandler.bindAsEventListener(this));if(this.options.animateLoader){this.frameRegExp=new RegExp('('+this.options.animationClassPrefix+')(\\d+)');this.frameRegExp.compile();console.log(this.frameRegExp);this.tabsElement.addClassName(this.options.animatingLoaderClass);this.animationInterval=this.options.animationDuration/this.options.animationFrames;this.startAnimating();}
if(this.options.interval>0){this.timer=new PeriodicalExecuter(this.timerHandler.bindAsEventListener(this),this.options.interval);}},clickHandler:function(event){var link=event.findElement('a');if(link){this.stopAnimating();var tabOrder=this.linkElements.indexOf(link);if(tabOrder>=0){this.timer.stop();this.activateTab(tabOrder);}
link.blur();event.stop();}},timerHandler:function(){if(this.tabElements[this.activeIndex+1]){this.stopAnimating();this.activateTab(this.activeIndex+1);this.startAnimating();}else{this.stopAnimating();this.activateTab(0);this.startAnimating();}},setFrame:function(element,frame){element.className=element.className.replace(this.frameRegExp,"$1"+frame);console.log(element.className.match(this.frameRegExp));},startAnimating:function(element){if(this.options.animateLoader){this.activeFrame=1;this.linkElements[this.activeIndex].addClassName(this.options.animationClassPrefix+this.activeFrame);this.animationTimer=new PeriodicalExecuter(this.animationTimerHandler.bindAsEventListener(this),this.animationInterval);}},stopAnimating:function(element){if(this.options.animateLoader){console.log('Stop animating '+this.activeIndex+' at frame '+this.activeFrame);this.animationTimer.stop();this.setFrame(this.linkElements[this.activeIndex],1);}},animationTimerHandler:function(){if(this.activeFrame==this.options.animationFrames){this.activeFrame=1;}else{this.activeFrame+=1;}
this.setFrame(this.linkElements[this.activeIndex],this.activeFrame);},activateTab:function(tabOrder){if(tabOrder!=this.activeIndex){this.tabElements[this.activeIndex].removeClassName(this.options.activeClass);this.contentElements[tabOrder].hide();this.contentElements[tabOrder].addClassName(this.options.activeClass);this.contentElements[this.activeIndex].setStyle({'z-index':this.zIndex-1});this.contentElements[tabOrder].setStyle({'z-index':this.zIndex});new Effect.Appear(this.contentElements[tabOrder],{duration:0.3,afterFinish:function(transport){this.contentElements[this.activeIndex].removeClassName(this.options.activeClass);this.activeIndex=tabOrder;}.bind(this)});this.tabElements[tabOrder].addClassName(this.options.activeClass);}}});;var general_rules={'#analytics-placeholder':function(){var params=this.getClassParameters();if(params.sid){var pageTracker=_gat._getTracker(params.sid);if(params.target){pageTracker._trackPageview(unescape(params.target));}else{pageTracker._trackPageview();}}},'.hilite-keywords':function(){var hiliter=new KeywordHiliter("ajax.php",this);hiliter.options.elementTag='ABBR';hiliter.fetchKeywords();},'.no-javascript':function(){this.hide();},'.show-no-javascript':function(){this.show();}};Event.addBehavior(general_rules);var hyperlink_rules={'a.void:click':function(e){return false;},'a.popup:click':function(e){var params=this.getClassParameters();var width=params.width||684;var height=params.height||350;var top=params.top||200;var left=params.left||'50%';window.open(this.href,'PopUp','width='
+width
+',height='
+height
+',top='
+top
+',left='
+left
+',scrollbars=0,status=no,resizable=0,toolbar=0,titlebar=0,menubar=0,location=0');return false;},'a.external:click,a.new-window:click':function(e){if(!e.ctrlKey&&!e.altKey&&!e.shiftKey){window.open(this.href);return false;}},'a.status:mouseover':function(e){window.status=this.title;return true;},'a.status:mouseout':function(e){window.status='';return true;},'a.switch:click':function(e){var c=$(this.id.replace('-switch',''));var content=$(c.id+'-content');if(c){c.toggle();}
return false;},'a.tabswitch:click':function(e){var container=$(this.getAttribute('rel'));if(container){var other=$(container.getAttribute('rel'));if(other){container.addClassName('hide');other.removeClassName('hide');}}
return false;},'a.modal:click':function(e){var image=this.up().next().down('img');var dialog=new MUIL.Dialog.Image(image);return false;},'a.submit':function(e){var params=this.getClassParameters();var form=$(params.form);if(form){form.submit();}
return false;},'a.morenews:click':function(event){var container=this.up('div');if(container){if(container.hasClassName('active')){container.removeClassName('active');container.addClassName('inactive');}else{container.removeClassName('inactive');container.addClassName('active');}
event.stop();}}};Event.addBehavior(hyperlink_rules);var form_rules={'form.auto-submit':function(e){this.submit();},'select.auto-submit:change':function(e){this.form.submit();},'input.auto-upper:blur':function(e){this.value=this.value.toUpperCase();},'input.auto-upper:change':function(e){this.value=this.value.toUpperCase();},'.default-value:blur':function(e){if(this.value==''){var params=this.getClassParameters();if(params.default_value!=''){this.value=params.default_value;this.addClassName('auto-clear');}}},'input.auto-blur:focus':function(e){this.className=this.className.replace('-off','-on');var fieldLabel=this.form.down('[for='+this.id+']');if(fieldLabel){fieldLabel.className=fieldLabel.className.replace('-off','-on');var image=fieldLabel.down('img');if(image){image.src=image.src.replace('_normal','_hover');}}
var fieldSet=this.up('fieldset');if(fieldSet&&fieldSet.up('fieldset')){var legend=fieldSet.down('legend');if(legend){legend.className=legend.className.replace('-off','-on');}}},'input.auto-blur:blur':function(e){this.className=this.className.replace('-on','-off');var fieldLabel=this.form.down('[for='+this.id+']');if(fieldLabel){fieldLabel.className=fieldLabel.className.replace('-on','-off');var image=fieldLabel.down('img');if(image){image.src=image.src.replace('_hover','_normal');}}
var fieldSet=this.up('fieldset');if(fieldSet&&fieldSet.up('fieldset')){var legend=fieldSet.down('legend');if(legend){legend.className=legend.className.replace('-on','-off');}}},'.auto-clear:focus':function(e){if(this.hasClassName('auto-clear')){this.value='';}
this.removeClassName('auto-clear');},'input.rollover:mouseover':function(el){if(!this.hasClassName('active')){this.className=this.className.replace('-normal','-hover');if(this.type=='image'){this.src=this.src.replace('_normal','_hover');}}},'input.rollover:mouseout':function(e){if(!this.hasClassName('active')){this.className=this.className.replace('-hover','-normal');if(this.type=='image'){this.src=this.src.replace('_hover','_normal');}}}};Event.addBehavior(form_rules);var rollover_rules={'img.rollover:mouseover':function(el){this.src=this.src.replace('_normal','_hover');return false;},'img.rollover:mouseout':function(el){this.src=this.src.replace('_hover','_normal');return false;}};Event.addBehavior(rollover_rules);var comment_rules={'.retweet':function(){var tweeting=new Retweet.Button(this,{showStats:false,getShortenUrl:function(context){return'http://'+window.location.host+context.element.down('h2 a').readAttribute('href');}});},'.retweet-details':function(){var tweeting=new Retweet.Button(this);},'#disqus-generator':function(){var links=$$('a');var query='?';for(var i=0;i<links.length;i++){if(links[i].href.indexOf('#disqus_thread')>=0){query+='url'+i+'='+encodeURIComponent(links[i].href)+'&';}}
var loader=new pH8.Loader('http://disqus.com/forums/upc/get_num_replies.js'+query);}};Event.addBehavior(comment_rules);