// JavaScript Document

// Globals
var cdebug = false;
var _DOCROOT = ''; // ['/athenasmi',''] :: "/athenasmi" for DEVELOPMENT and TESTING, "" for PRODUCTION

/*
---------------------------------------------------------- 
	Function:     showDiv()
	Arguments:    sw - boolean  true|false switch
				  domEleId - DOM Element ID attribute
	Return Value: none.
	Purpose:      to do the following:
				  1. show or hide the DOM element.  Expecting a DIV element, but also works for SPAN element    
	History:
		2006???? - pcg : initial coding
		20060116 - pcg : if the div does not exist, send message to self.status instead of to an alert() popup window.
		20071002 - pcg : added displayType [block, inline, none]
		20071022 - pcg : added collapse [true,false] :: if true, switch height between 0px and auto
		
	references: 
		none.
----------------------------------------------------------
*/
<!--//BEGIN Script
function showDiv(sw,domEleId,displayType) {
	var fname="showDiv()";
	try
	{
		
		// verify div exists
		var divExists;
		divExists=true;
		
		if ( sw == undefined ){return;}
		if ( domEleId==undefined){return;}
		if ( displayType==undefined )
		{
			displayType='block';
		}
		if ( !sw ){diplay='none';}
		
		if ( document.layers ) 
		{
			if (document.layers[domEleId] == null) divExists=false;
			//alert("layers: divExists=" + divExists.toString());
		}
		else
		{
			if (document.getElementById(domEleId) == null) divExists=false;
			//alert("getElementById: divExists=" + divExists.toString());
		}
		
		// show or hide the div only if it exists
		if ( divExists )
		{
			if ( sw ) {
				if ( document.layers ) {
					document.layers[domEleId].visibility = 'visible';
					document.layers[domEleId].display = displayType;// 'block';
				}
				else {
					document.getElementById(domEleId).style.visibility = 'visible';
					document.getElementById(domEleId).style.display = displayType;// 'block'; 
				}
			}
			if ( !sw ){
				if ( document.layers ) {
					document.layers[domEleId].visibility = 'hidden'; 
					document.layers[domEleId].display = displayType;// 'none'; 
				}
				else {
					document.getElementById(domEleId).style.visibility = 'hidden'; 
					document.getElementById(domEleId).style.display = 'none';// 'none'; 
				}
			}
		}
		else
		{
			if(cdebug){alert(fname + " div, layer or span with id [" + domEleId + "] does not exist.");}
			self.status=fname + " : div, layer or span with id [" + domEleId + "] does not exist."
		}
	}
	catch(ex)
	{
		alert(fname + " - Error : " + ex.message);
	}
	//self.status=document.title;
	return;
}
// End -->

<!--//BEGIN Script
/*
---------------------------------------------------------- 
	Function:    emailIsValid()
	Purpose:	 to check if an email string has a valid email format name@company.domain
	Arguments:   (STRING) email :: cursor type
	Return Value: true or false.
	History:
		20070825 - pcg : initial coding
	Reference: SitePoint Chapter 3 email_address_test.js
----------------------------------------------------------
*/
function emailIsValid(email)
{
	var fname="emailIsValid()";
	var isValid=false;
	try
	{
		// sanity check
		if (email==undefined)return(isValid);
		if (email.length==0)return(isValid);
		
		var pattern = /^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$/;
		isValid = pattern.test(email);
	}
	catch(ex)
	{
		alert(fname + " - Error : " + ex.message);
	}
	return(isValid);
}
// End -->

<!--//BEGIN Script
/*
********************************************************************************
	File:		privateScripts.js
	Purpose:	to contain all PRIVATE Javascript functionality.  This file will be encrypted.
	Author:		Peter C. Goemans
	History:
		20070718 - pcg : created file
********************************************************************************
*/	

// global variable declarations


// function declarations

/**
*	@function : launchEmailClient 
*
*   @purpose  : to launch the default email client on the client computer with the intended target and optional subject information.
*
*   @returns  : none.
*
*	@param    : (STRING REFERENCE) name :: string object reference to the name member of the target email address (MANDATORY)
*	@param    : (STRING REFERENCE) company :: string object reference to the company member of the target email address (MANDATORY)
*	@param    : (STRING REFERENCE) domain :: string object reference to the domain member of the target email address (MANDATORY)
*	@param    : (STRING REFERENCE) subject :: string object reference to the subject of the target email (OPTIONAL)
*
*	@author   : Peter C. Goemans
*
*	@history  : 20070718 - pcg : initial coding
*
*	@references : http://www.gidforums.com/t-4201.html
*/
function launchEmailClient(name,company,domain,subject) 
{
	var fname = "launchEmailClient";
	try {
		
		// sanity checks
		if ( name==undefined || !name )return;
		if ( name.length==0 )return;
		if ( company==undefined || !company )return;
		if ( company.length==0 )return;
		if ( domain==undefined || !domain )return;
		if ( domain.length==0 )return;
		if ( subject==undefined || !subject )subject="";
		if ( subject.length==0 )subject="";
		
		var h;
		var toAddress = name + "@" + company + "." + domain;
		var payload = toAddress + "?subject=" + subject;
		h = "mailto:" + payload; 
		location.replace(h);
	}
	catch (ex) {
		alert(fname + "\n\n Error occured: " + ex.message); 
	}
	return;
}
// End -->

