// current position of mouse in client coordinates
window.g_iPointerX = 0;
window.g_iPointerY = 0;

// provide X, Y position of mouse 
document.observe("mousemove", function(event) 
{
	window.g_iPointerX = event.pointerX();
	window.g_iPointerY = event.pointerY();
});

// cleanup routines is called in every seconds, it will...
// check pointer coordinates, and kill menu if it is out of its area
window.g_pTimer = new PeriodicalExecuter(function(pe) 
{
	$$('.dropdown li.down').each(function(oLi) 
	{
		var oDiv = oLi.down('div');
		if (oDiv.visible())
		{
			var posLi = oLi.cumulativeOffset();
			var strScope = 'tm' + posLi.left.toString() + '-' + posLi.top.toString();
			var queue = Effect.Queues.get(strScope);
			if (queue) qsize = queue.size();
			if (qsize==0) 
			{
				var dimLi = oLi.getDimensions();
				var posDiv = oDiv.cumulativeOffset();
				var dimDiv = oDiv.getDimensions();
				
				// is pointer within menu area ?
				if ( !( ((window.g_iPointerX >= posLi.left) && (window.g_iPointerY >= posLi.top)
					  && (window.g_iPointerX <= (posLi.left+dimLi.width)) && (window.g_iPointerY <= (posLi.top+dimLi.height))) 
					  || ((window.g_iPointerX >= posDiv.left) && (window.g_iPointerY >= posDiv.top)
					  && (window.g_iPointerX <= (posDiv.left+dimDiv.width)) && (window.g_iPointerY <= (posDiv.top+dimDiv.height))) ) )
				{
					oDiv.fade( { queue: { position: 'front', limit: 1, scope: strScope } } );
				}
			}
		}
		
	});
}, 1);

// 
document.observe("dom:loaded", function() 
{
 
  // highlight active menu item
  var oList = $$('#navmenu .menu li')
  var sLoc = location.toString().toLowerCase();
  var iSel = 0;	//-1
  var sSel = "";
  for (var i = 0; i < oList.length; i++)
  {
	var sRef = oList[i].down().href.toLowerCase();
	if (sRef == sLoc.substr(0, sRef.length)) {
		if (iSel >= 0) {
			if (sRef.length > sSel.length) {
				iSel = i;
				sSel = sRef;
			}
		}
		else {
			iSel = i;
			sSel = sRef;
		}
	}
  }
  if (iSel >= 0) {
	oList[iSel].addClassName('selected');
  }
  
  // reformat tab classes in order scriptaculous effect library to work 
  $$('.tabs div.page').each(function(o) {
	if (o.hasClassName('active')) {
		o.down('div').show();
		o.addClassName('selected');
		o.removeClassName('active');
	}
	else {
		o.down('div').hide();
	}
  }); 
  
  // click on tab caption will hide previously selected tab, then fades in the new tab
  $$('.tabs h3').each(function(o) {
		o.observe('click', function(event)
		{
			var tabpage = Event.element(event).up('div');
			if (tabpage)
			{
				$$('.tabs div.selected').each(function(s) {
					s.down('div').hide();
					s.removeClassName('selected');
				});
				tabpage.addClassName('selected');
				if (tabpage.down('div').appear)
					tabpage.down('div').appear();
				else
					tabpage.down('div').show();
			}
		});
  }); 
  
  
  // dropdown 
  $$('.dropdown div').invoke('hide');
  $$('.dropdown li.down').invoke('observe', 'click', function (event) {
	var oLi = Event.findElement(event,'li');
	oLi.addClassName('selected');
	var posLi = oLi.cumulativeOffset();
	var strScope = 'tm' + posLi.left.toString() + '-' + posLi.top.toString();
	var oDiv = oLi.down('div');
	oDiv.appear( { queue: { position: 'front', limit: 1, scope: strScope } } );
	Event.stop(event);
  });
  
  
  // replace images with swf eqvivalents
  $$('img[src*=".swf."]').each(function(s) {
			swfobject.embedSWF(s.src.substr(0,s.src.length-4), 
				s.up().id, s.width, s.height, "8.0.0", "flash/expressInstall.swf", {}, { menu: "false", loop: "false" });
		}
  );  

  // input updown mousemove event 
  $$('input.updown').invoke('observe', 'mousemove', function (event) {
	  var elem = Event.element(event);
	  if (elem) {
		  var pos = elem.viewportOffset();
		  var right = pos.left + elem.getWidth(); 
		  var bin = (event.pointerX() <= right) && (event.pointerX() >= right-16) 
		  	&& (event.pointerY() >= pos.top) && (event.pointerY() <= pos.top+19);
		  elem.style.cursor = (bin ? 'pointer' : '');
	  }
  });
  
  $$('input.updown').invoke('observe', 'mousedown', function (event) {
	  var elem = Event.element(event);
	  if (elem) {
		  try {
			  elem.readonly=true;
			  elem.unselectable=true;
		  } catch(e) {}
		  var pos = elem.viewportOffset();
		  var right = pos.left + elem.getWidth(); 
		  var bin = (event.pointerX() <= right) && (event.pointerX() >= right-16) 
		  	&& (event.pointerY() >= pos.top) && (event.pointerY() <= pos.top+19);
		  elem.style.cursor = (bin ? 'pointer' : '');
		  if (bin) {
			  var incr, str, patt, matches, num, minv, maxv;
			  maxv = 99999; minv = -99999;
			  incr = ((event.pointerY() >= pos.top) && (event.pointerY() <= pos.top+9) ? 1 : -1);
			  str = elem.title;
			  patt = /([0123456789.]+)([^0123456789.]*)([0123456789.]+)/; 
			  if (matches = str.match(patt)) {
				  if (Number.NaN != (num = new Number(matches[1])))
				  	minv = num;
				  if (Number.NaN != (num = new Number(matches[3])))
					  	maxv = num;
				  if (maxv < minv) {
					  num = maxv;
					  maxv = minv;
					  minv = num;
				  }
			  }
			  str = elem.getValue(); 
			  patt = /([0123456789.]+)([^0123456789.]*)/;
			  if (matches = str.match(patt)) {
				  num = new Number(matches[1]);
				  num += incr;
				  if (num > maxv) num = maxv;
				  if (num < minv) num = minv;
				  if (num) matches[1] = num.toString(); 
				  else matches[1] = '0';
				  elem.value = matches[1] + matches[2];
			  } 
			  else {
				  elem.value = '0';
			  }
		  }
	  }
  });
  $$('input.updown').invoke('observe', 'keydown', function (event) {
	  Event.stop(event);
	  return false;
  });
  $$('input.updown').invoke('observe', 'keypress', function (event) {
	  Event.stop(event);
	  return false;
  });
  
});

