[DRE-commits] [SCM] ruby-fog.git branch, master, updated. debian/1.3.1-2-12-g4710704

Laurent Bigonville bigon at bigon.be
Sat Jul 6 22:43:37 UTC 2013


The following commit has been merged in the master branch:
commit bb2f60265dacc593e84ac17acc5f232e8cf72a65
Author: Laurent Bigonville <bigon at bigon.be>
Date:   Sat Jul 6 22:19:08 2013 +0200

    d/p/0001-Rename-dd_belatedpng.js-to-dd_belatedpng.min.js.patch, d/p/0002-Add-non-minified-javascript-files-used-in-docs-939.patch: Dropped, not needed anymore

diff --git a/debian/changelog b/debian/changelog
index 57dcf1a..b27d319 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -3,6 +3,9 @@ ruby-fog (1.12.1-1) UNRELEASED; urgency=low
   * New upstream release (Closes: #700449, #706225)
     - debian/control: Bump {build-}dependencies
     - debian/patches/add_missing_requires.patch: Refreshed
+    - d/p/0001-Rename-dd_belatedpng.js-to-dd_belatedpng.min.js.patch,
+      d/p/0002-Add-non-minified-javascript-files-used-in-docs-939.patch:
+      Dropped, not needed anymore
   * debian/control: Bump Standards-Version to 3.9.4 (no further changes)
 
  -- Laurent Bigonville <bigon at debian.org>  Sat, 06 Jul 2013 21:55:54 +0200
diff --git a/debian/patches/0001-Rename-dd_belatedpng.js-to-dd_belatedpng.min.js.patch b/debian/patches/0001-Rename-dd_belatedpng.js-to-dd_belatedpng.min.js.patch
deleted file mode 100644
index 6f2a0dd..0000000
--- a/debian/patches/0001-Rename-dd_belatedpng.js-to-dd_belatedpng.min.js.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From 5705fcf359c5969d57da5aae66f8f20b1b0a1ee6 Mon Sep 17 00:00:00 2001
-From: Laurent Bigonville <bigon at bigon.be>
-Date: Wed, 30 May 2012 14:43:02 +0200
-Subject: [PATCH 1/2] Rename dd_belatedpng.js to dd_belatedpng.min.js
-
-Rename dd_belatedpng.js to dd_belatedpng.min.js so we are consistant
-with the other minified javascript files
----
- docs/_layouts/default.html               |    2 +-
- docs/public/js/libs/dd_belatedpng.min.js |   13 +++++++++++++
- 2 files changed, 14 insertions(+), 1 deletion(-)
- create mode 100755 docs/public/js/libs/dd_belatedpng.min.js
-
-diff --git a/docs/_layouts/default.html b/docs/_layouts/default.html
-index bda19dd..f0e6fd0 100755
---- a/docs/_layouts/default.html
-+++ b/docs/_layouts/default.html
-@@ -85,7 +85,7 @@
- 
- 
-   <!--[if lt IE 7 ]>
--    <script src="public/js/libs/dd_belatedpng.js"></script>
-+    <script src="public/js/libs/dd_belatedpng.min.js"></script>
-     <script> DD_belatedPNG.fix('img, .png_bg'); </script>
-   <![endif]-->
- 
-diff --git a/docs/public/js/libs/dd_belatedpng.min.js b/docs/public/js/libs/dd_belatedpng.min.js
-new file mode 100755
-index 0000000..6062fb3
---- /dev/null
-+++ b/docs/public/js/libs/dd_belatedpng.min.js
-@@ -0,0 +1,13 @@
-+/**
-+* DD_belatedPNG: Adds IE6 support: PNG images for CSS background-image and HTML <IMG/>.
-+* Author: Drew Diller
-+* Email: drew.diller at gmail.com
-+* URL: http://www.dillerdesign.com/experiment/DD_belatedPNG/
-+* Version: 0.0.8a
-+* Licensed under the MIT License: http://dillerdesign.com/experiment/DD_belatedPNG/#license
-+*
-+* Example usage:
-+* DD_belatedPNG.fix('.png_bg'); // argument is a CSS selector
-+* DD_belatedPNG.fixPng( someNode ); // argument is an HTMLDomElement
-+**/
-+var DD_belatedPNG={ns:"DD_belatedPNG",imgSize:{},delay:10,nodesFixed:0,createVmlNameSpace:function(){if(document.namespaces&&!document.namespaces[this.ns]){document.namespaces.add(this.ns,"urn:schemas-microsoft-com:vml")}},createVmlStyleSheet:function(){var b,a;b=document.createElement("style");b.setAttribute("media","screen");document.documentElement.firstChild.insertBefore(b,document.documentElement.firstChild.firstChild);if(b.styleSheet){b=b.styleSheet;b.addRule(this.ns+"\\:*","{behavior:url(#default#VML)}");b.addRule(this.ns+"\\:shape","position:absolute;");b.addRule("img."+this.ns+"_sizeFinder","behavior:none; border:none; position:absolute; z-index:-1; top:-10000px; visibility:hidden;");this.screenStyleSheet=b;a=document.createElement("style");a.setAttribute("media","print");document.documentElement.firstChild.insertBefore(a,document.documentElement.firstChild.firstChild);a=a.styleSheet;a.addRule(this.ns+"\\:*","{display: none !important;}");a.addRule("img."+this.ns+"_sizeFinder","{display: none !important;}")}},readPropertyChange:function(){var b,c,a;b=event.srcElement;if(!b.vmlInitiated){return}if(event.propertyName.search("background")!=-1||event.propertyName.search("border")!=-1){DD_belatedPNG.applyVML(b)}if(event.propertyName=="style.display"){c=(b.currentStyle.display=="none")?"none":"block";for(a in b.vml){if(b.vml.hasOwnProperty(a)){b.vml[a].shape.style.display=c}}}if(event.propertyName.search("filter")!=-1){DD_belatedPNG.vmlOpacity(b)}},vmlOpacity:function(b){if(b.currentStyle.filter.search("lpha")!=-1){var a=b.currentStyle.filter;a=parseInt(a.substring(a.lastIndexOf("=")+1,a.lastIndexOf(")")),10)/100;b.vml.color.shape.style.filter=b.currentStyle.filter;b.vml.image.fill.opacity=a}},handlePseudoHover:function(a){setTimeout(function(){DD_belatedPNG.applyVML(a)},1)},fix:function(a){if(this.screenStyleSheet){var c,b;c=a.split(",");for(b=0;b<c.length;b++){this.screenStyleSheet.addRule(c[b],"behavior:expression(DD_belatedPNG.fixPng(this))")}}},applyVML:function(a){a.runtimeStyle.cssText="";this.vmlFill(a);this.vmlOffsets(a);this.vmlOpacity(a);if(a.isImg){this.copyImageBorders(a)}},attachHandlers:function(i){var d,c,g,e,b,f;d=this;c={resize:"vmlOffsets",move:"vmlOffsets"};if(i.nodeName=="A"){e={mouseleave:"handlePseudoHover",mouseenter:"handlePseudoHover",focus:"handlePseudoHover",blur:"handlePseudoHover"};for(b in e){if(e.hasOwnProperty(b)){c[b]=e[b]}}}for(f in c){if(c.hasOwnProperty(f)){g=function(){d[c[f]](i)};i.attachEvent("on"+f,g)}}i.attachEvent("onpropertychange",this.readPropertyChange)},giveLayout:function(a){a.style.zoom=1;if(a.currentStyle.position=="static"){a.style.position="relative"}},copyImageBorders:function(b){var c,a;c={borderStyle:true,borderWidth:true,borderColor:true};for(a in c){if(c.hasOwnProperty(a)){b.vml.color.shape.style[a]=b.currentStyle[a]}}},vmlFill:function(e){if(!e.currentStyle){return}else{var d,f,g,b,a,c;d=e.currentStyle}for(b in e.vml){if(e.vml.hasOwnProperty(b)){e.vml[b].shape.style.zIndex=d.zIndex}}e.runtimeStyle.backgroundColor="";e.runtimeStyle.backgroundImage="";f=true;if(d.backgroundImage!="none"||e.isImg){if(!e.isImg){e.vmlBg=d.backgroundImage;e.vmlBg=e.vmlBg.substr(5,e.vmlBg.lastIndexOf('")')-5)}else{e.vmlBg=e.src}g=this;if(!g.imgSize[e.vmlBg]){a=document.createElement("img");g.imgSize[e.vmlBg]=a;a.className=g.ns+"_sizeFinder";a.runtimeStyle.cssText="behavior:none; position:absolute; left:-10000px; top:-10000px; border:none; margin:0; padding:0;";c=function(){this.width=this.offsetWidth;this.height=this.offsetHeight;g.vmlOffsets(e)};a.attachEvent("onload",c);a.src=e.vmlBg;a.removeAttribute("width");a.removeAttribute("height");document.body.insertBefore(a,document.body.firstChild)}e.vml.image.fill.src=e.vmlBg;f=false}e.vml.image.fill.on=!f;e.vml.image.fill.color="none";e.vml.color.shape.style.backgroundColor=d.backgroundColor;e.runtimeStyle.backgroundImage="none";e.runtimeStyle.backgroundColor="transparent"},vmlOffsets:function(d){var h,n,a,e,g,m,f,l,j,i,k;h=d.currentStyle;n={W:d.clientWidth+1,H:d.clientHeight+1,w:this.imgSize[d.vmlBg].width,h:this.imgSize[d.vmlBg].height,L:d.offsetLeft,T:d.offsetTop,bLW:d.clientLeft,bTW:d.clientTop};a=(n.L+n.bLW==1)?1:0;e=function(b,p,q,c,s,u){b.coordsize=c+","+s;b.coordorigin=u+","+u;b.path="m0,0l"+c+",0l"+c+","+s+"l0,"+s+" xe";b.style.width=c+"px";b.style.height=s+"px";b.style.left=p+"px";b.style.top=q+"px"};e(d.vml.color.shape,(n.L+(d.isImg?0:n.bLW)),(n.T+(d.isImg?0:n.bTW)),(n.W-1),(n.H-1),0);e(d.vml.image.shape,(n.L+n.bLW),(n.T+n.bTW),(n.W),(n.H),1);g={X:0,Y:0};if(d.isImg){g.X=parseInt(h.paddingLeft,10)+1;g.Y=parseInt(h.paddingTop,10)+1}else{for(j in g){if(g.hasOwnProperty(j)){this.figurePercentage(g,n,j,h["backgroundPosition"+j])}}}d.vml.image.fill.position=(g.X/n.W)+","+(g.Y/n.H);m=h.backgroundRepeat;f={T:1,R:n.W+a,B:n.H,L:1+a};l={X:{b1:"L",b2:"R",d:"W"},Y:{b1:"T",b2:"B",d:"H"}};if(m!="repeat"||d.isImg){i={T:(g.Y),R:(g.X+n.w),B:(g.Y+n.h),L:(g.X)};if(m.search("repeat-")!=-1){k=m.split("repeat-")[1].toUpperCase();i[l[k].b1]=1;i[l[k].b2]=n[l[k].d]}if(i.B>n.H){i.B=n.H}d.vml.image.shape.style.clip="rect("+i.T+"px "+(i.R+a)+"px "+i.B+"px "+(i.L+a)+"px)"}else{d.vml.image.shape.style.clip="rect("+f.T+"px "+f.R+"px "+f.B+"px "+f.L+"px)"}},figurePercentage:function(d,c,f,a){var b,e;e=true;b=(f=="X");switch(a){case"left":case"top":d[f]=0;break;case"center":d[f]=0.5;break;case"right":case"bottom":d[f]=1;break;default:if(a.search("%")!=-1){d[f]=parseInt(a,10)/100}else{e=false}}d[f]=Math.ceil(e?((c[b?"W":"H"]*d[f])-(c[b?"w":"h"]*d[f])):parseInt(a,10));if(d[f]%2===0){d[f]++}return d[f]},fixPng:function(c){c.style.behavior="none";var g,b,f,a,d;if(c.nodeName=="BODY"||c.nodeName=="TD"||c.nodeName=="TR"){return}c.isImg=false;if(c.nodeName=="IMG"){if(c.src.toLowerCase().search(/\.png$/)!=-1){c.isImg=true;c.style.visibility="hidden"}else{return}}else{if(c.currentStyle.backgroundImage.toLowerCase().search(".png")==-1){return}}g=DD_belatedPNG;c.vml={color:{},image:{}};b={shape:{},fill:{}};for(a in c.vml){if(c.vml.hasOwnProperty(a)){for(d in b){if(b.hasOwnProperty(d)){f=g.ns+":"+d;c.vml[a][d]=document.createElement(f)}}c.vml[a].shape.stroked=false;c.vml[a].shape.appendChild(c.vml[a].fill);c.parentNode.insertBefore(c.vml[a].shape,c)}}c.vml.image.shape.fillcolor="none";c.vml.image.fill.type="tile";c.vml.color.fill.on=false;g.attachHandlers(c);g.giveLayout(c);g.giveLayout(c.offsetParent);c.vmlInitiated=true;g.applyVML(c)}};try{document.execCommand("BackgroundImageCache",false,true)}catch(r){}DD_belatedPNG.createVmlNameSpace();DD_belatedPNG.createVmlStyleSheet();
-\ No newline at end of file
--- 
-1.7.10
-
diff --git a/debian/patches/0002-Add-non-minified-javascript-files-used-in-docs-939.patch b/debian/patches/0002-Add-non-minified-javascript-files-used-in-docs-939.patch
deleted file mode 100644
index 965b573..0000000
--- a/debian/patches/0002-Add-non-minified-javascript-files-used-in-docs-939.patch
+++ /dev/null
@@ -1,2260 +0,0 @@
-From 5d1fdc7941f010d0f80740e0284414163c03e301 Mon Sep 17 00:00:00 2001
-From: Laurent Bigonville <bigon at bigon.be>
-Date: Wed, 30 May 2012 15:21:19 +0200
-Subject: [PATCH 2/2] Add non-minified javascript files used in docs/ (#939)
-
----
- docs/public/js/libs/dd_belatedpng.js        |  302 +++++++-
- docs/public/js/libs/modernizr-1.6.js        |  892 +++++++++++++++++++++++
- docs/public/js/profiling/yahoo-profiling.js | 1028 +++++++++++++++++++++++++++
- 3 files changed, 2209 insertions(+), 13 deletions(-)
- mode change 100755 => 100644 docs/public/js/libs/dd_belatedpng.js
- create mode 100644 docs/public/js/libs/modernizr-1.6.js
- create mode 100644 docs/public/js/profiling/yahoo-profiling.js
-
-diff --git a/docs/public/js/libs/dd_belatedpng.js b/docs/public/js/libs/dd_belatedpng.js
-old mode 100755
-new mode 100644
-index 6062fb3..248955b
---- a/docs/public/js/libs/dd_belatedpng.js
-+++ b/docs/public/js/libs/dd_belatedpng.js
-@@ -1,13 +1,289 @@
--/**
--* DD_belatedPNG: Adds IE6 support: PNG images for CSS background-image and HTML <IMG/>.
--* Author: Drew Diller
--* Email: drew.diller at gmail.com
--* URL: http://www.dillerdesign.com/experiment/DD_belatedPNG/
--* Version: 0.0.8a
--* Licensed under the MIT License: http://dillerdesign.com/experiment/DD_belatedPNG/#license
--*
--* Example usage:
--* DD_belatedPNG.fix('.png_bg'); // argument is a CSS selector
--* DD_belatedPNG.fixPng( someNode ); // argument is an HTMLDomElement
--**/
--var DD_belatedPNG={ns:"DD_belatedPNG",imgSize:{},delay:10,nodesFixed:0,createVmlNameSpace:function(){if(document.namespaces&&!document.namespaces[this.ns]){document.namespaces.add(this.ns,"urn:schemas-microsoft-com:vml")}},createVmlStyleSheet:function(){var b,a;b=document.createElement("style");b.setAttribute("media","screen");document.documentElement.firstChild.insertBefore(b,document.documentElement.firstChild.firstChild);if(b.styleSheet){b=b.styleSheet;b.addRule(this.ns+"\\:*","{behavior:url(#default#VML)}");b.addRule(this.ns+"\\:shape","position:absolute;");b.addRule("img."+this.ns+"_sizeFinder","behavior:none; border:none; position:absolute; z-index:-1; top:-10000px; visibility:hidden;");this.screenStyleSheet=b;a=document.createElement("style");a.setAttribute("media","print");document.documentElement.firstChild.insertBefore(a,document.documentElement.firstChild.firstChild);a=a.styleSheet;a.addRule(this.ns+"\\:*","{display: none !important;}");a.addRule("img."+this.ns+"_sizeFinder","{display: none !important;}")}},readPropertyChange:function(){var b,c,a;b=event.srcElement;if(!b.vmlInitiated){return}if(event.propertyName.search("background")!=-1||event.propertyName.search("border")!=-1){DD_belatedPNG.applyVML(b)}if(event.propertyName=="style.display"){c=(b.currentStyle.display=="none")?"none":"block";for(a in b.vml){if(b.vml.hasOwnProperty(a)){b.vml[a].shape.style.display=c}}}if(event.propertyName.search("filter")!=-1){DD_belatedPNG.vmlOpacity(b)}},vmlOpacity:function(b){if(b.currentStyle.filter.search("lpha")!=-1){var a=b.currentStyle.filter;a=parseInt(a.substring(a.lastIndexOf("=")+1,a.lastIndexOf(")")),10)/100;b.vml.color.shape.style.filter=b.currentStyle.filter;b.vml.image.fill.opacity=a}},handlePseudoHover:function(a){setTimeout(function(){DD_belatedPNG.applyVML(a)},1)},fix:function(a){if(this.screenStyleSheet){var c,b;c=a.split(",");for(b=0;b<c.length;b++){this.screenStyleSheet.addRule(c[b],"behavior:expression(DD_belatedPNG.fixPng(this))")}}},applyVML:function(a){a.runtimeStyle.cssText="";this.vmlFill(a);this.vmlOffsets(a);this.vmlOpacity(a);if(a.isImg){this.copyImageBorders(a)}},attachHandlers:function(i){var d,c,g,e,b,f;d=this;c={resize:"vmlOffsets",move:"vmlOffsets"};if(i.nodeName=="A"){e={mouseleave:"handlePseudoHover",mouseenter:"handlePseudoHover",focus:"handlePseudoHover",blur:"handlePseudoHover"};for(b in e){if(e.hasOwnProperty(b)){c[b]=e[b]}}}for(f in c){if(c.hasOwnProperty(f)){g=function(){d[c[f]](i)};i.attachEvent("on"+f,g)}}i.attachEvent("onpropertychange",this.readPropertyChange)},giveLayout:function(a){a.style.zoom=1;if(a.currentStyle.position=="static"){a.style.position="relative"}},copyImageBorders:function(b){var c,a;c={borderStyle:true,borderWidth:true,borderColor:true};for(a in c){if(c.hasOwnProperty(a)){b.vml.color.shape.style[a]=b.currentStyle[a]}}},vmlFill:function(e){if(!e.currentStyle){return}else{var d,f,g,b,a,c;d=e.currentStyle}for(b in e.vml){if(e.vml.hasOwnProperty(b)){e.vml[b].shape.style.zIndex=d.zIndex}}e.runtimeStyle.backgroundColor="";e.runtimeStyle.backgroundImage="";f=true;if(d.backgroundImage!="none"||e.isImg){if(!e.isImg){e.vmlBg=d.backgroundImage;e.vmlBg=e.vmlBg.substr(5,e.vmlBg.lastIndexOf('")')-5)}else{e.vmlBg=e.src}g=this;if(!g.imgSize[e.vmlBg]){a=document.createElement("img");g.imgSize[e.vmlBg]=a;a.className=g.ns+"_sizeFinder";a.runtimeStyle.cssText="behavior:none; position:absolute; left:-10000px; top:-10000px; border:none; margin:0; padding:0;";c=function(){this.width=this.offsetWidth;this.height=this.offsetHeight;g.vmlOffsets(e)};a.attachEvent("onload",c);a.src=e.vmlBg;a.removeAttribute("width");a.removeAttribute("height");document.body.insertBefore(a,document.body.firstChild)}e.vml.image.fill.src=e.vmlBg;f=false}e.vml.image.fill.on=!f;e.vml.image.fill.color="none";e.vml.color.shape.style.backgroundColor=d.backgroundColor;e.runtimeStyle.backgroundImage="none";e.runtimeStyle.backgroundColor="transparent"},vmlOffsets:function(d){var h,n,a,e,g,m,f,l,j,i,k;h=d.currentStyle;n={W:d.clientWidth+1,H:d.clientHeight+1,w:this.imgSize[d.vmlBg].width,h:this.imgSize[d.vmlBg].height,L:d.offsetLeft,T:d.offsetTop,bLW:d.clientLeft,bTW:d.clientTop};a=(n.L+n.bLW==1)?1:0;e=function(b,p,q,c,s,u){b.coordsize=c+","+s;b.coordorigin=u+","+u;b.path="m0,0l"+c+",0l"+c+","+s+"l0,"+s+" xe";b.style.width=c+"px";b.style.height=s+"px";b.style.left=p+"px";b.style.top=q+"px"};e(d.vml.color.shape,(n.L+(d.isImg?0:n.bLW)),(n.T+(d.isImg?0:n.bTW)),(n.W-1),(n.H-1),0);e(d.vml.image.shape,(n.L+n.bLW),(n.T+n.bTW),(n.W),(n.H),1);g={X:0,Y:0};if(d.isImg){g.X=parseInt(h.paddingLeft,10)+1;g.Y=parseInt(h.paddingTop,10)+1}else{for(j in g){if(g.hasOwnProperty(j)){this.figurePercentage(g,n,j,h["backgroundPosition"+j])}}}d.vml.image.fill.position=(g.X/n.W)+","+(g.Y/n.H);m=h.backgroundRepeat;f={T:1,R:n.W+a,B:n.H,L:1+a};l={X:{b1:"L",b2:"R",d:"W"},Y:{b1:"T",b2:"B",d:"H"}};if(m!="repeat"||d.isImg){i={T:(g.Y),R:(g.X+n.w),B:(g.Y+n.h),L:(g.X)};if(m.search("repeat-")!=-1){k=m.split("repeat-")[1].toUpperCase();i[l[k].b1]=1;i[l[k].b2]=n[l[k].d]}if(i.B>n.H){i.B=n.H}d.vml.image.shape.style.clip="rect("+i.T+"px "+(i.R+a)+"px "+i.B+"px "+(i.L+a)+"px)"}else{d.vml.image.shape.style.clip="rect("+f.T+"px "+f.R+"px "+f.B+"px "+f.L+"px)"}},figurePercentage:function(d,c,f,a){var b,e;e=true;b=(f=="X");switch(a){case"left":case"top":d[f]=0;break;case"center":d[f]=0.5;break;case"right":case"bottom":d[f]=1;break;default:if(a.search("%")!=-1){d[f]=parseInt(a,10)/100}else{e=false}}d[f]=Math.ceil(e?((c[b?"W":"H"]*d[f])-(c[b?"w":"h"]*d[f])):parseInt(a,10));if(d[f]%2===0){d[f]++}return d[f]},fixPng:function(c){c.style.behavior="none";var g,b,f,a,d;if(c.nodeName=="BODY"||c.nodeName=="TD"||c.nodeName=="TR"){return}c.isImg=false;if(c.nodeName=="IMG"){if(c.src.toLowerCase().search(/\.png$/)!=-1){c.isImg=true;c.style.visibility="hidden"}else{return}}else{if(c.currentStyle.backgroundImage.toLowerCase().search(".png")==-1){return}}g=DD_belatedPNG;c.vml={color:{},image:{}};b={shape:{},fill:{}};for(a in c.vml){if(c.vml.hasOwnProperty(a)){for(d in b){if(b.hasOwnProperty(d)){f=g.ns+":"+d;c.vml[a][d]=document.createElement(f)}}c.vml[a].shape.stroked=false;c.vml[a].shape.appendChild(c.vml[a].fill);c.parentNode.insertBefore(c.vml[a].shape,c)}}c.vml.image.shape.fillcolor="none";c.vml.image.fill.type="tile";c.vml.color.fill.on=false;g.attachHandlers(c);g.giveLayout(c);g.giveLayout(c.offsetParent);c.vmlInitiated=true;g.applyVML(c)}};try{document.execCommand("BackgroundImageCache",false,true)}catch(r){}DD_belatedPNG.createVmlNameSpace();DD_belatedPNG.createVmlStyleSheet();
-\ No newline at end of file
-+/**
-+* DD_belatedPNG: Adds IE6 support: PNG images for CSS background-image and HTML <IMG/>.
-+* Author: Drew Diller
-+* Email: drew.diller at gmail.com
-+* URL: http://www.dillerdesign.com/experiment/DD_belatedPNG/
-+* Version: 0.0.8a
-+* Licensed under the MIT License: http://dillerdesign.com/experiment/DD_belatedPNG/#license
-+*
-+* Example usage:
-+* DD_belatedPNG.fix('.png_bg'); // argument is a CSS selector
-+* DD_belatedPNG.fixPng( someNode ); // argument is an HTMLDomElement
-+**/
-+
-+/*
-+PLEASE READ:
-+Absolutely everything in this script is SILLY.  I know this.  IE's rendering of certain pixels doesn't make sense, so neither does this code!
-+*/
-+
-+var DD_belatedPNG = {
-+	ns: 'DD_belatedPNG',
-+	imgSize: {},
-+	delay: 10,
-+	nodesFixed: 0,
-+	createVmlNameSpace: function () { /* enable VML */
-+		if (document.namespaces && !document.namespaces[this.ns]) {
-+			document.namespaces.add(this.ns, 'urn:schemas-microsoft-com:vml');
-+		}
-+	},
-+	createVmlStyleSheet: function () { /* style VML, enable behaviors */
-+		/*
-+			Just in case lots of other developers have added
-+			lots of other stylesheets using document.createStyleSheet
-+			and hit the 31-limit mark, let's not use that method!
-+			further reading: http://msdn.microsoft.com/en-us/library/ms531194(VS.85).aspx
-+		*/
-+		var screenStyleSheet, printStyleSheet;
-+		screenStyleSheet = document.createElement('style');
-+		screenStyleSheet.setAttribute('media', 'screen');
-+		document.documentElement.firstChild.insertBefore(screenStyleSheet, document.documentElement.firstChild.firstChild);
-+		if (screenStyleSheet.styleSheet) {
-+			screenStyleSheet = screenStyleSheet.styleSheet;
-+			screenStyleSheet.addRule(this.ns + '\\:*', '{behavior:url(#default#VML)}');
-+			screenStyleSheet.addRule(this.ns + '\\:shape', 'position:absolute;');
-+			screenStyleSheet.addRule('img.' + this.ns + '_sizeFinder', 'behavior:none; border:none; position:absolute; z-index:-1; top:-10000px; visibility:hidden;'); /* large negative top value for avoiding vertical scrollbars for large images, suggested by James O'Brien, http://www.thanatopsic.org/hendrik/ */
-+			this.screenStyleSheet = screenStyleSheet;
-+			
-+			/* Add a print-media stylesheet, for preventing VML artifacts from showing up in print (including preview). */
-+			/* Thanks to Rémi Prévost for automating this! */
-+			printStyleSheet = document.createElement('style');
-+			printStyleSheet.setAttribute('media', 'print');
-+			document.documentElement.firstChild.insertBefore(printStyleSheet, document.documentElement.firstChild.firstChild);
-+			printStyleSheet = printStyleSheet.styleSheet;
-+			printStyleSheet.addRule(this.ns + '\\:*', '{display: none !important;}');
-+			printStyleSheet.addRule('img.' + this.ns + '_sizeFinder', '{display: none !important;}');
-+		}
-+	},
-+	readPropertyChange: function () {
-+		var el, display, v;
-+		el = event.srcElement;
-+		if (!el.vmlInitiated) {
-+			return;
-+		}
-+		if (event.propertyName.search('background') != -1 || event.propertyName.search('border') != -1) {
-+			DD_belatedPNG.applyVML(el);
-+		}
-+		if (event.propertyName == 'style.display') {
-+			display = (el.currentStyle.display == 'none') ? 'none' : 'block';
-+			for (v in el.vml) {
-+				if (el.vml.hasOwnProperty(v)) {
-+					el.vml[v].shape.style.display = display;
-+				}
-+			}
-+		}
-+		if (event.propertyName.search('filter') != -1) {
-+			DD_belatedPNG.vmlOpacity(el);
-+		}
-+	},
-+	vmlOpacity: function (el) {
-+		if (el.currentStyle.filter.search('lpha') != -1) {
-+			var trans = el.currentStyle.filter;
-+			trans = parseInt(trans.substring(trans.lastIndexOf('=')+1, trans.lastIndexOf(')')), 10)/100;
-+			el.vml.color.shape.style.filter = el.currentStyle.filter; /* complete guesswork */
-+			el.vml.image.fill.opacity = trans; /* complete guesswork */
-+		}
-+	},
-+	handlePseudoHover: function (el) {
-+		setTimeout(function () { /* wouldn't work as intended without setTimeout */
-+			DD_belatedPNG.applyVML(el);
-+		}, 1);
-+	},
-+	/**
-+	* This is the method to use in a document.
-+	* @param {String} selector - REQUIRED - a CSS selector, such as '#doc .container'
-+	**/
-+	fix: function (selector) {
-+		if (this.screenStyleSheet) {
-+			var selectors, i;
-+			selectors = selector.split(','); /* multiple selectors supported, no need for multiple calls to this anymore */
-+			for (i=0; i<selectors.length; i++) {
-+				this.screenStyleSheet.addRule(selectors[i], 'behavior:expression(DD_belatedPNG.fixPng(this))'); /* seems to execute the function without adding it to the stylesheet - interesting... */
-+			}
-+		}
-+	},
-+	applyVML: function (el) {
-+		el.runtimeStyle.cssText = '';
-+		this.vmlFill(el);
-+		this.vmlOffsets(el);
-+		this.vmlOpacity(el);
-+		if (el.isImg) {
-+			this.copyImageBorders(el);
-+		}
-+	},
-+	attachHandlers: function (el) {
-+		var self, handlers, handler, moreForAs, a, h;
-+		self = this;
-+		handlers = {resize: 'vmlOffsets', move: 'vmlOffsets'};
-+		if (el.nodeName == 'A') {
-+			moreForAs = {mouseleave: 'handlePseudoHover', mouseenter: 'handlePseudoHover', focus: 'handlePseudoHover', blur: 'handlePseudoHover'};
-+			for (a in moreForAs) {			
-+				if (moreForAs.hasOwnProperty(a)) {
-+					handlers[a] = moreForAs[a];
-+				}
-+			}
-+		}
-+		for (h in handlers) {
-+			if (handlers.hasOwnProperty(h)) {
				handler = function () {
					self[handlers[h]](el);
				};
-+				el.attachEvent('on' + h, handler);
-+			}
-+		}
-+		el.attachEvent('onpropertychange', this.readPropertyChange);
-+	},
-+	giveLayout: function (el) {
-+		el.style.zoom = 1;
-+		if (el.currentStyle.position == 'static') {
-+			el.style.position = 'relative';
-+		}
-+	},
-+	copyImageBorders: function (el) {
-+		var styles, s;
-+		styles = {'borderStyle':true, 'borderWidth':true, 'borderColor':true};
-+		for (s in styles) {
-+			if (styles.hasOwnProperty(s)) {
-+				el.vml.color.shape.style[s] = el.currentStyle[s];
-+			}
-+		}
-+	},
-+	vmlFill: function (el) {
-+		if (!el.currentStyle) {
-+			return;
-+		} else {
-+			var elStyle, noImg, lib, v, img, imgLoaded;
-+			elStyle = el.currentStyle;
-+		}
-+		for (v in el.vml) {
-+			if (el.vml.hasOwnProperty(v)) {
-+				el.vml[v].shape.style.zIndex = elStyle.zIndex;
-+			}
-+		}
-+		el.runtimeStyle.backgroundColor = '';
-+		el.runtimeStyle.backgroundImage = '';
-+		noImg = true;
-+		if (elStyle.backgroundImage != 'none' || el.isImg) {
-+			if (!el.isImg) {
-+				el.vmlBg = elStyle.backgroundImage;
-+				el.vmlBg = el.vmlBg.substr(5, el.vmlBg.lastIndexOf('")')-5);
-+			}
-+			else {
-+				el.vmlBg = el.src;
-+			}
-+			lib = this;
-+			if (!lib.imgSize[el.vmlBg]) { /* determine size of loaded image */
-+				img = document.createElement('img');
-+				lib.imgSize[el.vmlBg] = img;
-+				img.className = lib.ns + '_sizeFinder';
-+				img.runtimeStyle.cssText = 'behavior:none; position:absolute; left:-10000px; top:-10000px; border:none; margin:0; padding:0;'; /* make sure to set behavior to none to prevent accidental matching of the helper elements! */
				imgLoaded = function () {
					this.width = this.offsetWidth; /* weird cache-busting requirement! */
					this.height = this.offsetHeight;
					lib.vmlOffsets(el);
				};
-+				img.attachEvent('onload', imgLoaded);
-+				img.src = el.vmlBg;
-+				img.removeAttribute('width');
-+				img.removeAttribute('height');
-+				document.body.insertBefore(img, document.body.firstChild);
-+			}
-+			el.vml.image.fill.src = el.vmlBg;
-+			noImg = false;
-+		}
-+		el.vml.image.fill.on = !noImg;
-+		el.vml.image.fill.color = 'none';
-+		el.vml.color.shape.style.backgroundColor = elStyle.backgroundColor;
-+		el.runtimeStyle.backgroundImage = 'none';
-+		el.runtimeStyle.backgroundColor = 'transparent';
-+	},
-+	/* IE can't figure out what do when the offsetLeft and the clientLeft add up to 1, and the VML ends up getting fuzzy... so we have to push/enlarge things by 1 pixel and then clip off the excess */
-+	vmlOffsets: function (el) {
-+		var thisStyle, size, fudge, makeVisible, bg, bgR, dC, altC, b, c, v;
-+		thisStyle = el.currentStyle;
-+		size = {'W':el.clientWidth+1, 'H':el.clientHeight+1, 'w':this.imgSize[el.vmlBg].width, 'h':this.imgSize[el.vmlBg].height, 'L':el.offsetLeft, 'T':el.offsetTop, 'bLW':el.clientLeft, 'bTW':el.clientTop};
-+		fudge = (size.L + size.bLW == 1) ? 1 : 0;
-+		/* vml shape, left, top, width, height, origin */
-+		makeVisible = function (vml, l, t, w, h, o) {
-+			vml.coordsize = w+','+h;
-+			vml.coordorigin = o+','+o;
-+			vml.path = 'm0,0l'+w+',0l'+w+','+h+'l0,'+h+' xe';
-+			vml.style.width = w + 'px';
-+			vml.style.height = h + 'px';
-+			vml.style.left = l + 'px';
-+			vml.style.top = t + 'px';
-+		};
-+		makeVisible(el.vml.color.shape, (size.L + (el.isImg ? 0 : size.bLW)), (size.T + (el.isImg ? 0 : size.bTW)), (size.W-1), (size.H-1), 0);
-+		makeVisible(el.vml.image.shape, (size.L + size.bLW), (size.T + size.bTW), (size.W), (size.H), 1 );
-+		bg = {'X':0, 'Y':0};
-+		if (el.isImg) {
-+			bg.X = parseInt(thisStyle.paddingLeft, 10) + 1;
-+			bg.Y = parseInt(thisStyle.paddingTop, 10) + 1;
-+		}
-+		else {
-+			for (b in bg) {
-+				if (bg.hasOwnProperty(b)) {
-+					this.figurePercentage(bg, size, b, thisStyle['backgroundPosition'+b]);
-+				}
-+			}
-+		}
-+		el.vml.image.fill.position = (bg.X/size.W) + ',' + (bg.Y/size.H);
-+		bgR = thisStyle.backgroundRepeat;
-+		dC = {'T':1, 'R':size.W+fudge, 'B':size.H, 'L':1+fudge}; /* these are defaults for repeat of any kind */
-+		altC = { 'X': {'b1': 'L', 'b2': 'R', 'd': 'W'}, 'Y': {'b1': 'T', 'b2': 'B', 'd': 'H'} };
-+		if (bgR != 'repeat' || el.isImg) {
-+			c = {'T':(bg.Y), 'R':(bg.X+size.w), 'B':(bg.Y+size.h), 'L':(bg.X)}; /* these are defaults for no-repeat - clips down to the image location */
-+			if (bgR.search('repeat-') != -1) { /* now let's revert to dC for repeat-x or repeat-y */
-+				v = bgR.split('repeat-')[1].toUpperCase();
-+				c[altC[v].b1] = 1;
-+				c[altC[v].b2] = size[altC[v].d];
-+			}
-+			if (c.B > size.H) {
-+				c.B = size.H;
-+			}
-+			el.vml.image.shape.style.clip = 'rect('+c.T+'px '+(c.R+fudge)+'px '+c.B+'px '+(c.L+fudge)+'px)';
-+		}
-+		else {
-+			el.vml.image.shape.style.clip = 'rect('+dC.T+'px '+dC.R+'px '+dC.B+'px '+dC.L+'px)';
-+		}
-+	},
	figurePercentage: function (bg, size, axis, position) {
		var horizontal, fraction;
		fraction = true;
		horizontal = (axis == 'X');
		switch(position) {
			case 'left':
			case 'top':
				bg[axis] = 0;
				break;
			case 'center':
				bg[axis] = 0.5;
				break;
			case 'right':
			case 'bottom':
				bg[axis] = 1;
				break;
			default:
				if (position.search('%') != -1) {
					bg[axis] = parseInt(position, 10) / 100;
				}
				else {
					fraction = false;
				}
		}
		bg[axis] = Math.ceil(  fraction ? ( (size[horizontal?'W': 'H'] * bg[axis]) - (size[horizontal?'w': 'h'] * bg[axis]) ) : parseInt(position, 10)  );
		if (bg[axis] % 2 === 0) {
			bg[axis]++;
		}
		return bg[axis];
	},
-+	fixPng: function (el) {
-+		el.style.behavior = 'none';
		var lib, els, nodeStr, v, e;
-+		if (el.nodeName == 'BODY' || el.nodeName == 'TD' || el.nodeName == 'TR') { /* elements not supported yet */
-+			return;
-+		}
-+		el.isImg = false;
-+		if (el.nodeName == 'IMG') {
-+			if(el.src.toLowerCase().search(/\.png$/) != -1) {
-+				el.isImg = true;
-+				el.style.visibility = 'hidden';
-+			}
-+			else {
-+				return;
-+			}
-+		}
-+		else if (el.currentStyle.backgroundImage.toLowerCase().search('.png') == -1) {
-+			return;
-+		}
-+		lib = DD_belatedPNG;
-+		el.vml = {color: {}, image: {}};
-+		els = {shape: {}, fill: {}};
-+		for (v in el.vml) {
-+			if (el.vml.hasOwnProperty(v)) {
-+				for (e in els) {
-+					if (els.hasOwnProperty(e)) {
-+						nodeStr = lib.ns + ':' + e;
-+						el.vml[v][e] = document.createElement(nodeStr);
-+					}
-+				}
-+				el.vml[v].shape.stroked = false;
-+				el.vml[v].shape.appendChild(el.vml[v].fill);
-+				el.parentNode.insertBefore(el.vml[v].shape, el);
-+			}
-+		}
-+		el.vml.image.shape.fillcolor = 'none'; /* Don't show blank white shapeangle when waiting for image to load. */
-+		el.vml.image.fill.type = 'tile'; /* Makes image show up. */
-+		el.vml.color.fill.on = false; /* Actually going to apply vml element's style.backgroundColor, so hide the whiteness. */
-+		lib.attachHandlers(el);
-+		lib.giveLayout(el);
-+		lib.giveLayout(el.offsetParent);
-+		el.vmlInitiated = true;
-+		lib.applyVML(el); /* Render! */
-+	}
-+};
-+try {
-+	document.execCommand("BackgroundImageCache", false, true); /* TredoSoft Multiple IE doesn't like this, so try{} it */
-+} catch(r) {}
-+DD_belatedPNG.createVmlNameSpace();
-+DD_belatedPNG.createVmlStyleSheet();
-\ No newline at end of file
-diff --git a/docs/public/js/libs/modernizr-1.6.js b/docs/public/js/libs/modernizr-1.6.js
-new file mode 100644
-index 0000000..015e4bf
---- /dev/null
-+++ b/docs/public/js/libs/modernizr-1.6.js
-@@ -0,0 +1,892 @@
-+/*!
-+ * Modernizr v1.6
-+ * http://www.modernizr.com
-+ *
-+ * Developed by: 
-+ * - Faruk Ates  http://farukat.es/
-+ * - Paul Irish  http://paulirish.com/
-+ *
-+ * Copyright (c) 2009-2010
-+ * Dual-licensed under the BSD or MIT licenses.
-+ * http://www.modernizr.com/license/
-+ */
-+
-+ 
-+/*
-+ * Modernizr is a script that detects native CSS3 and HTML5 features
-+ * available in the current UA and provides an object containing all
-+ * features with a true/false value, depending on whether the UA has
-+ * native support for it or not.
-+ * 
-+ * Modernizr will also add classes to the <html> element of the page,
-+ * one for each feature it detects. If the UA supports it, a class
-+ * like "cssgradients" will be added. If not, the class name will be
-+ * "no-cssgradients". This allows for simple if-conditionals in your
-+ * CSS, giving you fine control over the look & feel of your website.
-+ * 
-+ * @author        Faruk Ates
-+ * @author        Paul Irish
-+ * @copyright     (c) 2009-2010 Faruk Ates.
-+ * @contributor   Ben Alman
-+ */
-+
-+window.Modernizr = (function(window,doc,undefined){
-+    
-+    var version = '1.6',
-+    
-+    ret = {},
-+
-+    /**
-+     * !! DEPRECATED !!
-+     * 
-+     * enableHTML5 is a private property for advanced use only. If enabled,
-+     * it will make Modernizr.init() run through a brief while() loop in
-+     * which it will create all HTML5 elements in the DOM to allow for
-+     * styling them in Internet Explorer, which does not recognize any
-+     * non-HTML4 elements unless created in the DOM this way.
-+     * 
-+     * enableHTML5 is ON by default.
-+     * 
-+     * The enableHTML5 toggle option is DEPRECATED as per 1.6, and will be
-+     * replaced in 2.0 in lieu of the modular, configurable nature of 2.0.
-+     */
-+    enableHTML5 = true,
-+    
-+    
-+    docElement = doc.documentElement,
-+
-+    /**
-+     * Create our "modernizr" element that we do most feature tests on.
-+     */
-+    mod = 'modernizr',
-+    m = doc.createElement( mod ),
-+    m_style = m.style,
-+
-+    /**
-+     * Create the input element for various Web Forms feature tests.
-+     */
-+    f = doc.createElement( 'input' ),
-+    
-+    smile = ':)',
-+    
-+    tostring = Object.prototype.toString,
-+    
-+    // List of property values to set for css tests. See ticket #21
-+    prefixes = ' -webkit- -moz- -o- -ms- -khtml- '.split(' '),
-+
-+    // Following spec is to expose vendor-specific style properties as:
-+    //   elem.style.WebkitBorderRadius
-+    // and the following would be incorrect:
-+    //   elem.style.webkitBorderRadius
-+    
-+    // Webkit ghosts their properties in lowercase but Opera & Moz do not.
-+    // Microsoft foregoes prefixes entirely <= IE8, but appears to 
-+    //   use a lowercase `ms` instead of the correct `Ms` in IE9
-+    
-+    // More here: http://github.com/Modernizr/Modernizr/issues/issue/21
-+    domPrefixes = 'Webkit Moz O ms Khtml'.split(' '),
-+
-+    ns = {'svg': 'http://www.w3.org/2000/svg'},
-+
-+    tests = {},
-+    inputs = {},
-+    attrs = {},
-+    
-+    classes = [],
-+    
-+    featurename, // used in testing loop
-+    
-+    
-+    
-+    // todo: consider using http://javascript.nwbox.com/CSSSupport/css-support.js instead
-+    testMediaQuery = function(mq){
-+
-+      var st = document.createElement('style'),
-+          div = doc.createElement('div'),
-+          ret;
-+
-+      st.textContent = mq + '{#modernizr{height:3px}}';
-+      (doc.head || doc.getElementsByTagName('head')[0]).appendChild(st);
-+      div.id = 'modernizr';
-+      docElement.appendChild(div);
-+
-+      ret = div.offsetHeight === 3;
-+
-+      st.parentNode.removeChild(st);
-+      div.parentNode.removeChild(div);
-+
-+      return !!ret;
-+
-+    },
-+    
-+    
-+    /**
-+      * isEventSupported determines if a given element supports the given event
-+      * function from http://yura.thinkweb2.com/isEventSupported/
-+      */
-+    isEventSupported = (function(){
-+
-+      var TAGNAMES = {
-+        'select':'input','change':'input',
-+        'submit':'form','reset':'form',
-+        'error':'img','load':'img','abort':'img'
-+      };
-+
-+      function isEventSupported(eventName, element) {
-+
-+        element = element || document.createElement(TAGNAMES[eventName] || 'div');
-+        eventName = 'on' + eventName;
-+
-+        // When using `setAttribute`, IE skips "unload", WebKit skips "unload" and "resize", whereas `in` "catches" those
-+        var isSupported = (eventName in element);
-+
-+        if (!isSupported) {
-+          // If it has no `setAttribute` (i.e. doesn't implement Node interface), try generic element
-+          if (!element.setAttribute) {
-+            element = document.createElement('div');
-+          }
-+          if (element.setAttribute && element.removeAttribute) {
-+            element.setAttribute(eventName, '');
-+            isSupported = typeof element[eventName] == 'function';
-+
-+            // If property was created, "remove it" (by setting value to `undefined`)
-+            if (typeof element[eventName] != 'undefined') {
-+              element[eventName] = undefined;
-+            }
-+            element.removeAttribute(eventName);
-+          }
-+        }
-+
-+        element = null;
-+        return isSupported;
-+      }
-+      return isEventSupported;
-+    })();
-+    
-+    
-+    // hasOwnProperty shim by kangax needed for Safari 2.0 support
-+    var _hasOwnProperty = ({}).hasOwnProperty, hasOwnProperty;
-+    if (typeof _hasOwnProperty !== 'undefined' && typeof _hasOwnProperty.call !== 'undefined') {
-+      hasOwnProperty = function (object, property) {
-+        return _hasOwnProperty.call(object, property);
-+      };
-+    }
-+    else {
-+      hasOwnProperty = function (object, property) { /* yes, this can give false positives/negatives, but most of the time we don't care about those */
-+        return ((property in object) && typeof object.constructor.prototype[property] === 'undefined');
-+      };
-+    }
-+    
-+    /**
-+     * set_css applies given styles to the Modernizr DOM node.
-+     */
-+    function set_css( str ) {
-+        m_style.cssText = str;
-+    }
-+
-+    /**
-+     * set_css_all extrapolates all vendor-specific css strings.
-+     */
-+    function set_css_all( str1, str2 ) {
-+        return set_css(prefixes.join(str1 + ';') + ( str2 || '' ));
-+    }
-+
-+    /**
-+     * contains returns a boolean for if substr is found within str.
-+     */
-+    function contains( str, substr ) {
-+        return (''+str).indexOf( substr ) !== -1;
-+    }
-+
-+    /**
-+     * test_props is a generic CSS / DOM property test; if a browser supports
-+     *   a certain property, it won't return undefined for it.
-+     *   A supported CSS property returns empty string when its not yet set.
-+     */
-+    function test_props( props, callback ) {
-+        for ( var i in props ) {
-+            if ( m_style[ props[i] ] !== undefined && ( !callback || callback( props[i], m ) ) ) {
-+                return true;
-+            }
-+        }
-+    }
-+
-+    /**
-+     * test_props_all tests a list of DOM properties we want to check against.
-+     *   We specify literally ALL possible (known and/or likely) properties on 
-+     *   the element including the non-vendor prefixed one, for forward-
-+     *   compatibility.
-+     */
-+    function test_props_all( prop, callback ) {
-+      
-+        var uc_prop = prop.charAt(0).toUpperCase() + prop.substr(1),
-+            props   = (prop + ' ' + domPrefixes.join(uc_prop + ' ') + uc_prop).split(' ');
-+
-+        return !!test_props( props, callback );
-+    }
-+    
-+
-+    /**
-+     * Tests
-+     */
-+
-+    tests['flexbox'] = function() {
-+        /**
-+         * set_prefixed_value_css sets the property of a specified element
-+         * adding vendor prefixes to the VALUE of the property.
-+         * @param {Element} element
-+         * @param {string} property The property name. This will not be prefixed.
-+         * @param {string} value The value of the property. This WILL be prefixed.
-+         * @param {string=} extra Additional CSS to append unmodified to the end of
-+         * the CSS string.
-+         */
-+        function set_prefixed_value_css(element, property, value, extra) {
-+            property += ':';
-+            element.style.cssText = (property + prefixes.join(value + ';' + property)).slice(0, -property.length) + (extra || '');
-+        }
-+
-+        /**
-+         * set_prefixed_property_css sets the property of a specified element
-+         * adding vendor prefixes to the NAME of the property.
-+         * @param {Element} element
-+         * @param {string} property The property name. This WILL be prefixed.
-+         * @param {string} value The value of the property. This will not be prefixed.
-+         * @param {string=} extra Additional CSS to append unmodified to the end of
-+         * the CSS string.
-+         */
-+        function set_prefixed_property_css(element, property, value, extra) {
-+            element.style.cssText = prefixes.join(property + ':' + value + ';') + (extra || '');
-+        }
-+
-+        var c = doc.createElement('div'),
-+            elem = doc.createElement('div');
-+
-+        set_prefixed_value_css(c, 'display', 'box', 'width:42px;padding:0;');
-+        set_prefixed_property_css(elem, 'box-flex', '1', 'width:10px;');
-+
-+        c.appendChild(elem);
-+        docElement.appendChild(c);
-+
-+        var ret = elem.offsetWidth === 42;
-+
-+        c.removeChild(elem);
-+        docElement.removeChild(c);
-+
-+        return ret;
-+    };
-+    
-+    // On the S60 and BB Storm, getContext exists, but always returns undefined
-+    // http://github.com/Modernizr/Modernizr/issues/issue/97/ 
-+    
-+    tests['canvas'] = function() {
-+        var elem = doc.createElement( 'canvas' );
-+        return !!(elem.getContext && elem.getContext('2d'));
-+    };
-+    
-+    tests['canvastext'] = function() {
-+        return !!(ret['canvas'] && typeof doc.createElement( 'canvas' ).getContext('2d').fillText == 'function');
-+    };
-+    
-+    
-+    tests['webgl'] = function(){
-+
-+        var elem = doc.createElement( 'canvas' ); 
-+        
-+        try {
-+            if (elem.getContext('webgl')){ return true; }
-+        } catch(e){	}
-+        
-+        try {
-+            if (elem.getContext('experimental-webgl')){ return true; }
-+        } catch(e){	}
-+
-+        return false;
-+    };
-+    
-+    /*
-+     * The Modernizr.touch test only indicates if the browser supports
-+     *    touch events, which does not necessarily reflect a touchscreen
-+     *    device, as evidenced by tablets running Windows 7 or, alas,
-+     *    the Palm Pre / WebOS (touch) phones.
-+     *    
-+     * Additionally, Chrome (desktop) used to lie about its support on this,
-+     *    but that has since been rectified: http://crbug.com/36415
-+     *    
-+     * We also test for Firefox 4 Multitouch Support.
-+     *
-+     * For more info, see: http://modernizr.github.com/Modernizr/touch.html
-+     */
-+     
-+    tests['touch'] = function() {
-+
-+        return ('ontouchstart' in window) || testMediaQuery('@media ('+prefixes.join('touch-enabled),(')+'modernizr)');
-+
-+    };
-+
-+
-+    /**
-+     * geolocation tests for the new Geolocation API specification.
-+     *   This test is a standards compliant-only test; for more complete
-+     *   testing, including a Google Gears fallback, please see:
-+     *   http://code.google.com/p/geo-location-javascript/
-+     * or view a fallback solution using google's geo API:
-+     *   http://gist.github.com/366184
-+     */
-+    tests['geolocation'] = function() {
-+        return !!navigator.geolocation;
-+    };
-+
-+    // Per 1.6: 
-+    // This used to be Modernizr.crosswindowmessaging but the longer
-+    // name has been deprecated in favor of a shorter and property-matching one.
-+    // The old API is still available in 1.6, but as of 2.0 will throw a warning,
-+    // and in the first release thereafter disappear entirely.
-+    tests['postmessage'] = function() {
-+      return !!window.postMessage;
-+    };
-+
-+    // Web SQL database detection is tricky:
-+
-+    // In chrome incognito mode, openDatabase is truthy, but using it will 
-+    //   throw an exception: http://crbug.com/42380
-+    // We can create a dummy database, but there is no way to delete it afterwards. 
-+    
-+    // Meanwhile, Safari users can get prompted on any database creation.
-+    //   If they do, any page with Modernizr will give them a prompt:
-+    //   http://github.com/Modernizr/Modernizr/issues/closed#issue/113
-+    
-+    // We have chosen to allow the Chrome incognito false positive, so that Modernizr
-+    //   doesn't litter the web with these test databases. As a developer, you'll have
-+    //   to account for this gotcha yourself.
-+    tests['websqldatabase'] = function() {
-+      var result = !!window.openDatabase;
-+      /*
-+      if (result){
-+        try {
-+          result = !!openDatabase( mod + "testdb", "1.0", mod + "testdb", 2e4);
-+        } catch(e) {
-+        }
-+      }
-+      */
-+      return result;
-+    };
-+    
-+    // Vendors have inconsistent prefixing with the experimental Indexed DB:
-+    // - Firefox is shipping indexedDB in FF4 as moz_indexedDB
-+    // - Webkit's implementation is accessible through webkitIndexedDB
-+    // We test both styles.
-+    tests['indexedDB'] = function(){
-+      for (var i = -1, len = domPrefixes.length; ++i < len; ){ 
-+        var prefix = domPrefixes[i].toLowerCase();
-+        if (window[prefix + '_indexedDB'] || window[prefix + 'IndexedDB']){
-+          return true;
-+        } 
-+      }
-+      return false;
-+    };
-+
-+    // documentMode logic from YUI to filter out IE8 Compat Mode
-+    //   which false positives.
-+    tests['hashchange'] = function() {
-+      return isEventSupported('hashchange', window) && ( document.documentMode === undefined || document.documentMode > 7 );
-+    };
-+
-+    // Per 1.6: 
-+    // This used to be Modernizr.historymanagement but the longer
-+    // name has been deprecated in favor of a shorter and property-matching one.
-+    // The old API is still available in 1.6, but as of 2.0 will throw a warning,
-+    // and in the first release thereafter disappear entirely.
-+    tests['history'] = function() {
-+      return !!(window.history && history.pushState);
-+    };
-+
-+    tests['draganddrop'] = function() {
-+        return  isEventSupported('drag') && 
-+                isEventSupported('dragstart') && 
-+                isEventSupported('dragenter') &&
-+                isEventSupported('dragover') &&
-+                isEventSupported('dragleave') &&
-+                isEventSupported('dragend') &&
-+                isEventSupported('drop');
-+    };
-+    
-+    tests['websockets'] = function(){
-+        return ('WebSocket' in window);
-+    };
-+    
-+    
-+    // http://css-tricks.com/rgba-browser-support/
-+    tests['rgba'] = function() {
-+        // Set an rgba() color and check the returned value
-+        
-+        set_css(  'background-color:rgba(150,255,150,.5)' );
-+        
-+        return contains( m_style.backgroundColor, 'rgba' );
-+    };
-+    
-+    tests['hsla'] = function() {
-+        // Same as rgba(), in fact, browsers re-map hsla() to rgba() internally,
-+        //   except IE9 who retains it as hsla
-+        
-+        set_css('background-color:hsla(120,40%,100%,.5)' );
-+        
-+        return contains( m_style.backgroundColor, 'rgba' ) || contains( m_style.backgroundColor, 'hsla' );
-+    };
-+    
-+    tests['multiplebgs'] = function() {
-+        // Setting multiple images AND a color on the background shorthand property
-+        //  and then querying the style.background property value for the number of
-+        //  occurrences of "url(" is a reliable method for detecting ACTUAL support for this!
-+        
-+        set_css( 'background:url(//:),url(//:),red url(//:)' );
-+        
-+        // If the UA supports multiple backgrounds, there should be three occurrences
-+        //   of the string "url(" in the return value for elem_style.background
-+
-+        return new RegExp("(url\\s*\\(.*?){3}").test(m_style.background);
-+    };
-+    
-+    
-+    // In testing support for a given CSS property, it's legit to test:
-+    //    elem.style[styleName] !== undefined
-+    // If the property is supported it will return an empty string,
-+    // if unsupported it will return undefined.
-+    // We'll take advantage of this quick test and skip setting a style 
-+    // on our modernizr element, but instead just testing undefined vs
-+    // empty string.
-+    // The legacy set_css_all calls will remain in the source 
-+    // (however, commented) for clarity, yet functionally they are 
-+    // no longer needed.
-+    
-+
-+    tests['backgroundsize'] = function() {
-+        return test_props_all( 'backgroundSize' );
-+    };
-+    
-+    tests['borderimage'] = function() {
-+        //  set_css_all( 'border-image:url(m.png) 1 1 stretch' );
-+        return test_props_all( 'borderImage' );
-+    };
-+    
-+    
-+    // Super comprehensive table about all the unique implementations of 
-+    // border-radius: http://muddledramblings.com/table-of-css3-border-radius-compliance
-+    
-+    tests['borderradius'] = function() {
-+        //  set_css_all( 'border-radius:10px' );
-+        return test_props_all( 'borderRadius', '', function( prop ) {
-+            return contains( prop, 'orderRadius' );
-+        });
-+    };
-+    
-+    
-+    tests['boxshadow'] = function() {
-+        //  set_css_all( 'box-shadow:#000 1px 1px 3px' );
-+        return test_props_all( 'boxShadow' );
-+    };
-+    
-+    // Note: FF3.0 will false positive on this test 
-+    tests['textshadow'] = function(){
-+        return doc.createElement('div').style.textShadow === '';
-+    };
-+    
-+    
-+    tests['opacity'] = function() {
-+        // Browsers that actually have CSS Opacity implemented have done so
-+        //  according to spec, which means their return values are within the
-+        //  range of [0.0,1.0] - including the leading zero.
-+        
-+        set_css_all( 'opacity:.5' );
-+        
-+        return contains( m_style.opacity, '0.5' );
-+    };
-+    
-+    
-+    tests['cssanimations'] = function() {
-+        //  set_css_all( 'animation:"animate" 2s ease 2', 'position:relative' );
-+        return test_props_all( 'animationName' );
-+    };
-+    
-+    
-+    tests['csscolumns'] = function() {
-+        //  set_css_all( 'column-count:3' );
-+        return test_props_all( 'columnCount' );
-+    };
-+    
-+    
-+    tests['cssgradients'] = function() {
-+        /**
-+         * For CSS Gradients syntax, please see:
-+         * http://webkit.org/blog/175/introducing-css-gradients/
-+         * https://developer.mozilla.org/en/CSS/-moz-linear-gradient
-+         * https://developer.mozilla.org/en/CSS/-moz-radial-gradient
-+         * http://dev.w3.org/csswg/css3-images/#gradients-
-+         */
-+        
-+        var str1 = 'background-image:',
-+            str2 = 'gradient(linear,left top,right bottom,from(#9f9),to(white));',
-+            str3 = 'linear-gradient(left top,#9f9, white);';
-+        
-+        set_css(
-+            (str1 + prefixes.join(str2 + str1) + prefixes.join(str3 + str1)).slice(0,-str1.length)
-+        );
-+        
-+        return contains( m_style.backgroundImage, 'gradient' );
-+    };
-+    
-+    
-+    tests['cssreflections'] = function() {
-+        //  set_css_all( 'box-reflect:right 1px' );
-+        return test_props_all( 'boxReflect' );
-+    };
-+    
-+    
-+    tests['csstransforms'] = function() {
-+        //  set_css_all( 'transform:rotate(3deg)' );
-+        return !!test_props([ 'transformProperty', 'WebkitTransform', 'MozTransform', 'OTransform', 'msTransform' ]);
-+    };
-+    
-+    
-+    tests['csstransforms3d'] = function() {
-+        //  set_css_all( 'perspective:500' );
-+        
-+        var ret = !!test_props([ 'perspectiveProperty', 'WebkitPerspective', 'MozPerspective', 'OPerspective', 'msPerspective' ]);
-+        
-+        // Webkit’s 3D transforms are passed off to the browser's own graphics renderer.
-+        //   It works fine in Safari on Leopard and Snow Leopard, but not in Chrome (yet?).
-+        //   As a result, Webkit typically recognizes the syntax but will sometimes throw a false
-+        //   positive, thus we must do a more thorough check:
-+        if (ret){
-+          
-+          // Webkit allows this media query to succeed only if the feature is enabled.    
-+          // "@media (transform-3d),(-o-transform-3d),(-moz-transform-3d),(-ms-transform-3d),(-webkit-transform-3d),(modernizr){ ... }"      
-+          ret = testMediaQuery('@media ('+prefixes.join('transform-3d),(')+'modernizr)');
-+        }
-+        return ret;
-+    };
-+    
-+    
-+    tests['csstransitions'] = function() {
-+        //  set_css_all( 'transition:all .5s linear' );
-+        return test_props_all( 'transitionProperty' );
-+    };
-+
-+
-+    // @font-face detection routine by Diego Perini
-+    // http://javascript.nwbox.com/CSSSupport/
-+    tests['fontface'] = function(){
-+
-+        var 
-+        sheet,
-+        head = doc.head || doc.getElementsByTagName('head')[0] || docElement,
-+        style = doc.createElement("style"),
-+        impl = doc.implementation || { hasFeature: function() { return false; } };
-+        
-+        style.type = 'text/css';
-+        head.insertBefore(style, head.firstChild);
-+        sheet = style.sheet || style.styleSheet;
-+
-+        // removing it crashes IE browsers
-+        //head.removeChild(style);
-+
-+        var supportAtRule = impl.hasFeature('CSS2', '') ?
-+                function(rule) {
-+                    if (!(sheet && rule)) return false;
-+                    var result = false;
-+                    try {
-+                        sheet.insertRule(rule, 0);
-+                        result = !(/unknown/i).test(sheet.cssRules[0].cssText);
-+                        sheet.deleteRule(sheet.cssRules.length - 1);
-+                    } catch(e) { }
-+                    return result;
-+                } :
-+                function(rule) {
-+                    if (!(sheet && rule)) return false;
-+                    sheet.cssText = rule;
-+                    
-+                    return sheet.cssText.length !== 0 && !(/unknown/i).test(sheet.cssText) &&
-+                      sheet.cssText
-+                            .replace(/\r+|\n+/g, '')
-+                            .indexOf(rule.split(' ')[0]) === 0;
-+                };
-+
-+
-+        // DEPRECATED - allow for a callback
-+        ret._fontfaceready = function(fn){
-+          fn(ret.fontface);
-+        };
-+        
-+        return supportAtRule('@font-face { font-family: "font"; src: "font.ttf"; }');
-+        
-+    };
-+    
-+
-+    // These tests evaluate support of the video/audio elements, as well as
-+    // testing what types of content they support.
-+    //
-+    // We're using the Boolean constructor here, so that we can extend the value
-+    // e.g.  Modernizr.video     // true
-+    //       Modernizr.video.ogg // 'probably'
-+    //
-+    // Codec values from : http://github.com/NielsLeenheer/html5test/blob/9106a8/index.html#L845
-+    //                     thx to NielsLeenheer and zcorpan
-+    
-+    // Note: in FF 3.5.1 and 3.5.0, "no" was a return value instead of empty string.
-+    //   Modernizr does not normalize for that.
-+    
-+    tests['video'] = function() {
-+        var elem = doc.createElement('video'),
-+            bool = !!elem.canPlayType;
-+        
-+        if (bool){  
-+            bool      = new Boolean(bool);  
-+            bool.ogg  = elem.canPlayType('video/ogg; codecs="theora"');
-+            
-+            // Workaround required for IE9, which doesn't report video support without audio codec specified.
-+            //   bug 599718 @ msft connect
-+            var h264 = 'video/mp4; codecs="avc1.42E01E';
-+            bool.h264 = elem.canPlayType(h264 + '"') || elem.canPlayType(h264 + ', mp4a.40.2"');
-+            
-+            bool.webm = elem.canPlayType('video/webm; codecs="vp8, vorbis"');
-+        }
-+        return bool;
-+    };
-+    
-+    tests['audio'] = function() {
-+        var elem = doc.createElement('audio'),
-+            bool = !!elem.canPlayType;
-+        
-+        if (bool){  
-+            bool      = new Boolean(bool);  
-+            bool.ogg  = elem.canPlayType('audio/ogg; codecs="vorbis"');
-+            bool.mp3  = elem.canPlayType('audio/mpeg;');
-+            
-+            // Mimetypes accepted: 
-+            //   https://developer.mozilla.org/En/Media_formats_supported_by_the_audio_and_video_elements
-+            //   http://bit.ly/iphoneoscodecs
-+            bool.wav  = elem.canPlayType('audio/wav; codecs="1"');
-+            bool.m4a  = elem.canPlayType('audio/x-m4a;') || elem.canPlayType('audio/aac;');
-+        }
-+        return bool;
-+    };
-+
-+
-+    // Both localStorage and sessionStorage are
-+    //   tested via the `in` operator because otherwise Firefox will
-+    //   throw an error: https://bugzilla.mozilla.org/show_bug.cgi?id=365772
-+    //   if cookies are disabled
-+    
-+    // They require try/catch because of possible firefox configuration:
-+    //   http://github.com/Modernizr/Modernizr/issues#issue/92
-+    
-+    // FWIW miller device resolves to [object Storage] in all supporting browsers
-+    //   except for IE who does [object Object]
-+    
-+    // IE8 Compat mode supports these features completely:
-+    //   http://www.quirksmode.org/dom/html5.html
-+    
-+    tests['localstorage'] = function() {
-+        try {
-+          return ('localStorage' in window) && window.localStorage !== null;
-+        } catch(e) {
-+          return false;
-+        }
-+    };
-+
-+    tests['sessionstorage'] = function() {
-+        try {
-+            return ('sessionStorage' in window) && window.sessionStorage !== null;
-+        } catch(e){
-+            return false;
-+        }
-+    };
-+
-+
-+    tests['webWorkers'] = function () {
-+        return !!window.Worker;
-+    };
-+
-+
-+    tests['applicationcache'] =  function() {
-+        return !!window.applicationCache;
-+    };
-+
-+ 
-+    // Thanks to Erik Dahlstrom
-+    tests['svg'] = function(){
-+        return !!doc.createElementNS && !!doc.createElementNS(ns.svg, "svg").createSVGRect;
-+    };
-+
-+    tests['inlinesvg'] = function() {
-+      var div = document.createElement('div');
-+      div.innerHTML = '<svg/>';
-+      return (div.firstChild && div.firstChild.namespaceURI) == ns.svg;
-+    };
-+
-+    // Thanks to F1lt3r and lucideer
-+    // http://github.com/Modernizr/Modernizr/issues#issue/35
-+    tests['smil'] = function(){
-+        return !!doc.createElementNS && /SVG/.test(tostring.call(doc.createElementNS(ns.svg,'animate')));
-+    };
-+
-+    tests['svgclippaths'] = function(){
-+        // Possibly returns a false positive in Safari 3.2?
-+        return !!doc.createElementNS && /SVG/.test(tostring.call(doc.createElementNS(ns.svg,'clipPath')));
-+    };
-+
-+
-+    // input features and input types go directly onto the ret object, bypassing the tests loop.
-+    // Hold this guy to execute in a moment.
-+    function webforms(){
-+    
-+        // Run through HTML5's new input attributes to see if the UA understands any.
-+        // We're using f which is the <input> element created early on
-+        // Mike Taylr has created a comprehensive resource for testing these attributes
-+        //   when applied to all input types: 
-+        //   http://miketaylr.com/code/input-type-attr.html
-+        // spec: http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary
-+        ret['input'] = (function(props) {
-+            for (var i = 0,len=props.length;i<len;i++) {
-+                attrs[ props[i] ] = !!(props[i] in f);
-+            }
-+            return attrs;
-+        })('autocomplete autofocus list placeholder max min multiple pattern required step'.split(' '));
-+
-+        // Run through HTML5's new input types to see if the UA understands any.
-+        //   This is put behind the tests runloop because it doesn't return a
-+        //   true/false like all the other tests; instead, it returns an object
-+        //   containing each input type with its corresponding true/false value 
-+        
-+        // Big thanks to @miketaylr for the html5 forms expertise. http://miketaylr.com/
-+        ret['inputtypes'] = (function(props) {
-+            for (var i = 0, bool, len=props.length ; i < len ; i++) {
-+              
-+                f.setAttribute('type', props[i]);
-+                bool = f.type !== 'text';
-+                
-+                // Chrome likes to falsely purport support, so we feed it a textual value;
-+                // if that doesnt succeed then we know there's a custom UI
-+                if (bool){  
-+
-+                    f.value = smile;
-+     
-+                    if (/^range$/.test(f.type) && f.style.WebkitAppearance !== undefined){
-+                      
-+                      docElement.appendChild(f);
-+                      var defaultView = doc.defaultView;
-+                      
-+                      // Safari 2-4 allows the smiley as a value, despite making a slider
-+                      bool =  defaultView.getComputedStyle && 
-+                              defaultView.getComputedStyle(f, null).WebkitAppearance !== 'textfield' && 
-+                      
-+                              // Mobile android web browser has false positive, so must
-+                              // check the height to see if the widget is actually there.
-+                              (f.offsetHeight !== 0);
-+                              
-+                      docElement.removeChild(f);
-+                              
-+                    } else if (/^(search|tel)$/.test(f.type)){
-+                      // Spec doesnt define any special parsing or detectable UI 
-+                      //   behaviors so we pass these through as true
-+                      
-+                      // Interestingly, opera fails the earlier test, so it doesn't
-+                      //  even make it here.
-+                      
-+                    } else if (/^(url|email)$/.test(f.type)) {
-+
-+                      // Real url and email support comes with prebaked validation.
-+                      bool = f.checkValidity && f.checkValidity() === false;
-+                      
-+                    } else {
-+                      // If the upgraded input compontent rejects the :) text, we got a winner
-+                      bool = f.value != smile;
-+                    }
-+                }
-+                
-+                inputs[ props[i] ] = !!bool;
-+            }
-+            return inputs;
-+        })('search tel url email datetime date month week time datetime-local number range color'.split(' '));
-+
-+    }
-+
-+
-+
-+    // End of test definitions
-+
-+
-+
-+    // Run through all tests and detect their support in the current UA.
-+    // todo: hypothetically we could be doing an array of tests and use a basic loop here.
-+    for ( var feature in tests ) {
-+        if ( hasOwnProperty( tests, feature ) ) {
-+            // run the test, throw the return value into the Modernizr,
-+            //   then based on that boolean, define an appropriate className
-+            //   and push it into an array of classes we'll join later.
-+            featurename  = feature.toLowerCase();
-+            ret[ featurename ] = tests[ feature ]();
-+
-+            classes.push( ( ret[ featurename ] ? '' : 'no-' ) + featurename );
-+        }
-+    }
-+    
-+    // input tests need to run.
-+    if (!ret.input) webforms();
-+    
-+
-+   
-+    // Per 1.6: deprecated API is still accesible for now:
-+    ret.crosswindowmessaging = ret.postmessage;
-+    ret.historymanagement = ret.history;
-+
-+
-+
-+    /**
-+     * Addtest allows the user to define their own feature tests
-+     * the result will be added onto the Modernizr object,
-+     * as well as an appropriate className set on the html element
-+     * 
-+     * @param feature - String naming the feature
-+     * @param test - Function returning true if feature is supported, false if not
-+     */
-+    ret.addTest = function (feature, test) {
-+      feature = feature.toLowerCase();
-+      
-+      if (ret[ feature ]) {
-+        return; // quit if you're trying to overwrite an existing test
-+      } 
-+      test = !!(test());
-+      docElement.className += ' ' + (test ? '' : 'no-') + feature; 
-+      ret[ feature ] = test;
-+      return ret; // allow chaining.
-+    };
-+
-+    /**
-+     * Reset m.style.cssText to nothing to reduce memory footprint.
-+     */
-+    set_css( '' );
-+    m = f = null;
-+
-+    // Enable HTML 5 elements for styling in IE. 
-+    // fyi: jscript version does not reflect trident version
-+    //      therefore ie9 in ie7 mode will still have a jScript v.9
-+    if ( enableHTML5 && window.attachEvent && (function(){ var elem = doc.createElement("div");
-+                                      elem.innerHTML = "<elem></elem>";
-+                                      return elem.childNodes.length !== 1; })()) {
-+        // iepp v1.6 by @jon_neal : code.google.com/p/ie-print-protector
-+        (function(f,l){var j="abbr|article|aside|audio|canvas|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",n=j.split("|"),k=n.length,g=new RegExp("<(/*)("+j+")","gi"),h=new RegExp("\\b("+j+")\\b(?!.*[;}])","gi"),m=l.createDocumentFragment(),d=l.documentElement,i=d.firstChild,b=l.createElement("style"),e=l.createElement("body");b.media="all";function c(p){var o=-1;while(++o<k){p.createElement(n[o])}}c(l);c(m);function a(t,s){var r=t.length,q=-1,o,p=[];while(++q<r){o=t[q];s=o.media||s;p.push(a(o.imports,s));p.push(o.cssText)}return p.join("")}f.attachEvent("onbeforeprint",function(){var r=-1;while(++r<k){var o=l.getElementsByTagName(n[r]),q=o.length,p=-1;while(++p<q){if(o[p].className.indexOf("iepp_")<0){o[p].className+=" iepp_"+n[r]}}}i.insertBefore(b,i.firstChild);b.styleSheet.cssText=a(l.styleSheets,"all").replace(h,".iepp_$1");m.appendChild(l.body);d.appendChild(e);e.innerHTML=m.firstChild.innerHTML.replace(g,"<$1bdo")});f.attachEvent("onafterprint",function(){e.innerHTML="";d.removeChild(e);i.removeChild(b);d.appendChild(m.firstChild)})})(this,document);
-+    }
-+
-+    // Assign private properties to the return object with prefix
-+    ret._enableHTML5     = enableHTML5;
-+    ret._version         = version;
-+
-+    // Remove "no-js" class from <html> element, if it exists:
-+    docElement.className=docElement.className.replace(/\bno-js\b/,'') + ' js';
-+
-+    // Add the new classes to the <html> element.
-+    docElement.className += ' ' + classes.join( ' ' );
-+    
-+    return ret;
-+
-+})(this,this.document);
-diff --git a/docs/public/js/profiling/yahoo-profiling.js b/docs/public/js/profiling/yahoo-profiling.js
-new file mode 100644
-index 0000000..468f834
---- /dev/null
-+++ b/docs/public/js/profiling/yahoo-profiling.js
-@@ -0,0 +1,1028 @@
-+/*
-+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
-+Code licensed under the BSD License:
-+http://developer.yahoo.net/yui/license.txt
-+version: 2.7.0
-+*/
-+/**
-+ * The YAHOO object is the single global object used by YUI Library.  It
-+ * contains utility function for setting up namespaces, inheritance, and
-+ * logging.  YAHOO.util, YAHOO.widget, and YAHOO.example are namespaces
-+ * created automatically for and used by the library.
-+ * @module yahoo
-+ * @title  YAHOO Global
-+ */
-+
-+/**
-+ * YAHOO_config is not included as part of the library.  Instead it is an 
-+ * object that can be defined by the implementer immediately before 
-+ * including the YUI library.  The properties included in this object
-+ * will be used to configure global properties needed as soon as the 
-+ * library begins to load.
-+ * @class YAHOO_config
-+ * @static
-+ */
-+
-+/**
-+ * A reference to a function that will be executed every time a YAHOO module
-+ * is loaded.  As parameter, this function will receive the version
-+ * information for the module. See <a href="YAHOO.env.html#getVersion">
-+ * YAHOO.env.getVersion</a> for the description of the version data structure.
-+ * @property listener
-+ * @type Function
-+ * @static
-+ * @default undefined
-+ */
-+
-+/**
-+ * Set to true if the library will be dynamically loaded after window.onload.
-+ * Defaults to false 
-+ * @property injecting
-+ * @type boolean
-+ * @static
-+ * @default undefined
-+ */
-+
-+/**
-+ * Instructs the yuiloader component to dynamically load yui components and
-+ * their dependencies.  See the yuiloader documentation for more information
-+ * about dynamic loading
-+ * @property load
-+ * @static
-+ * @default undefined
-+ * @see yuiloader
-+ */
-+
-+/**
-+ * Forces the use of the supplied locale where applicable in the library
-+ * @property locale
-+ * @type string
-+ * @static
-+ * @default undefined
-+ */
-+
-+if (typeof YAHOO == "undefined" || !YAHOO) {
-+    /**
-+     * The YAHOO global namespace object.  If YAHOO is already defined, the
-+     * existing YAHOO object will not be overwritten so that defined
-+     * namespaces are preserved.
-+     * @class YAHOO
-+     * @static
-+     */
-+    var YAHOO = {};
-+}
-+
-+/**
-+ * Returns the namespace specified and creates it if it doesn't exist
-+ * <pre>
-+ * YAHOO.namespace("property.package");
-+ * YAHOO.namespace("YAHOO.property.package");
-+ * </pre>
-+ * Either of the above would create YAHOO.property, then
-+ * YAHOO.property.package
-+ *
-+ * Be careful when naming packages. Reserved words may work in some browsers
-+ * and not others. For instance, the following will fail in Safari:
-+ * <pre>
-+ * YAHOO.namespace("really.long.nested.namespace");
-+ * </pre>
-+ * This fails because "long" is a future reserved word in ECMAScript
-+ *
-+ * For implementation code that uses YUI, do not create your components
-+ * in the namespaces created by the library.  defined by YUI -- create 
-+ * your own (YAHOO.util, YAHOO.widget, YAHOO.lang, YAHOO.env)
-+ *
-+ * @method namespace
-+ * @static
-+ * @param  {String*} arguments 1-n namespaces to create 
-+ * @return {Object}  A reference to the last namespace object created
-+ */
-+YAHOO.namespace = function() {
-+    var a=arguments, o=null, i, j, d;
-+    for (i=0; i<a.length; i=i+1) {
-+        d=(""+a[i]).split(".");
-+        o=YAHOO;
-+
-+        // YAHOO is implied, so it is ignored if it is included
-+        for (j=(d[0] == "YAHOO") ? 1 : 0; j<d.length; j=j+1) {
-+            o[d[j]]=o[d[j]] || {};
-+            o=o[d[j]];
-+        }
-+    }
-+
-+    return o;
-+};
-+
-+/**
-+ * Uses YAHOO.widget.Logger to output a log message, if the widget is
-+ * available.
-+ *
-+ * @method log
-+ * @static
-+ * @param  {String}  msg  The message to log.
-+ * @param  {String}  cat  The log category for the message.  Default
-+ *                        categories are "info", "warn", "error", time".
-+ *                        Custom categories can be used as well. (opt)
-+ * @param  {String}  src  The source of the the message (opt)
-+ * @return {Boolean}      True if the log operation was successful.
-+ */
-+YAHOO.log = function(msg, cat, src) {
-+    var l=YAHOO.widget.Logger;
-+    if(l && l.log) {
-+        return l.log(msg, cat, src);
-+    } else {
-+        return false;
-+    }
-+};
-+
-+/**
-+ * Registers a module with the YAHOO object
-+ * @method register
-+ * @static
-+ * @param {String}   name    the name of the module (event, slider, etc)
-+ * @param {Function} mainClass a reference to class in the module.  This
-+ *                             class will be tagged with the version info
-+ *                             so that it will be possible to identify the
-+ *                             version that is in use when multiple versions
-+ *                             have loaded
-+ * @param {Object}   data      metadata object for the module.  Currently it
-+ *                             is expected to contain a "version" property
-+ *                             and a "build" property at minimum.
-+ */
-+YAHOO.register = function(name, mainClass, data) {
-+    var mods = YAHOO.env.modules, m, v, b, ls, i;
-+
-+    if (!mods[name]) {
-+        mods[name] = { 
-+            versions:[], 
-+            builds:[] 
-+        };
-+    }
-+
-+    m  = mods[name];
-+    v  = data.version;
-+    b  = data.build;
-+    ls = YAHOO.env.listeners;
-+
-+    m.name = name;
-+    m.version = v;
-+    m.build = b;
-+    m.versions.push(v);
-+    m.builds.push(b);
-+    m.mainClass = mainClass;
-+
-+    // fire the module load listeners
-+    for (i=0;i<ls.length;i=i+1) {
-+        ls[i](m);
-+    }
-+    // label the main class
-+    if (mainClass) {
-+        mainClass.VERSION = v;
-+        mainClass.BUILD = b;
-+    } else {
-+        YAHOO.log("mainClass is undefined for module " + name, "warn");
-+    }
-+};
-+
-+/**
-+ * YAHOO.env is used to keep track of what is known about the YUI library and
-+ * the browsing environment
-+ * @class YAHOO.env
-+ * @static
-+ */
-+YAHOO.env = YAHOO.env || {
-+
-+    /**
-+     * Keeps the version info for all YUI modules that have reported themselves
-+     * @property modules
-+     * @type Object[]
-+     */
-+    modules: [],
-+    
-+    /**
-+     * List of functions that should be executed every time a YUI module
-+     * reports itself.
-+     * @property listeners
-+     * @type Function[]
-+     */
-+    listeners: []
-+};
-+
-+/**
-+ * Returns the version data for the specified module:
-+ *      <dl>
-+ *      <dt>name:</dt>      <dd>The name of the module</dd>
-+ *      <dt>version:</dt>   <dd>The version in use</dd>
-+ *      <dt>build:</dt>     <dd>The build number in use</dd>
-+ *      <dt>versions:</dt>  <dd>All versions that were registered</dd>
-+ *      <dt>builds:</dt>    <dd>All builds that were registered.</dd>
-+ *      <dt>mainClass:</dt> <dd>An object that was was stamped with the
-+ *                 current version and build. If 
-+ *                 mainClass.VERSION != version or mainClass.BUILD != build,
-+ *                 multiple versions of pieces of the library have been
-+ *                 loaded, potentially causing issues.</dd>
-+ *       </dl>
-+ *
-+ * @method getVersion
-+ * @static
-+ * @param {String}  name the name of the module (event, slider, etc)
-+ * @return {Object} The version info
-+ */
-+YAHOO.env.getVersion = function(name) {
-+    return YAHOO.env.modules[name] || null;
-+};
-+
-+/**
-+ * Do not fork for a browser if it can be avoided.  Use feature detection when
-+ * you can.  Use the user agent as a last resort.  YAHOO.env.ua stores a version
-+ * number for the browser engine, 0 otherwise.  This value may or may not map
-+ * to the version number of the browser using the engine.  The value is 
-+ * presented as a float so that it can easily be used for boolean evaluation 
-+ * as well as for looking for a particular range of versions.  Because of this, 
-+ * some of the granularity of the version info may be lost (e.g., Gecko 1.8.0.9 
-+ * reports 1.8).
-+ * @class YAHOO.env.ua
-+ * @static
-+ */
-+YAHOO.env.ua = function() {
-+    var o={
-+
-+        /**
-+         * Internet Explorer version number or 0.  Example: 6
-+         * @property ie
-+         * @type float
-+         */
-+        ie:0,
-+
-+        /**
-+         * Opera version number or 0.  Example: 9.2
-+         * @property opera
-+         * @type float
-+         */
-+        opera:0,
-+
-+        /**
-+         * Gecko engine revision number.  Will evaluate to 1 if Gecko 
-+         * is detected but the revision could not be found. Other browsers
-+         * will be 0.  Example: 1.8
-+         * <pre>
-+         * Firefox 1.0.0.4: 1.7.8   <-- Reports 1.7
-+         * Firefox 1.5.0.9: 1.8.0.9 <-- Reports 1.8
-+         * Firefox 2.0.0.3: 1.8.1.3 <-- Reports 1.8
-+         * Firefox 3 alpha: 1.9a4   <-- Reports 1.9
-+         * </pre>
-+         * @property gecko
-+         * @type float
-+         */
-+        gecko:0,
-+
-+        /**
-+         * AppleWebKit version.  KHTML browsers that are not WebKit browsers 
-+         * will evaluate to 1, other browsers 0.  Example: 418.9.1
-+         * <pre>
-+         * Safari 1.3.2 (312.6): 312.8.1 <-- Reports 312.8 -- currently the 
-+         *                                   latest available for Mac OSX 10.3.
-+         * Safari 2.0.2:         416     <-- hasOwnProperty introduced
-+         * Safari 2.0.4:         418     <-- preventDefault fixed
-+         * Safari 2.0.4 (419.3): 418.9.1 <-- One version of Safari may run
-+         *                                   different versions of webkit
-+         * Safari 2.0.4 (419.3): 419     <-- Tiger installations that have been
-+         *                                   updated, but not updated
-+         *                                   to the latest patch.
-+         * Webkit 212 nightly:   522+    <-- Safari 3.0 precursor (with native SVG
-+         *                                   and many major issues fixed).  
-+         * 3.x yahoo.com, flickr:422     <-- Safari 3.x hacks the user agent
-+         *                                   string when hitting yahoo.com and 
-+         *                                   flickr.com.
-+         * Safari 3.0.4 (523.12):523.12  <-- First Tiger release - automatic update
-+         *                                   from 2.x via the 10.4.11 OS patch
-+         * Webkit nightly 1/2008:525+    <-- Supports DOMContentLoaded event.
-+         *                                   yahoo.com user agent hack removed.
-+         *                                   
-+         * </pre>
-+         * http://developer.apple.com/internet/safari/uamatrix.html
-+         * @property webkit
-+         * @type float
-+         */
-+        webkit: 0,
-+
-+        /**
-+         * The mobile property will be set to a string containing any relevant
-+         * user agent information when a modern mobile browser is detected.
-+         * Currently limited to Safari on the iPhone/iPod Touch, Nokia N-series
-+         * devices with the WebKit-based browser, and Opera Mini.  
-+         * @property mobile 
-+         * @type string
-+         */
-+        mobile: null,
-+
-+        /**
-+         * Adobe AIR version number or 0.  Only populated if webkit is detected.
-+         * Example: 1.0
-+         * @property air
-+         * @type float
-+         */
-+        air: 0,
-+
-+        /**
-+         * Google Caja version number or 0.
-+         * @property caja
-+         * @type float
-+         */
-+        caja: 0
-+
-+    },
-+
-+    ua = navigator.userAgent, 
-+    
-+    m;
-+
-+    // Modern KHTML browsers should qualify as Safari X-Grade
-+    if ((/KHTML/).test(ua)) {
-+        o.webkit=1;
-+    }
-+    // Modern WebKit browsers are at least X-Grade
-+    m=ua.match(/AppleWebKit\/([^\s]*)/);
-+    if (m&&m[1]) {
-+        o.webkit=parseFloat(m[1]);
-+
-+        // Mobile browser check
-+        if (/ Mobile\//.test(ua)) {
-+            o.mobile = "Apple"; // iPhone or iPod Touch
-+        } else {
-+            m=ua.match(/NokiaN[^\/]*/);
-+            if (m) {
-+                o.mobile = m[0]; // Nokia N-series, ex: NokiaN95
-+            }
-+        }
-+
-+        m=ua.match(/AdobeAIR\/([^\s]*)/);
-+        if (m) {
-+            o.air = m[0]; // Adobe AIR 1.0 or better
-+        }
-+
-+    }
-+
-+    if (!o.webkit) { // not webkit
-+        // @todo check Opera/8.01 (J2ME/MIDP; Opera Mini/2.0.4509/1316; fi; U; ssr)
-+        m=ua.match(/Opera[\s\/]([^\s]*)/);
-+        if (m&&m[1]) {
-+            o.opera=parseFloat(m[1]);
-+            m=ua.match(/Opera Mini[^;]*/);
-+            if (m) {
-+                o.mobile = m[0]; // ex: Opera Mini/2.0.4509/1316
-+            }
-+        } else { // not opera or webkit
-+            m=ua.match(/MSIE\s([^;]*)/);
-+            if (m&&m[1]) {
-+                o.ie=parseFloat(m[1]);
-+            } else { // not opera, webkit, or ie
-+                m=ua.match(/Gecko\/([^\s]*)/);
-+                if (m) {
-+                    o.gecko=1; // Gecko detected, look for revision
-+                    m=ua.match(/rv:([^\s\)]*)/);
-+                    if (m&&m[1]) {
-+                        o.gecko=parseFloat(m[1]);
-+                    }
-+                }
-+            }
-+        }
-+    }
-+
-+    m=ua.match(/Caja\/([^\s]*)/);
-+    if (m&&m[1]) {
-+        o.caja=parseFloat(m[1]);
-+    }
-+    
-+    return o;
-+}();
-+
-+/*
-+ * Initializes the global by creating the default namespaces and applying
-+ * any new configuration information that is detected.  This is the setup
-+ * for env.
-+ * @method init
-+ * @static
-+ * @private
-+ */
-+(function() {
-+    YAHOO.namespace("util", "widget", "example");
-+    /*global YAHOO_config*/
-+    if ("undefined" !== typeof YAHOO_config) {
-+        var l=YAHOO_config.listener,ls=YAHOO.env.listeners,unique=true,i;
-+        if (l) {
-+            // if YAHOO is loaded multiple times we need to check to see if
-+            // this is a new config object.  If it is, add the new component
-+            // load listener to the stack
-+            for (i=0;i<ls.length;i=i+1) {
-+                if (ls[i]==l) {
-+                    unique=false;
-+                    break;
-+                }
-+            }
-+            if (unique) {
-+                ls.push(l);
-+            }
-+        }
-+    }
-+})();
-+/**
-+ * Provides the language utilites and extensions used by the library
-+ * @class YAHOO.lang
-+ */
-+YAHOO.lang = YAHOO.lang || {};
-+
-+(function() {
-+
-+
-+var L = YAHOO.lang,
-+
-+    ARRAY_TOSTRING = '[object Array]',
-+    FUNCTION_TOSTRING = '[object Function]',
-+    OP = Object.prototype,
-+
-+    // ADD = ["toString", "valueOf", "hasOwnProperty"],
-+    ADD = ["toString", "valueOf"],
-+
-+    OB = {
-+
-+    /**
-+     * Determines wheather or not the provided object is an array.
-+     * @method isArray
-+     * @param {any} o The object being testing
-+     * @return {boolean} the result
-+     */
-+    isArray: function(o) { 
-+        return OP.toString.apply(o) === ARRAY_TOSTRING;
-+    },
-+
-+    /**
-+     * Determines whether or not the provided object is a boolean
-+     * @method isBoolean
-+     * @param {any} o The object being testing
-+     * @return {boolean} the result
-+     */
-+    isBoolean: function(o) {
-+        return typeof o === 'boolean';
-+    },
-+    
-+    /**
-+     * Determines whether or not the provided object is a function.
-+     * Note: Internet Explorer thinks certain functions are objects:
-+     *
-+     * var obj = document.createElement("object");
-+     * YAHOO.lang.isFunction(obj.getAttribute) // reports false in IE
-+     *
-+     * var input = document.createElement("input"); // append to body
-+     * YAHOO.lang.isFunction(input.focus) // reports false in IE
-+     *
-+     * You will have to implement additional tests if these functions
-+     * matter to you.
-+     *
-+     * @method isFunction
-+     * @param {any} o The object being testing
-+     * @return {boolean} the result
-+     */
-+    isFunction: function(o) {
-+        return OP.toString.apply(o) === FUNCTION_TOSTRING;
-+    },
-+        
-+    /**
-+     * Determines whether or not the provided object is null
-+     * @method isNull
-+     * @param {any} o The object being testing
-+     * @return {boolean} the result
-+     */
-+    isNull: function(o) {
-+        return o === null;
-+    },
-+        
-+    /**
-+     * Determines whether or not the provided object is a legal number
-+     * @method isNumber
-+     * @param {any} o The object being testing
-+     * @return {boolean} the result
-+     */
-+    isNumber: function(o) {
-+        return typeof o === 'number' && isFinite(o);
-+    },
-+      
-+    /**
-+     * Determines whether or not the provided object is of type object
-+     * or function
-+     * @method isObject
-+     * @param {any} o The object being testing
-+     * @return {boolean} the result
-+     */  
-+    isObject: function(o) {
-+return (o && (typeof o === 'object' || L.isFunction(o))) || false;
-+    },
-+        
-+    /**
-+     * Determines whether or not the provided object is a string
-+     * @method isString
-+     * @param {any} o The object being testing
-+     * @return {boolean} the result
-+     */
-+    isString: function(o) {
-+        return typeof o === 'string';
-+    },
-+        
-+    /**
-+     * Determines whether or not the provided object is undefined
-+     * @method isUndefined
-+     * @param {any} o The object being testing
-+     * @return {boolean} the result
-+     */
-+    isUndefined: function(o) {
-+        return typeof o === 'undefined';
-+    },
-+    
-+ 
-+    /**
-+     * IE will not enumerate native functions in a derived object even if the
-+     * function was overridden.  This is a workaround for specific functions 
-+     * we care about on the Object prototype. 
-+     * @property _IEEnumFix
-+     * @param {Function} r  the object to receive the augmentation
-+     * @param {Function} s  the object that supplies the properties to augment
-+     * @static
-+     * @private
-+     */
-+    _IEEnumFix: (YAHOO.env.ua.ie) ? function(r, s) {
-+            var i, fname, f;
-+            for (i=0;i<ADD.length;i=i+1) {
-+
-+                fname = ADD[i];
-+                f = s[fname];
-+
-+                if (L.isFunction(f) && f!=OP[fname]) {
-+                    r[fname]=f;
-+                }
-+            }
-+    } : function(){},
-+       
-+    /**
-+     * Utility to set up the prototype, constructor and superclass properties to
-+     * support an inheritance strategy that can chain constructors and methods.
-+     * Static members will not be inherited.
-+     *
-+     * @method extend
-+     * @static
-+     * @param {Function} subc   the object to modify
-+     * @param {Function} superc the object to inherit
-+     * @param {Object} overrides  additional properties/methods to add to the
-+     *                              subclass prototype.  These will override the
-+     *                              matching items obtained from the superclass 
-+     *                              if present.
-+     */
-+    extend: function(subc, superc, overrides) {
-+        if (!superc||!subc) {
-+            throw new Error("extend failed, please check that " +
-+                            "all dependencies are included.");
-+        }
-+        var F = function() {}, i;
-+        F.prototype=superc.prototype;
-+        subc.prototype=new F();
-+        subc.prototype.constructor=subc;
-+        subc.superclass=superc.prototype;
-+        if (superc.prototype.constructor == OP.constructor) {
-+            superc.prototype.constructor=superc;
-+        }
-+    
-+        if (overrides) {
-+            for (i in overrides) {
-+                if (L.hasOwnProperty(overrides, i)) {
-+                    subc.prototype[i]=overrides[i];
-+                }
-+            }
-+
-+            L._IEEnumFix(subc.prototype, overrides);
-+        }
-+    },
-+   
-+    /**
-+     * Applies all properties in the supplier to the receiver if the
-+     * receiver does not have these properties yet.  Optionally, one or 
-+     * more methods/properties can be specified (as additional 
-+     * parameters).  This option will overwrite the property if receiver 
-+     * has it already.  If true is passed as the third parameter, all 
-+     * properties will be applied and _will_ overwrite properties in 
-+     * the receiver.
-+     *
-+     * @method augmentObject
-+     * @static
-+     * @since 2.3.0
-+     * @param {Function} r  the object to receive the augmentation
-+     * @param {Function} s  the object that supplies the properties to augment
-+     * @param {String*|boolean}  arguments zero or more properties methods 
-+     *        to augment the receiver with.  If none specified, everything
-+     *        in the supplier will be used unless it would
-+     *        overwrite an existing property in the receiver. If true
-+     *        is specified as the third parameter, all properties will
-+     *        be applied and will overwrite an existing property in
-+     *        the receiver
-+     */
-+    augmentObject: function(r, s) {
-+        if (!s||!r) {
-+            throw new Error("Absorb failed, verify dependencies.");
-+        }
-+        var a=arguments, i, p, overrideList=a[2];
-+        if (overrideList && overrideList!==true) { // only absorb the specified properties
-+            for (i=2; i<a.length; i=i+1) {
-+                r[a[i]] = s[a[i]];
-+            }
-+        } else { // take everything, overwriting only if the third parameter is true
-+            for (p in s) { 
-+                if (overrideList || !(p in r)) {
-+                    r[p] = s[p];
-+                }
-+            }
-+            
-+            L._IEEnumFix(r, s);
-+        }
-+    },
-+ 
-+    /**
-+     * Same as YAHOO.lang.augmentObject, except it only applies prototype properties
-+     * @see YAHOO.lang.augmentObject
-+     * @method augmentProto
-+     * @static
-+     * @param {Function} r  the object to receive the augmentation
-+     * @param {Function} s  the object that supplies the properties to augment
-+     * @param {String*|boolean}  arguments zero or more properties methods 
-+     *        to augment the receiver with.  If none specified, everything 
-+     *        in the supplier will be used unless it would overwrite an existing 
-+     *        property in the receiver.  if true is specified as the third 
-+     *        parameter, all properties will be applied and will overwrite an 
-+     *        existing property in the receiver
-+     */
-+    augmentProto: function(r, s) {
-+        if (!s||!r) {
-+            throw new Error("Augment failed, verify dependencies.");
-+        }
-+        //var a=[].concat(arguments);
-+        var a=[r.prototype,s.prototype], i;
-+        for (i=2;i<arguments.length;i=i+1) {
-+            a.push(arguments[i]);
-+        }
-+        L.augmentObject.apply(this, a);
-+    },
-+
-+      
-+    /**
-+     * Returns a simple string representation of the object or array.
-+     * Other types of objects will be returned unprocessed.  Arrays
-+     * are expected to be indexed.  Use object notation for
-+     * associative arrays.
-+     * @method dump
-+     * @since 2.3.0
-+     * @param o {Object} The object to dump
-+     * @param d {int} How deep to recurse child objects, default 3
-+     * @return {String} the dump result
-+     */
-+    dump: function(o, d) {
-+        var i,len,s=[],OBJ="{...}",FUN="f(){...}",
-+            COMMA=', ', ARROW=' => ';
-+
-+        // Cast non-objects to string
-+        // Skip dates because the std toString is what we want
-+        // Skip HTMLElement-like objects because trying to dump 
-+        // an element will cause an unhandled exception in FF 2.x
-+        if (!L.isObject(o)) {
-+            return o + "";
-+        } else if (o instanceof Date || ("nodeType" in o && "tagName" in o)) {
-+            return o;
-+        } else if  (L.isFunction(o)) {
-+            return FUN;
-+        }
-+
-+        // dig into child objects the depth specifed. Default 3
-+        d = (L.isNumber(d)) ? d : 3;
-+
-+        // arrays [1, 2, 3]
-+        if (L.isArray(o)) {
-+            s.push("[");
-+            for (i=0,len=o.length;i<len;i=i+1) {
-+                if (L.isObject(o[i])) {
-+                    s.push((d > 0) ? L.dump(o[i], d-1) : OBJ);
-+                } else {
-+                    s.push(o[i]);
-+                }
-+                s.push(COMMA);
-+            }
-+            if (s.length > 1) {
-+                s.pop();
-+            }
-+            s.push("]");
-+        // objects {k1 => v1, k2 => v2}
-+        } else {
-+            s.push("{");
-+            for (i in o) {
-+                if (L.hasOwnProperty(o, i)) {
-+                    s.push(i + ARROW);
-+                    if (L.isObject(o[i])) {
-+                        s.push((d > 0) ? L.dump(o[i], d-1) : OBJ);
-+                    } else {
-+                        s.push(o[i]);
-+                    }
-+                    s.push(COMMA);
-+                }
-+            }
-+            if (s.length > 1) {
-+                s.pop();
-+            }
-+            s.push("}");
-+        }
-+
-+        return s.join("");
-+    },
-+
-+    /**
-+     * Does variable substitution on a string. It scans through the string 
-+     * looking for expressions enclosed in { } braces. If an expression 
-+     * is found, it is used a key on the object.  If there is a space in
-+     * the key, the first word is used for the key and the rest is provided
-+     * to an optional function to be used to programatically determine the
-+     * value (the extra information might be used for this decision). If 
-+     * the value for the key in the object, or what is returned from the
-+     * function has a string value, number value, or object value, it is 
-+     * substituted for the bracket expression and it repeats.  If this
-+     * value is an object, it uses the Object's toString() if this has
-+     * been overridden, otherwise it does a shallow dump of the key/value
-+     * pairs.
-+     * @method substitute
-+     * @since 2.3.0
-+     * @param s {String} The string that will be modified.
-+     * @param o {Object} An object containing the replacement values
-+     * @param f {Function} An optional function that can be used to
-+     *                     process each match.  It receives the key,
-+     *                     value, and any extra metadata included with
-+     *                     the key inside of the braces.
-+     * @return {String} the substituted string
-+     */
-+    substitute: function (s, o, f) {
-+        var i, j, k, key, v, meta, saved=[], token, 
-+            DUMP='dump', SPACE=' ', LBRACE='{', RBRACE='}',
-+            dump;
-+
-+
-+        for (;;) {
-+            i = s.lastIndexOf(LBRACE);
-+            if (i < 0) {
-+                break;
-+            }
-+            j = s.indexOf(RBRACE, i);
-+            if (i + 1 >= j) {
-+                break;
-+            }
-+
-+            //Extract key and meta info 
-+            token = s.substring(i + 1, j);
-+            key = token;
-+            meta = null;
-+            k = key.indexOf(SPACE);
-+            if (k > -1) {
-+                meta = key.substring(k + 1);
-+                key = key.substring(0, k);
-+            }
-+
-+            // lookup the value
-+            v = o[key];
-+
-+            // if a substitution function was provided, execute it
-+            if (f) {
-+                v = f(key, v, meta);
-+            }
-+
-+            if (L.isObject(v)) {
-+                if (L.isArray(v)) {
-+                    v = L.dump(v, parseInt(meta, 10));
-+                } else {
-+                    meta = meta || "";
-+
-+                    // look for the keyword 'dump', if found force obj dump
-+                    dump = meta.indexOf(DUMP);
-+                    if (dump > -1) {
-+                        meta = meta.substring(4);
-+                    }
-+
-+                    // use the toString if it is not the Object toString 
-+                    // and the 'dump' meta info was not found
-+                    if (v.toString===OP.toString || dump>-1) {
-+                        v = L.dump(v, parseInt(meta, 10));
-+                    } else {
-+                        v = v.toString();
-+                    }
-+                }
-+            } else if (!L.isString(v) && !L.isNumber(v)) {
-+                // This {block} has no replace string. Save it for later.
-+                v = "~-" + saved.length + "-~";
-+                saved[saved.length] = token;
-+
-+                // break;
-+            }
-+
-+            s = s.substring(0, i) + v + s.substring(j + 1);
-+
-+
-+        }
-+
-+        // restore saved {block}s
-+        for (i=saved.length-1; i>=0; i=i-1) {
-+            s = s.replace(new RegExp("~-" + i + "-~"), "{"  + saved[i] + "}", "g");
-+        }
-+
-+        return s;
-+    },
-+
-+
-+    /**
-+     * Returns a string without any leading or trailing whitespace.  If 
-+     * the input is not a string, the input will be returned untouched.
-+     * @method trim
-+     * @since 2.3.0
-+     * @param s {string} the string to trim
-+     * @return {string} the trimmed string
-+     */
-+    trim: function(s){
-+        try {
-+            return s.replace(/^\s+|\s+$/g, "");
-+        } catch(e) {
-+            return s;
-+        }
-+    },
-+
-+    /**
-+     * Returns a new object containing all of the properties of
-+     * all the supplied objects.  The properties from later objects
-+     * will overwrite those in earlier objects.
-+     * @method merge
-+     * @since 2.3.0
-+     * @param arguments {Object*} the objects to merge
-+     * @return the new merged object
-+     */
-+    merge: function() {
-+        var o={}, a=arguments, l=a.length, i;
-+        for (i=0; i<l; i=i+1) {
-+            L.augmentObject(o, a[i], true);
-+        }
-+        return o;
-+    },
-+
-+    /**
-+     * Executes the supplied function in the context of the supplied 
-+     * object 'when' milliseconds later.  Executes the function a 
-+     * single time unless periodic is set to true.
-+     * @method later
-+     * @since 2.4.0
-+     * @param when {int} the number of milliseconds to wait until the fn 
-+     * is executed
-+     * @param o the context object
-+     * @param fn {Function|String} the function to execute or the name of 
-+     * the method in the 'o' object to execute
-+     * @param data [Array] data that is provided to the function.  This accepts
-+     * either a single item or an array.  If an array is provided, the
-+     * function is executed with one parameter for each array item.  If
-+     * you need to pass a single array parameter, it needs to be wrapped in
-+     * an array [myarray]
-+     * @param periodic {boolean} if true, executes continuously at supplied 
-+     * interval until canceled
-+     * @return a timer object. Call the cancel() method on this object to 
-+     * stop the timer.
-+     */
-+    later: function(when, o, fn, data, periodic) {
-+        when = when || 0; 
-+        o = o || {};
-+        var m=fn, d=data, f, r;
-+
-+        if (L.isString(fn)) {
-+            m = o[fn];
-+        }
-+
-+        if (!m) {
-+            throw new TypeError("method undefined");
-+        }
-+
-+        if (!L.isArray(d)) {
-+            d = [data];
-+        }
-+
-+        f = function() {
-+            m.apply(o, d);
-+        };
-+
-+        r = (periodic) ? setInterval(f, when) : setTimeout(f, when);
-+
-+        return {
-+            interval: periodic,
-+            cancel: function() {
-+                if (this.interval) {
-+                    clearInterval(r);
-+                } else {
-+                    clearTimeout(r);
-+                }
-+            }
-+        };
-+    },
-+    
-+    /**
-+     * A convenience method for detecting a legitimate non-null value.
-+     * Returns false for null/undefined/NaN, true for other values, 
-+     * including 0/false/''
-+     * @method isValue
-+     * @since 2.3.0
-+     * @param o {any} the item to test
-+     * @return {boolean} true if it is not null/undefined/NaN || false
-+     */
-+    isValue: function(o) {
-+        // return (o || o === false || o === 0 || o === ''); // Infinity fails
-+return (L.isObject(o) || L.isString(o) || L.isNumber(o) || L.isBoolean(o));
-+    }
-+
-+};
-+
-+/**
-+ * Determines whether or not the property was added
-+ * to the object instance.  Returns false if the property is not present
-+ * in the object, or was inherited from the prototype.
-+ * This abstraction is provided to enable hasOwnProperty for Safari 1.3.x.
-+ * There is a discrepancy between YAHOO.lang.hasOwnProperty and
-+ * Object.prototype.hasOwnProperty when the property is a primitive added to
-+ * both the instance AND prototype with the same value:
-+ * <pre>
-+ * var A = function() {};
-+ * A.prototype.foo = 'foo';
-+ * var a = new A();
-+ * a.foo = 'foo';
-+ * alert(a.hasOwnProperty('foo')); // true
-+ * alert(YAHOO.lang.hasOwnProperty(a, 'foo')); // false when using fallback
-+ * </pre>
-+ * @method hasOwnProperty
-+ * @param {any} o The object being testing
-+ * @param prop {string} the name of the property to test
-+ * @return {boolean} the result
-+ */
-+L.hasOwnProperty = (OP.hasOwnProperty) ?
-+    function(o, prop) {
-+        return o && o.hasOwnProperty(prop);
-+    } : function(o, prop) {
-+        return !L.isUndefined(o[prop]) && 
-+                o.constructor.prototype[prop] !== o[prop];
-+    };
-+
-+// new lang wins
-+OB.augmentObject(L, OB, true);
-+
-+/*
-+ * An alias for <a href="YAHOO.lang.html">YAHOO.lang</a>
-+ * @class YAHOO.util.Lang
-+ */
-+YAHOO.util.Lang = L;
-+ 
-+/**
-+ * Same as YAHOO.lang.augmentObject, except it only applies prototype 
-+ * properties.  This is an alias for augmentProto.
-+ * @see YAHOO.lang.augmentObject
-+ * @method augment
-+ * @static
-+ * @param {Function} r  the object to receive the augmentation
-+ * @param {Function} s  the object that supplies the properties to augment
-+ * @param {String*|boolean}  arguments zero or more properties methods to 
-+ *        augment the receiver with.  If none specified, everything
-+ *        in the supplier will be used unless it would
-+ *        overwrite an existing property in the receiver.  if true
-+ *        is specified as the third parameter, all properties will
-+ *        be applied and will overwrite an existing property in
-+ *        the receiver
-+ */
-+L.augment = L.augmentProto;
-+
-+/**
-+ * An alias for <a href="YAHOO.lang.html#augment">YAHOO.lang.augment</a>
-+ * @for YAHOO
-+ * @method augment
-+ * @static
-+ * @param {Function} r  the object to receive the augmentation
-+ * @param {Function} s  the object that supplies the properties to augment
-+ * @param {String*}  arguments zero or more properties methods to 
-+ *        augment the receiver with.  If none specified, everything
-+ *        in the supplier will be used unless it would
-+ *        overwrite an existing property in the receiver
-+ */
-+YAHOO.augment = L.augmentProto;
-+       
-+/**
-+ * An alias for <a href="YAHOO.lang.html#extend">YAHOO.lang.extend</a>
-+ * @method extend
-+ * @static
-+ * @param {Function} subc   the object to modify
-+ * @param {Function} superc the object to inherit
-+ * @param {Object} overrides  additional properties/methods to add to the
-+ *        subclass prototype.  These will override the
-+ *        matching items obtained from the superclass if present.
-+ */
-+YAHOO.extend = L.extend;
-+
-+})();
-+YAHOO.register("yahoo", YAHOO, {version: "2.7.0", build: "1796"});
--- 
-1.7.10
-
diff --git a/debian/patches/series b/debian/patches/series
index e6d4ef9..779be31 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,4 +1,2 @@
 add_missing_requires.patch
 fog_import.patch
-0001-Rename-dd_belatedpng.js-to-dd_belatedpng.min.js.patch
-0002-Add-non-minified-javascript-files-used-in-docs-939.patch

-- 
ruby-fog.git



More information about the Pkg-ruby-extras-commits mailing list