<!--//BEGIN Script
/**
*	@function : launchEmailClientForBulkAddressList
*
*   @purpose  : to launch the default email client on the client computer with the intended target and optional subject information.
*
*   @returns  : none.
*
*	@param    : (STRING REFERENCE) tolist :: string object reference to the list of target email address in the TO field(MANDATORY)
*	@param    : (STRING REFERENCE) cclist :: string object reference to the list of target email address in the CC field(MANDATORY)
*	@param    : (STRING REFERENCE) bcclist :: string object reference to the list of target email address in the BCC field(MANDATORY)
*	@param    : (STRING REFERENCE) subject :: string object reference to the subject of the target email (OPTIONAL)
*
*	@author   : Peter C. Goemans
*
*	@history  : 20071018 - pcg : initial coding
*
*	@references : http://www.ianr.unl.edu/internet/mailto.html
*/
function launchEmailClientForBulkAddressList(tolist,cclist,bcclist,subject) 
{
	var fname = "launchEmailClientForBulkAddressList";
	try {
		// sanity checks
		if ( tolist==undefined || !tolist ){tolist="";}
		if ( tolist.length==0 ){tolist="";}
		if ( cclist==undefined || !cclist ){cclist="";}
		if ( cclist.length==0 ){cclist="";}
		if ( bcclist==undefined || !bcclist ){bcclist="";}
		if ( bcclist.length==0 ){bcclist="";}
		if ( subject==undefined || !subject ){subject="";}
		if ( subject.length==0 ){subject="";}
		
		var maxQueryStringLen=2053;
		var h;
		var toAddress = "webmaster" + "@" + "athenasmi" + "." + "org"; // change to info when ready for release
		var ccAddressList = ""; 
		var bccAddressList = "";
		if ( tolist.length>0 ) {
			toAddress += ";" + tolist;
		}
		if ( cclist.length>0 ) {
			ccAddressList += "&cc=" + cclist;
		}
		if ( bcclist.length>0 ) {
			bccAddressList += "&bcc=" + bcclist;
		}
		var payload = toAddress + "?subject=" + subject + ccAddressList + bccAddressList;
		h = "mailto:" + payload; 
//alert(fname + "\n\n tolist = " + tolist + "\n\n cclist = " + cclist + "\n\n bcclist = " + bcclist + "\n\n subject = " + subject + "\n\n maxQueryStringLen = " + maxQueryStringLen + "\n\n h.length = " + h.length + "\n\n h = " + h);		
		if ( h.length < maxQueryStringLen ) {
			location.replace(h);
		}
		else {
			alert(fname + " - WARNING:  you are attempting to shove a new location string of length " + h.length + " into a querystring (GET) that has a size limit of 2083 characters.  You should try a different approach.\n\n The new location you are attempting is: " + h );
		}
	}
	catch (ex) {
		alert(fname + "\n\n Error occured: " + ex.message); 
	}
	return;
}
// End -->


