

// place Functions here 

if (navigator.userAgent.indexOf('MSIE')==-1){
	var bIsIE = 0;
} else {
  var bIsIE = 1;
}	 



// Generic PopUp Function
function popUp(wname,url,width,height,statusbar,scrollbars,resizable,toolbar){

	//define height and width if they are not passed
	//as arguments
	if(!height)
		height=300;
	if(!width)			
		width=500;
	if(!scrollbars)			
		scrollbars="yes";
	if(!resizable)			
		resizable="no";
	if(!toolbar)			
		toolbar="no";
	if(!statusbar)			
		toolbar="no";

	var theWidth = width;
	var theHeight = height;

		
	x = (640 - theWidth)/2, y = (480 - theHeight)/2;

  	if (screen) {
      		y = (screen.availHeight - theHeight)/2;
      		x = (screen.availWidth - theWidth)/2;
  		}
	if (screen.availWidth > 1800) { 
		x = ((screen.availWidth/2) - theWidth)/2; 
  		} 

		
	var settings = "status=" + statusbar + "toolbar=" + toolbar + ",resizable=" + resizable + ",height=" + height + ",width=" + width + ",scrollbars=" + scrollbars + ',width='+theWidth+',height='+theHeight+',screenX='+x+', screenY='+y+', top='+y+',left='+x;
	PopWin = window.open(url,wname,settings);
	PopWin.focus();
}
						
//Pulling Data from Other Web pages with XMLHTTP 
function RemoteScriptXMLHTTPGetPage(ExternalPageURL){
	var xmlhttp = null;
		
	try {xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");} catch (e) {
	try {xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");} catch (E) {
	xmlhttp = false; }
	 }
	if (xmlhttp) {
	xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	xmlhttp.open("get", ExternalPageURL,true);
	xmlhttp.onreadystatechange= function() {
	if (xmlhttp.readyState==4) { document.write(xmlhttp.responseText) ; } 
	} 
	xmlhttp.send(null) 
	}
}

 function feedflareon(objpar) {
  	 for (i=0; i<objpar.childNodes.length; i++){
    	 if (objpar.childNodes[i].tagName=="DIV") {
			    obj = objpar.childNodes[i];
			    for (a=0; a<obj.childNodes.length; a++){
						 if (obj.childNodes[a].className=="feedflare") {	
						   	obj.childNodes[a].style.display="block";
								obj.childNodes[a].style.visibility="visible";
						}
					}
    	 }
     }
 }
 function feedflareoff(objpar) {
  	 for (i=0; i<objpar.childNodes.length; i++){
    	 if (objpar.childNodes[i].tagName=="DIV") {
			    obj = objpar.childNodes[i];
	  	    for (a=0; a<obj.childNodes.length; a++){
						 if (obj.childNodes[a].className=="feedflare") {	
						   	obj.childNodes[a].style.display="none";
								obj.childNodes[a].style.visibility="hidden";
						}
					}
    	 }
     }
 }

function openStdDemo()
{
url = "ctdata/clicktracks_overview.html" ;
popup = window.open( url, 'demowindow', 'toolbar=no,scrollbars=no,location=no,statusbar=no,menubar=no, resizable=no,width=1010,height=696,left=2,top=10' );
popup.focus();
}

function openGetCTSerial()
{
url = "ctdata/WordVerification_Check.asp" ;
						var x = 0;
						var y = 0;
          	var theWidth = 400;
          	var theHeight = 300;
           if (screen) {
             		y = (screen.availHeight - theHeight)/2;
             		x = (screen.availWidth - theWidth)/2;
            }
            if (screen.availWidth > 1800) { 
          	    x = ((screen.availWidth/2) - theWidth)/2; 
            } 	
popup = window.open( url, 'serialwindow', 'toolbar=no,scrollbars=no,location=no,statusbar=no,menubar=no, resizable=no,width='+theWidth+',height='+theHeight+',screenX='+x+', screenY='+y+', top='+y+',left='+x);
popup.focus();
}

