var measureUnit = "px";
//var measureUnit = "pt"

var minSize = 1;
var minStyleSize = 11;
var maxSize = 5;
var maxStyleSize = 16;
var startSize = 1;
var startStyleSize = 11;
var stepSize = 1;
var stepStyleSize = 1;
var html = '';
var invert = true;


function getinnerTags(childTree, level) 
{
	var retArray = new Array();
  	var tmpArray = new Array();
  	var j = 0;
  	var childName = "";
  	for (var i=0; i<childTree.length; i++) 
  	{
    	childName = childTree[i].nodeName;
    	if (childTree[i].hasChildNodes()) 
    	{
      		if ((childTree[i].childNodes.length == 1) && (childTree[i].childNodes[0].nodeName == "#text"))
        		retArray[j++] = childTree[i];
      		else 
      		{
        		tmpArray = getinnerTags(childTree[i].childNodes, level+1);
        		for (var k=0;k<tmpArray.length; k++)
          			retArray[j++] = tmpArray[k];
        		retArray[j++] = childTree[i];
      		}
    	}
    	else
      	retArray[j++] = childTree[i];
  	}
  	return(retArray);
}

function doFontSize(pageId, stepSize, stepStyleSize) 
{
	if (document.body && pageId) 
  	{
  		if(document.getElementById(pageId))
  		{
	    	var innerTagArr = getinnerTags(document.getElementById(pageId).childNodes, 0);	
	    	var myStepSize = stepSize;
	    	var myStepStyleSize = stepStyleSize;
			
	    	var innerTagArrLength = innerTagArr.length;
	    	for (i=0; i<innerTagArrLength; i++) 
	    	{
	      		var theNodeName = innerTagArr[i].nodeName;
	
	      		if (theNodeName != "#text" && theNodeName != "HTML" &&
	          		theNodeName != "HEAD" && theNodeName != "TITLE" &&
	          		theNodeName != "STYLE" && theNodeName != "SCRIPT" &&
	          		theNodeName != "BR" && theNodeName != "TBODY" &&
	          		theNodeName != "#comment" && theNodeName != "FORM") 
	     		{
	
		        	if (theNodeName == "INPUT") 
		        		continue;
		
		        	var size = parseInt(innerTagArr[i].getAttribute("size"));
		
		        	if (innerTagArr[i].currentStyle)
		          		styleSize = parseInt(innerTagArr[i].currentStyle.fontSize);
		        	else 
		          		styleSize = parseInt(window.getComputedStyle(innerTagArr[i], null).fontSize);
			
		        	if (isNaN(size) || (size < minSize) || (size > maxSize))
		          		size = startSize;
		
		        	if (isNaN(styleSize) || (styleSize < minStyleSize) || (styleSize > maxStyleSize))
		          		styleSize = startStyleSize;
		
		        	if ( ((size > minSize) && (size < maxSize)) || 
		            	 ((size == minSize) && (stepSize > 0)) || 
		            	 ((size == maxSize) && (stepSize < 0))) 
		        	{
		          		innerTagArr[i].setAttribute("size", size+myStepSize);
		        	}
		
		        	if ( ((styleSize > minStyleSize) && (styleSize < maxStyleSize)) || 
		            	 ((styleSize == minStyleSize) && (stepStyleSize > 0)) ||
		             	((styleSize == maxStyleSize) && (stepStyleSize < 0))) 
		        	{
		          		newStyleSize = styleSize+myStepStyleSize;
		          		innerTagArr[i].style.fontSize = newStyleSize+measureUnit;
		        	}
	      		}	 
	    	} 
		}
  	}
}

function doInvert(pageId) 
{
	if (document.body && pageId) 
  	{
  		if(document.getElementById(pageId))
  		{
	    	var innerTagArr = getinnerTags(document.getElementById(pageId).childNodes, 0);	
			
	    	var innerTagArrLength = innerTagArr.length;
	    	for (i=0; i<innerTagArrLength; i++) 
	    	{
	      		var theNodeName = innerTagArr[i].nodeName;
	
	      		if (theNodeName != "#text" && theNodeName != "HTML" &&
	          		theNodeName != "HEAD" && theNodeName != "TITLE" &&
	          		theNodeName != "STYLE" && theNodeName != "SCRIPT" &&
	          		theNodeName != "BR" && theNodeName != "TBODY" &&
	          		theNodeName != "#comment" && theNodeName != "FORM") 
	     		{
	
		        	if (theNodeName == "INPUT") 
		        		continue;
		
		        	innerTagArr[i].style.color="#ffffff";
		        	innerTagArr[i].style.backgroundColor="#000000";
	      		}	 
	    	} 
		}
  	}
}

function increaseFontSize(pageId) 
{
	if (document.body)
    	doFontSize(pageId, stepSize, stepStyleSize);
}

function decreaseFontSize(pageId) 
{
	if (document.body) 
    	doFontSize(pageId, -stepSize, -stepStyleSize);
}

function invertColors(pageId)
{
	if (document.body) {
		if (invert) {
			html = document.getElementById(pageId).innerHTML;
			invert = false;
	    	doInvert(pageId);
		} else {
			invert = true;
			document.getElementById(pageId).innerHTML = html;
		}
	} 
}

function dozoom(e) 
{
  	if (document.all)
    	myEvent = event.keyCode;
  	else
    	myEvent = e.which;

  	switch(myEvent) 
  	{
    	case 61: //+
    	case 43: // + plus cap lock
      		increaseFontSize(zoom_portletID);
      		break;

    	case 45: // - 
    	case 95: // - plus cap lock
      		decreaseFontSize(zoom_portletID);
      		break;
      		
    	default:
      		break;
  }
}

if (document.layers)
  document.captureEvents(Event.KEYPRESS);

document.onkeypress = dozoom;

