
window.onerror=ErrorHandler;

////////////////////////////// Colour Functions /////////////////////////////////////
//Convert a hex value to its decimal value - the inputed hex must be in the
// format of a hex triplet - the kind we use for HTML colours. The function
// will return an array with three values.
function hex2num(hex) {
 if(hex.charAt(0) == "#") { 
  hex = hex.slice(1);
 }
 hex = hex.toUpperCase();
 var hex_alphabets = "0123456789ABCDEF";
 var value = new Array(3);
 var k = 0;
 var int1,int2;
 for(var i=0;i<6;i+=2) {
  int1 = hex_alphabets.indexOf(hex.charAt(i));
  int2 = hex_alphabets.indexOf(hex.charAt(i+1));
  value[k] = (int1 * 16) + int2;
  k++;
 }
 return(value);
}
//Give a array with three values as the argument and the function will return
// the corresponding hex triplet.
function num2hex(triplet) {
 var hex_alphabets = "0123456789ABCDEF";
 var hex = "#";
 var int1,int2;
 for(var i=0;i<3;i++) {
  int1 = triplet[i] / 16;
  int2 = triplet[i] % 16;

  hex += hex_alphabets.charAt(int1) + hex_alphabets.charAt(int2);
 }
 return(hex);
}

//------------------------------------------------------------------------------
// 
function getElementTop(Elem) {


    if(document.getElementById) {    
        var elem = document.getElementById(Elem);
    } else if (document.all) {
        var elem = document.all[Elem];
    }

    var yPos = elem.offsetTop;
    //tempEl = elem.offsetParent;
    //while (tempEl != null) {
    //      yPos += tempEl.offsetTop;
    //      tempEl = tempEl.offsetParent;
    //  }
    return yPos ;

}
function getElementAbsTop(Elem) {


    if(document.getElementById) {    
        var elem = document.getElementById(Elem);
    } else if (document.all) {
        var elem = document.all[Elem];
    }

    var yPos = elem.offsetTop;
    tempEl = elem.offsetParent;
    while (tempEl != null) {
          yPos += tempEl.offsetTop;
          tempEl = tempEl.offsetParent;
      }
    return yPos ;

}
//------------------------------------------------------------------------------
//Debug functies

function ErrorHandler(msg,url,l)
{
  //if (Debug)
  //{
	   txt="There was an error on this page.\n\n"
	   txt+="Error: " + msg + "\n"
	   txt+="URL: " + url + "\n"
	   txt+="Line: " + l + "\n\n"
	   txt+="Click OK to continue.\n\n"
  
	   alert(txt);
	//}   
	return true;
}

function dump(obj)
{
  //if (Debug)
  //{
    str='';
    for(prop in obj)
    {
      str+=prop + " value :"+ obj[prop]+"\n";
    }
    alert(str);
  //}
}



//------------------------------------------------------------------------------
// Drag & Drop
document.onmousemove = mouseMove;
document.onmouseup   = mouseUp;

var dragObject  = null;
var mouseOffset = null;

function mouseCoords(ev){
	if(ev.pageX || ev.pageY){
		return {x:ev.pageX, y:ev.pageY};
	}
	return {
		x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
		y:ev.clientY + document.body.scrollTop  - document.body.clientTop
	};
}



function getMouseOffset(target, ev){
	ev = ev || window.event;

	var docPos    = getPosition(target);
	var mousePos  = mouseCoords(ev);
	return {x:mousePos.x - docPos.x, y:mousePos.y - docPos.y};
}

function getPosition(e){
	var left = 0;
	var top  = 0;

	//while (e.offsetParent){
	//	left += e.offsetLeft;
	//	top  += e.offsetTop;
	//	e     = e.offsetParent;
	//}

	left += e.offsetLeft;
	top  += e.offsetTop;

	return {x:left, y:top};
}

function mouseMove(ev){
	ev           = ev || window.event;
	var mousePos = mouseCoords(ev);

	if(dragObject){
		dragObject.style.position = 'absolute';
		dragObject.style.top      = mousePos.y - mouseOffset.y;
		dragObject.style.left     = mousePos.x - mouseOffset.x;

    dragObject.Update();
		return false;
	}
}
function mouseUp(){

  if (dragObject)
  {
    dragObject.Update();
	  dragObject = null;
	} 
}

function makeDraggable(item){
	if(!item) return;
	item.onmousedown = function(ev){
		dragObject  = this;
		mouseOffset = getMouseOffset(this, ev);
		return false;
	}
}

function GoUrl(url)
{
  url=ParseDatastring(url);
  url=url.replace(/\134/g,"/");
  window.location.href=url;
}