function openSmallDemo( name , width, height )
{
	popup = window.open( "http://www.clicktracks.com/demos_small/" + name + '.php', 'clicktracks', 'toolbar=no,scrollbars=no,location=no,statusbar=no,menubar=no,resizable=no,width=' + width + ',height=' + height + ',left=2,top=10' );
	popup.focus();
}


function findPosX(obj)
{
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj)
{
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}

function pte(theImage,doResize) {
   if (theImage.src !== '/images/spacer.gif') {	 
	 		theImage.src = '/images/spacer.gif';
	 }
   if (doResize==1) {
	 		theImage.width=1;
	 		theImage.height=1;
   }
}


		function getWindowHeight() {
			var windowHeight = 0;
			if (typeof(window.innerHeight) == 'number') {
				windowHeight = window.innerHeight;
			}
			else {
				if (document.documentElement && document.documentElement.clientHeight) {
					windowHeight = document.documentElement.clientHeight;
				}
				else {
					if (document.body && document.body.clientHeight) {
						windowHeight = document.body.clientHeight;
					}
				}
			}
			return windowHeight;
		}
		function setFooter(contentHeight,AdjContainer) {

			if (document.getElementById) {
				var windowHeight = getWindowHeight();
				if (windowHeight > 0) {


						 if (contentHeight > 0) {

							   if (document.getElementById(AdjContainer+'right')) {
					         var footerElement = document.getElementById(AdjContainer+'right');
							     footerElement.style.height = (contentHeight)  + 'px';
                 }
							   if (document.getElementById(AdjContainer+'left')) {
					          var footerElement2 = document.getElementById(AdjContainer+'left');
							     footerElement2.style.height = (contentHeight)  + 'px';
                 }
							   if (document.getElementById('nav'+AdjContainer+'right')) {
					          var footerElement3 = document.getElementById('nav'+AdjContainer+'right');
							     footerElement3.style.height = (contentHeight)  + 'px';
                 }
							   if (document.getElementById('nav'+AdjContainer+'left')) {
					          var footerElement4 = document.getElementById('nav'+AdjContainer+'left');
							     footerElement4.style.height = (contentHeight)  + 'px';
						     }

							   if (document.getElementById('mid'+AdjContainer+'right')) {
					          var footerElement6 = document.getElementById('mid'+AdjContainer+'right');
							     footerElement6.style.height = (contentHeight)  + 'px';
                 }
							   if (document.getElementById('mid'+AdjContainer+'left')) {
					          var footerElement5 = document.getElementById('mid'+AdjContainer+'left');
							     footerElement5.style.height = (contentHeight)  + 'px';
						     } 



						 }

					
				}
			}
		}


function copyclipbandhl(d)
{

//var doc = eval("document.contentform."+d);
var doc = eval(d);
cp = doc.createTextRange();
doc.focus();
doc.select();
cp.execCommand("Copy");
}




	function setFooterHomepage(contentHeight,AdjContainer) {

			if (document.getElementById) {
				var windowHeight = getWindowHeight();
				if (windowHeight > 0) {


						 if (contentHeight > 0) {

							   if (document.getElementById("floaterrighthome")) {
					         var footerElementA = document.getElementById("floaterrighthome");
							     footerElementA.style.height = (contentHeight)  + 'px';
                 }
							   if (document.getElementById("floaterlefthome")) {
					          var footerElementB = document.getElementById("floaterlefthome");
							     footerElementB.style.height = (contentHeight)  + 'px';
                 }
		
							   if (document.getElementById("midfloaterrighthome")) {
					          var footerElementC = document.getElementById("midfloaterrighthome");
							     footerElementC.style.height = (contentHeight)  + 'px';
                 }
							   if (document.getElementById("midfloaterlefthome")) {
					          var footerElementD = document.getElementById("midfloaterlefthome");
							     footerElementD.style.height = (contentHeight)  + 'px';
								}
						 }

					
				}
			}
		}
		
		
		
	function contactcheckform() {
		if (document.contentform.cname.value == '') {
			alert('Please enter your Name (Full Name).');
			document.contentform.cname.focus();
			return false;
		} else {
			if (document.contentform.cemail.value == '') {
				alert('Please enter your Email Address.');
				document.contentform.cemail.focus();
				return false;
			} else {
			  if (document.contentform.sReason(document.contentform.sReason.selectedIndex).value == '') {
					alert('Please seelct a Reason for Contacting me.');
					document.contentform.sReason.focus();
					return false;
				} else {
					if (document.contentform.ccomment.value == '') {
					  alert('Please enter your Message.');
					  document.contentform.ccomment.focus();
				   	return false;
				 	} else {
						return true;
					}
				}
 			}
		}
	}
	

				function ShowID(sObjID) {
				    if (document.getElementById(sObjID)) {
    			      obj = document.getElementById(sObjID);
    //						obj.style.visibility="visible";
     		   			obj.style.display="block";
						}
				}		

				function HideID(sObjID) {
						if (document.getElementById(sObjID)) {
  		        obj = document.getElementById(sObjID);
   		   			obj.style.display="none";
  //						obj.style.visibility="hidden";
	          }
				}		
				
				


