function printFriendly(){
		var string= '';
		var file = '';
		var myLoc = location.href;
		if (myLoc.indexOf('?') > 0){
			file = myLoc + '&pf=True';
		}else{
			file = myLoc + '?pf=True';
		}
		hwnd = window.open(file,"",string) ;                  
          if (navigator.appName == "Netscape") { 
             hwnd.focus() 
          } 
} 

var subNavVisible = 0;


function showit(myvar){
	eval("document.getElementById('subnav" + subNavVisible + "').style.display = 'none';");
	eval("document.getElementById('subnav" + myvar + "').style.display = 'inline';");
	subNavVisible = myvar;
}

function highLightRow() {
	if (document.getElementById) {
	var tables=document.getElementsByTagName('table');
		for (var i=0;i<tables.length;i++) {
		if(tables[i].className=='selecttable') {
			var trs=tables[i].getElementsByTagName('tr');
			for(var j=0;j<trs.length;j++) {

				if(trs[j].parentNode.nodeName=='TBODY'){
					if (j % 2 == 1) var highlightClass='highlightOffOdd'; 

					else var highlightClass = 'highlightOffEven';

					trs[j].className=highlightClass;

					trs[j].onmouseover=function(){
						this.className='highlightOn';
						return false
					}
					if (highlightClass=='highlightOffOdd') {
						trs[j].onmouseout=function(){
							this.className='highlightOffOdd';
							return false
						}
					}
					if (highlightClass=='highlightOffEven') {
						trs[j].onmouseout=function(){
							this.className='highlightOffEven';
							return false;
						}
					}
				}
			}
		}
	}
	}   

}



function getObject( obj ) {
  if ( document.getElementById ) {
    obj = document.getElementById( obj );
  } else if ( document.all ) {
    obj = document.all.item( obj );
  } else {
    obj = null;
  }
  return obj;
  }


function moveObject( obj, e ) {
  var tempX = 0;
  var tempY = 0;
  var offset = 5;
  var objHolder = obj;

  obj = getObject( obj );
  if (obj==null) return;

  if (document.all) {
    tempX = event.clientX + document.body.scrollLeft;
    tempY = event.clientY + document.body.scrollTop;
  } else {
    tempX = e.pageX;
    tempY = e.pageY;
  }

  if (tempX < 0){tempX = 0}
  if (tempY < 0){tempY = 0}

  obj.style.top  = (tempY + offset) + 'px';
  obj.style.left = (tempX + offset) + 'px';

  displayObject( objHolder, true );
}


function displayObject( obj, show ) {

  obj = getObject( obj );
  if (obj==null) return;

  obj.style.display = show ? 'block' : 'none';
  obj.style.visibility = show ? 'visible' : 'hidden';
  }


function openPopupList(elementid, event){
    moveObject(elementid, event);
}

function closePopupList(elementid, elementToUpdate, cbName){
	document.getElementById(elementid).style.visibility='hidden';
	var e=document.getElementsByName(cbName);

	var c_value = "";
	for (var i=0; i < e.length; i++)
   	{
   		if (e[i].checked)
      		{
      		c_value = c_value + e[i].getAttribute('label') + "<br/>";
      		}
   	}

	document.getElementById(elementToUpdate).innerHTML = c_value;
}

function copy_clipboard(inElement) 
{
	if (inElement.createTextRange) 
	{
    	var range = inElement.createTextRange();
    	if (range && BodyLoaded==1)
     		range.execCommand('Copy');
  	} 
  	else 
  	{
    	var flashcopier = 'flashcopier';
    	if(!document.getElementById(flashcopier)) 
    	{
      		var divholder = document.createElement('div');
      		divholder.id = flashcopier;
      		document.body.appendChild(divholder);
    	}
    	document.getElementById(flashcopier).innerHTML = '';
    	var divinfo = '<embed src="/apacheres/commonjs/_clipboard.swf" FlashVars="clipboard='+escape(inElement)+'" width="0" height="0" type="application/x-shockwave-flash"></embed>';
    	document.getElementById(flashcopier).innerHTML = divinfo;
  	}
}
			
			/* 'Magic' date parsing, by Simon Willison (6th October 2003)
   http://simon.incutio.com/archive/2003/10/06/betterDateInput
*/

