issue46, added a javascript-based slider to modify slide-interval
authorAndreas Unterkircher <unki@netshadow.at>
Sun, 22 Jul 2007 10:09:14 +0000 (10:09 +0000)
committerAndreas Unterkircher <unki@netshadow.at>
Sun, 22 Jul 2007 10:09:14 +0000 (10:09 +0000)
git-svn-id: file:///var/lib/svn/phpfspot/trunk@242 fa6a889d-dae6-447d-9e79-4ba9a3039384

23 files changed:
phpfspot.js
slider/REMOVED [new file with mode: 0644]
slider/css/bluecurve/bluecurve.css [new file with mode: 0644]
slider/css/bluecurve/handle.horizontal.png [new file with mode: 0644]
slider/css/bluecurve/handle.vertical.png [new file with mode: 0644]
slider/css/bluecurve/horizontal.gif [new file with mode: 0644]
slider/css/bluecurve/vertical.gif [new file with mode: 0644]
slider/css/boxsizing.htc [new file with mode: 0644]
slider/css/luna/handle.horizontal.hover.png [new file with mode: 0644]
slider/css/luna/handle.horizontal.png [new file with mode: 0644]
slider/css/luna/handle.vertical.hover.png [new file with mode: 0644]
slider/css/luna/handle.vertical.png [new file with mode: 0644]
slider/css/luna/luna.css [new file with mode: 0644]
slider/css/swing/handle.horizontal.png [new file with mode: 0644]
slider/css/swing/handle.vertical.png [new file with mode: 0644]
slider/css/swing/swing.css [new file with mode: 0644]
slider/css/winclassic.css [new file with mode: 0644]
slider/js/range.js [new file with mode: 0644]
slider/js/slider.js [new file with mode: 0644]
slider/js/timer.js [new file with mode: 0644]
slider/license.txt [new file with mode: 0644]
themes/default/stylesheet.css
themes/default/templates/slideshow.tpl

index 1e074bb83397305805048f3dd078ed467519e801..88af0b5ba07b51f7b124cb701c69f345c179e8bd 100644 (file)
@@ -305,7 +305,7 @@ function startSlideShow()
    if(!sliding) {
       HTML_AJAX.grab(encodeURI('rpc.php?action=reset_slideshow'));
       nextSlide();
    if(!sliding) {
       HTML_AJAX.grab(encodeURI('rpc.php?action=reset_slideshow'));
       nextSlide();
-      sliding = setInterval("nextSlide()", 3000);
+      sliding = setInterval("nextSlide()", sliding_time*1000);
       document.getElementById('stop_ico').src = "resources/32_stop.png";
    }
    else {
       document.getElementById('stop_ico').src = "resources/32_stop.png";
    }
    else {
@@ -336,7 +336,7 @@ function pauseSlideShow()
    }
    else {
       sliding_paused = 0;
    }
    else {
       sliding_paused = 0;
-      sliding = setInterval("nextSlide()", 3000);
+      sliding = setInterval("nextSlide()", sliding_time*1000);
       document.getElementById('pause_ico').src = "resources/32_pause.png";
    }
 } 
       document.getElementById('pause_ico').src = "resources/32_pause.png";
    }
 } 
@@ -363,9 +363,33 @@ function autoBrowse()
    }
 }  
 
    }
 }  
 
+function initSlider()
+{
+   var sliderEl = document.getElementById ? document.getElementById("slider-1") : null;
+   var inputEl = document.forms[0]["slider-input-1"];
+   var s = new Slider(sliderEl, inputEl);
+   s.setMinimum(1);
+   s.setMaximum(10);
+   s.setValue(sliding_time);
+   document.getElementById("current_slide_time").innerHTML = sliding_time + "s Interval";
+   s.onchange = function () {
+      sliding_time = s.getValue();
+      document.getElementById("current_slide_time").innerHTML = sliding_time + "s Interval";
+      if(!sliding_paused && sliding) {
+         clearInterval(sliding);
+         sliding = setInterval("nextSlide()", sliding_time*1000);
+      }
+   };
+   window.onresize = function () {
+      s.recalculate();
+   };
+
+}
+
 var startup = 1;
 var calendar_shown = 0;
 var calendar_mode = '';
 var autobrowse = 0;
 var sliding = 0;
 var sliding_paused = 0;
 var startup = 1;
 var calendar_shown = 0;
 var calendar_mode = '';
 var autobrowse = 0;
 var sliding = 0;
 var sliding_paused = 0;