function initnav(initval) {

switch (initval) 
{
case "profhome":
  x = triggernav(1)
	break
case "inetmkt":
  x =  triggernav(2)
	break
case "affmkt":
  x =  triggernav(3)
	break
case "seo":
  x =  triggernav(4)
	break
case "sem":
  x =  triggernav(5)
	break
case "dbdev":
  x =  triggernav(6)
	break
case "webdev":
  x = triggernav(6)
	break
default:
  x = triggernav(1)
	break
}

}

function triggernav(sid) {

if (document.getElementById('navnode'+String(sid)).style.display=='block') {
 HideID('navnode'+String(sid))
} else {
    for (i=1; i<7; i++) {
      HideID("navnode"+String(i));
     }
     ShowID('navnode'+String(sid));
}

}	


function emptyChildren(aNode)  {
   while (aNode.hasChildNodes()) {
     aNode.removeChild(aNode.lastChild);
   }
	 aNode.parentNode.removeChild(aNode);
}

function tweakmybloglog() {
    if (document.getElementById("mybloglogccu")) {
      var myObj=document.getElementById("mybloglogccu");
      var myStyles= myObj.getElementsByTagName("style");
      for (var a = 0; a < myStyles.length; ++a) { 
       myStyle = myStyles.item(a); 
       emptyChildren(myStyle);
    	} 
    	var myElems =  myObj.getElementsByTagName("tr");
    	myElem = myElems.item(myElems.length-1);
      emptyChildren(myElem);
    	
      var myStyles= myObj.getElementsByTagName("img");
      for (var a = 0; a < myStyles.length; ++a) { 
       myStyle = myStyles.item(a); 
      	 if (myStyle.getAttribute("id")!="") {
         emptyChildren(myStyle);
    	 }
    	} 	
      var myElems =  myObj.getElementsByTagName("tr");
    	myElem = myElems.item(myElems.length-1);
      emptyChildren(myElem);
    	
      var myStyles= myObj.getElementsByTagName("img");
      for (var a = 0; a < myStyles.length; ++a) { 
       myStyle = myStyles.item(a); 
      	 if (myStyle.getAttribute("id")!="") {
         emptyChildren(myStyle);
    	 }
    	} 
      var myStyles= myObj.getElementsByTagName("img");	
      for (var a = 0; a < myStyles.length; ++a) { 
         myStyle = myStyles.item(a);  	
    		  myStyle.removeAttribute("onmouseover");
    	    myStyle.removeAttribute("onmouseout");		 
    			var sVisitor = myStyle.getAttribute("alt");
    			myStyle.setAttribute("alt","Visit "+sVisitor+"'s Page at MyBlogLog.com");
      		myStyle.setAttribute("width","32");		
          var newlink=document.createElement("a");
    		  newlink.setAttribute("href", "http://www.mybloglog.com/buzz/members/"+sVisitor+"/");
    			newlink.setAttribute("target","_blank");
    		  newlink.innerHTML=myStyle.parentNode.innerHTML;
    			myStyle.parentNode.insertBefore(newlink, myStyle);
          emptyChildren(myStyle);			
    	}
			
     var myStyles= myObj.getElementsByTagName("td");	
      for (var a = 0; a < myStyles.length; ++a) { 	
	  		myStyle.setAttribute("class","32");				
  		}
    }
}


