window.dragObj = null;

SliderImagesPath = "images/slider";
SliderCursorImage = "slider-cursor-3.gif";
SliderBlinkedCursorImage = "slider-cursor-3-blink.gif";
SliderCursorWidth = 12;

SliderPositionWidth = 0;
SliderPositionWidthMax = 0;

PageSlidersPool = new Array();
CurrentSliderIndex = 0;
CurrentSliderName = "";

SlidersDebugMode = false;
//SlidersDebugMode = true;



function resetSlidersControls()
{
  CurrentSliderIndex = 0;
  CurrentSliderName = "";
  PageSlidersPool.length = 0;
}


function htmlSliderCode(SliderName,SliderPositions,CurrentPosition,PositionWidth)
{

  if (CurrentPosition<1) CurrentPosition=1;
  if (CurrentPosition>SliderPositions) CurrentPosition=SliderPositions;

  var SliderWidth=PositionWidth*(SliderPositions-1)+SliderCursorWidth;
  var CursorPositionOffset=PositionWidth*(CurrentPosition-1);

  SliderPositionWidth=PositionWidth;
  SliderPositionWidthMax=SliderWidth+10;

  PageSlidersPool.push(SliderName);
  if (CurrentSliderName=="") CurrentSliderName=SliderName;

  var html_scale_table="";
  html_scale_table+='<table border="0" cellpadding="0" cellspacing="0" width="'+SliderWidth+'" onMouseDown="onSliderDown(event,\''+SliderName+'\');" onMouseUp="onSliderUp(event,\''+SliderName+'\'); return false;">'+"\n";
  html_scale_table+='<tr><td align="left" valign="top" width="'+PositionWidth+'">'+"\n";
  html_scale_table+='<img src="'+ServiceRootPath+"/"+SliderImagesPath+'/grad-end-2.gif" border="0" width="6" height="5"></td>'+"\n";
  for (var i=1;i<SliderPositions-1;i++) {
    html_scale_table+='<td align="left" valign="top" width="'+PositionWidth+'">'+"\n";
    html_scale_table+='<img src="'+ServiceRootPath+"/"+SliderImagesPath+'/grad-mid-2.gif" border="0" width="6" height="5"></td>'+"\n";
  }
  html_scale_table+='<td align="left" valign="top" width="'+SliderCursorWidth+'">'+"\n";
  html_scale_table+='<img src="'+ServiceRootPath+"/"+SliderImagesPath+'/grad-end-2.gif" border="0" width="6" height="5"></td>'+"\n";
  html_scale_table+='</tr>'+"\n"+'</table>'+"\n";

  var isCurrentSlider=(CurrentSliderName==SliderName);
  var ActualCursorImage = isCurrentSlider? SliderBlinkedCursorImage:SliderCursorImage;

  var html_slider_code="";
  html_slider_code+='<table id="Slider'+SliderName+'" border="0" cellpadding="0" cellspacing="0" onSelectStart="return false;">'+"\n";
  html_slider_code+='<tr>'+"\n";
  html_slider_code+='<td rowspan="2" align="left" valign="top" onMouseDown="onSliderDown(event,\''+SliderName+'\');" onMouseUp="onSliderUp(event,\''+SliderName+'\');">'+"\n";
  html_slider_code+='<img src="'+ServiceRootPath+"/"+SliderImagesPath+'/back-left-2.gif" border="0"></td>'+"\n";
  html_slider_code+='<td width="'+SliderWidth+'" background="'+ServiceRootPath+"/"+SliderImagesPath+'/back-midlle-2.gif" onMouseDown="onSliderDown(event,\''+SliderName+'\');" onMouseUp="onSliderUp(event,\''+SliderName+'\');" onMouseMove="onMouseMove(event,\''+SliderName+'\');">'+"\n";
  html_slider_code+='<img id="Cursor'+SliderName+'" src="'+ServiceRootPath+"/"+SliderImagesPath+"/"+ActualCursorImage+'" border="0" style="margin-left:'+CursorPositionOffset+'px;" onMouseDown="onMouseDown(event,\''+SliderName+'\'); return false;" onMouseUp="onMouseUp(event);" onDragStart="return false;" onSelectStart="return false;"></td>'+"\n";
  html_slider_code+='<td rowspan="2" align="left" valign="top" onMouseDown="onSliderDown(event,\''+SliderName+'\');" onMouseUp="onSliderUp(event,\''+SliderName+'\');">'+"\n";
  html_slider_code+='<img src="'+ServiceRootPath+"/"+SliderImagesPath+'/back-right-2.gif" border="0"></td>'+"\n";
  html_slider_code+='</tr>'+"\n"+'<tr>'+"\n";
  html_slider_code+='<td>'+"\n"+html_scale_table+"\n"+'</td>'+"\n";
  html_slider_code+='</tr>'+"\n"+'</table>'+"\n";

  var html = html_slider_code;

  return html;
}