+var sliding_time = 3;
diff --git a/slider/REMOVED b/slider/REMOVED
new file mode 100644 (file)
index 0000000..be1cddf
--- /dev/null
@@ -0,0 +1,6 @@
+rgbdemo.html
+demo.html
+slider.html
+implementation.html
+api.html
+local/
diff --git a/slider/css/bluecurve/bluecurve.css b/slider/css/bluecurve/bluecurve.css
new file mode 100644 (file)
index 0000000..6867382
--- /dev/null
@@ -0,0 +1,79 @@
+/*\r
+       back:   rgb(230,230,230)\r
+       dark:   rgb(90,97,90)\r
+       medium  rgb(189,190,189)\r
+       */\r
+\r
+.dynamic-slider-control {\r
+       position:                       relative;\r
+       -moz-user-focus:        normal;\r
+       -moz-user-select:       none;\r
+       cursor:                         default;\r
+}\r
+\r
+.horizontal {\r
+       width:                          200px;\r
+       height:                         27px;\r
+}\r
+\r
+.vertical {\r
+       width:                          29px;\r
+       height:                         200px;\r
+}\r
+\r
+.dynamic-slider-control input {\r
+       display:        none;\r
+}\r
+\r
+.dynamic-slider-control .handle {\r
+       position:                       absolute;       \r
+       font-size:                      1px;\r
+       overflow:                       hidden;\r
+       -moz-user-select:       none;\r
+       cursor:                         default;\r
+}\r
+\r
+.dynamic-slider-control.horizontal .handle {\r
+       width:                          31px;\r
+       height:                         14px;\r
+       background-image:       url("handle.horizontal.png");\r
+}\r
+\r
+.dynamic-slider-control.horizontal .handle div {}\r
+.dynamic-slider-control.horizontal .handle.hover {}\r
+\r
+.dynamic-slider-control.vertical .handle {\r
+       width:                          15px;\r
+       height:                         31px;\r
+       background-image:       url("handle.vertical.png");\r
+}\r
+\r
+.dynamic-slider-control.vertical .handle.hover {}\r
+\r
+.dynamic-slider-control .line {\r
+       position:                       absolute;\r
+       font-size:                      0.01mm;\r
+       overflow:                       hidden;\r
+       border:                         1px solid rgb(90,97,90);\r
+       background:                     rgb(189,190,189);\r
+       \r
+       behavior:                       url("css/boxsizing.htc"); /* ie path bug */\r
+       box-sizing:                     content-box;\r
+       -moz-box-sizing:        content-box;\r
+}\r
+.dynamic-slider-control.vertical .line {\r
+       width:                          3px;\r
+}\r
+\r
+.dynamic-slider-control.horizontal .line {\r
+       height:                         3px;\r
+}\r
+\r
+.dynamic-slider-control .line div {\r
+       width:          1px;\r
+       height:         1px;\r
+       \r
+       border:                         1px solid;\r
+       border-color:           rgb(230,230,230) rgb(189,190,189)\r
+                                               rgb(189,190,189) rgb(230,230,230);\r
+}\r
diff --git a/slider/css/bluecurve/handle.horizontal.png b/slider/css/bluecurve/handle.horizontal.png
new file mode 100644 (file)
index 0000000..d9dc7ff
Binary files /dev/null and b/slider/css/bluecurve/handle.horizontal.png differ
diff --git a/slider/css/bluecurve/handle.vertical.png b/slider/css/bluecurve/handle.vertical.png
new file mode 100644 (file)
index 0000000..0c00f85
Binary files /dev/null and b/slider/css/bluecurve/handle.vertical.png differ
diff --git a/slider/css/bluecurve/horizontal.gif b/slider/css/bluecurve/horizontal.gif
new file mode 100644 (file)
index 0000000..39d816b
Binary files /dev/null and b/slider/css/bluecurve/horizontal.gif differ
diff --git a/slider/css/bluecurve/vertical.gif b/slider/css/bluecurve/vertical.gif
new file mode 100644 (file)
index 0000000..781eaac
Binary files /dev/null and b/slider/css/bluecurve/vertical.gif differ
diff --git a/slider/css/boxsizing.htc b/slider/css/boxsizing.htc
new file mode 100644 (file)
index 0000000..fbeaa56
--- /dev/null
@@ -0,0 +1,157 @@
+<component lightWeight="true">\r
+<attach event="onpropertychange" onevent="checkPropertyChange()" />\r
+<attach event="ondetach" onevent="restore()" />\r
+<script>\r
+//<![CDATA[\r
+\r
+var doc = element.document;\r
+\r
+function init() {\r
+       updateBorderBoxWidth();\r
+       updateBorderBoxHeight();\r
+}\r
+\r
+function restore() {\r
+       element.runtimeStyle.width = "";\r
+       element.runtimeStyle.height = "";\r
+}\r
+\r
+/* border width getters */\r
+function getBorderWidth(sSide) {\r
+       if (element.currentStyle["border" + sSide + "Style"] == "none")\r
+               return 0;\r
+       var n = parseInt(element.currentStyle["border" + sSide + "Width"]);\r
+       return n || 0;\r
+}\r
+\r
+function getBorderLeftWidth() { return getBorderWidth("Left"); }\r
+function getBorderRightWidth() { return getBorderWidth("Right"); }\r
+function getBorderTopWidth() { return getBorderWidth("Top"); }\r
+function getBorderBottomWidth() { return getBorderWidth("Bottom"); }\r
+/* end border width getters */\r
+\r
+/* padding getters */\r
+function getPadding(sSide) {\r
+       var n = parseInt(element.currentStyle["padding" + sSide]);\r
+       return n || 0;\r
+}\r
+\r
+function getPaddingLeft() { return getPadding("Left"); }\r
+function getPaddingRight() { return getPadding("Right"); }\r
+function getPaddingTop() { return getPadding("Top"); }\r
+function getPaddingBottom() { return getPadding("Bottom"); }\r
+/* end padding getters */\r
+\r
+function getBoxSizing() {\r
+       var s = element.style;\r
+       var cs = element.currentStyle\r
+\r
+       if (typeof s.boxSizing != "undefined" && s.boxSizing != "")\r
+               return s.boxSizing;\r
+       if (typeof s["box-sizing"] != "undefined" && s["box-sizing"] != "")\r
+               return s["box-sizing"];\r
+       if (typeof cs.boxSizing != "undefined" && cs.boxSizing != "")\r
+               return cs.boxSizing;\r
+       if (typeof cs["box-sizing"] != "undefined" && cs["box-sizing"] != "")\r
+               return cs["box-sizing"];\r
+       return getDocumentBoxSizing();\r
+}\r
+\r
+function getDocumentBoxSizing() {\r
+       if (doc.compatMode == null || doc.compatMode == "BackCompat")\r
+               return "border-box";\r
+       return "content-box"\r
+}\r
+\r
+/* width and height setters */\r
+function setBorderBoxWidth(n) {\r
+       element.runtimeStyle.width = Math.max(0, n - getBorderLeftWidth() -\r
+               getPaddingLeft() - getPaddingRight() - getBorderRightWidth()) + "px";\r
+}\r
+\r
+function setBorderBoxHeight(n) {\r
+       element.runtimeStyle.height = Math.max(0, n - getBorderTopWidth() -\r
+               getPaddingTop() - getPaddingBottom() - getBorderBottomWidth()) + "px";\r
+}\r
+\r
+function setContentBoxWidth(n) {\r
+       element.runtimeStyle.width = Math.max(0, n + getBorderLeftWidth() +\r
+               getPaddingLeft() + getPaddingRight() + getBorderRightWidth()) + "px";\r
+}\r
+\r
+function setContentBoxHeight(n) {\r
+       element.runtimeStyle.height = Math.max(0, n + getBorderTopWidth() +\r
+               getPaddingTop() + getPaddingBottom() + getBorderBottomWidth()) + "px";\r
+}\r
+/* end width and height setters */\r
+\r
+function updateBorderBoxWidth() {\r
+       element.runtimeStyle.width = "";\r
+       if (getDocumentBoxSizing() == getBoxSizing())\r
+               return;\r
+       var csw = element.currentStyle.width;\r
+       if (csw != "auto" && csw.indexOf("px") != -1) {\r
+               if (getBoxSizing() == "border-box")\r
+                       setBorderBoxWidth(parseInt(csw));\r
+               else\r
+                       setContentBoxWidth(parseInt(csw));\r
+       }\r
+}\r
+\r
+function updateBorderBoxHeight() {\r
+       element.runtimeStyle.height = "";       \r
+       if (getDocumentBoxSizing() == getBoxSizing())\r
+               return;\r
+       var csh = element.currentStyle.height;\r
+       if (csh != "auto" && csh.indexOf("px") != -1) {\r
+               if (getBoxSizing() == "border-box")\r
+                       setBorderBoxHeight(parseInt(csh));\r
+               else\r
+                       setContentBoxHeight(parseInt(csh));\r
+       }\r
+}\r
+\r
+function checkPropertyChange() {\r
+       var pn = event.propertyName;\r
+       var undef;\r
+\r
+       if (pn == "style.boxSizing" && element.style.boxSizing == "") {\r
+               element.style.removeAttribute("boxSizing");\r
+               element.runtimeStyle.boxSizing = undef;         \r
+       }\r
+\r
+\r
+       switch (pn) {\r
+               case "style.width":\r
+               case "style.borderLeftWidth":\r
+               case "style.borderLeftStyle":\r
+               case "style.borderRightWidth":\r
+               case "style.borderRightStyle":\r
+               case "style.paddingLeft":\r
+               case "style.paddingRight":\r
+                       updateBorderBoxWidth();\r
+                       break;\r
+               \r
+               case "style.height":\r
+               case "style.borderTopWidth":\r
+               case "style.borderTopStyle":\r
+               case "style.borderBottomWidth":\r
+               case "style.borderBottomStyle":\r
+               case "style.paddingTop":\r
+               case "style.paddingBottom":\r
+                       updateBorderBoxHeight();\r
+                       break;\r
+               \r
+               case "className":\r
+               case "style.boxSizing":\r
+                       updateBorderBoxWidth();\r
+                       updateBorderBoxHeight();\r
+                       break;\r
+       }\r
+}\r
+\r
+init();\r
+\r
+//]]>\r
+</script>\r
+</component>
\ No newline at end of file
diff --git a/slider/css/luna/handle.horizontal.hover.png b/slider/css/luna/handle.horizontal.hover.png
new file mode 100644 (file)
index 0000000..d2fd059
Binary files /dev/null and b/slider/css/luna/handle.horizontal.hover.png differ
diff --git a/slider/css/luna/handle.horizontal.png b/slider/css/luna/handle.horizontal.png
new file mode 100644 (file)
index 0000000..b3af6bb
Binary files /dev/null and b/slider/css/luna/handle.horizontal.png differ
diff --git a/slider/css/luna/handle.vertical.hover.png b/slider/css/luna/handle.vertical.hover.png
new file mode 100644 (file)
index 0000000..379cdc2
Binary files /dev/null and b/slider/css/luna/handle.vertical.hover.png differ
diff --git a/slider/css/luna/handle.vertical.png b/slider/css/luna/handle.vertical.png
new file mode 100644 (file)
index 0000000..537135e
Binary files /dev/null and b/slider/css/luna/handle.vertical.png differ
diff --git a/slider/css/luna/luna.css b/slider/css/luna/luna.css
new file mode 100644 (file)
index 0000000..25597da
--- /dev/null
@@ -0,0 +1,75 @@
+.dynamic-slider-control {\r
+       position:                       relative;\r
+       background-color:       ThreeDFace;\r
+       -moz-user-focus:        normal;\r
+       -moz-user-select:       none;\r
+       cursor:                         default;\r
+}\r
+\r
+.horizontal {\r
+       width:                          200px;\r
+       height:                         27px;\r
+}\r
+\r
+.vertical {\r
+       width:                          29px;\r
+       height:                         200px;\r
+}\r
+\r
+.dynamic-slider-control input {\r
+       display:        none;\r
+}\r
+\r
+.dynamic-slider-control .handle {\r
+       position:                       absolute;       \r
+       font-size:                      1px;\r
+       overflow:                       hidden;\r
+       -moz-user-select:       none;\r
+       cursor:                         default;\r
+}\r
+\r
+.dynamic-slider-control.horizontal .handle {\r
+       width:                          11px;\r
+       height:                         21px;\r
+       background-image:       url("handle.horizontal.png");\r
+}\r
+\r
+.dynamic-slider-control.horizontal .handle div {}\r
+.dynamic-slider-control.horizontal .handle.hover {\r
+       background-image:       url("handle.horizontal.hover.png");\r
+}\r
+\r
+.dynamic-slider-control.vertical .handle {\r
+       width:                          25px;\r
+       height:                         13px;\r
+       background-image:       url("handle.vertical.png");\r
+}\r
+\r
+.dynamic-slider-control.vertical .handle.hover {\r
+       background-image:       url("handle.vertical.hover.png");\r
+}\r
+\r
+.dynamic-slider-control .line {\r
+       position:                       absolute;\r
+       font-size:                      0.01mm;\r
+       overflow:                       hidden;\r
+       border:                         1px solid;\r
+       border-color:           ThreeDShadow ThreeDHighlight\r
+                                               ThreeDHighlight ThreeDShadow;\r
+       -moz-border-radius:     50%;\r
+       \r
+       behavior:                       url("css/boxsizing.htc"); /* ie path bug */\r
+       box-sizing:                     content-box;\r
+       -moz-box-sizing:        content-box;\r
+}\r
+.dynamic-slider-control.vertical .line {\r
+       width:                          2px;\r
+}\r
+\r
+.dynamic-slider-control.horizontal .line {\r
+       height:                         2px;\r
+}\r
+\r
+.dynamic-slider-control .line div {\r
+       display:        none;\r
+}
\ No newline at end of file
diff --git a/slider/css/swing/handle.horizontal.png b/slider/css/swing/handle.horizontal.png
new file mode 100644 (file)
index 0000000..6c7fb90
Binary files /dev/null and b/slider/css/swing/handle.horizontal.png differ
diff --git a/slider/css/swing/handle.vertical.png b/slider/css/swing/handle.vertical.png
new file mode 100644 (file)
index 0000000..ca1ac4a
Binary files /dev/null and b/slider/css/swing/handle.vertical.png differ
diff --git a/slider/css/swing/swing.css b/slider/css/swing/swing.css
new file mode 100644 (file)
index 0000000..53ba9f2
--- /dev/null
@@ -0,0 +1,82 @@
+/*\r
+       dark rgb(102,102,102)\r
+       medium  rgb(152,153,153)\r
+       gray:   rgb(204,204,204)\r
+       bright: white;\r
+       */\r
+\r
+.dynamic-slider-control {\r
+       position:                       relative;\r
+       background-color:       rgb(204,204,204);\r
+       -moz-user-focus:        normal;\r
+       -moz-user-select:       none;\r
+       cursor:                         default;\r
+}\r
+\r
+.horizontal {\r
+       width:                          200px;\r
+       height:                         27px;\r
+}\r
+\r
+.vertical {\r
+       width:                          29px;\r
+       height:                         200px;\r
+}\r
+\r
+.dynamic-slider-control input {\r
+       display:        none;\r
+}\r
+\r
+.dynamic-slider-control .handle {\r
+       position:                       absolute;       \r
+       font-size:                      1px;\r
+       overflow:                       hidden;\r
+       -moz-user-select:       none;\r
+       cursor:                         default;\r
+}\r
+\r
+.dynamic-slider-control.horizontal .handle {\r
+       width:                          15px;\r
+       height:                         16px;\r
+       background-image:       url("handle.horizontal.png");\r
+}\r
+\r
+.dynamic-slider-control.horizontal .handle div {}\r
+.dynamic-slider-control.horizontal .handle.hover {}\r
+\r
+.dynamic-slider-control.vertical .handle {\r
+       width:                          16px;\r
+       height:                         15px;\r
+       background-image:       url("handle.vertical.png");\r
+}\r
+\r
+.dynamic-slider-control.vertical .handle.hover {}\r
+\r
+.dynamic-slider-control .line {\r
+       position:                       absolute;\r
+       font-size:                      0.01mm;\r
+       overflow:                       hidden;\r
+       border:                         1px solid;\r
+       border-color:           rgb(102,102,102) white\r
+                                               white rgb(102,102,102);\r
+       \r
+       behavior:                       url("css/boxsizing.htc"); /* ie path bug */\r
+       box-sizing:                     content-box;\r
+       -moz-box-sizing:        content-box;\r
+}\r
+.dynamic-slider-control.vertical .line {\r
+       width:                          4px;\r
+}\r
+\r
+.dynamic-slider-control.horizontal .line {\r
+       height:                         4px;\r
+}\r
+\r
+.dynamic-slider-control .line div {\r
+       width:          2px;\r
+       height:         2px;\r
+       \r
+       border:                         1px solid;\r
+       border-color:           rgb(152,153,153) rgb(102,102,102)\r
+                                               rgb(102,102,102) rgb(152,153,153);\r
+}
\ No newline at end of file
diff --git a/slider/css/winclassic.css b/slider/css/winclassic.css
new file mode 100644 (file)
index 0000000..4b005a5
--- /dev/null
@@ -0,0 +1,99 @@
+.dynamic-slider-control {\r
+       position:                       relative;\r
+       background-color:       ThreeDFace;\r
+       -moz-user-focus:        normal;\r
+       -moz-user-select:       none;\r
+       cursor:                         default;\r
+}\r
+\r
+.horizontal {\r
+       width:                          200px;\r
+       height:                         29px;\r
+}\r
+\r
+.vertical {\r
+       width:                          29px;\r
+       height:                         200px;\r
+}\r
+\r
+.dynamic-slider-control input {\r
+       display:        none;\r
+}\r
+\r
+.dynamic-slider-control .handle {\r
+       position:                       absolute;\r
+       -moz-user-select:       none;\r
+       cursor:                         default;\r
+       background:                     ThreeDFace;\r
+       border:                         1px solid;\r
+       border-color:           ThreeDHighlight ThreeDDarkShadow\r
+                                               ThreeDDarkShadow ThreeDHighlight;\r
+}\r
+\r
+/* inner border */\r
+.dynamic-slider-control .handle div {\r
+       font-size:                      1px;\r
+       border:                         1px solid;\r
+       border-color:           ThreeDLightShadow ThreeDShadow\r
+                                               ThreeDShadow ThreeDLightShadow; \r
+\r
+       behavior:                       url("css/boxsizing.htc");       /* ie path bug */\r
+       box-sizing:                     content-box;\r
+       -moz-box-sizing:        content-box;\r
+}\r
+\r
+/*     inner sets size\r
+.dynamic-slider-control.horizontal .handle {\r
+       width:                          12px;\r
+       height:                         22px;\r
+}\r
+*/\r
+\r
+.dynamic-slider-control.horizontal .handle div {\r
+       width:                          8px;\r
+       height:                         18px;\r
+}\r
+\r
+.dynamic-slider-control.horizontal .handle.hover {}\r
+\r
+/* inner sets size\r
+.dynamic-slider-control.vertical .handle {\r
+       width:                          22px;\r
+       height:                         12px;\r
+}\r
+*/\r
+\r
+.dynamic-slider-control.vertical .handle div {\r
+       width:                          18px;\r
+       height:                         8px;\r
+}\r
+\r
+.dynamic-slider-control.vertical .handle.hover {}\r
+\r
+.dynamic-slider-control .line {\r
+       \r
+       behavior:                       url("css/boxsizing.htc"); /* ie path bug */\r
+       box-sizing:                     content-box;\r
+       -moz-box-sizing:        content-box;\r
+               \r
+       position:                       absolute;\r
+       font-size:                      0.01mm;\r
+       overflow:                       hidden;\r
+       border:                         1px solid;\r
+       border-color:           ThreeDShadow ThreeDHighlight\r
+                                               ThreeDHighlight ThreeDShadow;\r
+       background:                     ThreeDDarkShadow;\r
+}\r
+\r
+.dynamic-slider-control.vertical .line {\r
+       width:                          1px;\r
+       \r
+}\r
+\r
+.dynamic-slider-control.horizontal .line {\r
+       height:                         1px;\r
+}\r
+\r
+.dynamic-slider-control .line div {\r
+       display:        none;\r
+}
\ No newline at end of file
diff --git a/slider/js/range.js b/slider/js/range.js
new file mode 100644 (file)
index 0000000..54f9a48
--- /dev/null
@@ -0,0 +1,132 @@
+/*----------------------------------------------------------------------------\\r
+|                                Range Class                                  |\r
+|-----------------------------------------------------------------------------|\r
+|                         Created by Erik Arvidsson                           |\r
+|                  (http://webfx.eae.net/contact.html#erik)                   |\r
+|                      For WebFX (http://webfx.eae.net/)                      |\r
+|-----------------------------------------------------------------------------|\r
+| Used to  model the data  used  when working  with  sliders,  scrollbars and |\r
+| progress bars.  Based  on  the  ideas of  the javax.swing.BoundedRangeModel |\r
+| interface  defined  by  Sun  for  Java;   http://java.sun.com/products/jfc/ |\r
+| swingdoc-api-1.0.3/com/sun/java/swing/BoundedRangeModel.html                |\r
+|-----------------------------------------------------------------------------|\r
+|                Copyright (c) 2002, 2005, 2006 Erik Arvidsson                |\r
+|-----------------------------------------------------------------------------|\r
+| Licensed under the Apache License, Version 2.0 (the "License"); you may not |\r
+| use this file except in compliance with the License.  You may obtain a copy |\r
+| of the License at http://www.apache.org/licenses/LICENSE-2.0                |\r
+| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |\r
+| Unless  required  by  applicable law or  agreed  to  in  writing,  software |\r
+| distributed under the License is distributed on an  "AS IS" BASIS,  WITHOUT |\r
+| WARRANTIES OR  CONDITIONS OF ANY KIND,  either express or implied.  See the |\r
+| License  for the  specific language  governing permissions  and limitations |\r
+| under the License.                                                          |\r
+|-----------------------------------------------------------------------------|\r
+| 2002-10-14 | Original version released                                      |\r
+| 2005-10-27 | Use Math.round instead of Math.floor                           |\r
+| 2006-05-28 | Changed license to Apache Software License 2.0.                |\r
+|-----------------------------------------------------------------------------|\r
+| Created 2002-10-14 | All changes are in the log above. | Updated 2006-05-28 |\r
+\----------------------------------------------------------------------------*/\r
+\r
+\r
+function Range() {\r
+       this._value = 0;\r
+       this._minimum = 0;\r
+       this._maximum = 100;\r
+       this._extent = 0;\r
+\r
+       this._isChanging = false;\r
+}\r
+\r
+Range.prototype.setValue = function (value) {\r
+       value = Math.round(parseFloat(value));\r
+       if (isNaN(value)) return;\r
+       if (this._value != value) {\r
+               if (value + this._extent > this._maximum)\r
+                       this._value = this._maximum - this._extent;\r
+               else if (value < this._minimum)\r
+                       this._value = this._minimum;\r
+               else\r
+                       this._value = value;\r
+               if (!this._isChanging && typeof this.onchange == "function")\r
+                        this.onchange();\r
+       }\r
+};\r
+\r
+Range.prototype.getValue = function () {\r
+       return this._value;\r
+};\r
+\r
+Range.prototype.setExtent = function (extent) {\r
+       if (this._extent != extent) {\r
+               if (extent < 0)\r
+                       this._extent = 0;\r
+               else if (this._value + extent > this._maximum)\r
+                       this._extent = this._maximum - this._value;\r
+               else\r
+                       this._extent = extent;\r
+               if (!this._isChanging && typeof this.onchange == "function")\r
+                       this.onchange();\r
+       }\r
+};\r
+\r
+Range.prototype.getExtent = function () {\r
+       return this._extent;\r
+};\r
+\r
+Range.prototype.setMinimum = function (minimum) {\r
+       if (this._minimum != minimum) {\r
+               var oldIsChanging = this._isChanging;\r
+               this._isChanging = true;\r
+\r
+               this._minimum = minimum;\r
+\r
+               if (minimum > this._value)\r
+                       this.setValue(minimum);\r
+               if (minimum > this._maximum) {\r
+                       this._extent = 0;\r
+                       this.setMaximum(minimum);\r
+                       this.setValue(minimum)\r
+               }\r
+               if (minimum + this._extent > this._maximum)\r
+                       this._extent = this._maximum - this._minimum;\r
+\r
+               this._isChanging = oldIsChanging;\r
+               if (!this._isChanging && typeof this.onchange == "function")\r
+                       this.onchange();\r
+       }\r
+};\r
+\r
+Range.prototype.getMinimum = function () {\r
+       return this._minimum;\r
+};\r
+\r
+Range.prototype.setMaximum = function (maximum) {\r
+       if (this._maximum != maximum) {\r
+               var oldIsChanging = this._isChanging;\r
+               this._isChanging = true;\r
+\r
+               this._maximum = maximum;\r
+\r
+               if (maximum < this._value)\r
+                       this.setValue(maximum - this._extent);\r
+               if (maximum < this._minimum) {\r
+                       this._extent = 0;\r
+                       this.setMinimum(maximum);\r
+                       this.setValue(this._maximum);\r
+               }\r
+               if (maximum < this._minimum + this._extent)\r
+                       this._extent = this._maximum - this._minimum;\r
+               if (maximum < this._value + this._extent)\r
+                       this._extent = this._maximum - this._value;\r
+\r
+               this._isChanging = oldIsChanging;\r
+               if (!this._isChanging && typeof this.onchange == "function")\r
+                       this.onchange();\r
+       }\r
+};\r
+\r
+Range.prototype.getMaximum = function () {\r
+       return this._maximum;\r
+};\r
diff --git a/slider/js/slider.js b/slider/js/slider.js
new file mode 100644 (file)
index 0000000..865a625
--- /dev/null
@@ -0,0 +1,489 @@
+/*----------------------------------------------------------------------------\\r
+|                                Slider 1.02                                  |\r
+|-----------------------------------------------------------------------------|\r
+|                         Created by Erik Arvidsson                           |\r
+|                  (http://webfx.eae.net/contact.html#erik)                   |\r
+|                      For WebFX (http://webfx.eae.net/)                      |\r
+|-----------------------------------------------------------------------------|\r
+| A  slider  control that  degrades  to an  input control  for non  supported |\r
+| browsers.                                                                   |\r
+|-----------------------------------------------------------------------------|\r
+|                Copyright (c) 2002, 2003, 2006 Erik Arvidsson                |\r
+|-----------------------------------------------------------------------------|\r
+| Licensed under the Apache License, Version 2.0 (the "License"); you may not |\r
+| use this file except in compliance with the License.  You may obtain a copy |\r
+| of the License at http://www.apache.org/licenses/LICENSE-2.0                |\r
+| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |\r
+| Unless  required  by  applicable law or  agreed  to  in  writing,  software |\r
+| distributed under the License is distributed on an  "AS IS" BASIS,  WITHOUT |\r
+| WARRANTIES OR  CONDITIONS OF ANY KIND,  either express or implied.  See the |\r
+| License  for the  specific language  governing permissions  and limitations |\r
+| under the License.                                                          |\r
+|-----------------------------------------------------------------------------|\r
+| Dependencies: timer.js - an OO abstraction of timers                        |\r
+|               range.js - provides the data model for the slider             |\r
+|               winclassic.css or any other css file describing the look      |\r
+|-----------------------------------------------------------------------------|\r
+| 2002-10-14 | Original version released                                      |\r
+| 2003-03-27 | Added a test in the constructor for missing oElement arg       |\r
+| 2003-11-27 | Only use mousewheel when focused                               |\r
+| 2006-05-28 | Changed license to Apache Software License 2.0.                |\r
+|-----------------------------------------------------------------------------|\r
+| Created 2002-10-14 | All changes are in the log above. | Updated 2006-05-28 |\r
+\----------------------------------------------------------------------------*/\r
+\r
+Slider.isSupported = typeof document.createElement != "undefined" &&\r
+       typeof document.documentElement != "undefined" &&\r
+       typeof document.documentElement.offsetWidth == "number";\r
+\r
+\r
+function Slider(oElement, oInput, sOrientation) {\r
+       if (!oElement) return;\r
+       this._orientation = sOrientation || "horizontal";\r
+       this._range = new Range();\r
+       this._range.setExtent(0);\r
+       this._blockIncrement = 10;\r
+       this._unitIncrement = 1;\r
+       this._timer = new Timer(100);\r
+\r
+\r
+       if (Slider.isSupported && oElement) {\r
+\r
+               this.document = oElement.ownerDocument || oElement.document;\r
+\r
+               this.element = oElement;\r
+               this.element.slider = this;\r
+               this.element.unselectable = "on";\r
+\r
+               // add class name tag to class name\r
+               this.element.className = this._orientation + " " + this.classNameTag + " " + this.element.className;\r
+\r
+               // create line\r
+               this.line = this.document.createElement("DIV");\r
+               this.line.className = "line";\r
+               this.line.unselectable = "on";\r
+               this.line.appendChild(this.document.createElement("DIV"));\r
+               this.element.appendChild(this.line);\r
+\r
+               // create handle\r
+               this.handle = this.document.createElement("DIV");\r
+               this.handle.className = "handle";\r
+               this.handle.unselectable = "on";\r
+               this.handle.appendChild(this.document.createElement("DIV"));\r
+               this.handle.firstChild.appendChild(\r
+                       this.document.createTextNode(String.fromCharCode(160)));\r
+               this.element.appendChild(this.handle);\r
+       }\r
+\r
+       this.input = oInput;\r
+\r
+       // events\r
+       var oThis = this;\r
+       this._range.onchange = function () {\r
+               oThis.recalculate();\r
+               if (typeof oThis.onchange == "function")\r
+                       oThis.onchange();\r
+       };\r
+\r
+       if (Slider.isSupported && oElement) {\r
+               this.element.onfocus            = Slider.eventHandlers.onfocus;\r
+               this.element.onblur                     = Slider.eventHandlers.onblur;\r
+               this.element.onmousedown        = Slider.eventHandlers.onmousedown;\r
+               this.element.onmouseover        = Slider.eventHandlers.onmouseover;\r
+               this.element.onmouseout         = Slider.eventHandlers.onmouseout;\r
+               this.element.onkeydown          = Slider.eventHandlers.onkeydown;\r
+               this.element.onkeypress         = Slider.eventHandlers.onkeypress;\r
+               this.element.onmousewheel       = Slider.eventHandlers.onmousewheel;\r
+               this.handle.onselectstart       =\r
+               this.element.onselectstart      = function () { return false; };\r
+\r
+               this._timer.ontimer = function () {\r
+                       oThis.ontimer();\r
+               };\r
+\r
+               // extra recalculate for ie\r
+               window.setTimeout(function() {\r
+                       oThis.recalculate();\r
+               }, 1);\r
+       }\r
+       else {\r
+               this.input.onchange = function (e) {\r
+                       oThis.setValue(oThis.input.value);\r
+               };\r
+       }\r
+}\r
+\r
+Slider.eventHandlers = {\r
+\r
+       // helpers to make events a bit easier\r
+       getEvent:       function (e, el) {\r
+               if (!e) {\r
+                       if (el)\r
+                               e = el.document.parentWindow.event;\r
+                       else\r
+                               e = window.event;\r
+               }\r
+               if (!e.srcElement) {\r
+                       var el = e.target;\r
+                       while (el != null && el.nodeType != 1)\r
+                               el = el.parentNode;\r
+                       e.srcElement = el;\r
+               }\r
+               if (typeof e.offsetX == "undefined") {\r
+                       e.offsetX = e.layerX;\r
+                       e.offsetY = e.layerY;\r
+               }\r
+\r
+               return e;\r
+       },\r
+\r
+       getDocument:    function (e) {\r
+               if (e.target)\r
+                       return e.target.ownerDocument;\r
+               return e.srcElement.document;\r
+       },\r
+\r
+       getSlider:      function (e) {\r
+               var el = e.target || e.srcElement;\r
+               while (el != null && el.slider == null) {\r
+                       el = el.parentNode;\r
+               }\r
+               if (el)\r
+                       return el.slider;\r
+               return null;\r
+       },\r
+\r
+       getLine:        function (e) {\r
+               var el = e.target || e.srcElement;\r
+               while (el != null && el.className != "line")    {\r
+                       el = el.parentNode;\r
+               }\r
+               return el;\r
+       },\r
+\r
+       getHandle:      function (e) {\r
+               var el = e.target || e.srcElement;\r
+               var re = /handle/;\r
+               while (el != null && !re.test(el.className))    {\r
+                       el = el.parentNode;\r
+               }\r
+               return el;\r
+       },\r
+       // end helpers\r
+\r
+       onfocus:        function (e) {\r
+               var s = this.slider;\r
+               s._focused = true;\r
+               s.handle.className = "handle hover";\r
+       },\r
+\r
+       onblur: function (e) {\r
+               var s = this.slider\r
+               s._focused = false;\r
+               s.handle.className = "handle";\r
+       },\r
+\r
+       onmouseover:    function (e) {\r
+               e = Slider.eventHandlers.getEvent(e, this);\r
+               var s = this.slider;\r
+               if (e.srcElement == s.handle)\r
+                       s.handle.className = "handle hover";\r
+       },\r
+\r
+       onmouseout:     function (e) {\r
+               e = Slider.eventHandlers.getEvent(e, this);\r
+               var s = this.slider;\r
+               if (e.srcElement == s.handle && !s._focused)\r
+                       s.handle.className = "handle";\r
+       },\r
+\r
+       onmousedown:    function (e) {\r
+               e = Slider.eventHandlers.getEvent(e, this);\r
+               var s = this.slider;\r
+               if (s.element.focus)\r
+                       s.element.focus();\r
+\r
+               Slider._currentInstance = s;\r
+               var doc = s.document;\r
+\r
+               if (doc.addEventListener) {\r
+                       doc.addEventListener("mousemove", Slider.eventHandlers.onmousemove, true);\r
+                       doc.addEventListener("mouseup", Slider.eventHandlers.onmouseup, true);\r
+               }\r
+               else if (doc.attachEvent) {\r
+                       doc.attachEvent("onmousemove", Slider.eventHandlers.onmousemove);\r
+                       doc.attachEvent("onmouseup", Slider.eventHandlers.onmouseup);\r
+                       doc.attachEvent("onlosecapture", Slider.eventHandlers.onmouseup);\r
+                       s.element.setCapture();\r
+               }\r
+\r
+               if (Slider.eventHandlers.getHandle(e)) {        // start drag\r
+                       Slider._sliderDragData = {\r
+                               screenX:        e.screenX,\r
+                               screenY:        e.screenY,\r
+                               dx:                     e.screenX - s.handle.offsetLeft,\r
+                               dy:                     e.screenY - s.handle.offsetTop,\r
+                               startValue:     s.getValue(),\r
+                               slider:         s\r
+                       };\r
+               }\r
+               else {\r
+                       var lineEl = Slider.eventHandlers.getLine(e);\r
+                       s._mouseX = e.offsetX + (lineEl ? s.line.offsetLeft : 0);\r
+                       s._mouseY = e.offsetY + (lineEl ? s.line.offsetTop : 0);\r
+                       s._increasing = null;\r
+                       s.ontimer();\r
+               }\r
+       },\r
+\r
+       onmousemove:    function (e) {\r
+               e = Slider.eventHandlers.getEvent(e, this);\r
+\r
+               if (Slider._sliderDragData) {   // drag\r
+                       var s = Slider._sliderDragData.slider;\r
+\r
+                       var boundSize = s.getMaximum() - s.getMinimum();\r
+                       var size, pos, reset;\r
+\r
+                       if (s._orientation == "horizontal") {\r
+                               size = s.element.offsetWidth - s.handle.offsetWidth;\r
+                               pos = e.screenX - Slider._sliderDragData.dx;\r
+                               reset = Math.abs(e.screenY - Slider._sliderDragData.screenY) > 100;\r
+                       }\r
+                       else {\r
+                               size = s.element.offsetHeight - s.handle.offsetHeight;\r
+                               pos = s.element.offsetHeight - s.handle.offsetHeight -\r
+                                       (e.screenY - Slider._sliderDragData.dy);\r
+                               reset = Math.abs(e.screenX - Slider._sliderDragData.screenX) > 100;\r
+                       }\r
+                       s.setValue(reset ? Slider._sliderDragData.startValue :\r
+                                               s.getMinimum() + boundSize * pos / size);\r
+                       return false;\r
+               }\r
+               else {\r
+                       var s = Slider._currentInstance;\r
+                       if (s != null) {\r
+                               var lineEl = Slider.eventHandlers.getLine(e);\r
+                               s._mouseX = e.offsetX + (lineEl ? s.line.offsetLeft : 0);\r
+                               s._mouseY = e.offsetY + (lineEl ? s.line.offsetTop : 0);\r
+                       }\r
+               }\r
+\r
+       },\r
+\r
+       onmouseup:      function (e) {\r
+               e = Slider.eventHandlers.getEvent(e, this);\r
+               var s = Slider._currentInstance;\r
+               var doc = s.document;\r
+               if (doc.removeEventListener) {\r
+                       doc.removeEventListener("mousemove", Slider.eventHandlers.onmousemove, true);\r
+                       doc.removeEventListener("mouseup", Slider.eventHandlers.onmouseup, true);\r
+               }\r
+               else if (doc.detachEvent) {\r
+                       doc.detachEvent("onmousemove", Slider.eventHandlers.onmousemove);\r
+                       doc.detachEvent("onmouseup", Slider.eventHandlers.onmouseup);\r
+                       doc.detachEvent("onlosecapture", Slider.eventHandlers.onmouseup);\r
+                       s.element.releaseCapture();\r
+               }\r
+\r
+               if (Slider._sliderDragData) {   // end drag\r
+                       Slider._sliderDragData = null;\r
+               }\r
+               else {\r
+                       s._timer.stop();\r
+                       s._increasing = null;\r
+               }\r
+               Slider._currentInstance = null;\r
+       },\r
+\r
+       onkeydown:      function (e) {\r
+               e = Slider.eventHandlers.getEvent(e, this);\r
+               //var s = Slider.eventHandlers.getSlider(e);\r
+               var s = this.slider;\r
+               var kc = e.keyCode;\r
+               switch (kc) {\r
+                       case 33:        // page up\r
+                               s.setValue(s.getValue() + s.getBlockIncrement());\r
+                               break;\r
+                       case 34:        // page down\r
+                               s.setValue(s.getValue() - s.getBlockIncrement());\r
+                               break;\r
+                       case 35:        // end\r
+                               s.setValue(s.getOrientation() == "horizontal" ?\r
+                                       s.getMaximum() :\r
+                                       s.getMinimum());\r
+                               break;\r
+                       case 36:        // home\r
+                               s.setValue(s.getOrientation() == "horizontal" ?\r
+                                       s.getMinimum() :\r
+                                       s.getMaximum());\r
+                               break;\r
+                       case 38:        // up\r
+                       case 39:        // right\r
+                               s.setValue(s.getValue() + s.getUnitIncrement());\r
+                               break;\r
+\r
+                       case 37:        // left\r
+                       case 40:        // down\r
+                               s.setValue(s.getValue() - s.getUnitIncrement());\r
+                               break;\r
+               }\r
+\r
+               if (kc >= 33 && kc <= 40) {\r
+                       return false;\r
+               }\r
+       },\r
+\r
+       onkeypress:     function (e) {\r
+               e = Slider.eventHandlers.getEvent(e, this);\r
+               var kc = e.keyCode;\r
+               if (kc >= 33 && kc <= 40) {\r
+                       return false;\r
+               }\r
+       },\r
+\r
+       onmousewheel:   function (e) {\r
+               e = Slider.eventHandlers.getEvent(e, this);\r
+               var s = this.slider;\r
+               if (s._focused) {\r
+                       s.setValue(s.getValue() + e.wheelDelta / 120 * s.getUnitIncrement());\r
+                       // windows inverts this on horizontal sliders. That does not\r
+                       // make sense to me\r
+                       return false;\r
+               }\r
+       }\r
+};\r
+\r
+\r
+\r
+Slider.prototype.classNameTag = "dynamic-slider-control",\r
+\r
+Slider.prototype.setValue = function (v) {\r
+       this._range.setValue(v);\r
+       this.input.value = this.getValue();\r
+};\r
+\r
+Slider.prototype.getValue = function () {\r
+       return this._range.getValue();\r
+};\r
+\r
+Slider.prototype.setMinimum = function (v) {\r
+       this._range.setMinimum(v);\r
+       this.input.value = this.getValue();\r
+};\r
+\r
+Slider.prototype.getMinimum = function () {\r
+       return this._range.getMinimum();\r
+};\r
+\r
+Slider.prototype.setMaximum = function (v) {\r
+       this._range.setMaximum(v);\r
+       this.input.value = this.getValue();\r
+};\r
+\r
+Slider.prototype.getMaximum = function () {\r
+       return this._range.getMaximum();\r
+};\r
+\r
+Slider.prototype.setUnitIncrement = function (v) {\r
+       this._unitIncrement = v;\r
+};\r
+\r
+Slider.prototype.getUnitIncrement = function () {\r
+       return this._unitIncrement;\r
+};\r
+\r
+Slider.prototype.setBlockIncrement = function (v) {\r
+       this._blockIncrement = v;\r
+};\r
+\r
+Slider.prototype.getBlockIncrement = function () {\r
+       return this._blockIncrement;\r
+};\r
+\r
+Slider.prototype.getOrientation = function () {\r
+       return this._orientation;\r
+};\r
+\r
+Slider.prototype.setOrientation = function (sOrientation) {\r
+       if (sOrientation != this._orientation) {\r
+               if (Slider.isSupported && this.element) {\r
+                       // add class name tag to class name\r
+                       this.element.className = this.element.className.replace(this._orientation,\r
+                                                                       sOrientation);\r
+               }\r
+               this._orientation = sOrientation;\r
+               this.recalculate();\r
+\r
+       }\r
+};\r
+\r
+Slider.prototype.recalculate = function() {\r
+       if (!Slider.isSupported || !this.element) return;\r
+\r
+       var w = this.element.offsetWidth;\r
+       var h = this.element.offsetHeight;\r
+       var hw = this.handle.offsetWidth;\r
+       var hh = this.handle.offsetHeight;\r
+       var lw = this.line.offsetWidth;\r
+       var lh = this.line.offsetHeight;\r
+\r
+       // this assumes a border-box layout\r
+\r
+       if (this._orientation == "horizontal") {\r
+               this.handle.style.left = (w - hw) * (this.getValue() - this.getMinimum()) /\r
+                       (this.getMaximum() - this.getMinimum()) + "px";\r
+               this.handle.style.top = (h - hh) / 2 + "px";\r
+\r
+               this.line.style.top = (h - lh) / 2 + "px";\r
+               this.line.style.left = hw / 2 + "px";\r
+               //this.line.style.right = hw / 2 + "px";\r
+               this.line.style.width = Math.max(0, w - hw - 2)+ "px";\r
+               this.line.firstChild.style.width = Math.max(0, w - hw - 4)+ "px";\r
+       }\r
+       else {\r
+               this.handle.style.left = (w - hw) / 2 + "px";\r
+               this.handle.style.top = h - hh - (h - hh) * (this.getValue() - this.getMinimum()) /\r
+                       (this.getMaximum() - this.getMinimum()) + "px";\r
+\r
+               this.line.style.left = (w - lw) / 2 + "px";\r
+               this.line.style.top = hh / 2 + "px";\r
+               this.line.style.height = Math.max(0, h - hh - 2) + "px";        //hard coded border width\r
+               //this.line.style.bottom = hh / 2 + "px";\r
+               this.line.firstChild.style.height = Math.max(0, h - hh - 4) + "px";     //hard coded border width\r
+       }\r
+};\r
+\r
+Slider.prototype.ontimer = function () {\r
+       var hw = this.handle.offsetWidth;\r
+       var hh = this.handle.offsetHeight;\r
+       var hl = this.handle.offsetLeft;\r
+       var ht = this.handle.offsetTop;\r
+\r
+       if (this._orientation == "horizontal") {\r
+               if (this._mouseX > hl + hw &&\r
+                       (this._increasing == null || this._increasing)) {\r
+                       this.setValue(this.getValue() + this.getBlockIncrement());\r
+                       this._increasing = true;\r
+               }\r
+               else if (this._mouseX < hl &&\r
+                       (this._increasing == null || !this._increasing)) {\r
+                       this.setValue(this.getValue() - this.getBlockIncrement());\r
+                       this._increasing = false;\r
+               }\r
+       }\r
+       else {\r
+               if (this._mouseY > ht + hh &&\r
+                       (this._increasing == null || !this._increasing)) {\r
+                       this.setValue(this.getValue() - this.getBlockIncrement());\r
+                       this._increasing = false;\r
+               }\r
+               else if (this._mouseY < ht &&\r
+                       (this._increasing == null || this._increasing)) {\r
+                       this.setValue(this.getValue() + this.getBlockIncrement());\r
+                       this._increasing = true;\r
+               }\r
+       }\r
+\r
+       this._timer.start();\r
+};
\ No newline at end of file
diff --git a/slider/js/timer.js b/slider/js/timer.js
new file mode 100644 (file)
index 0000000..e96fe19
--- /dev/null
@@ -0,0 +1,62 @@
+/*----------------------------------------------------------------------------\\r
+|                                 Timer Class                                 |\r
+|-----------------------------------------------------------------------------|\r
+|                         Created by Erik Arvidsson                           |\r
+|                  (http://webfx.eae.net/contact.html#erik)                   |\r
+|                      For WebFX (http://webfx.eae.net/)                      |\r
+|-----------------------------------------------------------------------------|\r
+| Object Oriented Encapsulation  of setTimeout  fires ontimer when the  timer |\r
+| is triggered. Does not work in IE 5.00                                      |\r
+|-----------------------------------------------------------------------------|\r
+|                   Copyright (c) 2002, 2006 Erik Arvidsson                   |\r
+|-----------------------------------------------------------------------------|\r
+| Licensed under the Apache License, Version 2.0 (the "License"); you may not |\r
+| use this file except in compliance with the License.  You may obtain a copy |\r
+| of the License at http://www.apache.org/licenses/LICENSE-2.0                |\r
+| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |\r
+| Unless  required  by  applicable law or  agreed  to  in  writing,  software |\r
+| distributed under the License is distributed on an  "AS IS" BASIS,  WITHOUT |\r
+| WARRANTIES OR  CONDITIONS OF ANY KIND,  either express or implied.  See the |\r
+| License  for the  specific language  governing permissions  and limitations |\r
+| under the License.                                                          |\r
+|-----------------------------------------------------------------------------|\r
+| 2002-10-14 | Original version released                                      |\r
+| 2006-05-28 | Changed license to Apache Software License 2.0.                |\r
+|-----------------------------------------------------------------------------|\r
+| Created 2002-10-14 | All changes are in the log above. | Updated 2006-05-28 |\r
+\----------------------------------------------------------------------------*/\r
+\r
+function Timer(nPauseTime) {\r
+       this._pauseTime = typeof nPauseTime == "undefined" ? 1000 : nPauseTime;\r
+       this._timer = null;\r
+       this._isStarted = false;\r
+}\r
+\r
+Timer.prototype.start = function () {\r
+       if (this.isStarted())\r
+               this.stop();\r
+       var oThis = this;\r
+       this._timer = window.setTimeout(function () {\r
+               if (typeof oThis.ontimer == "function")\r
+                       oThis.ontimer();\r
+       }, this._pauseTime);\r
+       this._isStarted = false;\r
+};\r
+\r
+Timer.prototype.stop = function () {\r
+       if (this._timer != null)\r
+               window.clearTimeout(this._timer);\r
+       this._isStarted = false;\r
+};\r
+\r
+Timer.prototype.isStarted = function () {\r
+       return this._isStarted;\r
+};\r
+\r
+Timer.prototype.getPauseTime = function () {\r
+       return this._pauseTime;\r
+};\r
+\r
+Timer.prototype.setPauseTime = function (nPauseTime) {\r
+       this._pauseTime = nPauseTime;\r
+};
\ No newline at end of file
diff --git a/slider/license.txt b/slider/license.txt
new file mode 100644 (file)
index 0000000..75b5248
--- /dev/null
@@ -0,0 +1,202 @@
+\r
+                                 Apache License\r
+                           Version 2.0, January 2004\r
+                        http://www.apache.org/licenses/\r
+\r
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\r
+\r
+   1. Definitions.\r
+\r
+      "License" shall mean the terms and conditions for use, reproduction,\r
+      and distribution as defined by Sections 1 through 9 of this document.\r
+\r
+      "Licensor" shall mean the copyright owner or entity authorized by\r
+      the copyright owner that is granting the License.\r
+\r
+      "Legal Entity" shall mean the union of the acting entity and all\r
+      other entities that control, are controlled by, or are under common\r
+      control with that entity. For the purposes of this definition,\r
+      "control" means (i) the power, direct or indirect, to cause the\r
+      direction or management of such entity, whether by contract or\r
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the\r
+      outstanding shares, or (iii) beneficial ownership of such entity.\r
+\r
+      "You" (or "Your") shall mean an individual or Legal Entity\r
+      exercising permissions granted by this License.\r
+\r
+      "Source" form shall mean the preferred form for making modifications,\r
+      including but not limited to software source code, documentation\r
+      source, and configuration files.\r
+\r
+      "Object" form shall mean any form resulting from mechanical\r
+      transformation or translation of a Source form, including but\r
+      not limited to compiled object code, generated documentation,\r
+      and conversions to other media types.\r
+\r
+      "Work" shall mean the work of authorship, whether in Source or\r
+      Object form, made available under the License, as indicated by a\r
+      copyright notice that is included in or attached to the work\r
+      (an example is provided in the Appendix below).\r
+\r
+      "Derivative Works" shall mean any work, whether in Source or Object\r
+      form, that is based on (or derived from) the Work and for which the\r
+      editorial revisions, annotations, elaborations, or other modifications\r
+      represent, as a whole, an original work of authorship. For the purposes\r
+      of this License, Derivative Works shall not include works that remain\r
+      separable from, or merely link (or bind by name) to the interfaces of,\r
+      the Work and Derivative Works thereof.\r
+\r
+      "Contribution" shall mean any work of authorship, including\r
+      the original version of the Work and any modifications or additions\r
+      to that Work or Derivative Works thereof, that is intentionally\r
+      submitted to Licensor for inclusion in the Work by the copyright owner\r
+      or by an individual or Legal Entity authorized to submit on behalf of\r
+      the copyright owner. For the purposes of this definition, "submitted"\r
+      means any form of electronic, verbal, or written communication sent\r
+      to the Licensor or its representatives, including but not limited to\r
+      communication on electronic mailing lists, source code control systems,\r
+      and issue tracking systems that are managed by, or on behalf of, the\r
+      Licensor for the purpose of discussing and improving the Work, but\r
+      excluding communication that is conspicuously marked or otherwise\r
+      designated in writing by the copyright owner as "Not a Contribution."\r
+\r
+      "Contributor" shall mean Licensor and any individual or Legal Entity\r
+      on behalf of whom a Contribution has been received by Licensor and\r
+      subsequently incorporated within the Work.\r
+\r
+   2. Grant of Copyright License. Subject to the terms and conditions of\r
+      this License, each Contributor hereby grants to You a perpetual,\r
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r
+      copyright license to reproduce, prepare Derivative Works of,\r
+      publicly display, publicly perform, sublicense, and distribute the\r
+      Work and such Derivative Works in Source or Object form.\r
+\r
+   3. Grant of Patent License. Subject to the terms and conditions of\r
+      this License, each Contributor hereby grants to You a perpetual,\r
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r
+      (except as stated in this section) patent license to make, have made,\r
+      use, offer to sell, sell, import, and otherwise transfer the Work,\r
+      where such license applies only to those patent claims licensable\r
+      by such Contributor that are necessarily infringed by their\r
+      Contribution(s) alone or by combination of their Contribution(s)\r
+      with the Work to which such Contribution(s) was submitted. If You\r
+      institute patent litigation against any entity (including a\r
+      cross-claim or counterclaim in a lawsuit) alleging that the Work\r
+      or a Contribution incorporated within the Work constitutes direct\r
+      or contributory patent infringement, then any patent licenses\r
+      granted to You under this License for that Work shall terminate\r
+      as of the date such litigation is filed.\r
+\r
+   4. Redistribution. You may reproduce and distribute copies of the\r
+      Work or Derivative Works thereof in any medium, with or without\r
+      modifications, and in Source or Object form, provided that You\r
+      meet the following conditions:\r
+\r
+      (a) You must give any other recipients of the Work or\r
+          Derivative Works a copy of this License; and\r
+\r
+      (b) You must cause any modified files to carry prominent notices\r
+          stating that You changed the files; and\r
+\r
+      (c) You must retain, in the Source form of any Derivative Works\r
+          that You distribute, all copyright, patent, trademark, and\r
+          attribution notices from the Source form of the Work,\r
+          excluding those notices that do not pertain to any part of\r
+          the Derivative Works; and\r
+\r
+      (d) If the Work includes a "NOTICE" text file as part of its\r
+          distribution, then any Derivative Works that You distribute must\r
+          include a readable copy of the attribution notices contained\r
+          within such NOTICE file, excluding those notices that do not\r
+          pertain to any part of the Derivative Works, in at least one\r
+          of the following places: within a NOTICE text file distributed\r
+          as part of the Derivative Works; within the Source form or\r
+          documentation, if provided along with the Derivative Works; or,\r
+          within a display generated by the Derivative Works, if and\r
+          wherever such third-party notices normally appear. The contents\r
+          of the NOTICE file are for informational purposes only and\r
+          do not modify the License. You may add Your own attribution\r
+          notices within Derivative Works that You distribute, alongside\r
+          or as an addendum to the NOTICE text from the Work, provided\r
+          that such additional attribution notices cannot be construed\r
+          as modifying the License.\r
+\r
+      You may add Your own copyright statement to Your modifications and\r
+      may provide additional or different license terms and conditions\r
+      for use, reproduction, or distribution of Your modifications, or\r
+      for any such Derivative Works as a whole, provided Your use,\r
+      reproduction, and distribution of the Work otherwise complies with\r
+      the conditions stated in this License.\r
+\r
+   5. Submission of Contributions. Unless You explicitly state otherwise,\r
+      any Contribution intentionally submitted for inclusion in the Work\r
+      by You to the Licensor shall be under the terms and conditions of\r
+      this License, without any additional terms or conditions.\r
+      Notwithstanding the above, nothing herein shall supersede or modify\r
+      the terms of any separate license agreement you may have executed\r
+      with Licensor regarding such Contributions.\r
+\r
+   6. Trademarks. This License does not grant permission to use the trade\r
+      names, trademarks, service marks, or product names of the Licensor,\r
+      except as required for reasonable and customary use in describing the\r
+      origin of the Work and reproducing the content of the NOTICE file.\r
+\r
+   7. Disclaimer of Warranty. Unless required by applicable law or\r
+      agreed to in writing, Licensor provides the Work (and each\r
+      Contributor provides its Contributions) on an "AS IS" BASIS,\r
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\r
+      implied, including, without limitation, any warranties or conditions\r
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\r
+      PARTICULAR PURPOSE. You are solely responsible for determining the\r
+      appropriateness of using or redistributing the Work and assume any\r
+      risks associated with Your exercise of permissions under this License.\r
+\r
+   8. Limitation of Liability. In no event and under no legal theory,\r
+      whether in tort (including negligence), contract, or otherwise,\r
+      unless required by applicable law (such as deliberate and grossly\r
+      negligent acts) or agreed to in writing, shall any Contributor be\r
+      liable to You for damages, including any direct, indirect, special,\r
+      incidental, or consequential damages of any character arising as a\r
+      result of this License or out of the use or inability to use the\r
+      Work (including but not limited to damages for loss of goodwill,\r
+      work stoppage, computer failure or malfunction, or any and all\r
+      other commercial damages or losses), even if such Contributor\r
+      has been advised of the possibility of such damages.\r
+\r
+   9. Accepting Warranty or Additional Liability. While redistributing\r
+      the Work or Derivative Works thereof, You may choose to offer,\r
+      and charge a fee for, acceptance of support, warranty, indemnity,\r
+      or other liability obligations and/or rights consistent with this\r
+      License. However, in accepting such obligations, You may act only\r
+      on Your own behalf and on Your sole responsibility, not on behalf\r
+      of any other Contributor, and only if You agree to indemnify,\r
+      defend, and hold each Contributor harmless for any liability\r
+      incurred by, or claims asserted against, such Contributor by reason\r
+      of your accepting any such warranty or additional liability.\r
+\r
+   END OF TERMS AND CONDITIONS\r
+\r
+   APPENDIX: How to apply the Apache License to your work.\r
+\r
+      To apply the Apache License to your work, attach the following\r
+      boilerplate notice, with the fields enclosed by brackets "[]"\r
+      replaced with your own identifying information. (Don't include\r
+      the brackets!)  The text should be enclosed in the appropriate\r
+      comment syntax for the file format. We also recommend that a\r
+      file or class name and description of purpose be included on the\r
+      same "printed page" as the copyright notice for easier\r
+      identification within third-party archives.\r
+\r
+   Copyright [yyyy] [name of copyright owner]\r
+\r
+   Licensed under the Apache License, Version 2.0 (the "License");\r
+   you may not use this file except in compliance with the License.\r
+   You may obtain a copy of the License at\r
+\r
+       http://www.apache.org/licenses/LICENSE-2.0\r
+\r
+   Unless required by applicable law or agreed to in writing, software\r
+   distributed under the License is distributed on an "AS IS" BASIS,\r
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+   See the License for the specific language governing permissions and\r
+   limitations under the License.\r
index 2074e2106da66439abb2a05ffcd1d81966ae210e..4fd3b5cdc8e5c8d1c360cbd69583eb7b824a455b 100644 (file)
@@ -8,6 +8,17 @@ body {
    padding:                10px;\r
 }\r
 \r
    padding:                10px;\r
 }\r
 \r