<!--//BEGIN Script
/**
*	@function : launchChildWindow
*
*   @purpose  : to launch a file download event.
*
*   @returns  : none.
*
*	@param    : (STRING REFERENCE) targetUrl :: string object reference to the target file URL(MANDATORY)
*	@param    : (BOOLEAN REFERENCE) closeChild :: boolean object reference to identify whether or not to close the child window (OPTIONAL)
*	@param    : (INTEGER REFERENCE) closeDelay :: integer object reference to identify the delay (milliseconds) for closing the child window (OPTIONAL)
*
*	@author   : Peter C. Goemans
*
*	@history  : 20120113 - pcg : initial coding
*
*/
function launchChildWindow(targetUrl,closeChild,closeDelay) 
{
	var fname = "launchChildWindow";
	try {
		if(cdebug){ alert(fname + "\n\t targetUrl = " + targetUrl + "\n\t closeChild = " + closeChild + "\n\t closeDelay = " + closeDelay); }

		if(cdebug){ alert(" -- 1-- " + fname + "\n\t targetUrl = " + targetUrl + "\n\t closeChild = " + closeChild + "\n\t closeDelay = " + closeDelay); }

		// sanity checks
		if ( targetUrl==undefined || !targetUrl ){return;}
		if ( closeChild==undefined || !closeChild ){closeChild=true;}
		if ( closeDelay==undefined || !closeDelay ){closeDelay=5000;}

		if(cdebug){ alert(" -- 2-- " + fname + "\n\t targetUrl = " + targetUrl + "\n\t closeChild = " + closeChild + "\n\t closeDelay = " + closeDelay); }

		// launch the child window
		myWindow=window.open(targetUrl,"launchChildWindow");
		if(cdebug){ alert(" -- 3-- " + fname + "\n\t targetUrl = " + targetUrl + "\n\t closeChild = " + closeChild + "\n\t closeDelay = " + closeDelay); }
		if ( myWindow )
		{
			if(cdebug){ alert(" -- 4-- " + fname + "\n\t targetUrl = " + targetUrl + "\n\t closeChild = " + closeChild + "\n\t closeDelay = " + closeDelay + "\n\t myWindow = " + myWindow + "\n\t myWindow.closed = " + myWindow.closed + "\n\t closeChild = " + closeChild + "\n\t closeDelay = " + closeDelay + "\n"); }
			if ( !myWindow.closed )
			{
				if(cdebug){ alert(" -- 5-- " + fname + "\n\t targetUrl = " + targetUrl + "\n\t closeChild = " + closeChild + "\n\t closeDelay = " + closeDelay); }
				setTimeout('myWindow.close()',parseInt(closeDelay));
			}
		}
	}
	catch (ex) {
		alert(fname + "\n\n Error occured: " + ex.message); 
	}
	return;
}
// End -->

<!--//BEGIN Script
// SRC: http://www.xs4all.nl/~sbpoley/webmatters/formval.html
// ----------------------------------------------------------------------
// Javascript form validation routines.
// Author: Stephen Poley

// --------------------------------------------
//                  setfocus
// Delayed focus setting to get around IE bug
// --------------------------------------------
var global_valfield;	// retain valfield for timer thread
function setFocusDelayed()
{
	if(global_valfield.focus!=undefined) {
  		global_valfield.focus();
	}
}

function setfocus(valfield)
{
  // save valfield in global variable so value retained when routine exits
  global_valfield = valfield;
  setTimeout( 'setFocusDelayed()', 100 );
}
// END OF :: SRC: http://www.xs4all.nl/~sbpoley/webmatters/formval.html
// End -->

<!--//BEGIN Script
/*
---------------------------------------------------------- 
	Function:    stringContainsHyperlink()
	Purpose:	 to check if a string contains hyperlink info (we want to filter them out from the contact forms)
	Arguments:   (STRING) strObj :: a string object
	Return Value: true or false.
	History:
		20080825 - pcg : initial coding
	Reference: none.
----------------------------------------------------------
*/
function stringContainsHyperlink(strObj)
{
	var fname="stringContainsHyperlink()";
	var retval=false;
	try
	{
		// sanity check
		if (strObj==undefined)return(retval);
		if (strObj.length==0)return(retval);
		
		// check for key substrings that may identify the presence of a hyperlink
		if ( ( strObj.indexOf("http:") != -1 ) ||
			 ( strObj.indexOf("<a href=") != -1 ) ||	
			 ( strObj.indexOf("<\/a>") != -1 ) ) 
		{
			retval = true;
		}
	}
	catch(ex)
	{
		alert(fname + " - Error : " + ex.message);
	}
	return(retval);
}
// End -->

