function MM_preloadImages()
	{ //v1.2
  	if (document.images) 
		{
   		var imgFiles = MM_preloadImages.arguments;
	    var preloadArray = new Array();
    	for (var i=0; i<imgFiles.length; i++) 
			{
   	  		preloadArray[i] = new Image;
      		preloadArray[i].src = imgFiles[i];
    		}
  		}	
	}

function MM_swapImage() 
	{ //v1.2
	var i,j=0,objStr,obj,swapArray=new Array,oldArray=document.MM_swapImgData;
	 	for (i=0; i < (MM_swapImage.arguments.length-2); i+=3)
		{
   			objStr = MM_swapImage.arguments[(navigator.appName == 'Netscape')?i:i+1];
		    if ((objStr.indexOf('document.layers[')==0 && document.layers==null) ||
        		(objStr.indexOf('document.all[')   ==0 && document.all   ==null))
	    	  		objStr = 'document'+objStr.substring(objStr.lastIndexOf('.'),objStr.length);
   			 		obj = eval(objStr);
		    if (obj != null)
			 	{
   			  	swapArray[j++] = obj;
		      	swapArray[j++] = (oldArray==null || oldArray[j-1]!=obj)?obj.src:oldArray[j];
		      	obj.src = MM_swapImage.arguments[i+2];
				}
		}
  		
		document.MM_swapImgData = swapArray; //used for restore
	}

function MM_swapImgRestore() 
	{ //v1.2
		if (document.MM_swapImgData != null)
	    	for (var i=0; i<(document.MM_swapImgData.length-1); i+=2)
	      		document.MM_swapImgData[i].src = document.MM_swapImgData[i+1];
	}

// alternate each row color
function alternate(id){ 
 if(document.getElementsByTagName){  
   var table = document.getElementById(id);   
   var rows = table.getElementsByTagName("tr");   
   for(i = 0; i < rows.length; i++){           
 //manipulate rows 
     if(i % 2 == 0){ 
	   rows[i].className = "even"; 
     }else{ 
       rows[i].className = "odd"; 
     }       
   } 
   rollover(id,'over');
 } 
}

// highlight row on over
var arrayOfRolloverClasses = new Array();
var activeRow = false;
var activeCell = false;

function highlightTableRow()
{
	var tableObj = this.parentNode;
	if(tableObj.tagName!='TABLE')tableObj = tableObj.parentNode;

	if(this!=activeRow){
		this.setAttribute('origCl',this.className);
		this.origCl = this.className;
	}
	this.className = arrayOfRolloverClasses[tableObj.id];
	
	activeRow = this;
}

function resetRowStyle()
{
	var origCl = this.getAttribute('origCl');
	if(!origCl)origCl = this.origCl;
	this.className=origCl;
}
	
function rollover(tableId,whichClass)
{
	arrayOfRolloverClasses[tableId] = whichClass;
	
	var tableObj = document.getElementById(tableId);
	var tBody = tableObj.getElementsByTagName('TBODY');
	if(tBody){
		var rows = tBody[0].getElementsByTagName('TR');
	}else{
		var rows = tableObj.getElementsByTagName('TR');
	}
	for(var no=0;no<rows.length;no++){
		rows[no].onmouseover = highlightTableRow;
		rows[no].onmouseout = resetRowStyle;
	}
}

// highlight images
function resetCellStyle()
{
	var origCl = this.getAttribute('origCl');
	if(!origCl)origCl = this.origCl;
	this.className=origCl;
}
	
function highlightImage()
{
	var imgObj = this;
	
	if(this!=activeCell){
		this.setAttribute('origCl',this.className);
		this.origCl = this.className;
	}
	this.className = arrayOfRolloverClasses[imgObj.id];
	activeCell = this;
}

function rolloverImage(tableId)
{
	arrayOfRolloverClasses[tableId] = 'imageover';
	
	var cells = document.getElementsByTagName('IMG');
	for(var no=0;no<cells.length;no++){
		cells[no].onmouseover = highlightImage;
		cells[no].onmouseout = resetCellStyle;
	}
}

function fn_cleanup_dblspc(textarea) {
	//replace spaces with line end so the line reduction code following works okay
	result = fn_cleanup_spaces(textarea);
	//replace multiple line gaps down to 1 line spacer
	fn_replace(textarea,/\r\n\r\n\r\n/g,'\r\n\r\n');
}

function fn_cleanup_snglspc(textarea) {
    if(!textarea.setSelectionRange) {
		var selected = document.selection.createRange().text; 
        if(selected.length != 0) {
			//replace spaces with line end so the line reduction code following works okay
			document.selection.createRange().text = selected.replace(/\r\n\r\n/g,'\r\n'); 
		} else {
			alert ('You need to select the text to be cleaned up.');
		}
	} else { 
		alert ('You need to select the text to be cleaned up.');
	}
}