+body.slideshow {\r
+   background-color:       #ffffff;\r
+   color:                  rgb(26,151,15);\r
+   font-family:            sans-serif;\r
+   font-style:             normal;\r
+   border:                 none;\r
+   padding:                10px;\r
+   text-align:             center;\r
+}\r
+\r
+\r
 table, tr, td {\r
    border-collapse:        collapse;\r
    padding:                0px;\r
 table, tr, td {\r
    border-collapse:        collapse;\r
    padding:                0px;\r
index da740ac73a78a22b0fd526848e70c57ea8dfb49c..c5e8ba5e17bc43029cc5e05e3bbfff5b3beef99e 100644 (file)
@@ -1,5 +1,9 @@
 {include file="header.tpl"}
 {include file="header.tpl"}
- <body onload="startSlideShow();" style="text-align: center;">
+ <script type="text/javascript" src="slider/js/range.js"></script>
+ <script type="text/javascript" src="slider/js/timer.js"></script>
+ <script type="text/javascript" src="slider/js/slider.js"></script>
+ <link type="text/css" rel="StyleSheet" href="slider/css/bluecurve/bluecurve.css" />
+ <body onload="startSlideShow();" class="slideshow">
   <div id="slide_navigation">
    <a href="javascript:prevSlide();" onclick="click(this);" title="slive to previous photo"><img id="rew_ico" src="resources/32_rew.png" /></a>
    <a href="javascript:pauseSlideShow();" onclick="click(this);"><img id="pause_ico" src="resources/32_pause.png" /></a>
   <div id="slide_navigation">
    <a href="javascript:prevSlide();" onclick="click(this);" title="slive to previous photo"><img id="rew_ico" src="resources/32_rew.png" /></a>
    <a href="javascript:pauseSlideShow();" onclick="click(this);"><img id="pause_ico" src="resources/32_pause.png" /></a>
@@ -8,8 +12,17 @@
   </div>
   <div style="margin: 0 auto; padding: 10px;">
    <a href="javascript:window.close();" title="click to close slideshow">
   </div>
   <div style="margin: 0 auto; padding: 10px;">
    <a href="javascript:window.close();" title="click to close slideshow">
-    <img id="slide_img" alt="slideshow_img" style="padding: 10px; background-color: #ffffff;" />
+    <img id="slide_img" alt="slideshow_img" style="padding: 15px; background-color: #000000;" />
    </a>
   </div>
    </a>
   </div>
-</body>
+  <form>
+   <div id="slider-1" tabIndex="1" style="margin: 0 auto;" onclick="if(this.blur)this.blur();">
+   <input id="slider-input-1" name="slider-input-1" onclick="if(this.blur)this.blur();" />
+   </div>
+  </form>
+  <div id="current_slide_time"></div>
+  <script type="text/javascript">
+   initSlider();
+  </script>
+ </body>
 {include file="footer.tpl"}
 {include file="footer.tpl"}