function tweakcomments() {
    if (document.getElementById("buildcomments")) {
      var myObj=document.getElementById("buildcomments");
      var myStyles= myObj.getElementsByTagName("style");
      for (var a = 0; a < myStyles.length; ++a) { 
       myStyle = myStyles.item(a); 
       emptyChildren(myStyle);
    	} 
				
    }	 

}

function fixmybloglog() {
		 if (document.getElementById("mybloglogccu")) {
			var myObj=document.getElementById("mybloglogccu");
			var myElems =  myObj.getElementsByTagName("tr");
			myElem = myElems.item(myElems.length-1);
			emptyChildren(myElem);
			myElem = myElems.item(1);
			emptyChildren(myElem);


      var myStyles= myObj.getElementsByTagName("img");
      for (var a = 0; a < myStyles.length; ++a) { 
         myStyle = myStyles.item(a);
				 if (bIsIE==1) {
				   if (myStyle.getAttribute("id")!='') {
					 		emptyChildren(myStyle);
					 }
				 } else {
				 	 if (myStyle.hasAttribute("id")) {
					 			emptyChildren(myStyle);
					 }
				 }
				 
				 
			}	 

			ShowID("mybloglogccu");		
    }	 
}		


function xlinkcheck() {
  if (document.contentform.sReason(document.contentform.sReason.selectedIndex).value == 'xlink') {
		 alert('You want to ask me, if I would like to reciprocal linking our sites?\n\n There is a 99.99% chance that the answer is NO.\n\n Click OK to learn why.');
		 top.location.href='http://www.cumbrowski.com/Editorial-Note.asp#xlink';
	}
}


function tweaksitepronews() {
    if (document.getElementById("sitepronewsccu")) {
      var myObj=document.getElementById("sitepronewsccu");
      var myStyles= myObj.getElementsByTagName("style");
      for (var a = 0; a < myStyles.length; ++a) { 
       myStyle = myStyles.item(a); 
       emptyChildren(myStyle);
    	} 
     var myTables = myObj.getElementsByTagName("table");
      for (var a = 0; a < myTables.length; ++a) { 
       myTable = myTables.item(a); 
		   if ((myTable.getAttribute("width").toString()=='198')||(myTable.getAttribute("width").toString()=='108')) {
			  // myTable.setAttribute("style","display:inline;overflow: hidden;width:100px;");	
         emptyChildren(myTable);
				} 
    	} 

     var myTDs = myObj.getElementsByTagName("td");
      for (var a = 0; a < myTDs.length; ++a) { 
       myTD = myTDs.item(a); 
		   if ((myTD.getAttribute("width").toString()=='620')||(myTD.getAttribute("width").toString()=='800')) {
//			   myTable.setAttribute("style","display:inline;overflow: hidden;");	
         emptyChildren(myTD.parentNode);
				} 
    	} 
			
			
     var myLinks = myObj.getElementsByTagName("a");
      for (var a = 0; a < myLinks.length; ++a) { 
       myLink = myLinks.item(a); 
		   if (myLink.getAttribute("target").toString()!='_blank') {
			   myLink.setAttribute("target","_blank");	
        // emptyChildren(myTable);
				} 
    	} 

			
				
    }	 
}


function IE7Add2SP(strAddURI) {

try{ window.external.AddSearchProvider(strAddURI); }
catch(eX){ 		if (70 == (eX.number & 0xFFFF)){
    alert("Click OK and then use the mouse\n or the Enter key to click the install button."); 
  } else {
    alert("Unable to add search provider. This feature requires MS Internet Explorer 7.   [" + (eX.number & 0xFFFF) + "]");
  }
}
return false;				       
}


function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}


//--------------------------------------------------------------------------------		   

		
// SCRIPT tag added by Instant Source (for syntax highlighting).

