//Only one action can be submitted from a page
var actionSubmitted = false;

/* callAction() - will replace the form action with the action passed into the function and submit 
 * the form.
 * NOTE: Use in onClick method of button input tag. 
 * param - action: the action to be submitted in '/<action name>' format
 * param - suffix: optional (for web apps using multiple servlet mappings), the suffix of the 
 *                 action (defaults to ".do" if not supplied)
 * author: Jonathan R. DeRose, Christopher R. Murphy 
 */
function callAction(action, suffix)
{
  // use default suffix if not supplied
  if (suffix == null) {
    suffix = ".do";
  }
   
	if(!actionSubmitted)
	{
    // get the application name + action + suffix = absolute from context
		document.forms[0].action = window.location.pathname.substring(0, window.location.pathname.indexOf('/',1)) + action + suffix;
		document.forms[0].submit();
		actionSubmitted = true;
	}
	else {
		alert("Please wait for your action to complete.");
	}
}

/*
 * callActionNoSubmit() - will replace the form action with the action passed into the function but
 * will NOT submit the form (designed to be used with submit input types).  
 * NOTE: Use in onSubmit method of form tag, not onClick of submit button.
 *
 * param - action: the action to be submitted in '/<action name>' format
 * param - suffix: optional (for web apps using multiple servlet mappings), the suffix of the 
 *                 action (defaults to ".do" if not supplied)
 * author: Christopher R. Murphy 
 */
function callActionNoSubmit(action, suffix)
{
  // use default suffix if not supplied
  if (suffix == null) {
    suffix = ".do";
  }

	if(!actionSubmitted)
	{
    // get the application name + action + suffix = absolute from context  
		document.forms[0].action = window.location.pathname.substring(0, window.location.pathname.indexOf('/',1)) + action + suffix;
		actionSubmitted = true;
	}
	else {
		alert("Please wait for your action to complete.");
	}
}

/*******************************************************
WM_setCookie(), WM_readCookie(), WM_killCookie()
A set of functions that eases the pain of using cookies.

Source: Webmonkey Code Library
(http://www.hotwired.com/webmonkey/javascript/code_library/)

Author: Nadav Savio
Author Email: nadav@wired.com
**********************************************************/

// This next little bit of code tests whether the user accepts cookies.
var WM_acceptsCookies = false;
if(document.cookie == '') {
    document.cookie = 'WM_acceptsCookies=yes'; // Try to set a cookie.
    if(document.cookie.indexOf('WM_acceptsCookies=yes') != -1) {
	WM_acceptsCookies = true; 
    }// If it succeeds, set variable
} else { // there was already a cookie
  WM_acceptsCookies = true;
}

function WM_setCookie (name, value, hours, path, domain, secure) {
    if (WM_acceptsCookies) { // Don't waste your time if the browser doesn't accept cookies.
	var not_NN2 = (navigator && navigator.appName 
		       && (navigator.appName == 'Netscape') 
		       && navigator.appVersion 
		       && (parseInt(navigator.appVersion) == 2))?false:true;

	if(hours && not_NN2) { // NN2 cannot handle Dates, so skip this part
	    if ( (typeof(hours) == 'string') && Date.parse(hours) ) { // already a Date string
		var numHours = hours;
	    } else if (typeof(hours) == 'number') { // calculate Date from number of hours
		var numHours = (new Date((new Date()).getTime() + hours*3600000)).toGMTString();
	    }
	}
	document.cookie = name + '=' + escape(value) + ((numHours)?(';expires=' + numHours):'') + ((path)?';path=' + path:'') + ((domain)?';domain=' + domain:'') + ((secure && (secure == true))?'; secure':''); // Set the cookie, adding any parameters that were specified.
    }
} // WM_setCookie


function WM_readCookie(name) {
    if(document.cookie == '') { // there's no cookie, so go no further
	return false; 
    } else { // there is a cookie
	var firstChar, lastChar;
	var theBigCookie = document.cookie;
	firstChar = theBigCookie.indexOf(name);	// find the start of 'name'
	var NN2Hack = firstChar + name.length;
	if((firstChar != -1) && (theBigCookie.charAt(NN2Hack) == '=')) { // if you found the cookie
	    firstChar += name.length + 1; // skip 'name' and '='
	    lastChar = theBigCookie.indexOf(';', firstChar); // Find the end of the value string (i.e. the next ';').
	    if(lastChar == -1) lastChar = theBigCookie.length;
	    return unescape(theBigCookie.substring(firstChar, lastChar));
	} else { // If there was no cookie of that name, return false.
	    return false;
	}
    }	
} // WM_readCookie

function WM_killCookie(name, path, domain) {
  var theValue = WM_readCookie(name); // We need the value to kill the cookie
  if(theValue) {
      document.cookie = name + '=' + theValue + '; expires=Fri, 13-Apr-1970 00:00:00 GMT' + ((path)?';path=' + path:'') + ((domain)?';domain=' + domain:''); // set an already-expired cookie
  }
} // WM_killCooki

/*
	Macromedia-generated image rollover functions.
*/
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}
function MM_preloadImages() { //v3.0
  var d=document; 
	if(d.images){ if(!d.MM_p) d.MM_p=new Array();
  var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
  if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}
function MM_findObj(n, d) { //v4.0
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && document.getElementById) x=document.getElementById(n); return x;
}
function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

/*
	- Opens another browser window with a specified width and height.
	- The window is (currently) hardcoded to be as basic as possible (no 
	  toolbars, scrollbars, statusbar, etc.)  
	- The specified URL is displayed within the new window.	
*/
function openNewWindow(url, width, height) {
	if (width == null) {width = 400;}
	if (height == null) {height = 400;}
	paramString = 'toolbar=no, location=no, directories=no, status=yes, menubar=no, scrollbars=yes, resizable=yes, copyhistory=no, ' +
	               'width=' + width + ', height=' + height;
	window.open (url, 'newwindow', paramString);
}


/*******************************************************************************
DESCRIPTION: Adds text to get a user to add a bookmark in their browser.  In IE
a link is made that when clicked addded the bookmark.  In netscape the text 
(Ctrl+D) is appended onto the text.  

INPUT: 
text - is the text that will be the bookmark link (or have ctrl+d appended to it).
name - the name that the bookmark will be stored as.
url - the url that will be bookmarked.

OUTPUT: a string that should be written to the browser to make the book mark link.

AUTHOR: John Mirick
*******************************************************************************/
function getBookMarkLink(text, name, url){
  var ver = navigator.appName;
  var num = parseInt(navigator.appVersion);
  if ((ver == "Microsoft Internet Explorer")&&(num >= 4)) {
     document.write('<A HREF="javascript:window.external.AddFavorite(\'' + url + '\',\'' + name + '\');" ');
     document.write('onMouseOver="window.status=\'' + text +'\'; return true;" ');
     document.write('onMouseOut="window.status=\'\'; return true; "');
     document.write('>'+ text + '</a>');
  }else{
     text += "  (Ctrl+D)"
     document.write(text)
  } 
}


