scripts/position.js
changeset 10 d3059e20b0fa
child 11 0faea3a6c881
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/position.js	Mon Mar 24 02:53:42 2008 -0400
@@ -0,0 +1,76 @@
+var pos_supported = false;
+var pos_in_drag = false;
+
+var posslide_init = function()
+{
+  // make sure the theme supports the playhead
+  var base = document.getElementById('playhead');
+  var inner = document.getElementById('playhead-filler');
+  var slider = document.getElementById('playhead-button');
+  if ( !slider || !inner || !base )
+    return false;
+  
+  pos_supported = true;
+  
+  var minX = $(base).Left() - 3;
+  var minY = $(base).Top() + 3;
+  var maxY = minY;
+  var maxX = minX + $(base).Width() - 6;
+  Drag.init(slider, inner, minX, maxX, minY, maxY);
+  
+  inner.onDrag = posslide_handle_drag;
+  inner.onDragEnd = posslide_handle_dragend;
+  inner.onDragStart = function(x, y) { pos_in_drag = true; };
+  base.onclick = posslide_handle_click;
+  
+  posslide_set_position(0);
+  slider.style.top = minY + 'px';
+}
+
+var posslide_handle_drag = function(x, y, do_inner)
+{
+  var inner = document.getElementById('playhead-filler');
+  var slider = document.getElementById('playhead-button');
+  var size = x - $(inner).Left() + 8;
+  if ( do_inner )
+    inner.style.width = size + 'px';
+  if ( ( pos_in_drag && !do_inner ) || ( !pos_in_drag && do_inner ) )
+    slider.style.left = x + 'px';
+}
+
+var posslide_handle_dragend = function(x, y)
+{
+  pos_in_drag = false;
+  var inner = document.getElementById('playhead-filler');
+  var base = document.getElementById('playhead');
+  var multiplier = $(base).Width();
+  var pos = x - $(inner).Left() + 8;
+  pos = 100 * ( pos / multiplier );
+  set_playback_position(pos);
+}
+
+var posslide_handle_click = function(e)
+{
+  e = Drag.fixE(e);
+  var base = document.getElementById('playhead');
+  var val = e.clientX - $(base).Left();
+  val = 100 * ( val / $(base).Width() );
+  posslide_set_position(val);
+  set_playback_position(val);
+}
+
+function posslide_set_position(pos)
+{
+  if ( !pos_supported )
+    return false;
+  
+  // pos needs to be 1-100
+  var base = document.getElementById('playhead');
+  var multiplier = $(base).Width();
+  pos = ( pos / 100 ) * multiplier;
+  var left = pos + $(base).Left();
+  posslide_handle_drag(left, 0, true);
+}
+
+addOnloadHook(posslide_init);
+