/* document.getElementsBySelector(selector)
   - returns an array of element objects from the current document
     matching the CSS selector. Selectors can contain element names, 
     class names and ids and can be nested. For example:
     
       elements = document.getElementsBySelector('div#main p a.external')
     
     Will return an array of all 'a' elements with 'external' in their 
     class attribute that are contained inside 'p' elements that are 
     contained inside the 'div' element which has id="main"

   New in version 0.4: Support for CSS2 and CSS3 attribute selectors:
   See http://www.w3.org/TR/css3-selectors/#attribute-selectors

   Version 0.4 - Simon Willison, March 25th 2003
   -- Works in Phoenix 0.5, Mozilla 1.3, Opera 7, Internet Explorer 6, Internet Explorer 5 on Windows
   -- Opera 7 fails 
*/

function getAllChildren(e) {
  // Returns all children of element. Workaround required for IE5/Windows. Ugh.
  return e.all ? e.all : e.getElementsByTagName('*');
}

document.getElementsBySelector = function(selector) {
  // Attempt to fail gracefully in lesser browsers
  if (!document.getElementsByTagName) {
    return new Array();
  }
  // Split selector in to tokens
  var tokens = selector.split(' ');
  var currentContext = new Array(document);
  for (var i = 0; i < tokens.length; i++) {
    token = tokens[i].replace(/^\s+/,'').replace(/\s+$/,'');;
    if (token.indexOf('#') > -1) {
      // Token is an ID selector
      var bits = token.split('#');
      var tagName = bits[0];
      var id = bits[1];
      var element = document.getElementById(id);
      if (tagName && element.nodeName.toLowerCase() != tagName) {
        // tag with that ID not found, return false
        return new Array();
      }
      // Set currentContext to contain just this element
      currentContext = new Array(element);
      continue; // Skip to next token
    }
    if (token.indexOf('.') > -1) {
      // Token contains a class selector
      var bits = token.split('.');
      var tagName = bits[0];
      var className = bits[1];
      if (!tagName) {
        tagName = '*';
      }
      // Get elements matching tag, filter them for class selector
      var found = new Array;
      var foundCount = 0;
      for (var h = 0; h < currentContext.length; h++) {
        var elements;
        if (tagName == '*') {
            elements = getAllChildren(currentContext[h]);
        } else {
            elements = currentContext[h].getElementsByTagName(tagName);
        }
        for (var j = 0; j < elements.length; j++) {
          found[foundCount++] = elements[j];
        }
      }
      currentContext = new Array;
      var currentContextIndex = 0;
      for (var k = 0; k < found.length; k++) {
        if (found[k].className && found[k].className.match(new RegExp('\\b'+className+'\\b'))) {
          currentContext[currentContextIndex++] = found[k];
        }
      }
      continue; // Skip to next token
    }
    // Code to deal with attribute selectors
    if (token.match(/^(\w*)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/)) {
      var tagName = RegExp.$1;
      var attrName = RegExp.$2;
      var attrOperator = RegExp.$3;
      var attrValue = RegExp.$4;
      if (!tagName) {
        tagName = '*';
      }
      // Grab all of the tagName elements within current context
      var found = new Array;
      var foundCount = 0;
      for (var h = 0; h < currentContext.length; h++) {
        var elements;
        if (tagName == '*') {
            elements = getAllChildren(currentContext[h]);
        } else {
            elements = currentContext[h].getElementsByTagName(tagName);
        }
        for (var j = 0; j < elements.length; j++) {
          found[foundCount++] = elements[j];
        }
      }
      currentContext = new Array;
      var currentContextIndex = 0;
      var checkFunction; // This function will be used to filter the elements
      switch (attrOperator) {
        case '=': // Equality
          checkFunction = function(e) { return (e.getAttribute(attrName) == attrValue); };
          break;
        case '~': // Match one of space seperated words 
          checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('\\b'+attrValue+'\\b'))); };
          break;
        case '|': // Match start with value followed by optional hyphen
          checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('^'+attrValue+'-?'))); };
          break;
        case '^': // Match starts with value
          checkFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) == 0); };
          break;
        case '$': // Match ends with value - fails with "Warning" in Opera 7
          checkFunction = function(e) { return (e.getAttribute(attrName).lastIndexOf(attrValue) == e.getAttribute(attrName).length - attrValue.length); };
          break;
        case '*': // Match ends with value
          checkFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) > -1); };
          break;
        default :
          // Just test for existence of attribute
          checkFunction = function(e) { return e.getAttribute(attrName); };
      }
      currentContext = new Array;
      var currentContextIndex = 0;
      for (var k = 0; k < found.length; k++) {
        if (checkFunction(found[k])) {
          currentContext[currentContextIndex++] = found[k];
        }
      }
      // alert('Attribute Selector: '+tagName+' '+attrName+' '+attrOperator+' '+attrValue);
      continue; // Skip to next token
    }
    // If we get here, token is JUST an element (not a class or ID selector)
    tagName = token;
    var found = new Array;
    var foundCount = 0;
    for (var h = 0; h < currentContext.length; h++) {
      var elements = currentContext[h].getElementsByTagName(tagName);
      for (var j = 0; j < elements.length; j++) {
        found[foundCount++] = elements[j];
      }
    }
    currentContext = found;
  }
  return currentContext;
}