/* Finds the index of the first occurence of item in the array, or -1 if not found */
Array.prototype.indexOf = function(item) {
    for (var i = 0; i < this.length; i++) {
        if (this[i] == item) {
            return i;
        }
    }
    return -1;
};
/* Returns an array of items judged 'true' by the passed in test function */
Array.prototype.filter = function(test) {
    var matches = [];
    for (var i = 0; i < this.length; i++) {
        if (test(this[i])) {
            matches[matches.length] = this[i];
        }
    }
    return matches;
};

var monthNames = "January February March April May June July August September October November December".split(" ");
var weekdayNames = "Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" ");

/* Takes a string, returns the index of the month matching that string, throws
   an error if 0 or more than 1 matches
*/
function parseMonth(month) {
    var matches = monthNames.filter(function(item) { 
        return new RegExp("^" + month, "i").test(item);
    });
    if (matches.length == 0) {
        throw new Error("Invalid month string");
    }
    if (matches.length > 1) {
        throw new Error("Ambiguous month");
    }
    return monthNames.indexOf(matches[0]);
}
/* Same as parseMonth but for days of the week */
function parseWeekday(weekday) {
    var matches = weekdayNames.filter(function(item) {
        return new RegExp("^" + weekday, "i").test(item);
    });
    if (matches.length == 0) {
        throw new Error("Invalid day string");
    }
    if (matches.length > 1) {
        throw new Error("Ambiguous weekday");
    }
    return weekdayNames.indexOf(matches[0]);
}

