diff --git a/tracks/app/views/stats/_actions.rhtml b/tracks/app/views/stats/_actions.rhtml
index 091dd254..5bd0574a 100755
--- a/tracks/app/views/stats/_actions.rhtml
+++ b/tracks/app/views/stats/_actions.rhtml
@@ -5,25 +5,26 @@ The minimum time to complete is <%= @actions_min_ttc_sec %>
In the last 30 days you created on average <%=@sum_actions_created_last30days/30%> actions
and completed on average <%=@sum_actions_done_last30days/30%> actions per day.
In the last 12 months you created on average <%=@sum_actions_created_last12months/12 %> actions
-and completed on average <%=@sum_actions_done_last12months/12%> actions per month.
-
-<%= render :partial => 'chart', :locals => {:width => @chart_width, :height => @chart_height, :data => '/stats/actions_done_last30days_data'} -%>
-
-<%= render :partial => 'chart', :locals => {:width => @chart_width, :height => @chart_height, :data => '/stats/actions_done_last12months_data'} -%>
+and completed on average <%=@sum_actions_done_last12months/12%> actions per month.
-
-<%= render :partial => 'chart', :locals => {:width => @chart_width, :height => @chart_height, :data => '/stats/actions_completion_time_data'} -%>
-
-<%= render :partial => 'chart', :locals => {:width => @chart_width, :height => @chart_height, :data => '/stats/actions_visible_running_time_data'} -%>
-
-<%= render :partial => 'chart', :locals => {:width => @chart_width, :height => @chart_height, :data => '/stats/actions_running_time_data'} -%>
+<% %w{ actions_done_last30days_data
+ actions_done_last12months_data
+ actions_completion_time_data
+ }.each do |action|
+ %><%= render :partial => 'chart', :locals => {:width => @chart_width, :height => @chart_height, :data => url_for(:action => action)} -%><%
+ end
+%>
-
-<%= render :partial => 'chart', :locals => {:width => @chart_width, :height => @chart_height, :data => '/stats/actions_day_of_week_all_data'} -%>
-
-<%= render :partial => 'chart', :locals => {:width => @chart_width, :height => @chart_height, :data => '/stats/actions_day_of_week_30days_data'} -%>
+
-
-<%= render :partial => 'chart', :locals => {:width => @chart_width, :height => @chart_height, :data => '/stats/actions_time_of_day_all_data'} -%>
-
-<%= render :partial => 'chart', :locals => {:width => @chart_width, :height => @chart_height, :data => '/stats/actions_time_of_day_30days_data'} -%>
\ No newline at end of file
+<% %w{ actions_visible_running_time_data
+ actions_running_time_data
+ actions_day_of_week_all_data
+ actions_day_of_week_30days_data
+ actions_day_of_week_30days_data
+ actions_time_of_day_all_data
+ actions_time_of_day_30days_data
+ }.each do |action|
+ %><%= render :partial => 'chart', :locals => {:width => @chart_width, :height => @chart_height, :data => url_for(:action => action)} -%><%
+ end
+%>
\ No newline at end of file
diff --git a/tracks/app/views/stats/_chart.rhtml b/tracks/app/views/stats/_chart.rhtml
index 8167023b..4f215656 100755
--- a/tracks/app/views/stats/_chart.rhtml
+++ b/tracks/app/views/stats/_chart.rhtml
@@ -1,5 +1 @@
-
-
-
-
-
+<%= flashobject_tag "open-flash-chart.swf", :query_params => { 'width' => width, 'height' => height, 'data' => data}, :size => "#{width}x#{height}", :parameters => { 'allowScriptAccess' => 'sameDomain'}, :class_name => 'open-flash-chart' %>
\ No newline at end of file
diff --git a/tracks/app/views/stats/_contexts.rhtml b/tracks/app/views/stats/_contexts.rhtml
index ee165c73..151ee32b 100755
--- a/tracks/app/views/stats/_contexts.rhtml
+++ b/tracks/app/views/stats/_contexts.rhtml
@@ -1,9 +1,9 @@
-
-<%= render :partial => 'chart', :locals => {:width => @pie_width, :height => @pie_height, :data => '/stats/context_total_actions_data'} -%>
-
-<%= render :partial => 'chart', :locals => {:width => @pie_width, :height => @pie_height, :data => '/stats/context_running_actions_data'} -%>
+<%= render :partial => 'chart', :locals => {:width => @pie_width, :height => @pie_height, :data => url_for(:action => 'context_total_actions_data')} -%>
-
Top 5 Contexts
+<%= render :partial => 'chart', :locals => {:width => @pie_width, :height => @pie_height, :data => url_for(:action => 'context_running_actions_data')} -%>
+
+
+
Top 5 Contexts
<%
1.upto 5 do |i|
%><%=i-%> -
@@ -14,9 +14,10 @@
<%
end
-%>
-
+
-
Top 5 Visible Contexts with uncomplete actions
+
+
Top 5 Visible Contexts with uncomplete actions
<%
1.upto 5 do |i|
%><%=i-%> -
@@ -27,4 +28,4 @@
<%
end
-%>
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/tracks/app/views/stats/_projects.rhtml b/tracks/app/views/stats/_projects.rhtml
index 6d6b65e1..971c9df7 100755
--- a/tracks/app/views/stats/_projects.rhtml
+++ b/tracks/app/views/stats/_projects.rhtml
@@ -1,5 +1,5 @@
-
-
Top 10 projects
+
+
Top 10 projects
<% i=0
@projects_and_actions.each do |p|
i+=1 -%>
@@ -11,9 +11,10 @@
<% end
end
%>
+
-
-
Top 10 project in past 30 days
+
+
Top 10 project in past 30 days
<% i=0
@projects_and_actions_last30days.each do |p|
i+=1 -%>
@@ -25,9 +26,10 @@
<% end
end
%>
+
-
-
Top 10 longest running projects
+
+
Top 10 longest running projects
<% i=0
@projects_and_runtime.each do |p|
i+=1 -%>
@@ -39,4 +41,4 @@
<% end
end
%>
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/tracks/app/views/stats/_tags.rhtml b/tracks/app/views/stats/_tags.rhtml
index 26b9e989..c424c6b1 100755
--- a/tracks/app/views/stats/_tags.rhtml
+++ b/tracks/app/views/stats/_tags.rhtml
@@ -1,5 +1,5 @@
-
-
Tag Cloud
+
+
Tag Cloud
<% if @tags_for_cloud.size < 1
%> no tags available <%
@@ -12,4 +12,5 @@
-%> <%
end
end-%>
-
\ No newline at end of file
+
+
\ No newline at end of file
diff --git a/tracks/app/views/stats/index.rhtml b/tracks/app/views/stats/index.rhtml
index 1ffc5357..140b7882 100755
--- a/tracks/app/views/stats/index.rhtml
+++ b/tracks/app/views/stats/index.rhtml
@@ -1,19 +1,16 @@
-
Totals
+
+
Totals
<%= render :partial => 'totals' -%>
-
-
Actions
<%= render :partial => 'actions' -%>
-
Contexts
<%= render :partial => 'contexts' -%>
-
Projects
<%= render :partial => 'projects' -%>
@@ -21,3 +18,4 @@
Tags
<%= render :partial => 'tags' -%>
+
\ No newline at end of file
diff --git a/tracks/config/asset_packages.yml b/tracks/config/asset_packages.yml
index eb3b5762..e01160a8 100644
--- a/tracks/config/asset_packages.yml
+++ b/tracks/config/asset_packages.yml
@@ -15,6 +15,7 @@ javascripts:
- niftycube
- protoload
- lowpro
+ - flashobject
stylesheets:
- tracks:
- standard
diff --git a/tracks/public/javascripts/flashobject.js b/tracks/public/javascripts/flashobject.js
new file mode 100644
index 00000000..e7edd42c
--- /dev/null
+++ b/tracks/public/javascripts/flashobject.js
@@ -0,0 +1,8 @@
+/**
+ * SWFObject v1.5: Flash Player detection and embed - http://blog.deconcept.com/swfobject/
+ *
+ * SWFObject is (c) 2007 Geoff Stearns and is released under the MIT License:
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+ */
+if(typeof deconcept=="undefined"){var deconcept=new Object();}if(typeof deconcept.util=="undefined"){deconcept.util=new Object();}if(typeof deconcept.SWFObjectUtil=="undefined"){deconcept.SWFObjectUtil=new Object();}deconcept.SWFObject=function(_1,id,w,h,_5,c,_7,_8,_9,_a){if(!document.getElementById){return;}this.DETECT_KEY=_a?_a:"detectflash";this.skipDetect=deconcept.util.getRequestParameter(this.DETECT_KEY);this.params=new Object();this.variables=new Object();this.attributes=new Array();if(_1){this.setAttribute("swf",_1);}if(id){this.setAttribute("id",id);}if(w){this.setAttribute("width",w);}if(h){this.setAttribute("height",h);}if(_5){this.setAttribute("version",new deconcept.PlayerVersion(_5.toString().split(".")));}this.installedVer=deconcept.SWFObjectUtil.getPlayerVersion();if(!window.opera&&document.all&&this.installedVer.major>7){deconcept.SWFObject.doPrepUnload=true;}if(c){this.addParam("bgcolor",c);}var q=_7?_7:"high";this.addParam("quality",q);this.setAttribute("useExpressInstall",false);this.setAttribute("doExpressInstall",false);var _c=(_8)?_8:window.location;this.setAttribute("xiRedirectUrl",_c);this.setAttribute("redirectUrl","");if(_9){this.setAttribute("redirectUrl",_9);}};deconcept.SWFObject.prototype={useExpressInstall:function(_d){this.xiSWFPath=!_d?"expressinstall.swf":_d;this.setAttribute("useExpressInstall",true);},setAttribute:function(_e,_f){this.attributes[_e]=_f;},getAttribute:function(_10){return this.attributes[_10];},addParam:function(_11,_12){this.params[_11]=_12;},getParams:function(){return this.params;},addVariable:function(_13,_14){this.variables[_13]=_14;},getVariable:function(_15){return this.variables[_15];},getVariables:function(){return this.variables;},getVariablePairs:function(){var _16=new Array();var key;var _18=this.getVariables();for(key in _18){_16[_16.length]=key+"="+_18[key];}return _16;},getSWFHTML:function(){var _19="";if(navigator.plugins&&navigator.mimeTypes&&navigator.mimeTypes.length){if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","PlugIn");this.setAttribute("swf",this.xiSWFPath);}_19="
0){_19+="flashvars=\""+_1c+"\"";}_19+="/>";}else{if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","ActiveX");this.setAttribute("swf",this.xiSWFPath);}_19="";_19+=" ";var _1d=this.getParams();for(var key in _1d){_19+=" ";}var _1f=this.getVariablePairs().join("&");if(_1f.length>0){_19+=" ";}_19+=" ";}return _19;},write:function(_20){if(this.getAttribute("useExpressInstall")){var _21=new deconcept.PlayerVersion([6,0,65]);if(this.installedVer.versionIsValid(_21)&&!this.installedVer.versionIsValid(this.getAttribute("version"))){this.setAttribute("doExpressInstall",true);this.addVariable("MMredirectURL",escape(this.getAttribute("xiRedirectUrl")));document.title=document.title.slice(0,47)+" - Flash Player Installation";this.addVariable("MMdoctitle",document.title);}}if(this.skipDetect||this.getAttribute("doExpressInstall")||this.installedVer.versionIsValid(this.getAttribute("version"))){var n=(typeof _20=="string")?document.getElementById(_20):_20;n.innerHTML=this.getSWFHTML();return true;}else{if(this.getAttribute("redirectUrl")!=""){document.location.replace(this.getAttribute("redirectUrl"));}}return false;}};deconcept.SWFObjectUtil.getPlayerVersion=function(){var _23=new deconcept.PlayerVersion([0,0,0]);if(navigator.plugins&&navigator.mimeTypes.length){var x=navigator.plugins["Shockwave Flash"];if(x&&x.description){_23=new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/,"").replace(/(\s+r|\s+b[0-9]+)/,".").split("."));}}else{if(navigator.userAgent&&navigator.userAgent.indexOf("Windows CE")>=0){var axo=1;var _26=3;while(axo){try{_26++;axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+_26);_23=new deconcept.PlayerVersion([_26,0,0]);}catch(e){axo=null;}}}else{try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");}catch(e){try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");_23=new deconcept.PlayerVersion([6,0,21]);axo.AllowScriptAccess="always";}catch(e){if(_23.major==6){return _23;}}try{axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");}catch(e){}}if(axo!=null){_23=new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));}}}return _23;};deconcept.PlayerVersion=function(_29){this.major=_29[0]!=null?parseInt(_29[0]):0;this.minor=_29[1]!=null?parseInt(_29[1]):0;this.rev=_29[2]!=null?parseInt(_29[2]):0;};deconcept.PlayerVersion.prototype.versionIsValid=function(fv){if(this.majorfv.major){return true;}if(this.minorfv.minor){return true;}if(this.rev=0;i--){_2f[i].style.display="none";for(var x in _2f[i]){if(typeof _2f[i][x]=="function"){_2f[i][x]=function(){};}}}};if(deconcept.SWFObject.doPrepUnload){if(!deconcept.unloadSet){deconcept.SWFObjectUtil.prepUnload=function(){__flash_unloadHandler=function(){};__flash_savedUnloadHandler=function(){};window.attachEvent("onunload",deconcept.SWFObjectUtil.cleanupSWFs);};window.attachEvent("onbeforeunload",deconcept.SWFObjectUtil.prepUnload);deconcept.unloadSet=true;}}if(!document.getElementById&&document.all){document.getElementById=function(id){return document.all[id];};}var getQueryParamValue=deconcept.util.getRequestParameter;var FlashObject=deconcept.SWFObject;var SWFObject=deconcept.SWFObject;
\ No newline at end of file
diff --git a/tracks/public/javascripts/tracks_562.js b/tracks/public/javascripts/tracks_1189744942.js
similarity index 96%
rename from tracks/public/javascripts/tracks_562.js
rename to tracks/public/javascripts/tracks_1189744942.js
index ba5cd484..640b9050 100644
--- a/tracks/public/javascripts/tracks_562.js
+++ b/tracks/public/javascripts/tracks_1189744942.js
@@ -740,4 +740,5 @@ else if(!params.id)params.id=selector.substring(id+1);selector=selector.substrin
if(selector.classes.length==1){results=results.select(function(target){return $(target).hasClassName(selector.classes[0]);});}else if(selector.classes.length>1){results=results.select(function(target){var klasses=$(target).classNames();return selector.classes.all(function(klass){return klasses.include(klass);});});}
if(descendant){this.results=this.results.concat(results);}else{++this.index;results.each(function(target){this.findElements(target,this.index==(this.selectors.length-1));}.bind(this));}}}
LowPro.$$old=$$;LowPro.optimize$$=true;function $$(a,b){if(LowPro.optimize$$==false||b||a.indexOf("[")>=0)
-return LowPro.$$old.apply(this,arguments);return new LowPro.SelectorLite(a.split(/\s+/)).get();}
\ No newline at end of file
+return LowPro.$$old.apply(this,arguments);return new LowPro.SelectorLite(a.split(/\s+/)).get();}
+if(typeof deconcept=="undefined"){var deconcept=new Object();}if(typeof deconcept.util=="undefined"){deconcept.util=new Object();}if(typeof deconcept.SWFObjectUtil=="undefined"){deconcept.SWFObjectUtil=new Object();}deconcept.SWFObject=function(_1,id,w,h,_5,c,_7,_8,_9,_a){if(!document.getElementById){return;}this.DETECT_KEY=_a?_a:"detectflash";this.skipDetect=deconcept.util.getRequestParameter(this.DETECT_KEY);this.params=new Object();this.variables=new Object();this.attributes=new Array();if(_1){this.setAttribute("swf",_1);}if(id){this.setAttribute("id",id);}if(w){this.setAttribute("width",w);}if(h){this.setAttribute("height",h);}if(_5){this.setAttribute("version",new deconcept.PlayerVersion(_5.toString().split(".")));}this.installedVer=deconcept.SWFObjectUtil.getPlayerVersion();if(!window.opera&&document.all&&this.installedVer.major>7){deconcept.SWFObject.doPrepUnload=true;}if(c){this.addParam("bgcolor",c);}var q=_7?_7:"high";this.addParam("quality",q);this.setAttribute("useExpressInstall",false);this.setAttribute("doExpressInstall",false);var _c=(_8)?_8:window.location;this.setAttribute("xiRedirectUrl",_c);this.setAttribute("redirectUrl","");if(_9){this.setAttribute("redirectUrl",_9);}};deconcept.SWFObject.prototype={useExpressInstall:function(_d){this.xiSWFPath=!_d?"expressinstall.swf":_d;this.setAttribute("useExpressInstall",true);},setAttribute:function(_e,_f){this.attributes[_e]=_f;},getAttribute:function(_10){return this.attributes[_10];},addParam:function(_11,_12){this.params[_11]=_12;},getParams:function(){return this.params;},addVariable:function(_13,_14){this.variables[_13]=_14;},getVariable:function(_15){return this.variables[_15];},getVariables:function(){return this.variables;},getVariablePairs:function(){var _16=new Array();var key;var _18=this.getVariables();for(key in _18){_16[_16.length]=key+"="+_18[key];}return _16;},getSWFHTML:function(){var _19="";if(navigator.plugins&&navigator.mimeTypes&&navigator.mimeTypes.length){if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","PlugIn");this.setAttribute("swf",this.xiSWFPath);}_19="0){_19+="flashvars=\""+_1c+"\"";}_19+="/>";}else{if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","ActiveX");this.setAttribute("swf",this.xiSWFPath);}_19="";_19+=" ";var _1d=this.getParams();for(var key in _1d){_19+=" ";}var _1f=this.getVariablePairs().join("&");if(_1f.length>0){_19+=" ";}_19+=" ";}return _19;},write:function(_20){if(this.getAttribute("useExpressInstall")){var _21=new deconcept.PlayerVersion([6,0,65]);if(this.installedVer.versionIsValid(_21)&&!this.installedVer.versionIsValid(this.getAttribute("version"))){this.setAttribute("doExpressInstall",true);this.addVariable("MMredirectURL",escape(this.getAttribute("xiRedirectUrl")));document.title=document.title.slice(0,47)+" - Flash Player Installation";this.addVariable("MMdoctitle",document.title);}}if(this.skipDetect||this.getAttribute("doExpressInstall")||this.installedVer.versionIsValid(this.getAttribute("version"))){var n=(typeof _20=="string")?document.getElementById(_20):_20;n.innerHTML=this.getSWFHTML();return true;}else{if(this.getAttribute("redirectUrl")!=""){document.location.replace(this.getAttribute("redirectUrl"));}}return false;}};deconcept.SWFObjectUtil.getPlayerVersion=function(){var _23=new deconcept.PlayerVersion([0,0,0]);if(navigator.plugins&&navigator.mimeTypes.length){var x=navigator.plugins["Shockwave Flash"];if(x&&x.description){_23=new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/,"").replace(/(\s+r|\s+b[0-9]+)/,".").split("."));}}else{if(navigator.userAgent&&navigator.userAgent.indexOf("Windows CE")>=0){var axo=1;var _26=3;while(axo){try{_26++;axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+_26);_23=new deconcept.PlayerVersion([_26,0,0]);}catch(e){axo=null;}}}else{try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");}catch(e){try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");_23=new deconcept.PlayerVersion([6,0,21]);axo.AllowScriptAccess="always";}catch(e){if(_23.major==6){return _23;}}try{axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");}catch(e){}}if(axo!=null){_23=new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));}}}return _23;};deconcept.PlayerVersion=function(_29){this.major=_29[0]!=null?parseInt(_29[0]):0;this.minor=_29[1]!=null?parseInt(_29[1]):0;this.rev=_29[2]!=null?parseInt(_29[2]):0;};deconcept.PlayerVersion.prototype.versionIsValid=function(fv){if(this.majorfv.major){return true;}if(this.minorfv.minor){return true;}if(this.rev=0;i--){_2f[i].style.display="none";for(var x in _2f[i]){if(typeof _2f[i][x]=="function"){_2f[i][x]=function(){};}}}};if(deconcept.SWFObject.doPrepUnload){if(!deconcept.unloadSet){deconcept.SWFObjectUtil.prepUnload=function(){__flash_unloadHandler=function(){};__flash_savedUnloadHandler=function(){};window.attachEvent("onunload",deconcept.SWFObjectUtil.cleanupSWFs);};window.attachEvent("onbeforeunload",deconcept.SWFObjectUtil.prepUnload);deconcept.unloadSet=true;}}if(!document.getElementById&&document.all){document.getElementById=function(id){return document.all[id];};}var getQueryParamValue=deconcept.util.getRequestParameter;var FlashObject=deconcept.SWFObject;var SWFObject=deconcept.SWFObject;
\ No newline at end of file
diff --git a/tracks/public/stylesheets/standard.css b/tracks/public/stylesheets/standard.css
index 1667b491..34c2a9f7 100644
--- a/tracks/public/stylesheets/standard.css
+++ b/tracks/public/stylesheets/standard.css
@@ -185,7 +185,11 @@ a.show_notes:hover, a.link_to_notes:hover {background-image: url(../images/notes
width: 100%;
z-index:1100;
}
-
+body.stats #topbar {
+ filter: alpha(opacity=100);
+ -moz-opacity: 1;
+ opacity: 1;
+}
#date {
float: left;
width: 45%;
@@ -1033,4 +1037,16 @@ button.positive, .widgets a.positive{
background-repeat:no-repeat;
background-position:center center;
background-color:black;
+}
+.stats_content .open-flash-chart, .stats_content .stats_module {
+ float: left;
+ width: 450px;
+ margin-right:20px;
+ padding-bottom:20px;
+}
+.stats_content h2
+{
+ clear:both;
+ margin-top:15px;
+ margin-bottom:15px;
}
\ No newline at end of file
diff --git a/tracks/public/stylesheets/tracks_567.css b/tracks/public/stylesheets/tracks_567.css
index 5feace9a..2962a489 100644
--- a/tracks/public/stylesheets/tracks_567.css
+++ b/tracks/public/stylesheets/tracks_567.css
@@ -44,6 +44,7 @@ a.show_notes:hover, a.link_to_notes:hover {background-image: url(../images/notes
#navlist a:link#current, #navlist a:visited#current, #navlist a:hover {border-bottom: 4px solid #CCC; padding-bottom: 2px; background: transparent; color: #CCC}
#navlist a:hover {color: #CCC}
#topbar {position: fixed; top: 0px; left: 0px; height: 68px; margin-bottom: 20px; clear: both; background-color: #000; filter: alpha(opacity=75); -moz-opacity: .75; opacity: .75; color: #eee; width: 100%; z-index:1100}
+body.stats #topbar {filter: alpha(opacity=100); -moz-opacity: 1; opacity: 1}
#date {float: left; width: 45%; padding-left: 15px; margin-top: 15px; margin-bottom: 5px; white-space: nowrap}
#date h1 {font-size: 152%}
#minilinks {text-align: right; position: fixed; right: 15px; top: 10px; font-size: 0.9em}
@@ -191,6 +192,8 @@ button.positive, .widgets a.positive{ color: #498111}
.bigWaiting {background-image:url('/images/bigWaiting.gif'); background-repeat:no-repeat; background-position:center 20%; background-color:white}
.blackWaiting {background-image:url('/images/blackWaiting.gif'); background-repeat:no-repeat; background-position:center center; background-color:black}
.bigBlackWaiting {background-image:url('/images/bigBlackWaiting.gif'); background-repeat:no-repeat; background-position:center center; background-color:black}
+.stats_content .open-flash-chart, .stats_content .stats_module {float: left; width: 450px; margin-right:20px; padding-bottom:20px}
+.stats_content h2 {clear:both; margin-top:15px; margin-bottom:15px}
div.calendar {position: relative}
.calendar, .calendar table {border: 1px solid #556; font-size: 11px; color: #000; cursor: default; background: #eef; z-index: 110; font-family: tahoma,verdana,sans-serif}
.calendar .button {text-align: center; padding: 2px}
diff --git a/tracks/public/open-flash-chart.swf b/tracks/public/swf/open-flash-chart.swf
similarity index 100%
rename from tracks/public/open-flash-chart.swf
rename to tracks/public/swf/open-flash-chart.swf
diff --git a/tracks/vendor/plugins/flashobject_helper/README b/tracks/vendor/plugins/flashobject_helper/README
new file mode 100644
index 00000000..53d18f3e
--- /dev/null
+++ b/tracks/vendor/plugins/flashobject_helper/README
@@ -0,0 +1,35 @@
+FlashObject v.1.0
+====================
+This FlashObject Helper is based on the flash view helper of the plugin http://laszlo-plugin.rubyforge.org/
+
+It's only copy the FlashObject.js (version 1.5) on your public/javascript directory and register it in the AssetTagHelper of rails,
+so for include the javascript in your page you only can add this (if you havn't yet):
+
+<%= javascript_include_tag :defaults %>
+
+or if you only need the flashobject add this:
+
+<%= javascript_include_tag "flashobject" %>
+
+The is very simple for add a Flash in your page add this:
+
+<%= flashobject_tag "/source/of/your/flash.swf" %>
+
+It's simple.
+
+You can add some options if you want:
+
+- div_id: the HTML +id+ of the +div+ element that is used to contain the Flash object; default "flashcontent"
+- flash_id: the +id+ of the Flash object itself.
+- background_color: the background color of the Flash object; default white
+- flash_version: the version of the Flash player that is required; default "7"
+- size: the size of the Flash object, in the form "100x100". Defaults to "100%x100%"
+- variables: a Hash of initialization variables that are passed to the object; default {:lzproxied => false}
+- parameters: a Hash of parameters that configure the display of the object; default {:scale => 'noscale'}
+- fallback_html: HTML text that is displayed when the Flash player is not available.
+
+Example:
+<%= flashobject_tag "/source/of/your/flash.swf", :size => "350x320" %>
+
+
+Vist my website: http://blog.lipsiasoft.com
\ No newline at end of file
diff --git a/tracks/vendor/plugins/flashobject_helper/init.rb b/tracks/vendor/plugins/flashobject_helper/init.rb
new file mode 100644
index 00000000..68711685
--- /dev/null
+++ b/tracks/vendor/plugins/flashobject_helper/init.rb
@@ -0,0 +1,4 @@
+# Author:: Davide D'Agostino Aka DAddYE
+# WebSite:: http://www.lipsiasoft.com
+
+require 'flashobject_view_helper'
\ No newline at end of file
diff --git a/tracks/vendor/plugins/flashobject_helper/install.rb b/tracks/vendor/plugins/flashobject_helper/install.rb
new file mode 100644
index 00000000..3771c200
--- /dev/null
+++ b/tracks/vendor/plugins/flashobject_helper/install.rb
@@ -0,0 +1,5 @@
+require 'fileutils'
+
+flashobject = File.dirname(__FILE__) + '/../../../public/javascripts/flashobject.js'
+FileUtils.cp File.dirname(__FILE__) + '/javascripts/flashobject.js', flashobject unless File.exist?(flashobject)
+puts IO.read(File.join(File.dirname(__FILE__), 'README'))
\ No newline at end of file
diff --git a/tracks/vendor/plugins/flashobject_helper/javascripts/flashobject.js b/tracks/vendor/plugins/flashobject_helper/javascripts/flashobject.js
new file mode 100644
index 00000000..e7edd42c
--- /dev/null
+++ b/tracks/vendor/plugins/flashobject_helper/javascripts/flashobject.js
@@ -0,0 +1,8 @@
+/**
+ * SWFObject v1.5: Flash Player detection and embed - http://blog.deconcept.com/swfobject/
+ *
+ * SWFObject is (c) 2007 Geoff Stearns and is released under the MIT License:
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+ */
+if(typeof deconcept=="undefined"){var deconcept=new Object();}if(typeof deconcept.util=="undefined"){deconcept.util=new Object();}if(typeof deconcept.SWFObjectUtil=="undefined"){deconcept.SWFObjectUtil=new Object();}deconcept.SWFObject=function(_1,id,w,h,_5,c,_7,_8,_9,_a){if(!document.getElementById){return;}this.DETECT_KEY=_a?_a:"detectflash";this.skipDetect=deconcept.util.getRequestParameter(this.DETECT_KEY);this.params=new Object();this.variables=new Object();this.attributes=new Array();if(_1){this.setAttribute("swf",_1);}if(id){this.setAttribute("id",id);}if(w){this.setAttribute("width",w);}if(h){this.setAttribute("height",h);}if(_5){this.setAttribute("version",new deconcept.PlayerVersion(_5.toString().split(".")));}this.installedVer=deconcept.SWFObjectUtil.getPlayerVersion();if(!window.opera&&document.all&&this.installedVer.major>7){deconcept.SWFObject.doPrepUnload=true;}if(c){this.addParam("bgcolor",c);}var q=_7?_7:"high";this.addParam("quality",q);this.setAttribute("useExpressInstall",false);this.setAttribute("doExpressInstall",false);var _c=(_8)?_8:window.location;this.setAttribute("xiRedirectUrl",_c);this.setAttribute("redirectUrl","");if(_9){this.setAttribute("redirectUrl",_9);}};deconcept.SWFObject.prototype={useExpressInstall:function(_d){this.xiSWFPath=!_d?"expressinstall.swf":_d;this.setAttribute("useExpressInstall",true);},setAttribute:function(_e,_f){this.attributes[_e]=_f;},getAttribute:function(_10){return this.attributes[_10];},addParam:function(_11,_12){this.params[_11]=_12;},getParams:function(){return this.params;},addVariable:function(_13,_14){this.variables[_13]=_14;},getVariable:function(_15){return this.variables[_15];},getVariables:function(){return this.variables;},getVariablePairs:function(){var _16=new Array();var key;var _18=this.getVariables();for(key in _18){_16[_16.length]=key+"="+_18[key];}return _16;},getSWFHTML:function(){var _19="";if(navigator.plugins&&navigator.mimeTypes&&navigator.mimeTypes.length){if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","PlugIn");this.setAttribute("swf",this.xiSWFPath);}_19="0){_19+="flashvars=\""+_1c+"\"";}_19+="/>";}else{if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","ActiveX");this.setAttribute("swf",this.xiSWFPath);}_19="";_19+=" ";var _1d=this.getParams();for(var key in _1d){_19+=" ";}var _1f=this.getVariablePairs().join("&");if(_1f.length>0){_19+=" ";}_19+=" ";}return _19;},write:function(_20){if(this.getAttribute("useExpressInstall")){var _21=new deconcept.PlayerVersion([6,0,65]);if(this.installedVer.versionIsValid(_21)&&!this.installedVer.versionIsValid(this.getAttribute("version"))){this.setAttribute("doExpressInstall",true);this.addVariable("MMredirectURL",escape(this.getAttribute("xiRedirectUrl")));document.title=document.title.slice(0,47)+" - Flash Player Installation";this.addVariable("MMdoctitle",document.title);}}if(this.skipDetect||this.getAttribute("doExpressInstall")||this.installedVer.versionIsValid(this.getAttribute("version"))){var n=(typeof _20=="string")?document.getElementById(_20):_20;n.innerHTML=this.getSWFHTML();return true;}else{if(this.getAttribute("redirectUrl")!=""){document.location.replace(this.getAttribute("redirectUrl"));}}return false;}};deconcept.SWFObjectUtil.getPlayerVersion=function(){var _23=new deconcept.PlayerVersion([0,0,0]);if(navigator.plugins&&navigator.mimeTypes.length){var x=navigator.plugins["Shockwave Flash"];if(x&&x.description){_23=new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/,"").replace(/(\s+r|\s+b[0-9]+)/,".").split("."));}}else{if(navigator.userAgent&&navigator.userAgent.indexOf("Windows CE")>=0){var axo=1;var _26=3;while(axo){try{_26++;axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+_26);_23=new deconcept.PlayerVersion([_26,0,0]);}catch(e){axo=null;}}}else{try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");}catch(e){try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");_23=new deconcept.PlayerVersion([6,0,21]);axo.AllowScriptAccess="always";}catch(e){if(_23.major==6){return _23;}}try{axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");}catch(e){}}if(axo!=null){_23=new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));}}}return _23;};deconcept.PlayerVersion=function(_29){this.major=_29[0]!=null?parseInt(_29[0]):0;this.minor=_29[1]!=null?parseInt(_29[1]):0;this.rev=_29[2]!=null?parseInt(_29[2]):0;};deconcept.PlayerVersion.prototype.versionIsValid=function(fv){if(this.majorfv.major){return true;}if(this.minorfv.minor){return true;}if(this.rev=0;i--){_2f[i].style.display="none";for(var x in _2f[i]){if(typeof _2f[i][x]=="function"){_2f[i][x]=function(){};}}}};if(deconcept.SWFObject.doPrepUnload){if(!deconcept.unloadSet){deconcept.SWFObjectUtil.prepUnload=function(){__flash_unloadHandler=function(){};__flash_savedUnloadHandler=function(){};window.attachEvent("onunload",deconcept.SWFObjectUtil.cleanupSWFs);};window.attachEvent("onbeforeunload",deconcept.SWFObjectUtil.prepUnload);deconcept.unloadSet=true;}}if(!document.getElementById&&document.all){document.getElementById=function(id){return document.all[id];};}var getQueryParamValue=deconcept.util.getRequestParameter;var FlashObject=deconcept.SWFObject;var SWFObject=deconcept.SWFObject;
\ No newline at end of file
diff --git a/tracks/vendor/plugins/flashobject_helper/lib/flashobject_view_helper.rb b/tracks/vendor/plugins/flashobject_helper/lib/flashobject_view_helper.rb
new file mode 100644
index 00000000..0bd1fb3e
--- /dev/null
+++ b/tracks/vendor/plugins/flashobject_helper/lib/flashobject_view_helper.rb
@@ -0,0 +1,85 @@
+# Author:: Davide D'Agostino aka DAddYE
+# WebSite:: http://www.lipsiasoft.com
+require 'action_view'
+
+module ActionView #:nodoc:
+ module Helpers # :nodoc:
+ module FlashObjectHelper # :nodoc:
+ def self.included(base)
+ base.class_eval do
+ include InstanceMethods
+ end
+ end
+ module InstanceMethods
+ # Returns a set of tags that display a Flash object within an
+ # HTML page.
+ #
+ # Options:
+ # * :div_id - the HTML +id+ of the +div+ element that is used to contain the Flash object; default "flashcontent"
+ # * :flash_id - the +id+ of the Flash object itself.
+ # * :background_color - the background color of the Flash object; default white
+ # * :flash_version - the version of the Flash player that is required; default "7"
+ # * :size - the size of the Flash object, in the form "100x100". Defaults to "100%x100%"
+ # * :variables - a Hash of initialization variables that are passed to the object; default {:lzproxied => false}
+ # * :parameters - a Hash of parameters that configure the display of the object; default {:scale => 'noscale'}
+ # * :fallback_html - HTML text that is displayed when the Flash player is not available.
+ #
+ # The following options are for developers. They default to true in
+ # development mode, and false otherwise.
+ # * :check_for_javascript_include - if true, the return value will cause the browser to display a diagnostic message if the FlashObject JavaScript was not included.
+ # * :verify_file_exists - if true, the return value will cause the browser to display a diagnostic message if the Flash object does not exist.
+ #
+ # (This method is called flashobject_tag instead of flashobject_tag
+ # because it returns a *sequence* of HTML tags: a +div+, followed by
+ # a +script+.)
+ def flashobject_tag source, options={}
+ source = flash_path(source)
+ query_params = '?' + options[:query_params].map{ |key, value| "#{key}=#{value}" }.join('&') if options[:query_params]
+ div_id = options[:div_id] || "flashcontent_#{rand(1_100)}"
+ flash_id = options[:flash_id] || File.basename(source, '.swf') + "_#{rand(1_100)}"
+ width, height = (options[:size]||'100%x100%').scan(/^(\d*%?)x(\d*%?)$/).first
+ background_color = options[:background_color] || '#ffffff'
+ flash_version = options[:flash_version] || 7
+ class_name = options[:class_name] || 'flash'
+ variables = options.fetch(:variables, {})
+ parameters = options.fetch(:parameters, {:scale => 'noscale'})
+ fallback_html = options[:fallback_html] || %q{Requires the Flash plugin. If the plugin is already installed, click here .
}
+ if options.fetch(:check_for_javascript_include, ENV['RAILS_ENV'] == 'development')
+ check_for_javascript ="if (typeof FlashObject == 'undefined') document.getElementById('#{div_id}').innerHTML = 'Warning: FlashObject is undefined. Did you forget to execute rake update_javascripts , or to include <%= javascript_include_tag :defaults %> in your view file?';"
+ end
+ return <<-"EOF"
+
+ #{fallback_html}
+
+
+EOF
+ end
+
+ # Computes the path to a flash asset in the public swf directory.
+ # If the +source+ filename has no extension, .swf will be appended.
+ # Full paths from the document root will be passed through.
+ #
+ # flash_path "movie" # => /swf/movie.swf
+ # flash_path "dir/movie.swf" # => /swf/dir/movie.swf
+ # flash_path "/dir/movie" # => /dir/movie.swf
+ def flash_path(source)
+ compute_public_path(source, 'swf', 'swf', false)
+ end
+
+ end
+ end
+ end
+end
+
+ActionView::Base.class_eval do
+ include ActionView::Helpers::FlashObjectHelper
+end
+
+ActionView::Helpers::AssetTagHelper.register_javascript_include_default 'flashobject'
\ No newline at end of file