function RenderZebraTables(CSSSelector) {
  if (!CSSSelector) {
    CSSSelector = "table.sitelist";
  }
// CSSSelector, for example: RenderZebraTables("table.sitelist");
  var sitelisttabs = document.getElementsBySelector(CSSSelector);

  if (sitelisttabs) {
     for (var h = 0; h < sitelisttabs.length; h++) {
		    sitelisttabs[h].id = "sitelistid"+h.toString();
		    RenderSingleZebraTab(sitelisttabs[h]);
     }
  }
}

function RenderSingleZebraTab(TabObj) {
   var sitelistoddcolor = "transparent";
   var sitelistevencolor = "#eeeeee";
   var sitelistcells = TabObj.getElementsByTagName("tr");
//	alert(sitelistcells.length);
   for (var j = 0; j < sitelistcells.length; j++) {
//	sitelistcells[j]
       if (j%2 == 0) {
  	  //odd
  		    sitelistcells[j].style.background=sitelistoddcolor;
  	   } else {
  				 //even
  	  	    sitelistcells[j].style.background=sitelistevencolor;
  		 }
    }
}


var NodeNames = new Array(13);
NodeNames[0] = "";
NodeNames[1] = "Element"; //Tree
NodeNames[2] = "Attribute"; //Tree
NodeNames[3] = "Text"; //Leaf
NodeNames[4] = "CDATA Section"; //Leaf
NodeNames[5] = "Entity Reference"; //Tree
NodeNames[6] = "Entity";  //Tree
NodeNames[7] = "Processing Instruction"; //Leaf
NodeNames[8] = "Comment"; //Leaf
NodeNames[9] = "Document"; //Tree
NodeNames[10] = "Document Type"; //Leaf
NodeNames[11] = "Document Fragment"; //Tree
NodeNames[12] = "Notation"; //Leaf

var iNumTabs = 1;
var sLB = new String(String.fromCharCode(13)+String.fromCharCode(10));
var sCol = new String(String.fromCharCode(9)+String.fromCharCode(9));

function dumpDOM(aNode, aIndent)
 {
   if (!aIndent) aIndent = "";
   document.write(aIndent + "-" + aNode.nodeName + ": "+ NodeNames[aNode.nodeType] + "(" + aNode.nodeType + ")" + "\n");
//	 if (aNode.nodeName=="STYLE") {
//     emptyChildren(aNode);
//	 } else {
	     if (aNode.nodeType==3) {
  	     document.write(aIndent + "  " + "Data=\"" + aNode.nodeValue + "\"\n");
     		 if (aNode.value) {
           document.write(aIndent + "  " + "Text=\"" + aNode.value + "\"\n");
    		 }

			 }	 
       var attrs = aNode.attributes;
       var attr;
    	 if (attrs) {	 
       for (var a = 0; a < attrs.length; ++a) { 
         attr = attrs[a];
//    		 if (attr.nodeValue) {
//           document.write(aIndent + "  " + attr.nodeName + "=\"" + attr.nodeValue + "\"\n");
//    		 }
    		 if ((attr.value!="null")&&(attr.value!="")) {
           document.write(aIndent + "  " + attr.name + "=\"" + attr.value + "\"\n");
    		 }
       }
    	 }
       document.write(aIndent + "\n");
       aIndent += "  ";
       for (var i = 0; i < aNode.childNodes.length; ++i)
         dumpDOM(aNode.childNodes[i], aIndent);
//	}			 
}