function getSliderCursor(sname)
{
  if (SlidersDebugMode) showDebugString("getSliderCursor("+sname+")");
  var cursor=document.getElementById("Cursor"+sname);
  return cursor;
}


function getSliderTable(sname)
{
  if (SlidersDebugMode) showDebugString("getSliderTable("+sname+")");
  var slider=document.getElementById("Slider"+sname);
  return slider;
}


function getOffsetLeft(object)
{
  if (SlidersDebugMode) showDebugString("getOffsetLeft("+object+")");
   var offset=0;
   do {
     offset+=object.offsetLeft;
   } while ((typeof(object=object.offsetParent)!="undefined") && (object!=null));
   return offset;
}


function setCursorSelected(cursor,selected)
{
  if (SlidersDebugMode) showDebugString("setCursorSelected("+cursor+","+selected+")");
  cursor.style.background = selected? "white":"";
  cursor.style.cursor = selected? "hand":"default";
}


function getSliderPosition(sname)
{
  if (SlidersDebugMode) showDebugString("getSliderPosition("+sname+")");
  var cursor=getSliderCursor(sname);
  if (!cursor) return false;
  var position=cursor.offsetLeft;
  return position;
}


function setSliderPosition(sname,position)
{
  if (SlidersDebugMode) showDebugString("setSliderPosition("+sname+","+position+")");
  if ((position>=0) && (position<=SliderPositionWidthMax)) {
    var cursor=getSliderCursor(sname);
    if (!cursor) return false;
    cursor.style.marginLeft=position;
    return true;
  } else {
    return false;
  }
}


function getSliderValue(sname)
{
  if (SlidersDebugMode) showDebugString("getSliderValue("+sname+")");
  var position=getSliderPosition(sname);
  var value=Math.round(position/SliderPositionWidth+1);
  return value;
}

function setSliderValue(sname,value)
{
  if (SlidersDebugMode) showDebugString("setSliderValue("+sname+","+value+")");
  var position=SliderPositionWidth*(value-1);
  return setSliderPosition(sname,position);
}

function onMouseDown(event,sname)
{
  if (SlidersDebugMode) showDebugString("onMouseDown("+sname+")");
  var cursor=getSliderCursor(sname);
  window.dragObj=cursor;
  var eventx = UseAjaxFramework? Event.pointerX(event) : event.x;
  window.dx = eventx-cursor.offsetLeft;
  setCursorSelected(cursor,true);
  setCurrentSliderName(sname);
}

function onMouseUp()
{
  if (SlidersDebugMode) showDebugString("onMouseUp()");
  if (window.dragObj) setCursorSelected(window.dragObj,false);
  window.dragObj=null;
}

function onMouseMove(event,sname)
{
  if (SlidersDebugMode) showDebugString("onMouseMove("+sname+")");
  if (window.dragObj) {
    var eventx = UseAjaxFramework? Event.pointerX(event) : event.x;
    var position = eventx-window.dx;
    position=Math.round(position/SliderPositionWidth)*SliderPositionWidth;
    setSliderPosition(sname,position);
  }
}

function onSliderDown(event,sname)
{
  if (SlidersDebugMode) showDebugString("onSliderDown("+sname+")");
  var slider = getSliderTable(sname);
  var cursor = getSliderCursor(sname);
  var eventx = UseAjaxFramework? Event.pointerX(event) : event.x;
  var position = eventx-getOffsetLeft(slider)-cursor.width/2-10;
  position=Math.round(position/SliderPositionWidth)*SliderPositionWidth;
  setSliderPosition(sname,position);
  setCursorSelected(cursor,true);
  setCurrentSliderName(sname);
}

