﻿function SymError()
{
  return true;
}

window.onerror = SymError;

var SymRealWinOpen = window.open;

function SymWinOpen(url, name, attributes)
{
  return (new Object());
}

//window.open = SymWinOpen;

var mouseX = 0;
var mouseY = 0;
var grabX = 0;
var grabY = 0;
var oriX = 0;
var oriY = 0;
var eleX = 0;
var eleY = 0;
var algor = 0;

var dragobj = null;

function falsefunc() { return false; } // used to block cascading events

function init()
{
	//alert("Now init")
	document.onmousemove = update; // update(event) implied on NS, update(null) implied on IE
	update();
}

// ==============================================================================

function getMouseXY(e) // works on IE6,FF,Moz,Opera7
{ 
	//alert("Now getMouseXY");
	if (!e) e = window.event; // works on IE, but not NS (we rely on NS passing us the event)

	if (e)
	{ 
		if (e.pageX || e.pageY)
		{	
			// this doesn't work on IE6!! (works on FF,Moz,Opera7)
			mouseX = e.pageX;
			mouseY = e.pageY;
			algor = '[e.pageX]';
			if (e.clientX || e.clientY) algor += ' [e.clientX] '
		}
		else if (e.clientX || e.clientY)
		{ // works on IE6,FF,Moz,Opera7
			mouseX = e.clientX + document.body.scrollLeft;
			mouseY = e.clientY + document.body.scrollTop;
			algor = '[e.clientX]';
			if (e.pageX || e.pageY) algor += ' [e.pageX] '
		}  
	}
}

// ==============================================================================

function update(e)
{
	//alert("Now update");
	
	getMouseXY(e); // NS is passing (event), while IE is passing (null)
	
	//alert("span_browswer is: " + document.getElementById('span_browser')   )
	
	if ( document.getElementById('span_browser') != null )
	{
		document.getElementById('span_browser').innerHTML = navigator.appName;
		document.getElementById('span_winevent').innerHTML = window.event ? window.event.type : '(na)';
		document.getElementById('span_autevent').innerHTML = e ? e.type : '(na)';
		document.getElementById('span_mouseX').innerHTML = mouseX;
		document.getElementById('span_mouseY').innerHTML = mouseY;
		document.getElementById('span_grabX').innerHTML = grabX;
		document.getElementById('span_grabY').innerHTML = grabY;
		document.getElementById('span_oriX').innerHTML = oriX;
		document.getElementById('span_oriY').innerHTML = oriY;
		document.getElementById('span_eleX').innerHTML = eleX;
		document.getElementById('span_eleY').innerHTML = eleY;
		document.getElementById('span_algor').innerHTML = algor;
		document.getElementById('span_dragobj').innerHTML = dragobj ? (dragobj.id ? dragobj.id : 'unnamed object') : '(null)';
	}
	
}

// ==============================================================================

function grab(context)
{
	//alert("Now grab");
	document.onmousedown = falsefunc; // in NS this prevents cascading of events, thus disabling text selection
	dragobj = context;
	dragobj.style.zIndex = 10; // move it to the top
	document.onmousemove = drag;
	document.onmouseup = drop;
	grabX = mouseX;
	grabY = mouseY;
	eleX = oriX = dragobj.offsetLeft;
	eleY = oriY = dragobj.offsetTop;
	update();
}

// ==============================================================================
function drag(e) // parameter passing is important for NS family 
{
	var gloX
	/*
	if ( gloX == 0 )
	{		
		alert("Now drag"	
				+ "\n oriX + (mouseX-grabX): " + oriX
				+ "\n oriY + (mouseY-grabY): " + oriY
				+ "\n oriY + (mouseY-grabY): " + (mouseX-grabX)
				+ "\n oriY + (mouseY-grabY): " + (mouseY-grabY)
				+ "\n oriY + (mouseY-grabY): " + (oriX) + (mouseX-grabX)
				+ "\n eleX: " + (eleX).toString(10) + 'px'
				+ "\n eleY: " + (eleY).toString(10) + 'px'			
				);
	}
	//return false;
	*/
	
	if (dragobj)
	{
		if ( grabX == 0 )
		{
			grabX = mouseX
			grabY = mouseY
		}
		
		eleX = ((oriX) + (mouseX-grabX));
		eleY = ((oriY) + (mouseY-grabY));		
		
		
		
		//showMore("grabX: " + grabX + ",grabY: " + grabY 
		//			+ "<BR>oriX: " + oriX + ", oriY: " + oriY
		//			+ "<BR>mouseX: " + mouseX + ", mouseY: " + mouseY ,
		//			"dv_more_1")
		
		
		//eleX = ((oriX) + (mouseX-grabX));
		//eleY = ((oriY) + (mouseY-grabY));		
		
		//eleX = ((oriX) + (grabX));
		//eleY = ((oriY) + (grabY));
				
		//eleX = (oriX) + (mouseX - oriX - grabX);
		//eleY = (oriY) + (mouseY - oriY - grabY);	
		
		dragobj.style.position = "absolute";
		dragobj.style.left = (eleX).toString(10) + 'px';
		dragobj.style.top  = (eleY).toString(10) + 'px';
	}
	
	if ( gloX == 1 || gloX%10 == 0  )
	{
		/*
		alert("Now drag"	
				+ "\n oriX : " + oriX
				+ "\n oriY : " + oriY
				+ "\n mouseX: " + mouseX
				+ "\n mouseY: " + mouseY
				+ "\n grabX: " + grabX
				+ "\n grabY: " + grabY
				+ "\n (oriX) + (mouseX-grabX): " + ((oriX) + (mouseX-grabX))
				+ "\n eleX: " + (eleX).toString(10) + 'px'
				+ "\n eleY: " + (eleY).toString(10) + 'px'			
				);
			*/	
	}
	
	
	update(e);
	return false; // in IE this prevents cascading of events, thus text selection is disabled
}