function resizecontentheight() {
  if ((document.all.bodyright)&&(document.all.bodyleft)) {
    if (navigator.userAgent.indexOf('MSIE')==-1){
    	 var NonIEPad = 7;  // Subtract from Height for non-IE Browsers (padding)
    } else {
       var NonIEPad = 0;
    }	 
    if (document.all.bodyright.offsetHeight!==document.all.bodyleft.offsetHeight) {
      if (document.all.bodyright.offsetHeight>document.all.bodyleft.offsetHeight) {
        document.all.bodyleft.style.height=document.all.bodyright.offsetHeight - NonIEPad;
      } else {
        document.all.bodyright.style.height=document.all.bodyleft.offsetHeight - NonIEPad;
      }
		}
  }
}



function sortables_init() {
    // Find all tables with class sortable and make them sortable
    if (!document.getElementsByTagName) return;
    tbls = document.getElementsByTagName("table");
    for (ti=0;ti<tbls.length;ti++) {
        thisTbl = tbls[ti];
        if (((' '+thisTbl.className+' ').indexOf("sortable") != -1) && (thisTbl.id)) {
            //initTable(thisTbl.id);
            ts_makeSortable(thisTbl);
        }
    }	
}

function ts_makeSortable(table) {
    if (table.rows && table.rows.length > 0) {
        var firstRow = table.rows[0];
    }
    if (!firstRow) return;
    
    // We have a first row: assume it's the header, and make its contents clickable links
    for (var i=0;i<firstRow.cells.length;i++) {
        var cell = firstRow.cells[i];
        var txt = ts_getInnerText(cell);
        cell.innerHTML = '<a href="#" class="sortheader" onclick="ts_resortTable(this);return false;">'+txt+'<img src="http://www.cumbrowski.com/images/sortarrowupdown.png" align="right" hspace=2 vspace=2 class="sortarrow"><span class="tooltip">Click to sort content.</span></a>';
    }
}

function ts_getInnerText(el) {
	if (typeof el == "string") return el;
	if (typeof el == "undefined") { return el };
	if (el.innerText) return el.innerText;	//Not needed but it is faster
	var str = "";
	
	var cs = el.childNodes;
	var l = cs.length;
	for (var i = 0; i < l; i++) {
		switch (cs[i].nodeType) {
			case 1: //ELEMENT_NODE
				str += ts_getInnerText(cs[i]);
				break;
			case 3:	//TEXT_NODE
				str += cs[i].nodeValue;
				break;
		}
	}
	return str;
}