function onSliderUp(event,sname)
{
  if (SlidersDebugMode) showDebugString("onSliderUp("+sname+")");
  var cursor=getSliderCursor(sname);
  setCursorSelected(cursor,false);
  window.dragObj=null;
  if (UseAjaxFramework) Event.stop(event);
}

function onSliderOut(event,sname)
{
  if (SlidersDebugMode) showDebugString("onSliderOut");
  var cursor=getSliderCursor(sname);
  setCursorSelected(cursor,false);
  window.dragObj=null;
}

function onWindowUp(event)
{
  var cursor = window.dragObj;
  if (cursor) {
    setCursorSelected(cursor,false);
  }
  window.dragObj=null;
}


function getSlidersCount()
{
  var scount=PageSlidersPool.length;
  return scount;
}


function setBlinkedCursor(sname,blinked)
{
  var cursor = getSliderCursor(sname);
  var filename = blinked? SliderBlinkedCursorImage:SliderCursorImage;
  source = ServiceRootPath+"/"+SliderImagesPath+"/"+filename;
  cursor.src = source;
}



function setCurrentSliderIndex(sindex)
{
  if (SlidersDebugMode) showDebugString("setCurrentSliderIndex("+sindex+")");
  var scount=getSlidersCount();
  if ((sindex<0) || (sindex>scount-1)) return false;
  if (CurrentSliderName!="") setBlinkedCursor(CurrentSliderName,false);
  CurrentSliderIndex=sindex;
  CurrentSliderName=PageSlidersPool[sindex];
  setBlinkedCursor(CurrentSliderName,true);
  return true;
}


function setCurrentSliderName(sname)
{
  if (SlidersDebugMode) showDebugString("setCurrentSliderName("+sname+")");
  var sindex=-1;
  var scount=getSlidersCount();
  for (s=0;s<=scount-1;s++) {
    if (PageSlidersPool[s]==sname) {
      sindex=s;
      break;
    }
  }
  if (sindex<0) return false;
  return setCurrentSliderIndex(sindex);
}


function selectNextSlider()
{
  if (SlidersDebugMode) showDebugString("selectNextSlider()");
  var scount=getSlidersCount();
  if (CurrentSliderIndex<scount-1) CurrentSliderIndex++;
  setCurrentSliderIndex(CurrentSliderIndex);
}


function selectPrevSlider()
{
  if (SlidersDebugMode) showDebugString("selectPrevSlider()");
  if (CurrentSliderIndex>0) CurrentSliderIndex--;
  setCurrentSliderIndex(CurrentSliderIndex);
}


function procSlidersHotkeyHandler(event)
{ 
  var key = event.keyCode;
  var sname = CurrentSliderName;
if (!sname) return false;
  if (SlidersDebugMode) showDebugString("Key pressed: "+key);
  switch(key) {
// Basic numeric keys
    case 49: case 50: case 51: case 52: case 53: 
    case 54: case 55: case 56: case 57: 
      var value = (key-48);
      setSliderValue(sname,value);
      break;
// Numpad numeric keys
    case 96: case 97: case 98: case 99: case 100: 
    case 101: case 102: case 103: case 104: 
      var value = (key-95);
      setSliderValue(sname,value);
      break;
// Arrow Left
    case 37: 
      var value = getSliderValue(sname)-1;
      setSliderValue(sname,value);
      break;
// Arrow Right
    case 39: 
      var value = getSliderValue(sname)+1;
      setSliderValue(sname,value);
      break;
// Arrow Up
    case 38: 
      selectPrevSlider();
      if (UseAjaxFramework) {
        Event.stop(event);
      } else {
        return false;
      }
      break;
// Arrow Down
    case 40: 
      selectNextSlider();
      if (UseAjaxFramework) {
        Event.stop(event);
      } else {
        return false;
      }
      break;
    case 13: case 32: 
//      goNext(); 
      break;
    case 112: 
//      setTimeout("goInstruct();",100); 
      break;
  }
  if (!UseAjaxFramework) {
    if (procSlidersHotkeyHandlerPrev!=null) procSlidersHotkeyHandlerPrev();
  }
}


if (!UseAjaxFramework) {
  procSlidersHotkeyHandlerPrev = document.onkeydown;
  document.onkeydown = procSlidersHotkeyHandler;
} else {
  window.document.observe("keydown",procSlidersHotkeyHandler);
  window.document.observe("mouseup",onWindowUp);
}