/* Array of objects, each has 're', a regular expression and 'handler', a 
   function for creating a date from something that matches the regular 
   expression. Handlers may throw errors if string is unparseable. 
*/
var dateParsePatterns = [
    // Today
    {   re: /^tod/i,
        handler: function() { 
            return new Date();
        } 
    },
    // Tomorrow
    {   re: /^tom/i,
        handler: function() {
            var d = new Date(); 
            d.setDate(d.getDate() + 1); 
            return d;
        }
    },
    // Yesterday
    {   re: /^yes/i,
        handler: function() {
            var d = new Date();
            d.setDate(d.getDate() - 1);
            return d;
        }
    },
    // 4th Jan 2003
    {   re: /^(\d{1,2})(?:st|nd|rd|th)? (\w+),? (\d{4})$/i,
        handler: function(bits) {
            var d = new Date();
            d.setDate(parseInt(bits[1], 10));
            d.setMonth(parseMonth(bits[2]));
            d.setYear(bits[3]);
            return d;
        }
    },
    // Jan 4th 2003
    {   re: /^(\w+) (\d{1,2})(?:st|nd|rd|th)?,? (\d{4})$/i,
        handler: function(bits) {
            var d = new Date();
            d.setDate(parseInt(bits[2], 10));
            d.setMonth(parseMonth(bits[1]));
            d.setYear(bits[3]);
            return d;
        }
    },
    // dd/mm/yyyy (UK style)
    {   re: /(\d{1,2})\/(\d{1,2})\/(\d{4})/,
        handler: function(bits) {
            var d = new Date();
            d.setYear(bits[3]);
            var month = parseInt(bits[2], 10);
            if (month > 12){
            	throw new Error("Sorry, months should be less that 12!");
            }
            d.setMonth(month - 1); // Because months indexed from 0
            var daynum = parseInt(bits[1], 10);
            if (daynum > 31){
            	throw new Error("Sorry, days should be less that 31!");
            }
            d.setDate(daynum);
            return d;
        }
    },
    // dd/mm/yy (Short UK style)
    {   re: /(\d{1,2})\/(\d{1,2})\/(\d{2})/,
        handler: function(bits) {

            var d = new Date();
            var testYear = bits[3];
            if (testYear > 50){
            	d.setYear(bits[3]);
            } else {
            	d.setYear('20' + bits[3]);
            }
            var month = parseInt(bits[2], 10);
            if (month > 12){
            	throw new Error("Sorry, months should be less that 12!");
            }
            d.setMonth(month - 1); // Because months indexed from 0
            var daynum = parseInt(bits[1], 10);
            if (daynum > 31){
            	throw new Error("Sorry, days should be less that 31!");
            }
            d.setDate(daynum);
            return d;
        }
    }, 
    // dd-mm-yyyy (UK style)
    {   re: /(\d{1,2})-(\d{1,2})-(\d{4})/,
        handler: function(bits) {
            var d = new Date();
            d.setYear(bits[3]);
            var month = parseInt(bits[2], 10);
            if (month > 12){
            	throw new Error("Sorry, months should be less that 12!");
            }
            d.setMonth(month - 1); // Because months indexed from 0
            var daynum = parseInt(bits[1], 10);
            if (daynum > 31){
            	throw new Error("Sorry, days should be less that 31!");
            }
            d.setDate(daynum);
            return d;
        }
    },
    // dd-mm-yy (Short UK style)
    {   re: /(\d{1,2})-(\d{1,2})-(\d{2})/,
        handler: function(bits) {
            var d = new Date();
            var testYear = bits[3];
            if (testYear > 50){
            	d.setYear(bits[3]);
            } else {
            	d.setYear('20' + bits[3]);
            }
            var month = parseInt(bits[2], 10);
            if (month > 12){
            	throw new Error("Sorry, months should be less that 12!");
            }
            d.setMonth(month - 1); // Because months indexed from 0
            var daynum = parseInt(bits[1], 10);
            if (daynum > 31){
            	throw new Error("Sorry, days should be less that 31!");
            }
            d.setDate(daynum);
            return d;
        }
    },         
    // yyyy-mm-dd (ISO style)
    {   re: /(\d{4})-(\d{1,2})-(\d{1,2})/,
        handler: function(bits) {
            var d = new Date();
            d.setYear(parseInt(bits[1]));
            d.setDate(parseInt(bits[3], 10));
            d.setMonth(parseInt(bits[2], 10) - 1);
            return d;
        }
    },
];

function parseDateString(s) {
    for (var i = 0; i < dateParsePatterns.length; i++) {
        var re = dateParsePatterns[i].re;
        var handler = dateParsePatterns[i].handler;
        var bits = re.exec(s);
        if (bits) {
            return handler(bits);
        }
    }
    throw new Error("Sorry dates should be entered in the format dd/mm/yy.");
}

function doubleDigit(myNum){
	if (myNum < 10){
		return "0" + myNum;
	} else {
		return myNum;
	}	
}

function vdDate(input, eUpdate) {
	input.style.background = '#fff';
    if (input.value != ''){
	    try {
		var d = parseDateString(input.value);
		var day = doubleDigit(d.getDate());
		var month = doubleDigit(d.getMonth() + 1);
		var year = d.getFullYear();

		input.value = day + '/' + month + '/' + year;
		
		// Write parsed date to hidden field
		document.getElementById(eUpdate).value = year + '' + month + '' + day;
	    }
	    catch (e) {
		input.className = 'error';
		var message = e.message;
		// Fix for IE6 bug
		if (message.indexOf('is null or not an object') > -1) {
		    message = 'Sorry dates should be entered in the format dd/mm/yy.';
		}
		alert(message);
		input.value='';
		input.focus();
	    }
    }
}


<!-- This function clears any of the calendar date fields --> 
function clearDate(field1, field2){

	document.getElementById(field1).value='';
	document.getElementById(field2).value='';

}
			