function ts_resortTable(lnk) {
    // get the span
    var span;
    for (var ci=0;ci<lnk.childNodes.length;ci++) {
        if (lnk.childNodes[ci].tagName && lnk.childNodes[ci].tagName.toLowerCase() == 'img' && lnk.childNodes[ci].className=='sortarrow') span = lnk.childNodes[ci];
    }
    var spantext = ts_getInnerText(span);
    var td = lnk.parentNode;
    var column = td.cellIndex;
    var table = getParent(td,'TABLE');
    
    // Work out a type for the column
    if (table.rows.length <= 1) return;
    var itm = ts_getInnerText(table.rows[1].cells[column]);
    sortfn = ts_sort_caseinsensitive;
    if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d\d\d$/)) sortfn = ts_sort_date;
    if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d$/)) sortfn = ts_sort_date;
    if (itm.match(/^[£$]/)) sortfn = ts_sort_currency;
    if (itm.match(/^[\d\.]+$/)) sortfn = ts_sort_numeric;
    SORT_COLUMN_INDEX = column;
    var firstRow = new Array();
    var newRows = new Array();
    for (i=0;i<table.rows[0].length;i++) { firstRow[i] = table.rows[0][i]; }
    for (j=1;j<table.rows.length;j++) { newRows[j-1] = table.rows[j]; }

    newRows.sort(sortfn);

    if (span.getAttribute("sortdir") == 'down') {
        ARROW = '/images/sortarrowup.png';
        newRows.reverse();
        span.setAttribute('sortdir','up');
    } else {
        ARROW = '/images/sortarrowdown.png';
        span.setAttribute('sortdir','down');
    }
    
    // We appendChild rows that already exist to the tbody, so it moves them rather than creating new ones
    // don't do sortbottom rows
    for (i=0;i<newRows.length;i++) { if (!newRows[i].className || (newRows[i].className && (newRows[i].className.indexOf('sortbottom') == -1))) table.tBodies[0].appendChild(newRows[i]);}
    // do sortbottom rows only
    for (i=0;i<newRows.length;i++) { if (newRows[i].className && (newRows[i].className.indexOf('sortbottom') != -1)) table.tBodies[0].appendChild(newRows[i]);}
    
    // Delete any other arrows there may be showing
    var allspans = document.getElementsByTagName("img");
    for (var ci=0;ci<allspans.length;ci++) {
        if (allspans[ci].className == 'sortarrow') {
            if (getParent(allspans[ci],"table") == getParent(lnk,"table")) { // in the same table as us?
                allspans[ci].src = '/images/sortarrowupdown.png';
            }
        }
    }
        
    span.src = ARROW;
		RenderSingleZebraTab(table);
}

function getParent(el, pTagName) {
	if (el == null) return null;
	else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase())	// Gecko bug, supposed to be uppercase
		return el;
	else
		return getParent(el.parentNode, pTagName);
}
function ts_sort_date(a,b) {
    // y2k notes: two digit years less than 50 are treated as 20XX, greater than 50 are treated as 19XX
    aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);
    bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);
    if (aa.length == 10) {
        dt1 = aa.substr(6,4)+aa.substr(3,2)+aa.substr(0,2);
    } else {
        yr = aa.substr(6,2);
        if (parseInt(yr) < 50) { yr = '20'+yr; } else { yr = '19'+yr; }
        dt1 = yr+aa.substr(3,2)+aa.substr(0,2);
    }
    if (bb.length == 10) {
        dt2 = bb.substr(6,4)+bb.substr(3,2)+bb.substr(0,2);
    } else {
        yr = bb.substr(6,2);
        if (parseInt(yr) < 50) { yr = '20'+yr; } else { yr = '19'+yr; }
        dt2 = yr+bb.substr(3,2)+bb.substr(0,2);
    }
    if (dt1==dt2) return 0;
    if (dt1<dt2) return -1;
    return 1;
}

function ts_sort_currency(a,b) { 
    aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,'');
    bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,'');
    return parseFloat(aa) - parseFloat(bb);
}

function ts_sort_numeric(a,b) { 
    aa = parseFloat(ts_getInnerText(a.cells[SORT_COLUMN_INDEX]));
    if (isNaN(aa)) aa = 0;
    bb = parseFloat(ts_getInnerText(b.cells[SORT_COLUMN_INDEX])); 
    if (isNaN(bb)) bb = 0;
    return aa-bb;
}

function ts_sort_caseinsensitive(a,b) {
    aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).toLowerCase();
    bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).toLowerCase();
    if (aa==bb) return 0;
    if (aa<bb) return -1;
    return 1;
}

function ts_sort_default(a,b) {
    aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);
    bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);
    if (aa==bb) return 0;
    if (aa<bb) return -1;
    return 1;
}


function addEvent(elm, evType, fn, useCapture)
// addEvent and removeEvent
// cross-browser event handling for IE5+,  NS6 and Mozilla
// By Scott Andrew
{
  if (elm.addEventListener){
    elm.addEventListener(evType, fn, useCapture);
    return true;
  } else if (elm.attachEvent){
    var r = elm.attachEvent("on"+evType, fn);
    return r;
  } else {
    alert("Handler could not be removed");
  }
}


function setclass(sID,sClass) {
    if (document.getElementById(sID)) {	
        ntf = document.getElementById(sID);
        ntf.setAttribute('className',sClass); // IE way
				ntf.className = sClass;
    }	
}