String.prototype.LTrim=new Function("return this.replace(/^\\s+/,'')")
String.prototype.RTrim=new Function("return this.replace(/\\s+$/,'')")
String.prototype.Trim=new Function("return this.replace(/^\\s+|\\s+$/g,'')")

function toggleblock(me,id)
{
	switch(me.innerHTML) {
		case '(HIDE)':
			document.getElementById(id).style.display = 'none';
			me.innerHTML = '(SHOW)';
			break;
		default:
			document.getElementById(id).style.display = 'block';
			me.innerHTML = '(HIDE)';
			break;
	}
	return false;
}


function makeToggle(id,state)
{
	document.write(' <small><a href="" onclick="return toggleblock(this,');
	document.write(' \'' + id + '\')">(' + state + ')</a></small>');
}


defaultSearchString = "Google this site";

function gsetup()
{
	g = document.getElementById('google');
	g.style.color = "#aaa";
	g.value = defaultSearchString;
}

function sboxCheck()
{
	g = document.getElementById('google');
	searchString = g.value.Trim();
	if (searchString=='') searchString=defaultSearchString;
	if (searchString==defaultSearchString) {
		g.style.color = "#aaa";
		g.value = defaultSearchString;
		alert('Please enter a search string first');
		return false;
	}
	g.style.color = "#000";
	g.value = searchString;
	return true;
}

function sboxFocus()
{
	g = document.getElementById('google');
	if (g.value==defaultSearchString) g.value='';
	g.style.color = "#000";
}

function sboxBlur()
{
	g = document.getElementById('google');
	searchString = g.value.Trim();
	if (searchString=='') searchString=defaultSearchString;
	if (searchString==defaultSearchString) {
		g.style.color = "#aaa";
		g.value = defaultSearchString;
	}
	else {
		g.value = searchString;
		g.style.color = "#000";
	}
}




function checkRegForm()
{
	var errors = [];
	var i=0;
	n = document.getElementById('n').value.Trim();
	e = document.getElementById('e').value.Trim();
	p1 = document.getElementById('p1').value;
	p2 = document.getElementById('p2').value;
	if (n.length < 2) errors[i++] = "You have not provided your full name.";
	if (!checkEmailSyntax(e)) errors[i++] = "The email address you provided is not valid.";
	if (p1!=p2) errors[i++] = "Your passwords must match.";
	else if (p1.length < 6) errors[i++] = "Please choose a password of at least 6 characters.";
	if (i) {
		errmsg = errors.join(' ');
		alert(errmsg);
		return false;
	}
	b = document.getElementById('b');
	f = document.getElementById('f');
	b.value = "Sending…";
	b.style.color = '#999';
	f.onsubmit = 'return false;';
	setTimeout(restoreBtn,5000);
	return true;
}

function restoreBtn()
{
	b = document.getElementById('b');
	f = document.getElementById('f');
	b.value = "Register";
	b.style.color = '#000';
	f.onsubmit = 'return checkRegForm(this);';
}

