// http://www.pixeldevelopment.com  Peter Jones
// routines used on the show gallery page



/**************************************************
 * dom-drag.js
 * 09.25.2001
 * www.youngpup.net
 **************************************************
 * 10.28.2001 - fixed minor bug where events
 * sometimes fired off the handle, not the root.
 **************************************************/

var Drag = {

	obj : null,

	init : function(o, oRoot, minX, maxX, minY, maxY, bSwapHorzRef, bSwapVertRef, fXMapper, fYMapper)
	{
		o.onmousedown	= Drag.start;

		o.hmode			= bSwapHorzRef ? false : true ;
		o.vmode			= bSwapVertRef ? false : true ;

		o.root = oRoot && oRoot != null ? oRoot : o ;

		if (o.hmode  && isNaN(parseInt(o.root.style.left  ))) o.root.style.left   = "0px";
		if (o.vmode  && isNaN(parseInt(o.root.style.top   ))) o.root.style.top    = "0px";
		if (!o.hmode && isNaN(parseInt(o.root.style.right ))) o.root.style.right  = "0px";
		if (!o.vmode && isNaN(parseInt(o.root.style.bottom))) o.root.style.bottom = "0px";

		o.minX	= typeof minX != 'undefined' ? minX : null;
		o.minY	= typeof minY != 'undefined' ? minY : null;
		o.maxX	= typeof maxX != 'undefined' ? maxX : null;
		o.maxY	= typeof maxY != 'undefined' ? maxY : null;

		o.xMapper = fXMapper ? fXMapper : null;
		o.yMapper = fYMapper ? fYMapper : null;

		o.root.onDragStart	= new Function();
		o.root.onDragEnd		= new Function();
		o.root.onDrag		= new Function();

		elem = o; // pmj
	},

	reset : function(o) // pmj
	{
		o.style.left = 0 + "px";
		o.style.top  = 0 + "px";
		return false;
	},

	start : function(e)
	{
		var o = Drag.obj = this;
		e = Drag.fixE(e);
		var y = parseInt(o.vmode ? o.root.style.top  : o.root.style.bottom);
		var x = parseInt(o.hmode ? o.root.style.left : o.root.style.right );
		o.root.onDragStart(x, y);

		o.lastMouseX	= e.clientX;
		o.lastMouseY	= e.clientY;

		if (o.hmode) {
			if (o.minX != null)	o.minMouseX	= e.clientX - x + o.minX;
			if (o.maxX != null)	o.maxMouseX	= o.minMouseX + o.maxX - o.minX;
		} else {
			if (o.minX != null) o.maxMouseX = -o.minX + e.clientX + x;
			if (o.maxX != null) o.minMouseX = -o.maxX + e.clientX + x;
		}

		if (o.vmode) {
			if (o.minY != null)	o.minMouseY	= e.clientY - y + o.minY;
			if (o.maxY != null)	o.maxMouseY	= o.minMouseY + o.maxY - o.minY;
		} else {
			if (o.minY != null) o.maxMouseY = -o.minY + e.clientY + y;
			if (o.maxY != null) o.minMouseY = -o.maxY + e.clientY + y;
		}

		document.onmousemove	= Drag.drag;
		document.onmouseup	= Drag.end;

		return false;
	},

	drag : function(e)
	{
		e = Drag.fixE(e);
		var o = Drag.obj;

		var ey	= e.clientY;
		var ex	= e.clientX;
		var y = parseInt(o.vmode ? o.root.style.top  : o.root.style.bottom);
		var x = parseInt(o.hmode ? o.root.style.left : o.root.style.right );
		var nx, ny;

		if (o.minX != null) ex = o.hmode ? Math.max(ex, o.minMouseX) : Math.min(ex, o.maxMouseX);
		if (o.maxX != null) ex = o.hmode ? Math.min(ex, o.maxMouseX) : Math.max(ex, o.minMouseX);
		if (o.minY != null) ey = o.vmode ? Math.max(ey, o.minMouseY) : Math.min(ey, o.maxMouseY);
		if (o.maxY != null) ey = o.vmode ? Math.min(ey, o.maxMouseY) : Math.max(ey, o.minMouseY);

		nx = x + ((ex - o.lastMouseX) * (o.hmode ? 1 : -1));
		ny = y + ((ey - o.lastMouseY) * (o.vmode ? 1 : -1));

		if (o.xMapper)		nx = o.xMapper(y)
		else if (o.yMapper)	ny = o.yMapper(x)

		Drag.obj.root.style[o.hmode ? "left" : "right"] = nx + "px";
		Drag.obj.root.style[o.vmode ? "top" : "bottom"] = ny + "px";
		Drag.obj.lastMouseX	= ex;
		Drag.obj.lastMouseY	= ey;

		Drag.obj.root.onDrag(nx, ny);
		return false;
	},

	end : function()
	{
		document.onmousemove = null;
		document.onmouseup   = null;
		Drag.obj.root.onDragEnd(	parseInt(Drag.obj.root.style[Drag.obj.hmode ? "left" : "right"]), 
									parseInt(Drag.obj.root.style[Drag.obj.vmode ? "top" : "bottom"]));
		Drag.obj = null;
	},

	fixE : function(e)
	{
		if (typeof e == 'undefined') e = window.event;
		if (typeof e.layerX == 'undefined') e.layerX = e.offsetX;
		if (typeof e.layerY == 'undefined') e.layerY = e.offsetY;
		return e;
	}
};


// Script and variables to indicate the current browser
   
   var nn4 = false;   // Netscape Navigator or Communicator
   var ie4 = false;
   var ie5 = false;
   var ie6 = false;
   var moz = false;   // Mozilla, NS 6+, Konqueror, etc
   var dom1 = false;   // fully supports DOM1
   var dom2 = false;   // fully supports (important bits of) DOM2
   var old = false;   // very old browser
   
   function browser_detect()
   {
       // do it the official W3C way
   
       if ( window.document.implementation != null)
       {
            dom1 = window.document.implementation.hasFeature
               ("HTML","1.0");
            dom2 = window.document.implementation.hasFeature
              ("HTML","2.0") &&
               window.document.implementation.hasFeature
              ("Events","2.0") &&
               window.document.implementation.hasFeature
              ("Core","2.0") &&
            window.document.implementation.hasFeature
              ("CSS2","2.0");
       }
   
       // Mozilla based browsers contain the Gecko rendering engine
   
       moz = (window.navigator != null )
         ? ( window.navigator.userAgent.indexOf("ecko") != -1 )
         : false;
   
       nn4 = (window.document.layers != null && !moz);
   
       // IE has incremental support for the Document Object Model
   
       ie6 = (window.document.all && dom1);
       ie5 = (window.document.all && 
          window.document.getElementsByTagName && !ie6);
       ie4 = (window.document.all && !ie6 && !ie5);
      
       // something horrible and old - sorry Opera.
   
       old = (!ie4 && !ie5 && !ie6 && !dom1 && !nn4 && !moz);
   
   }
   
   browser_detect();



function show_element(element, show)
  {
	hiddenvisible = "hidden";
	hideshow = "hide";
	display = "none";
	if (show)
	{
		hiddenvisible = "visible";
		hideshow = "show";
		display = "inline";
	}

      if (moz || dom2)
      {
         document.getElementById(element).style.visibility = hiddenvisible;
         document.getElementById(element).style.display = display;
      }
   
      if ( ie4 || ie5 || ie6 )
      {
         document.all(element).style.visibility = hiddenvisible;
         document.all(element).style.display = display;
      }
   
      if ( nn4 )
      {
         window.document.layers[element].visibility = hideshow
      }
  }