// ==============================================================================

function drop()
{
	//alert("Now drop");
	if (dragobj)
	{
		dragobj.style.zIndex = 0;
		dragobj = null;
	}
	update();
	document.onmousemove = update;
	document.onmouseup = null;
	document.onmousedown = null;   // re-enables text selection on NS
}

















//#############start show create div text components#################
//generates div and displays it where the mouse has been clicked, on clicking the close div will hide div
//sIdentifier - identifier for the div, generated id for div is identifier with '_divtext' appended - if none will generate one
//sDisplay - the body text to be displayed
//sHeader - if present will show in header otherwise will use default header text
//nDivW - div width default 200 min value 150
//nDivH - div height default 300 min value 60
//requires createDivText function and DivTextIncrement
//requires closeIndent finalizeCloseIndent invertBorderColor function and oCloseEle
var DivTextIncrement=0;
var oCloseEle=new Object();

function doCreateDivText(event, sDisplay,sHeader,sIdentifier,nDivW,nDivH){
	var x
	var y
	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;
	}

	//set default values if undefined
	DivTextIncrement++;
	if(typeof(sIdentifier)=='undefined')sIdentifier='DivText'+DivTextIncrement;
	if(typeof(nDivW)=='undefined'){
		nDivW=200;
	}
	else if(nDivW<150){
		nDivW=150;
	}
	if(typeof(nDivH)=='undefined'){
		nDivH=300;
	}
	else if(nDivH<60){
		nDivH=60;
	}
	//check if div exist yet or not
    var oDivText;
    if(document.getElementById(sIdentifier+'_divtext')){
        oDivText=document.getElementById(sIdentifier+'_divtext');
    }
    else{
		oDivText=createDivText(sDisplay,sHeader,nDivW,nDivH);
		oDivText.id=sIdentifier+'_divtext';
        document.body.appendChild(oDivText);
    }
	oDivText.style.display='block';
    //set div location
	oDivText.style.top=y+'px';
	oDivText.style.left=x+'px';
}
//generates div with header and body display text
//sHead - display header cell text, if null uses default
//sBody - body text to be displayed
//nDivW - div width
//nDivH - div height
//requires css classes to exist .ShowDivContainer .ShowDivHead .ShowDivCloseContainer .ShowDivClose and .ShowDivBody
function createDivText(sBody,sHead,nDivW,nDivH){
	if (typeof(sHead)=='undefined')sHead='Help Text';
    //setup div container
    var oContainer=document.createElement('DIV');
    var oHead=document.createElement('DIV');
    var oCloseContainer=document.createElement('DIV');
    var oClose=document.createElement('DIV');
    var oBody=document.createElement('DIV');
    //set div classes and styles
	oContainer.className='ShowDivContainer';
	oHead.className='ShowDivHead';
	oCloseContainer.className='ShowDivCloseContainer';
	oClose.className='ShowDivClose';
	oBody.className='ShowDivBody';
	oContainer.style.zIndex=DivTextIncrement+5000;
	oHead.style.zIndex=DivTextIncrement+5000;
	oClose.style.zIndex=DivTextIncrement+5000;
	oBody.style.zIndex=DivTextIncrement+5000;
	oContainer.style.width=nDivW+'px';
    oContainer.style.height=nDivH+'px';
    //if(ie){
    /*
    if (browser.isIE){
		oHead.style.width=(nDivW-31)+'px';
	}
	else{
		oHead.style.width=(nDivW-22)+'px';
	}
	*/
    oBody.style.height=(nDivH-20)+'px';
	//set drag head
	//if(ie){
    if (browser.isIE){
		//oHead.onmousedown=function(){dragStart(event,oContainer.id)};//works
		oHead.onmousedown=function(){dragStart(event,this.parentNode.id)};
	}
	else{
        oHead.setAttribute("onmousedown", "javascript:dragStart(event,this.parentNode.id);");
	}
	//set close button
	oCloseContainer.onclick=function(){this.parentNode.style.display='none'};

    if (browser.isIE){
		oClose.onmousedown=function(){closeIndent(event,this,'down')};
	}
	else{
        oClose.setAttribute("onmousedown", "javascript:closeIndent(event,this,'down');");
	}
	//add text
	oHead.appendChild(document.createTextNode(sHead));
	//oHead.innerHTML=sHead;
	oClose.innerHTML='&times;';
	oBody.innerHTML=sBody;
	//append children
	oCloseContainer.appendChild(oClose);
	oContainer.appendChild(oCloseContainer);
	oContainer.appendChild(oHead);
	oContainer.appendChild(oBody);
	return oContainer;
}
function closeIndent(event, oEle, eventtype){
	if(oEle){
		oCloseEle.rootNode=oEle
	}
	else{
		return false;
	}
	if(eventtype=='down'){
		oCloseEle.state='OPEN';
		invertBorderColor(oCloseEle.rootNode);
		if (browser.isIE) {
			//this.attachEvent("onmouseout",function(){closeIndent(event,this,'out');});
		    oCloseEle.rootNode.attachEvent("onmouseout", finalizeCloseIndent);
			window.event.cancelBubble = true;
			window.event.returnValue = false;
		}
		if (browser.isNS) {
			//this.addEventListener("mouseout",function(){closeIndent(event,this,'out');}, true);
		    oCloseEle.rootNode.addEventListener("mouseout", finalizeCloseIndent, true);
			event.preventDefault();
		}
	}
	else if(eventtype=='over'){
		invertBorderColor(oCloseEle.rootNode);
	}
	
}
function finalizeCloseIndent(event){
  invertBorderColor(oCloseEle.rootNode)
  if (browser.isIE) {
    oCloseEle.rootNode.detachEvent("onmouseout", finalizeCloseIndent);
  }
  if (browser.isNS) {
    oCloseEle.rootNode.removeEventListener("mouseout", finalizeCloseIndent, true);
  }
}
function invertBorderColor(oEle){
	var width01;
	var style01;
	var hex01;
	
	var width02;
	var style02;
	var hex02;

	 if(document.defaultView){
		width01=document.defaultView.getComputedStyle(oEle, '').getPropertyValue('border-top-width');
		style01=document.defaultView.getComputedStyle(oEle, '').getPropertyValue('border-top-style');
		var color01=document.defaultView.getComputedStyle(oEle, '').getPropertyValue('border-top-color');
		var oColor01=color01.replace(')','').replace('rgb(','').split(',');
		var r01=parseInt(oColor01[0]);
		var g01=parseInt(oColor01[1]);
		var b01=parseInt(oColor01[2]);
		hex01='#'+r01.toString(16)+g01.toString(16)+b01.toString(16);
		
		width02=document.defaultView.getComputedStyle(oEle, '').getPropertyValue('border-bottom-width');
		style02=document.defaultView.getComputedStyle(oEle, '').getPropertyValue('border-bottom-style');
		var color02=document.defaultView.getComputedStyle(oEle, '').getPropertyValue('border-bottom-color');
		var oColor02=color02.replace(')','').replace('rgb(','').split(',');
		var r02=parseInt(oColor02[0]);
		var g02=parseInt(oColor02[1]);
		var b02=parseInt(oColor02[2]);
		hex02='#'+r02.toString(16)+g02.toString(16)+b02.toString(16);
	 }
	 else if(oEle.currentStyle){
		width01=oEle.currentStyle.borderTopWidth;
		style01=oEle.currentStyle.borderTopStyle;
		hex01=oEle.currentStyle.borderTopColor;

		width02=oEle.currentStyle.borderBottomWidth;
		style02=oEle.currentStyle.borderBottomStyle;
		hex02=oEle.currentStyle.borderBottomColor;
	 }
	oEle.style.borderBottom=width01+' '+style01+' '+hex01;
	oEle.style.borderRight=width01+' '+style01+' '+hex01;

	oEle.style.borderTop=width02+' '+style02+' '+hex02;
	oEle.style.borderLeft=width02+' '+style02+' '+hex02;
}

//#############end show create div text components#################

//*****************************************************************************
// 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;
  }
}

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);
  }
}


// ##########################################################



