var TimerWidget=Class.create(Widget,{widgetIdentifier:"com-apple-iweb-widget-timer",types:['text','digital','odometer','flip'],minFontFactor:1.2,initialize:function($super,instanceID,widgetPath,sharedPath,sitePath,preferences,runningInApp){if(instanceID!=null)
{$super(instanceID,widgetPath,sharedPath,sitePath,preferences,runningInApp);this.autosizing=0;this.view=null;this.units=[this.localizedString("Secs"),this.localizedString("Mins"),this.localizedString("Hours"),this.localizedString("Days"),this.localizedString("Years")];var targetDate=new Date();targetDate.setDate(targetDate.getDate());this.initializingDefaultPreferences=true;this.initializeDefaultPreferences({'type':1,'target':targetDate.getTime(),'unitsRange':{'location':1,'length':4},'labelsEnabled':1});this.initializingDefaultPreferences=undefined;this.updateFromPreferences();}},onload:function(){this.view||this.p_createView();},onunload:function(){this.refreshInterval===undefined||this.refreshInterval==0||clearInterval(this.refreshInterval);this.view=null;},changedPreferenceForKey:function(key){if(!this.initializingDefaultPreferences&&(key=='type'||key=='target'||key=='unitsRange'||key=='labelsEnabled'))
{this.updateFromPreferences();this.p_createView();}
if(key=='labelFontSize')
{if(this.view)
{this.view.updateFromLabelFontSize();}}
else if(key=='labelFontFactor')
{if(this.view)
{this.view.updateFromLabelFontFactor();}}},setDocumentInternalCSS:function($super,css){$super(css);var currentFontFamily=this.p_currentFontFamily();if(this.lastFontFamily!=currentFontFamily){this.lastFontFamily=currentFontFamily;var testTable=new Element('table');var testRow=new Element('tr',{className:'Timer_Labels'});var testCell=new Element('td');testTable.appendChild(testRow);testRow.appendChild(testCell);testTable.setStyle({position:'absolute',top:'0px'});testRow.setStyle({fontSize:'100px'});testCell.innerText='0123456789:';this.div().appendChild(testTable);var fontFactor=Math.max(testTable.offsetHeight/100,this.minFontFactor);this.div().removeChild(testTable);this.setPreferenceForKey(fontFactor,'labelFontFactor');}},updateFromPreferences:function(){this.targetDate=this.p_targetDateFromPreferences();this.unitsRange=this.p_unitsRangeFromPreferences();this.labelsEnabledValue=this.p_labelsEnabledFromPreferences();},p_currentFontFamily:function(){var family=undefined;var labelElement=this.div().selectFirst('.Timer_Labels');if(labelElement){family=labelElement.getStyle('font-family');}
return family;},p_targetDateFromPreferences:function(){var target=this.preferenceForKey('target');return new Date(target);},p_unitsRangeFromPreferences:function(){var rangeDict=this.preferenceForKey('unitsRange');return new IWRange(rangeDict.location,rangeDict.length);},p_labelsEnabledFromPreferences:function(){return((this.preferenceForKey('labelsEnabled')>0)?true:false);},currentTimeDelta:function(){var now=new Date();return Math.max(0,this.targetDate-now);},p_createView:function(){var timerDisplayHeight=this.view!=null?this.view.timerDisplayHeight:-1;viewType=this.preferenceForKey('type');this.refreshInterval===undefined||this.refreshInterval==0||clearInterval(this.refreshInterval);this.view=null;switch(this.types[viewType])
{case'odometer':this.view=new OdometerTimerView(this,timerDisplayHeight);break;case'flip':this.view=new FlipTimerView(this,timerDisplayHeight);break;case'digital':this.view=new DigitalTimerView(this,timerDisplayHeight);break;case'text':this.view=new TextualTimerView(this,timerDisplayHeight);break;default:iWLog('timer widget could not instatiate unknown view');this.view=null;}
this.view.setSelectedStyle();if(this.runningInApp)
{window.onresize=function()
{if(this.autosizing==0)
{this.view.resize(false);}}.bind(this);this.view.resizeWidgetWindow();}
this.view.refresh();this.refreshInterval=setInterval(this.view.refresh.bind(this.view),1000);}});var TimerView=Class.create({labelClassName:'Timer_Labels',initialize:function(widget,in_timerDisplayHeight){if(widget)
{this.widget=widget;this.div=widget.div();this.p_calculateRatios();var widgetWidth=toPixels(this.div.getStyle('width'));var widgetHeight=toPixels(this.div.getStyle('height'));this.widgetAspectRatio=widgetHeight/widgetWidth;this.handlingHandleResize=0;var timer=this.widget.getElementById('timer');if(timer!==undefined){timer.update();}
this.timerDisplayHeight=in_timerDisplayHeight;this.yDigitsNumber=0;this.dDigitsNumber=0;this.hDigitsNumber=0;this.mDigitsNumber=0;this.sDigitsNumber=0;this.p_setNumberOfDigitsPerUnit();}},refresh:function(){this.render();},render:function(){},ensureVisible:function(){var timer=this.widget.div().selectFirst('.timer_widget');if(timer)
{timer.setStyle({visibility:'visible'});}},setSelectedStyle:function(){this.widget.setPreferenceForKey(this.labelClassName,"x-selected-style-class",false);},updateFromLabelFontSize:function(){var labelFontSize=this.widget.preferenceForKey("labelFontSize");this.timerDisplayHeight=this.fontFactor*this.digitsToLabelsFontsRatio*labelFontSize;this.resize(true);if(this.handlingHandleResize==0)
{this.resizeWidgetWindow();}},updateFromLabelFontFactor:function(){this.p_calculateRatios();this.updateFromLabelFontSize();},setLabelFontSize:function(labelFontSize)
{labelFontSize>=10||(labelFontSize=10);labelFontSize<=50||(labelFontSize=50);var oldLabelFontSize=this.widget.preferenceForKey("labelFontSize");if(this.widget.runningInApp&&(this.handlingHandleResize||!oldLabelFontSize)&&!this.widget.preferences.isUndoingOrRedoing())
{if(labelFontSize!=oldLabelFontSize)
{this.widget.setPreferenceForKey(labelFontSize,"labelFontSize",!!oldLabelFontSize);}}},resize:function(in_preserveHeight){if(in_preserveHeight){if(this.widget.runningInApp){this.windowWidth=window.innerWidth;this.windowHeight=window.innerHeight;}
else{this.windowWidth=Math.ceil(this.widget.div().offsetWidth);this.windowHeight=Math.ceil(this.widget.div().offsetHeight);}
var widgetSize=this.resizeTimer(true);this.widgetWidth=widgetSize.width;this.widgetHeight=widgetSize.height;this.widgetAspectRatio=this.widgetHeight/this.widgetWidth;}
else{++this.handlingHandleResize;try{var widthChanged=false,heightChanged=false;if(this.windowWidth!=window.innerWidth)
{this.windowWidth=window.innerWidth;widthChanged=true;}
if(this.windowHeight!=window.innerHeight)
{this.windowHeight=window.innerHeight;heightChanged=true;}
if(widthChanged||heightChanged)
{var windowAspectRatio=this.windowHeight/this.windowWidth;if(windowAspectRatio>this.widgetAspectRatio){this.widgetWidth=this.windowWidth;this.widgetHeight=this.windowWidth*this.widgetAspectRatio;}
else if(windowAspectRatio<this.widgetAspectRatio){this.widgetWidth=this.windowHeight/this.widgetAspectRatio;this.widgetHeight=this.windowHeight;}
else{this.widgetWidth=this.windowWidth;this.widgetHeight=this.windowHeight;}
this.resizeTimer(false);}}
finally{--this.handlingHandleResize;}}},resizeWidgetWindow:function(){++this.widget.autosizing;try
{this.widget.setPreferenceForKey({"width":this.widgetWidth,"height":this.widgetHeight,"centerHor":true},"x-widgetSize",false);}
finally
{--this.widget.autosizing;}},resizeTimer:function(in_preserveHeight){},timeUnits:function(ms,unitsRange){(function(){return 0<=unitsRange.min()&&unitsRange.min()<=unitsRange.max()&&unitsRange.max()<=5;}).assert("Invalid time units range (min="+unitsRange.min()+", max="+unitsRange.max()+")");var result=[0,0,0,0,0];var divisors=[365,24,60,60,1000];var unitsRangeMin=unitsRange.min();var acc=ms;for(i=4;i>=unitsRangeMin;i--){result[i]=Math.floor(acc/divisors[i]);acc/=divisors[i];if(i>unitsRangeMin){result[i]=result[i]%divisors[i-1];}}
return{y:result[0],d:result[1],h:result[2],m:result[3],s:result[4]};},heightWithLabels:function(in_height){return this.widget.labelsEnabledValue?in_height*(1+this.labelsToDigitsFontsRatio):in_height;},heightWithoutLabels:function(in_height){return this.widget.labelsEnabledValue?in_height/(1+this.labelsToDigitsFontsRatio):in_height;},getDigitsFromInteger:function(in_value,in_length){(function(){return in_value>=0&&in_length>=0;}).assert("getDigitsFromInteger - Invalid arguments: in_value="+in_value+" in_length="+in_length);var digits=[];var digitCount=0;var ratio=in_value;do{var mod=this.intMod(ratio,10);digits.push(mod.remainder);ratio=mod.ratio;digitCount++;}while((digitCount<2)||(in_length==0&&ratio!=0)||(in_length>0&&digitCount<in_length));return digits.reverse();},intMod:function(in_value,in_div){(function(){return in_value>=0&&in_div>0;}).assert("intMod - Invalid arguments: in_value="+in_value+" in_div="+in_div);var ratio=Math.floor(in_value/in_div);return{ratio:ratio,remainder:Math.floor(in_value%in_div)};},p_calculateRatios:function(){this.fontFactor=this.widget.preferenceForKey('labelFontFactor')||this.widget.minFontFactor;this.digitsToLabelsFontsRatio=(5.0/this.fontFactor)-1;this.labelsToDigitsFontsRatio=1/this.digitsToLabelsFontsRatio;if(this.widget.runningInApp){this.widget.setPreferenceForKey(this.labelsToDigitsFontsRatio,'x-labelsToDigitsFontsRatio',false);}},p_setNumberOfDigitsPerUnit:function(){var ms=this.widget.currentTimeDelta();var unitsRange=this.widget.unitsRange;var unitsRangeMin=unitsRange.min();var timeUnits=this.timeUnits(ms,unitsRange);this.yDigitsNumber=unitsRange.containsLocation(0)?this.getDigitsFromInteger(timeUnits.y,0).size():0;this.dDigitsNumber=unitsRange.containsLocation(1)?this.getDigitsFromInteger(timeUnits.d,1==unitsRangeMin?0:3).size():0;this.hDigitsNumber=unitsRange.containsLocation(2)?this.getDigitsFromInteger(timeUnits.h,2==unitsRangeMin?0:2).size():0;this.mDigitsNumber=unitsRange.containsLocation(3)?this.getDigitsFromInteger(timeUnits.m,3==unitsRangeMin?0:2).size():0;this.sDigitsNumber=unitsRange.containsLocation(4)?this.getDigitsFromInteger(timeUnits.s,4==unitsRangeMin?0:2).size():0;},labelsRowMarkup:function(){var labelsRowMarkupString="";if(this.widget.labelsEnabledValue>0){var unitsRange=this.widget.unitsRange;var unitsRangeMin=unitsRange.min();var unitsRangeMax=unitsRange.max();for(i=(4-unitsRangeMin);i>(4-unitsRangeMax);i--){labelsRowMarkupString+="<td style='text-align: center;' class='fg-label'>"+this.widget.units[i]+"</td>";if(i>(4-unitsRangeMax)+1){labelsRowMarkupString+="<td class='fg-label-separator'></td>";}}}
return labelsRowMarkupString;}});var TextualTimerView=Class.create(TimerView,{timerType:'text',initialize:function($super,widget,in_timerDisplayHeight){$super(widget,in_timerDisplayHeight);var unitsRange=this.widget.unitsRange;var timeDigitColumns="";for(i=unitsRange.min();i<unitsRange.max();i++){timeDigitColumns+="<td></td>";if(unitsRange.containsLocation(i+1)){timeDigitColumns+='<td>:</td>';}}
var template=new Template("<table border='0' id='#{table_id}'><tr id='#{digit_id}' class='#{label_class}'>#{columns}</tr>"+"<tr id='#{labels_id}' class='#{labels_class}'>#{labels_markup}</tr></table>");this.widget.getElementById('timer').update(template.evaluate({table_id:this.widget.getInstanceId("timer_block"),digit_id:this.widget.getInstanceId("timer_digit_block"),label_class:this.labelClassName,columns:timeDigitColumns,labels_id:this.widget.getInstanceId("timer_labels_block"),labels_class:this.labelClassName,labels_markup:this.labelsRowMarkup()}));this.widget.getElementById("timer_digit_block").selectFirst('td').setStyle({textAlign:'right'});this.resize(true);},render:function($super){var needsUpdateSize=false;var ms=this.widget.currentTimeDelta();var unitsRange=this.widget.unitsRange;var timerDigitBlock=this.widget.getElementById("timer_digit_block");var timeUnits=this.timeUnits(ms,unitsRange);var unitsArray=[timeUnits.y,timeUnits.d,timeUnits.h,timeUnits.m,timeUnits.s];var unitsPaddingArray=[1,3,2,2,2];var timerDigitColumns=timerDigitBlock.select("td");for(i=unitsRange.min();i<unitsRange.max();i++)
{var minLength=2;if(i>unitsRange.min())
{minLength=Math.max(minLength,unitsPaddingArray[i]);}
timerDigitColumns[(i-unitsRange.min())*2].update(unitsArray[i].toPaddedString(minLength,10));}
this.ensureVisible();},resizeTimer:function(in_preserveHeight){var timerTotalHeight=0;var timerDisplayHeight=0;if(in_preserveHeight){if(this.timerDisplayHeight>0){timerTotalHeight=this.heightWithLabels(this.timerDisplayHeight);timerDisplayHeight=this.timerDisplayHeight;}
else if(this.widgetHeight>0){timerTotalHeight=this.widgetHeight;timerDisplayHeight=this.heightWithoutLabels(this.widgetHeight);}
else{timerTotalHeight=this.windowHeight;timerDisplayHeight=this.heightWithoutLabels(this.windowHeight);}}
else{timerTotalHeight=this.widgetHeight;timerDisplayHeight=this.heightWithoutLabels(this.widgetHeight);}
var baseLabelFontSize=timerDisplayHeight/(this.digitsToLabelsFontsRatio*this.fontFactor);this.setLabelFontSize(baseLabelFontSize);baseLabelFontSize=this.widget.preferenceForKey("labelFontSize");var timerDigitBlock=this.widget.getElementById("timer_digit_block");timerDigitBlock.setStyle({fontSize:px(this.digitsToLabelsFontsRatio*baseLabelFontSize)});var timerLabelsBlock=this.widget.getElementById("timer_labels_block");if(this.widget.labelsEnabledValue>0){timerLabelsBlock.setStyle({fontSize:px(baseLabelFontSize)});}else{timerLabelsBlock.setStyle({fontSize:"0"});}
this.timerDisplayHeight=timerDisplayHeight;this.render();var sizeChanged=false;var timerTable=this.widget.getElementById("timer_block");if(timerTable&&timerTable.offsetWidth>0&&timerTable.offsetHeight>0)
{if((this.totalNativeWidth===undefined)||(this.totalNativeHeight===undefined)||(this.totalNativeWidth!=timerTable.offsetWidth)||(this.totalNativeHeight!=timerTable.offsetHeight))
{this.totalNativeWidth=timerTable.offsetWidth;this.totalNativeHeight=timerTable.offsetHeight;this.widgetWidth=this.totalNativeWidth;this.widgetHeight=this.totalNativeHeight;this.widgetAspectRatio=this.widgetHeight/this.widgetWidth;sizeChanged=true;}}
if(sizeChanged&&this.handlingHandleResize==0&&this.widget.view===this){this.resizeWidgetWindow();}
return new IWSize(this.totalNativeWidth,this.totalNativeHeight);}});var GraphicalTimerView=Class.create(TimerView,{initialize:function($super,widget,in_timerDisplayHeight){$super(widget,in_timerDisplayHeight);this.preloadAssets();var markup="<div class='graphical_timer'>";markup+="<div class='graphical_timer_background'>";markup+=this.makeBGMarkup();markup+="</div>";markup+="<div class='graphical_timer_foreground'>";markup+=this.makeFGMarkup();markup+="</div>";markup+="<div class='graphical_timer_labels'>";markup+=this.makeLabelMarkup();markup+="</div>";markup+="</div>";var timerElement=this.widget.getElementById('timer');timerElement.update(markup);this.setBGImageSources();this.setNativeGeometry();this.resize(true);},preloadAssets:function(){this.digits=[{image:IWCreateImage(this.assetPath('0',this.widget.widgetPath+'/'+this.timerType+'/0.pdf')),size:new IWSize(120,150)},{image:IWCreateImage(this.assetPath('1',this.widget.widgetPath+'/'+this.timerType+'/1.pdf')),size:new IWSize(120,150)},{image:IWCreateImage(this.assetPath('2',this.widget.widgetPath+'/'+this.timerType+'/2.pdf')),size:new IWSize(120,150)},{image:IWCreateImage(this.assetPath('3',this.widget.widgetPath+'/'+this.timerType+'/3.pdf')),size:new IWSize(120,150)},{image:IWCreateImage(this.assetPath('4',this.widget.widgetPath+'/'+this.timerType+'/4.pdf')),size:new IWSize(120,150)},{image:IWCreateImage(this.assetPath('5',this.widget.widgetPath+'/'+this.timerType+'/5.pdf')),size:new IWSize(120,150)},{image:IWCreateImage(this.assetPath('6',this.widget.widgetPath+'/'+this.timerType+'/6.pdf')),size:new IWSize(120,150)},{image:IWCreateImage(this.assetPath('7',this.widget.widgetPath+'/'+this.timerType+'/7.pdf')),size:new IWSize(120,150)},{image:IWCreateImage(this.assetPath('8',this.widget.widgetPath+'/'+this.timerType+'/8.pdf')),size:new IWSize(120,150)},{image:IWCreateImage(this.assetPath('9',this.widget.widgetPath+'/'+this.timerType+'/9.pdf')),size:new IWSize(120,150)}];this.digits.each(function(digit){digit.image.load();});this.digitSize=$(this.digits).pluck('size').inject(new IWSize(0,0),function(acc,size){return size.width>acc.width?size:acc;});this.separator={image:IWCreateImage(this.assetPath('fg-separator',this.widget.widgetPath+'/'+this.timerType+'/fg-separator.pdf')),size:new IWSize(50,150)};this.separator.image.load();this.leftCap={image:IWCreateImage(this.assetPath('bg-cap-left',this.widget.widgetPath+'/'+this.timerType+'/bg-cap-left.pdf')),size:new IWSize(5,45)};this.leftCap.image.load();this.rightCap={image:IWCreateImage(this.assetPath('bg-cap-right',this.widget.widgetPath+'/'+this.timerType+'/bg-cap-right.pdf')),size:new IWSize(5,45)};this.rightCap.image.load();this.center={image:IWCreateImage(this.assetPath('bg-center',this.widget.widgetPath+'/'+this.timerType+'/bg-center.pdf')),size:new IWSize(30,45)};this.center.image.load();},makeBGMarkup:function(){var markup="";markup+="<img id='"+this.widget.instanceID+"-bg-cap-left' src='' />";markup+="<img id='"+this.widget.instanceID+"-bg-center' src='' />";markup+="<img id='"+this.widget.instanceID+"-bg-cap-right' src='' />";return markup;},makeFGMarkup:function(){var markup="";var digit="<img class='fg-digit' src='' />";var separator=imgMarkup(this.separator.image.sourceURL(),"","class='fg-separator' ","",false);markup+="<div class='graphical_digits_placeholder'>";markup+=digit.times(this.yDigitsNumber);markup+=separator.times(this.yDigitsNumber>0&&this.dDigitsNumber>0);markup+=digit.times(this.dDigitsNumber);markup+=separator.times(this.dDigitsNumber>0&&this.hDigitsNumber>0);markup+=digit.times(this.hDigitsNumber);markup+=separator.times(this.hDigitsNumber>0&&this.mDigitsNumber>0);markup+=digit.times(this.mDigitsNumber);markup+=separator.times(this.mDigitsNumber>0&&this.sDigitsNumber>0);markup+=digit.times(this.sDigitsNumber);markup+="</div>";return markup;},setBGImageSources:function(){setImgSrc(this.widget.getElementById('bg-cap-left'),this.leftCap.image.sourceURL(),false);setImgSrc(this.widget.getElementById('bg-cap-right'),this.rightCap.image.sourceURL(),false);setImgSrc(this.widget.getElementById('bg-center'),this.center.image.sourceURL(),false);},setNativeGeometry:function(){var maxHeight=this.leftCap.size.height;var digitHeightRatio=0.55;var digitScaleFactor=(maxHeight/this.digitSize.height)*digitHeightRatio;this.numberOfDigits=this.widget.div().select('img.fg-digit').size();this.numberOfSeparators=this.widget.div().select('img.fg-separator').size();this.digitNativeHeight=this.digitSize.height*digitScaleFactor;this.digitNativeWidth=this.digitSize.width*digitScaleFactor;this.separatorNativeWidth=this.separator.size.width*(this.textSeparator?digitScaleFactor:1);this.separatorNativeHeight=this.separator.size.height*(this.textSeparator?digitScaleFactor:1);this.leftCapNativeWidth=this.leftCap.size.width;this.rightCapNativeWidth=this.rightCap.size.width;this.totalNativeHeight=this.heightWithLabels(maxHeight);this.totalNativeWidth=this.leftCapNativeWidth+
this.digitNativeWidth*this.numberOfDigits+
this.separatorNativeWidth*this.numberOfSeparators+
this.rightCapNativeWidth;},assetPath:function($super,asset,defaultPath){return this.widget.preferenceForKey(asset)||defaultPath;},fitTimerIntoView:function(in_nativeTimerWidth,in_nativeTimerHeight,in_viewWidth,in_viewHeight,in_preserveHeight){var timerWidth=in_viewWidth;var timerHeight=in_viewHeight;var sf=1;if(in_preserveHeight){if(this.timerDisplayHeight>0){var timerDisplayHeight=this.timerDisplayHeight;sf=this.heightWithLabels(timerDisplayHeight)/in_nativeTimerHeight;timerHeight=in_nativeTimerHeight*sf;timerWidth=in_nativeTimerWidth*sf;}else{timerHeight=this.windowHeight;sf=timerHeight/in_nativeTimerHeight;timerWidth=in_nativeTimerWidth*sf;}}else{var viewAspectRatio=in_viewHeight/in_viewWidth;var timerAspectRatio=in_nativeTimerHeight/in_nativeTimerWidth;if(viewAspectRatio<timerAspectRatio){sf=timerHeight/in_nativeTimerHeight;timerWidth=in_nativeTimerWidth*sf;}
else{sf=timerWidth/in_nativeTimerWidth;timerHeight=in_nativeTimerHeight*sf;}}
return{width:timerWidth,height:timerHeight,scale:sf};},centerTimerInView:function(in_timerWidth,in_timerHeight,in_labelHeight,in_labelOffsetLeft){var widgetDiv=this.widget.div();var graphical_timer=widgetDiv.select('div.graphical_timer')[0];var timerLeft=0;graphical_timer.setStyle({width:px(in_timerWidth),height:px(in_timerHeight),left:px(timerLeft)});var labelTable=this.widget.getElementById("timer_labels_table");if(labelTable){labelTable.setStyle({left:px(timerLeft+in_labelOffsetLeft),top:px(in_timerHeight)});}},setFGDigits:function(io_placeholders,in_pos,in_len,in_value){var digits=this.getDigitsFromInteger(in_value,in_len);for(var i=0;i<in_len;++i){var img=io_placeholders[in_pos+i];var digit=digits[i];if(img.digit!=digit)
{img.digit=digit;setImgSrc(img,this.digits[digit].image.sourceURL(),false);}
if(!img.visible())
{img.show();}}},makeLabelMarkup:function(){var labelMarkup="";if(this.widget.labelsEnabledValue>0){labelMarkup="<table border='0' class='"+this.labelClassName+"' id='"+
this.widget.getInstanceId("timer_labels_table")+"' style='position: absolute;left:0;top: 0;width:100%;height:100%;'>"+"<tr>"+
this.labelsRowMarkup()+"</tr>"+"</table>";}
return labelMarkup;},resizeTimer:function(in_preserveHeight){var thisWidth=this.widgetWidth;var thisHeight=this.widgetHeight;var timerScaledSize=this.fitTimerIntoView(this.totalNativeWidth,this.totalNativeHeight,thisWidth,thisHeight,in_preserveHeight);var sf=timerScaledSize.scale;var timerWidth=timerScaledSize.width;var timerHeight=this.heightWithoutLabels(timerScaledSize.height);var leftPos=0;var bgElementWidth=0;var leftCap=this.widget.getElementById('bg-cap-left');var rightCap=this.widget.getElementById('bg-cap-right');var center=this.widget.getElementById('bg-center');var capWidth=Math.floor(this.leftCap.size.width*sf);var leftCapElement=this.widget.getElementById('bg-cap-left');leftCapElement.setStyle({height:px(timerHeight),width:px(capWidth),left:px(leftPos)});leftPos+=capWidth;var centerElement=this.widget.getElementById('bg-center');var width=Math.floor(timerWidth-2*capWidth);centerElement.setStyle({height:px(timerHeight),width:px(width),left:px(leftPos)});leftPos+=width;var rightCapElement=this.widget.getElementById('bg-cap-right');rightCapElement.setStyle({height:px(timerHeight),width:px(capWidth),left:px(leftPos)});leftPos+=capWidth;leftPos=capWidth;var digitHeight=this.digitNativeHeight*sf;var digitWidth=this.digitNativeWidth*sf;var separatorHeight=this.textSeparator?this.separatorNativeHeight*sf:timerHeight;var separatorWidth=this.separatorNativeWidth/this.separatorNativeHeight*separatorHeight;var centerWidth=(this.digitNativeWidth*this.numberOfDigits+this.separatorNativeWidth*this.numberOfSeparators)*sf;var placeholder=this.widget.div().select('div.graphical_digits_placeholder')[0];placeholder.setStyle({left:px((timerWidth-centerWidth)/2),height:px(timerHeight)});leftPos=0;placeholder.select('img').each(function(element){var height=element.hasClassName('fg-digit')?digitHeight:separatorHeight;var width=Math.max(element.hasClassName('fg-digit')?digitWidth:separatorWidth,1);var top=(timerHeight-height)/2;element.setStyle({height:px(height),top:px(top),left:px(leftPos),width:px(width)});leftPos+=width;});var labelHeight=this.resizeLabels(timerScaledSize.height,digitWidth,separatorWidth);this.centerTimerInView(timerWidth,timerHeight,labelHeight,placeholder.offsetLeft);this.timerDisplayHeight=timerHeight;this.render();return new IWSize(timerScaledSize.width,timerScaledSize.height);},resizeLabels:function(areaHeight,digitWidth,separatorWidth){var leftMostDigitLeft=0;var labelHeight=0;var labelTable=this.widget.getElementById("timer_labels_table");var labelFontSize=areaHeight/(((labelTable?1:0)+this.digitsToLabelsFontsRatio)*this.fontFactor);this.setLabelFontSize(labelFontSize);labelHeight=labelFontSize*this.fontFactor;if(labelTable){labelFontSize=this.widget.preferenceForKey("labelFontSize");labelTable.setStyle({fontSize:px(labelFontSize)});var labelsFG=labelTable.select('td.fg-label');var curLeft=leftMostDigitLeft;var curField=this.widget.unitsRange.min();var nDigitsArray=[this.yDigitsNumber,this.dDigitsNumber,this.hDigitsNumber,this.mDigitsNumber,this.sDigitsNumber];var digitIndex=0;for(var i=this.widget.unitsRange.min();i<this.widget.unitsRange.max();i++){var width=0;var digitsInThisField=nDigitsArray[i];var fieldLeft=curLeft;for(var j=0;j<digitsInThisField;j++){curLeft+=digitWidth;digitIndex++;}
labelsFG[i-this.widget.unitsRange.min()].setStyle({width:px(curLeft-fieldLeft)});if(i<this.widget.unitsRange.max()-1){curLeft+=separatorWidth;}}
labelTable.setStyle({width:px(curLeft-leftMostDigitLeft)});labelTable.select('td.fg-label-separator').each(function(separatorCell){separatorCell.setStyle({width:px(separatorWidth)});});}
return labelHeight;},render:function($super){var ms=this.widget.currentTimeDelta();var timeUnits=this.timeUnits(ms,this.widget.unitsRange);var digitImages=this.widget.div().select('img.fg-digit');var separatorImages=this.widget.div().select('img.fg-separator');var digitCount=0;var separatorCount=0;var unitsCount=0;if(this.yDigitsNumber>0){this.setFGDigits(digitImages,digitCount,this.yDigitsNumber,timeUnits.y);digitCount+=this.yDigitsNumber;}
if(this.yDigitsNumber>0&&this.dDigitsNumber>0){this.p_setFGSeparator(separatorImages,separatorCount);++separatorCount;}
if(this.dDigitsNumber>0){this.setFGDigits(digitImages,digitCount,this.dDigitsNumber,timeUnits.d);digitCount+=this.dDigitsNumber;}
if(this.dDigitsNumber>0&&this.hDigitsNumber>0){this.p_setFGSeparator(separatorImages,separatorCount);++separatorCount;}
if(this.hDigitsNumber>0){this.setFGDigits(digitImages,digitCount,this.hDigitsNumber,timeUnits.h);digitCount+=this.hDigitsNumber;}
if(this.hDigitsNumber>0&&this.mDigitsNumber>0){this.p_setFGSeparator(separatorImages,separatorCount);++separatorCount;}
if(this.mDigitsNumber>0){this.setFGDigits(digitImages,digitCount,this.mDigitsNumber,timeUnits.m);digitCount+=this.mDigitsNumber;}
if(this.mDigitsNumber>0&&this.sDigitsNumber>0){this.p_setFGSeparator(separatorImages,separatorCount);++separatorCount;}
if(this.sDigitsNumber>0){this.setFGDigits(digitImages,digitCount,this.sDigitsNumber,timeUnits.s);digitCount+=this.sDigitsNumber;}
this.ensureVisible();},p_setFGSeparator:function(io_placeholders,in_pos){var img=io_placeholders[in_pos];if(!img.visible())
{img.show();}}});var OdometerTimerView=Class.create(GraphicalTimerView,{timerType:'odometer',initialize:function($super,widget,in_timerDisplayHeight){this.textSeparator=false;return $super(widget,in_timerDisplayHeight);},preloadAssets:function($super){$super();this.leftCap.size=new IWSize(9,50);this.rightCap.size=new IWSize(9,50);this.center.size=new IWSize(38,50);this.separator.size=new IWSize(5,50);$A(this.digits).each(function(digit){digit.size=new IWSize(210,280);});}});var FlipTimerView=Class.create(GraphicalTimerView,{timerType:'flip',initialize:function($super,widget,in_timerDisplayHeight){this.textSeparator=false;return $super(widget,in_timerDisplayHeight);},preloadAssets:function($super){$super();this.leftCap.size=new IWSize(8,50);this.rightCap.size=new IWSize(8,50);this.center.size=new IWSize(39,50);this.separator.size=new IWSize(1,50);$A(this.digits).each(function(digit){digit.size=new IWSize(39,50);});}});var DigitalTimerView=Class.create(GraphicalTimerView,{timerType:'digital',initialize:function($super,widget,in_timerDisplayHeight){this.textSeparator=true;$super(widget,in_timerDisplayHeight);},preloadAssets:function($super){$super();this.leftCap.size=new IWSize(5,45);this.rightCap.size=new IWSize(5,45);this.center.size=new IWSize(30,45);this.separator.size=new IWSize(50,150);$A(this.digits).each(function(digit){digit.size=new IWSize(120,150);});}});