function fn_cleanup_spaces(textarea) {
	//replace spaces with line end so the line reduction code following works okay
	fn_replace(textarea,/ \r\n/g,'\r\n');
	fn_replace(textarea,/  \r\n/g,'\r\n');
	fn_replace(textarea,/   \r\n/g,'\r\n');
	fn_replace(textarea,/    \r\n/g,'\r\n');
	fn_replace(textarea,/     \r\n/g,'\r\n');
	fn_replace(textarea,/      \r\n/g,'\r\n');
	fn_replace(textarea,/       \r\n/g,'\r\n');
	fn_replace(textarea,/        \r\n/g,'\r\n');
}

function fn_cleanup_pdf(textarea) {
	//get the value (split into pre-selection, selected text and post-selection)
    var selected = document.selection.createRange().text; 
    if(!textarea.setSelectionRange)
    {
		if(selected.length > 0)
		{
	        //find an end-of-line marker

			var codetext = selected;
			
			//if the previous character is not a paragraph ender ie. ." then replace end-of-line marker with space
	     	var sReplaceThis = "\r\n";
			var sWithThis = ' ';
			var sString = codetext;
			var counter = 0;
	     	var start = 0;
	     	var before = "";
	     	var after = "";
	     	while (counter<sString.length) {
		       	start = sString.indexOf(sReplaceThis, counter);
		       	if (start == -1) {
	        		break;
	        	} else {
	          		if (start > 0) {
						previousChar = sString.substr(start-1, 1)
						if (previousChar == '"' || previousChar == '.' || previousChar == '!' || previousChar == '?') {
			          		replaceString = "\r\n\r\n";
						} else {
							replaceString = ' ';
						}
						before = sString.substr(0, start);
		          		after = sString.substr(start + sReplaceThis.length, sString.length);
		          		sString = before + replaceString + after;
		          		counter = before.length + replaceString.length;
					} else {
						counter = 1;
					}
	         	}
	       }
			
			//replace paragraph markers with spaces
			//codetext = fn_replace2(codetext,'\r\n',' ');
			//after full stops - replace with paragraph markers
			//codetext = fn_replace2(codetext,'. ','.\r\n\r\n');
			//after quotes - replace with paragraph markers
			//codetext = fn_replace2(codetext,'" ','"\r\n\r\n');
			
			//replace the value
			document.selection.createRange().text = sString;

			//final  cleaunp in case we have created double spacing
			var result = fn_cleanup_dblspc(textarea);
		}
		else
		{ 
			alert ('You need to select the text to be cleaned up.');
		}
	}
}

function fn_replace(textarea,findString,replaceString) {
	var article = "";
	var newarticle = "";
	newarticle = textarea.value;
	do
	{
		article = newarticle;
		newarticle = article.replace(findString,replaceString);
	}
	while (newarticle != article)
	textarea.value = newarticle;
}

function fn_replace2(sString,sReplaceThis,sWithThis) { 
	//this function works better than the fn_replace for the pdf replacement button
 	if (sReplaceThis != "" && sReplaceThis != sWithThis) {
     	var counter = 0;
     	var start = 0;
     	var before = "";
     	var after = "";
     	while (counter<sString.length) {
       	start = sString.indexOf(sReplaceThis, counter);
       	if (start == -1){
        		break;
        	} else {
          		before = sString.substr(0, start);
          		after = sString.substr(start + sReplaceThis.length, sString.length);
          		sString = before + sWithThis + after;
          		counter = before.length + sWithThis.length;
         	}
       }
   	}
	return sString;
}

// insertcode is used for bold, italic, underline and quote and just
// wraps the tags around a selection or prompts the user for some
// text to apply the tag to
function insertcode(textarea,tag, desc)
{
    // our open tag
    var open = "<" + tag + ">";
    // our close tag
    var close = "</" + tag + ">";
    if(!textarea.setSelectionRange)
    {
        var selected = document.selection.createRange().text; 
        if(selected.length <= 0)
        { 
            // no text was selected so prompt the user for some text
            newvalue = prompt("Please enter the text you'd like to " + desc, "");
			if (newvalue != null && newvalue != "") {
				textarea.value += open + newvalue + close;
			}
        }
        else
        {
            // put the code around the selected text
			document.selection.createRange().text = open + selected + close; 
        }
    }
    else
    {
		// the text before the selection
		var pretext = textarea.value.substring(0, b.selectionStart);
        // the selected text with tags before and after
        var codetext = open + textarea.value.substring(b.selectionStart, b.selectionEnd) + close;
        // the text after the selection
        var posttext = textarea.value.substring(b.selectionEnd, textarea.value.length)
        // check if there was a selection
        if(codetext == open + close)
        {
            //prompt the user
            codetext = open + prompt("Please enter the text you'd like to " + desc, "") + close;
        }
        // update the text field
        textarea.value = pretext + codetext + posttext;
    }
    // set the focus on the text field
    textarea.focus();
}

function fn_imgzoom(sPicURL) { 
     window.open( "imgzoom.htm?"+sPicURL, "", "resizable=1,HEIGHT=200,WIDTH=200"); 
} 