<!--//BEGIN Script
/**
*	@function : resetForm_ImpactEstimatorForHighways_GetSoftware
*
*   @purpose  : to reset the form input fields
*
*   @returns  : none.
*
*	@param    : (OBJECT REFERENCE) formObj :: element object reference to the form object
*
*	@author   : Peter C. Goemans
*
*	@history  : 20120113 - pcg : initial coding
*/
function resetForm_ImpactEstimatorForHighways_GetSoftware(eleObj)
{
	var fname="resetForm_ImpactEstimatorForHighways_GetSoftware()";
	var vRetVal=false;
	try {
		// sanity check
		if ( eleObj==undefined ){return false;}
		
		// debug
		if(cdebug){alert(fname + "\n\n eleObj.nodeName=" + eleObj.nodeName + "\n\n eleObj.id=" + eleObj.id + "\n\n eleObj.name=" + eleObj.name +  "\n\n eleObj.value=(" + eleObj.value + ")");}

		// reset info elements
		var vEleObjErr;
		
		// hidden (required) fields
		vEleObjErr=document.getElementById("email");  if ( vEleObjErr ) {vEleObjErr.value = "";}
		vEleObjErr=document.getElementById("realname");  if ( vEleObjErr ) {vEleObjErr.value = "";}
		vEleObjErr=document.getElementById("redirect");  if ( vEleObjErr ) {vEleObjErr.value = "";}
		
		// visible input fields
		vEleObjErr=document.getElementById("your_name_err"); if ( vEleObjErr ) {vEleObjErr.innerHTML = "&nbsp;";}
		vEleObjErr=document.getElementById("your_email_err");  if ( vEleObjErr ) {vEleObjErr.innerHTML = "&nbsp;";}
		
		// set the focus
		setfocus(eleObj['email']);
		
		// show or hide the download div
		showDiv(false,'divImpactEstimatorForHighways_Download');
			
		// set return value
		vRetVal=true;
	}
	catch(ex)
	{
		alert("Error : " + ex.message + "\n\n was encountered in " + fname + ".\n\nUnable to reset the form.");
		vRetVal=false;
	}
	return vRetVal;	
}
// End -->

