function toggleDIV(id, show)
{
	div = document.getElementById(id);
	
	if (show)
	  div.style.display = 'block';
	else
		div.style.display = 'none';
}

function toggleSpan(id, show)
{
	span = document.getElementById(id);
	
	if (show)
	  span.style.display = 'inline';
	else
		span.style.display = 'none';
}

function validatePhone(field)
{
	// Regex pattern for verifying a phone number
	var regex = /[0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]/
	
	if ( field.value.search(regex) == -1 )
	  return false;
	else
	  return true;
}

function addToFavorites(url, title)
{
  if (window.external)
  {
    window.external.AddFavorite(url, title);
  }
  else
  {
    alert("Sorry! Your browser doesn't support this function."); 
  }
}

function goToPage(objDropDown)
{
	// The first list item is not a valid page
	if ( objDropDown.selectedIndex != 0 )
  {	
	  // Go to selected page
		parent.location.href = objDropDown.value;	
		
	  // Reset the drop down list
		objDropDown.selectedIndex = 0;	
	}
}

function sqlEscape(s)
{
  if ( trim(s) == "" || s == null )
    return s;
 else
   // Replace all instances of a single quote with two single quotes
   return (s.replace(/'/g, "''"));
}

function createCookie(name,value,days)
{
  if (days)
  {
    var date = new Date();
	date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
	var expires = ";expires=" + date.toGMTString();
  }
  else
    var expires = "";
  
  document.cookie = name + "=" + value + expires + "; path=/";
}

function readCookie(name)
{
  var nameEQ = name + "=";
  var ca = document.cookie.split(';');
  
  for(var i = 0; i < ca.length; i++)
  {
    var c = ca[i];
	while (c.charAt(0)==' ')
	  c = c.substring(1, c.length);
  	  
	if (c.indexOf(nameEQ) == 0)
	  return c.substring(nameEQ.length, c.length);
  }
  
  return null;
}

function eraseCookie(name)
{
  createCookie(name, "", -1);
}


function validateZip(field)
{
  var valid = "0123456789-";
  var hyphencount = 0;

  if (field.length!=5 && field.length!=10)
  {
    //alert("Please enter your 5 digit or 5 digit+4 zip code.");
    return false;
  }
  
  for (var i=0; i < field.length; i++)
  {
    temp = "" + field.substring(i, i+1);
    if (temp == "-")
	  hyphencount++;
    
	if (valid.indexOf(temp) == "-1")
	{
      //alert("Invalid characters in your zip code.  Please try again.");
      return false;
    }

    if ((hyphencount > 1) || ((field.length==10) && ""+field.charAt(5)!="-"))
	{
      //alert("The hyphen character should be used with a properly formatted 5 digit+four zip code, like '12345-6789'.   Please try again.");
      return false;
    }
  }
  return true;
}


function trim(s)
{
  while (s.substring(0,1) == ' ')
    s = s.substring(1,s.length);

  while (s.substring(s.length-1,s.length) == ' ')
    s = s.substring(0,s.length-1);

  return s;
}

function confirmDelete()
{
	return confirm("Are you sure you want to delete this?");
}

function shortenString(str, maxLength)
{
  // Subtract 3 for the three periods at the end
  maxLength -= 3;
  
  // If the string is longer than maximum length, return only the beginning of the string up to the maximum length
  if (str.length > maxLength)
    return str.substring(0, maxLength) + "..."
  return str
}

function isInteger(s)
{
  var i
  for (i = 0; i < s.length; i++)
  {   
    // Check that current character is number.
    var c = s.charAt(i)
    if ( (c < "0") || (c > "9") )
      return false
  }
  
  // All characters are numbers.
  return true
}

function checkLoginForm()
{
  var strError = ""

  if (trim(document.login.username.value).length == 0)
  {	
	strError += "Please provide your user name"
  }
  
  if (trim(document.login.password.value).length == 0)
  {
    if (strError != "")
	  strError = strError + "\r\n"
	
	strError += "Please provide your password"
  }

  if (strError != "")
  {
    alert(strError)
	return false
  }
  else
    return true
}

function checkPoll(radioButtonSet)
{
  var answered = false;

  for (i = 0; i < radioButtonSet.length; i++) 
  {
    if (radioButtonSet[i].checked)
      answered = true; 
  }

  if (!answered)
  {
    alert("Choose an answer before submitting vote.")
    return (false);
  }
  
  return (true);
}

function isValidEmail(str)
{
  var re = /^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/;
  
	if ( !str.match(re) )
    return false;
	else
    return true;
}

// Toggle the state of a group of checkboxes
function toggleState(objCheckbox)
{
  var i;
  
  for (i = 0; i < objCheckbox.length; i++)
  {
    if ( objCheckbox[0].checked && !objCheckbox[i].checked )
      objCheckbox[i].click();
	  else if ( !objCheckbox[0].checked && objCheckbox[i].checked )
      objCheckbox[i].click();
  }
}

function PCase(STRING)
{
  var strReturn_Value = "";
  var iTemp = STRING.length;

  if(iTemp == 0)
  {
    return "";
  }

  var UcaseNext = false;
  strReturn_Value += STRING.charAt(0).toUpperCase();
  for (var iCounter=1; iCounter < iTemp; iCounter++)
  {
    if(UcaseNext == true)
    {
      strReturn_Value += STRING.charAt(iCounter).toUpperCase();
    }
    else
    {
      strReturn_Value += STRING.charAt(iCounter).toLowerCase();
    }

    var iChar = STRING.charCodeAt(iCounter);
    if (iChar == 32 || iChar == 45 || iChar == 46)
	{
      UcaseNext = true;
    }
    else
	{
      UcaseNext = false
    }

    if (iChar == 99 || iChar == 67)
	{
      if (STRING.charCodeAt(iCounter-1)==77 || STRING.charCodeAt(iCounter-1)==109)
	  {
        UcaseNext = true;
      }
    }
  } //End For

  return strReturn_Value;
} //End Function

function addDays(myDate, days)
{
  // myDate = a Date object
  // days = +/- days from date
  
  d = new Date(myDate.getTime() + days * 24 * 60 * 60 * 1000);
  
	// Under FireFox, getYear() returns 106 for 2006 for instance, so add 1900
	var year;
	if ( d.getYear() < 1900 )
	  year = d.getYear() + 1900;
	else
	  year = d.getYear();
		
  return (d.getMonth()+1) + "/" + d.getDate() + "/" + year;
}

function dateDiff(p_Interval, p_Date1, p_Date2, p_firstdayofweek, p_firstweekofyear){
	if(!isDate(p_Date1, "M/d/yyyy")){return "invalid date: '" + p_Date1 + "'";}
	if(!isDate(p_Date2, "M/d/yyyy")){return "invalid date: '" + p_Date2 + "'";}
	var dt1 = new Date(p_Date1);
	var dt2 = new Date(p_Date2);

	// get ms between dates (UTC) and make into "difference" date
	var iDiffMS = dt2.valueOf() - dt1.valueOf();
	var dtDiff = new Date(iDiffMS);

	// calc various diffs
	var nYears  = dt2.getUTCFullYear() - dt1.getUTCFullYear();
	var nMonths = dt2.getUTCMonth() - dt1.getUTCMonth() + (nYears!=0 ? nYears*12 : 0);
	var nQuarters = parseInt(nMonths/3);	//<<-- different than VBScript, which watches rollover not completion
	
	var nMilliseconds = iDiffMS;
	var nSeconds = parseInt(iDiffMS/1000);
	var nMinutes = parseInt(nSeconds/60);
	var nHours = parseInt(nMinutes/60);
	var nDays  = parseInt(nHours/24);
	var nWeeks = parseInt(nDays/7);


	// return requested difference
	var iDiff = 0;		
	switch(p_Interval.toLowerCase()){
		case "yyyy": return nYears;
		case "q": return nQuarters;
		case "m": return nMonths;
		case "y": 		// day of year
		case "d": return nDays;
		case "w": return nDays;
		case "ww":return nWeeks;		// week of year	// <-- inaccurate, WW should count calendar weeks (# of sundays) between
		case "h": return nHours;
		case "n": return nMinutes;
		case "s": return nSeconds;
		case "ms":return nMilliseconds;	// millisecond	// <-- extension for JS, NOT available in VBScript
		default: return "invalid interval: '" + p_Interval + "'";
	}
}

function UpdateList(action, objForm, fieldName, selectedFieldName)
{
	foundBox = objForm.elements[fieldName];
	FoundCounter = foundBox.length;
	iTotalFoundDevices = FoundCounter;

	selectedBox = objForm.elements[selectedFieldName];
	SelectedCounter = selectedBox.length;
	iTotalSelectedDevices = SelectedCounter;

  // Possible options: addAll, add, remove, removeAll
	switch (action)
	{
	  case 'addAll': //add all
		  // Add devices to selected
			for (i = 0; i < iTotalFoundDevices; i++)
			{
				selectedBox[SelectedCounter] = new Option(foundBox[i].text, foundBox[i].value);
				SelectedCounter++;
			}
			
			// Remove devices from found
			for (i = 0; i < iTotalFoundDevices; i++)
			{
				foundBox[0] = null;
			}
		break;
    
		case 'add': // Add selected
		  for (i = 0; i < FoundCounter; i++)
			{
				if ( foundBox[i].selected )
				{
				  selectedBox[SelectedCounter] = new Option(foundBox[i].text, foundBox[i].value);
					foundBox[i] = null;
					SelectedCounter++;
					FoundCounter--;
					i--;
				}
			}
		break;

		case 'remove': // Remove selected
		  for (i = 0; i < SelectedCounter; i++)
			{
			  if ( selectedBox[i].selected )
				{
				  foundBox[FoundCounter] = new Option(selectedBox[i].text, selectedBox[i].value);
					selectedBox[i] = null;
					FoundCounter++;
					SelectedCounter--;
					i--;
				}
			}
		break;
    
		case 'removeAll': // remove all
		  // Add devices to selected
			for (i = 0; i < iTotalSelectedDevices; i++)
			{
			  foundBox[FoundCounter] = new Option(selectedBox[i].text, selectedBox[i].value);
				FoundCounter++;
			}

			// Remove devices from found
			for (i = 0; i < iTotalSelectedDevices; i++)
			{
				selectedBox[0] = null;
			}
		break;
  }
}

function checkSelectedEmployees(objForm, pageName)
{
  var count;
  count = 0;
  
	if ( objForm.deleteRecords.length )
	{
		for (var i = 0; i < objForm.deleteRecords.length; i++)
		{
			if ( objForm.deleteRecords[i].checked )
				count++;
		}
	}
	else
	{
	  if ( objForm.deleteRecords.checked )
		  count++;
	}
  
	if ( count == 0 )
	{
    alert("At least one checkbox must be ticked to perform this operation.");
	}
  else
  {
	  result = confirm("Are you sure you want to delete the selected account(s)?");
		
		if ( result == true )
		{
	    objForm.action = pageName;
		  objForm.submit();
			return(true);
		}
	}
	
	return(false);
}

function getRadioButtonValue(objRadio)
{
  var length = objRadio.length;
	var selectedValue = "";
	
  for (i = 0; i < length; i++)
	  if ( objRadio[i].checked )
		  selectedValue = objRadio[i].value;

	return selectedValue;
}

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.01
  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 && d.getElementById) x=d.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];}
}

function MM_jumpMenu(targ,selObj,restore){ //v3.0
  eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
  if (restore) selObj.selectedIndex=0;
}

function MM_jumpMenuGo(selName,targ,restore){ //v3.0
  var selObj = MM_findObj(selName); if (selObj) MM_jumpMenu(targ,selObj,restore);
}