function checkEmailSyntax(em)
{
  var t_split, t_name, t_domain, t_result;
  var re_bad = /(@)|(\.\.)|(^\.)|(\.$)/;
  var re_ok1 = /^[^\x00-\x1f <>"]+$/;
  var re_ok2 = /^([A-Za-z0-9\-_]+\.){1,5}[A-Za-z]{2,5}$/;
  
  t_split = em.split("@");
  t_name = t_split[0];
  t_domain = t_split[1];
  
  t_result = false;
  
  if (t_name && t_domain && (t_split.length == 2)) {
    if (!re_bad.test(t_name)   &&
        re_ok1.test(t_name)    &&
        !re_bad.test(t_domain) &&
        re_ok2.test(t_domain)  ) {
      t_result = true;
    }
  }
  return t_result;
}


/*
// Drag & drop code from http://www.brainjar.com/dhtml/drag/default.asp

//*****************************************************************************
// Do not remove this notice.
//
// Copyright 2001 by Mike Hall.
// See http://www.brainjar.com for terms of use.
//*****************************************************************************

// Determine browser and version.

function Browser() {

  var ua, s, i;

  this.isIE    = false;
  this.isNS    = false;
  this.version = null;

  ua = navigator.userAgent;

  s = "MSIE";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isIE = true;
    this.version = parseFloat(ua.substr(i + s.length));
    return;
  }

  s = "Netscape6/";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isNS = true;
    this.version = parseFloat(ua.substr(i + s.length));
    return;
  }

  // Treat any other "Gecko" browser as NS 6.1.

  s = "Gecko";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isNS = true;
    this.version = 6.1;
    return;
  }
  
  // Default setting
  this.isNS = true;
  this.version = 9.0;
  return;

}

var browser = new Browser();

// Global object to hold drag information.

var dragObj = new Object();
dragObj.zIndex = 0;

function dragStart(event, id) {

  var el;
  var x, y;

  // If an element id was given, find it. Otherwise use the element being
  // clicked on.

  if (id)
    dragObj.elNode = document.getElementById(id);
  else {
    if (browser.isIE)
      dragObj.elNode = window.event.srcElement;
    if (browser.isNS)
      dragObj.elNode = event.target;

    // If this is a text node, use its parent element.

    if (dragObj.elNode.nodeType == 3)
      dragObj.elNode = dragObj.elNode.parentNode;
  }

  // Get cursor position with respect to the page.

  if (browser.isIE) {
    x = window.event.clientX + document.documentElement.scrollLeft
      + document.body.scrollLeft;
    y = window.event.clientY + document.documentElement.scrollTop
      + document.body.scrollTop;
  }
  if (browser.isNS) {
    x = event.clientX + window.scrollX;
    y = event.clientY + window.scrollY;
  }

  // Save starting positions of cursor and element.

  dragObj.cursorStartX = x;
  dragObj.cursorStartY = y;
  dragObj.elStartLeft  = parseInt(dragObj.elNode.style.left, 10);
  dragObj.elStartTop   = parseInt(dragObj.elNode.style.top,  10);

  if (isNaN(dragObj.elStartLeft)) dragObj.elStartLeft = 0;
  if (isNaN(dragObj.elStartTop))  dragObj.elStartTop  = 0;

  // Update element's z-index.

  dragObj.elNode.style.zIndex = ++dragObj.zIndex;

  // Capture mousemove and mouseup events on the page.

  if (browser.isIE) {
    document.attachEvent("onmousemove", dragGo);
    document.attachEvent("onmouseup",   dragStop);
    window.event.cancelBubble = true;
    window.event.returnValue = false;
  }
  if (browser.isNS) {
    document.addEventListener("mousemove", dragGo,   true);
    document.addEventListener("mouseup",   dragStop, true);
    event.preventDefault();
  }
}

function dragGo(event) {

  var x, y;

  // Get cursor position with respect to the page.

  if (browser.isIE) {
    x = window.event.clientX + document.documentElement.scrollLeft
      + document.body.scrollLeft;
    y = window.event.clientY + document.documentElement.scrollTop
      + document.body.scrollTop;
  }
  if (browser.isNS) {
    x = event.clientX + window.scrollX;
    y = event.clientY + window.scrollY;
  }

  // Move drag element by the same amount the cursor has moved.

  dragObj.elNode.style.left = (dragObj.elStartLeft + x - dragObj.cursorStartX) + "px";
  dragObj.elNode.style.top  = (dragObj.elStartTop  + y - dragObj.cursorStartY) + "px";

  if (browser.isIE) {
    window.event.cancelBubble = true;
    window.event.returnValue = false;
  }
  if (browser.isNS)
    event.preventDefault();
}

function dragStop(event) {

  // Stop capturing mousemove and mouseup events.

  if (browser.isIE) {
    document.detachEvent("onmousemove", dragGo);
    document.detachEvent("onmouseup",   dragStop);
  }
  if (browser.isNS) {
    document.removeEventListener("mousemove", dragGo,   true);
    document.removeEventListener("mouseup",   dragStop, true);
  }
}

*/

var dragObject  = null;
var mouseOffset = null;

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) + "px";
		dragObject.style.left     = (mousePos.x - mouseOffset.x) + "px";

		return false;
	}
}
function mouseUp(){
	dragObject = null;
}


document.onmousemove = mouseMove;
document.onmouseup   = mouseUp;


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

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
	};
}