<!--//BEGIN Script
/**
*	@function : validateForm_ImpactEstimatorForHighways_GetSoftware
*
*   @purpose  : to validate the form input fields
*
*   @returns  : none.
*
*	@param    : (OBJECT REFERENCE) formObj :: element object reference to the form object
*
*	@author   : Peter C. Goemans
*
*	@history  : 20120113 - pcg : initial coding
*/
function validateForm_ImpactEstimatorForHighways_GetSoftware(eleObj)
{
	var fname="validateForm_ImpactEstimatorForHighways_GetSoftware()";
	var vRetVal=true;
	try {
		if (cdebug){ alert(fname + "\n\n eleObj = " + eleObj); }

		// pre-emptively hide the download div
		showDiv(false,'divImpactEstimatorForHighways_Download');
		
		// sanity check
		if ( eleObj==undefined ){return false;}
		if ( eleObj.id==undefined ){return false;}
		
		var hyperlinkFilterMsg = "No Links Please!"; //"<br>No Embedded Links Permitted !";

		// set request type
		var vRequest="all";
		var vLevel=0;
		var vValue="";
		var vEleObj;
		var vEleObjErr;
		var vEleObjTo;
		var vEleObjFrom;

		if ( eleObj.id.indexOf("your_name")==0 ){vRequest="your_name";vLevel++;}
		else if ( eleObj.id.indexOf("your_email")==0 ){vRequest="your_email";vLevel++;}

		// remove bounding whitespace from field value
		if ( eleObj.value != undefined )
		{
			eleObj.value=eleObj.value.trim();
		}

		// debug
		if(cdebug){alert("-- DEBUG -- \n" + fname + "\n\n eleObj.nodeName=" + eleObj.nodeName + "\n\n eleObj.id=" + eleObj.id + "\n\n eleObj.name=" + eleObj.name + "\n\n vRequest=" + vRequest + "\n\n vLevel=" + vLevel +  "\n\n eleObj.value=(" + eleObj.value + ")");}

		// do request
		vEleObj=eleObj;
		vEleObjErr=undefined;

		if ( vRequest.indexOf("all")==0 || vRequest.indexOf("your_name")==0 )
		{
			if (vLevel==0)
			{
				vEleObj=document.getElementById("your_name");
			}
			if ( vEleObj!=undefined )
			{
				vEleObjErr=document.getElementById("your_name_err");
				if ( vEleObjErr )
				{
					if ( vEleObj.value.length>0 )
					{
						// filter out hyperlinks
						if ( stringContainsHyperlink(vEleObj.value)==true )
						{
							if (vRetVal==true){setfocus(vEleObj);}
							vEleObjErr.innerHTML = hyperlinkFilterMsg;
							vRetVal=false;
						}
						else
						{
							vEleObjErr.innerHTML = "&nbsp;";
						}
					}
					else
					{
						if (vRetVal==true){setfocus(vEleObj);}
						vEleObjErr.innerHTML = "&nbsp;Required.";
						vRetVal=false;
					}
				}
				if ( vRequest.indexOf("your_name")==0  && vRetVal == true )
				{
					// realname :: formmail required (hidden) input field value
					// eleObj.elements['realname'].value = eleObj.elements['your_name'].value
					vEleObjTo=document.getElementById("realname");
					vEleObjFrom=document.getElementById("your_name");
					if (cdebug){alert(fname + "\n\n ORIGINAL VALUES \n\n realname :: vEleObjTo.value = " + vEleObjTo.value + "\n\n your_name :: vEleObjFrom.value = " + vEleObjFrom.value );}
					if ( vEleObjTo && vEleObjFrom ) { vEleObjTo.value = vEleObjFrom.value;}
				}
			}
		}
		
		if ( vRequest.indexOf("all")==0 || vRequest.indexOf("your_organization")==0 )
		{
			// do nothing since this input field is optional.
		}

		if ( vRequest.indexOf("all")==0 || vRequest.indexOf("your_email")==0 )
		{
			if (vLevel==0)
			{
				vEleObj=document.getElementById("your_email");
			}
			if ( vEleObj!=undefined )
			{
				vEleObjErr=document.getElementById("your_email_err");
				if ( vEleObjErr )
				{
					if ( emailIsValid(vEleObj.value)==false )
					{
						if (vRetVal==true){setfocus(vEleObj);}
						if (vEleObj.value.length==0){vEleObjErr.innerHTML = "&nbsp;Requrired";}
						else {vEleObjErr.innerHTML = "&nbsp;Invalid email address"; }
						vRetVal=false;
						//alert(fname + " \n\n email is NOT valid!\n\n" + "vEleObj.value.length = " + vEleObj.value.length + "\n\n vEleObjErr.innerHTML = " + vEleObjErr.innerHTML + "\n\n vRetVal = " + vRetVal);
					}
					else
					{
						vEleObjErr.innerHTML = "&nbsp;";
					}
				}
				if ( vRequest.indexOf("your_email")==0  && vRetVal == true )
				{
					// email :: formmail required (hidden) input field value
					//eleObj.elements['email'].value = eleObj.elements['your_email'].value
					vEleObjTo=document.getElementById("email");
					vEleObjFrom=document.getElementById("your_email");
					if (cdebug){alert(fname + "\n\n ORIGINAL VALUES \n\n email :: vEleObjTo.value = " + vEleObjTo.value + "\n\n your_email :: vEleObjFrom.value = " + vEleObjFrom.value );}
					if ( vEleObjTo && vEleObjFrom ) { vEleObjTo.value = vEleObjFrom.value;}
				}
			}
		}
		
		if (cdebug){alert (fname + "\n\n vRequest = " + vRequest + "\n\n (vRequest.indexOf(\"all\")==0 ) = " + (vRequest.indexOf("all")==0) + "\n\n vRetVal = " + vRetVal);}

		// process the form and execute all dependent events
		if ( vRequest.indexOf("all")==0 &&  vRetVal==true )
		{
			// redirect :; formmail required (hidden) input field value
			var documentUrl = document.location.href;
			var parentFolderUrl = documentUrl.substring(0,documentUrl.lastIndexOf('/')+1);
			// handle situation where CMS driven urls, e.g., no actual files.
			if ( parentFolderUrl.lastIndexOf('/') == documentUrl.lastIndexOf('/') )
			{
				documentUrl = documentUrl.substring(0,documentUrl.length - 1);
				parentFolderUrl = documentUrl.substring(0,documentUrl.lastIndexOf('/')+1);
			}
			//eleObj.elements['redirect'].value = parentFolderUrl;
			vEleObj = document.getElementById("redirect");
			if ( vEleObj && parentFolderUrl ) { vEleObj.value = parentFolderUrl;}

			if (cdebug){ alert(fname  + "\n\n -- RECAP -- " + "\n\n recipient = " + document.getElementById("recipient").value  + "\n\n subject = " + document.getElementById("subject").value + "\n\n realname = " + document.getElementById("redirect").value + "\n\n email = " + document.getElementById("email").value  + "\n\n redirect = " + document.getElementById("redirect").value ); }

			// show the download div incase download does not automatically fire
			showDiv(true,'divImpactEstimatorForHighways_Download');
			
			// download the file in a separate temporary window
			//launchChildWindow('http://localhost:8080/athenasmi/wp-content/uploads/2012/01/test_text_file.zip',true,1000);
			var vUrl =  _DOCROOT + "/wp-content/uploads/2012/01/Impact_Estimator_for_Highways_0.1.0020.zip";


			launchChildWindow(vUrl,true,5000);
			//document.execCommand('SaveAs',true,vUrl); // fails on server.
			
			// try to pause the world
			//setTimeout('void(0)',5000);
		}
		else
		{
			showDiv(false,'divImpactEstimatorForHighways_Download');
		}
		
	}
	catch(ex)
	{
		alert("Error : " + ex.message + "\n\n was encountered in " + fname + ".\n\nUnable to process form.");
		vRetVal=false;
	}
	return vRetVal;	
}
// End -->
