function addDays(myDate,days) 
{
    return new Date(myDate.getTime() + days*24*60*60*1000);
}


function randomNum (  startNum, endNum )
{
	// arguments - pass 2 integers, the first possible random number to return, and the last possible number to return
	// returns a single integer between the range of startNum and endNum
	
	var plusNum = endNum - startNum;
	var ranNum = Math.round( (Math.random() * plusNum) + startNum);
	return ( ranNum );
}


function setCookie(name, value, days)
{
	if(value == "")
	{
		var the_value = "true";
	}
	else
	{
		var the_value = value;
	}
	var the_date = addDays(new Date(), days);
	var the_cookie_date = the_date.toGMTString();
	var the_cookie = name + " = " + the_value;
	the_cookie = the_cookie + ";path=/;expires=" + the_cookie_date;
	//alert(the_cookie);
	document.cookie = the_cookie;
}

function getCookie(cookiename)
{
	var cookiestring=""+document.cookie;
	var index1=cookiestring.indexOf(cookiename);
	if (index1==-1 || cookiename=="") return ""; 
	var index2=cookiestring.indexOf(';',index1);
	if (index2==-1) index2=cookiestring.length; 
	return unescape(cookiestring.substring(index1+cookiename.length+1,index2));
}



// THIS SCRIPT DOES THE DOUBLE SWAP (CLOSES THE POP-UP, CHANGES THE PARENT)
// USAGE: <a href="#" ONCLICK="DoubleSwap('http://www.domain.com')">text link</a>
function DoubleSwap(URL)
{
	window.opener.location = URL;
	window.close();
}

// THIS SCRIPT RUNS THE POPUP WINDOWS
// USAGE: <a href="javascript:NewWindow('page.html', 'nameOfWindow', 500, 300, 1, 1)">Text Link</a>
function NewWindow(url, myname, w, h, scroll, resize) 
{
	winprops = 'height='+h+',width='+w+',top=10,left=10,scrollbars='+scroll+',resizable='+resize+',toolbar=0'
	win = window.open(url, myname, winprops)
	if (parseInt(navigator.appVersion) >= 4) { win.window.focus(); }
}

// THIS SCRIPT RUNS A POPUP WINDOW THAT ONLY DISPLAYS ONCE EVERY 0.5 days:
// USAGE: onLoad="popup('page.html', 'nameOfWindow', 500, 300, 1, 1)"
function popup(url, myname, w, h, scroll, resize)
{
	//get cookie:
	popupDisplayed = getCookie(popupDisplayed);
	
	if(popupDisplayed != 'Y')
	{
		NewWindow(url, myname, w, h, scroll, resize);
	}
	
	//set cookie:
	setCookie('popupDisplayed', 'Y', '0.5');
}




// THIS SCRIPT RUNS THE DROPDOWN MENUS
// USAGE: <DIV CLASS="navBlock" onMouseOver="this.className='navBlockHover'; change('subs1', 'subNavHover'); change('flash', 'flashHide'); change('flash2', 'flashHide')" onMouseOut="this.className='navBlock'; change('subs1', 'subNavHide'); change('flash', 'flashShow'); change('flash2', 'flashShow')" onClick="this.className='navBlock'; change('subs1', 'subNavHide'); change('flash', 'flashShow'); change('flash2', 'flashShow')" STYLE="margin-left: 10px; width: 130px;">
function change(id, newClass)
{
	if(document.getElementById(id) == null)
	{
		//do nothing
	}
	else
	{
		var identity = document.getElementById(id);
		identity.className = newClass;
	}
}


//THIS FUNCTION RETURNS ANY STRING ENCODED FOR URL BAR OF BROWSER
//USAGE: var urlString = URLEncode('http://www.is7.com');
//USAGE: var currentLocation = URLEncode(location.href);
function URLEncode (clearString) {
	var output = '';
	var x = 0;
	clearString = clearString.toString();
	var regex = /(^[a-zA-Z0-9_.]*)/;
	while (x < clearString.length) {
		var match = regex.exec(clearString.substr(x));
		if (match != null && match.length > 1 && match[1] != '') {
			output += match[1];
			x += match[1].length;
		} else {
			if (clearString[x] == ' ')
				output += '+';
			else {
				var charCode = clearString.charCodeAt(x);
				var hexVal = charCode.toString(16);
				output += '%' + ( hexVal.length < 2 ? '0' : '' ) + hexVal.toUpperCase();
			}
			x++;
		}
	}
	return output;
}



//CURE INTERNATIONAL Specific Functions
// The following scripts and functions allow the left "sidebar" area of the page to "expand" to the height of the window size
function setStyle(objID, style, value)
{
	document.getElementById(objID).style[style] = value;
}


// This function is fired off when the page loads:
function findsize()
{
	// sniff out the browser (Mozilla-based vs. IE) so we can get an accurate measurement of the browser window:
    var ns	= (document.layers || (document.getElementById && !document.all)) ? true:false;
    var ie	= (document.all) ? true:false;
    
    winH	= (ns)? (window.innerHeight) : document.body.offsetHeight
    
    setStyle("containerSidebar", "height", winH);
    
}



// THIS SCRIPT GRADUALLY EXPANDS A DIV LAYER TO IT'S CONTENTS' HEIGHT
/* 
USAGE: <DIV ID="test" onClick="expandIt('test', 7);">
<DIV ID = "innertest"> // this must have the id of "inner" + the outter id's name
text or images goes here
</DIV>
</DIV>
*/

function expandIt(id, millisecs) {
	if (navigator.appVersion.indexOf("MSIE")!=-1)
	{
		millisecs = Math.round(millisecs / 10);
		millisecs = 1;
	}
	var x = 1;

	if(document.getElementById(id) == null)
	{
		//do nothing
	}
	else
	{
		// set variables based on 'id'
		var innerid			= "inner" + id;
		var identity		= document.getElementById(id);
		var inneridentity	= document.getElementById(innerid);
		var element 		= document.getElementById('containerSidebar');
		if(element!=null){
			var elementHeight	= (element.offsetHeight + 45);
		}
		//alert("element ="+element);
		function expandMe() {
			//get heights of id & innerid:
			var idHeight 		= identity.offsetHeight;
			var inneridHeight	= inneridentity.offsetHeight;
			
			if(idHeight > inneridHeight)
			{
				clearInterval(intervalId);
				return;
			}
			
			x=x+10;
			identity.style.height = x + 'px';
			if(element!=null) 
			{
				elementHeight = elementHeight+10;
				element.style.height = elementHeight + 'px';
				
				//alert ('container height: ' + document.getElementById('containerSidebar').offsetHeight + ' & elementHeight: ' + elementHeight);
				
				//alert('elementHeight=' + elementHeight);
			}
		}
		var intervalId = setInterval(expandMe, millisecs);
	}
}


// THIS SCRIPT GRADUALLY COLLAPSES A DIV LAYER TO IT'S CONTENTS' HEIGHT
/* 
USAGE: <DIV ID="test" onClick="collapseIt('test', 7);">
<DIV ID = "innertest"> // this must have the id of "inner" + the outter id's name
text or images goes here
</DIV>
</DIV>
*/
function collapseIt(id) {
	if(document.getElementById(id) == null)
	{
		//do nothing
	}
	else
	{
		var identity			= document.getElementById(id);
		identity.style.height	= 1 + 'px';
	}
}










// Copyright © 2001 by Apple Computer, Inc., All Rights Reserved.
//
// You may incorporate this Apple sample code into your own code
// without restriction. This Apple sample code has been provided "AS IS"
// and the responsibility for its operation is yours. You may redistribute
// this code, but you are not permitted to redistribute it as
// "Apple sample code" after having made changes.

// ugly workaround for missing support for selectorText in Netscape6/Mozilla
// call onLoad() or before you need to do anything you would have otherwise used
// selectorText for.
var ugly_selectorText_workaround_flag = false;
var allStyleRules;
// code developed using the following workaround (CVS v1.15) as an example.
// http://lxr.mozilla.org/seamonkey/source/extensions/xmlterm/ui/content/XMLTermCommands.js
function ugly_selectorText_workaround() {
	if((navigator.userAgent.indexOf("Gecko") == -1) ||
	   (ugly_selectorText_workaround_flag)) {
		return; // we've already been here or shouldn't be here
	}
	var styleElements = document.getElementsByTagName("style");
	
	for(var i = 0; i < styleElements.length; i++) {
		var styleText = styleElements[i].firstChild.data;
		// this should be using match(/\b[\w-.]+(?=\s*\{)/g but ?= causes an
		// error in IE5, so we include the open brace and then strip it
		allStyleRules = styleText.match(/\b[\w-.]+(\s*\{)/g);
	}

	for(var i = 0; i < allStyleRules.length; i++) {
		// probably insufficient for people who like random gobs of 
		// whitespace in their styles
		allStyleRules[i] = allStyleRules[i].substr(0, (allStyleRules[i].length - 2));
	}
	ugly_selectorText_workaround_flag = true;
}


// setStyleById: given an element id, style property and 
// value, apply the style.
// args:
//  i - element id
//  p - property
//  v - value
//
function setStyleById(i, p, v) {
	var n = document.getElementById(i);
	n.style[p] = v;
}

// getStyleById: given an element ID and style property
// return the current setting for that property, or null.
// args:
//  i - element id
//  p - property
function getStyleById(i, p) {
	var n = document.getElementById(i);
	var s = eval("n.style." + p);

	// try inline
	if((s != "") && (s != null)) {
		return s;
	}

	// try currentStyle
	if(n.currentStyle) {
		var s = eval("n.currentStyle." + p);
		if((s != "") && (s != null)) {
			return s;
		}
	}
	
	// try styleSheets
	var sheets = document.styleSheets;
	if(sheets.length > 0) {
		// loop over each sheet
		for(var x = 0; x < sheets.length; x++) {
			// grab stylesheet rules
			var rules = sheets[x].cssRules;
			if(rules.length > 0) {
				// check each rule
				for(var y = 0; y < rules.length; y++) {
					var z = rules[y].style;
					// selectorText broken in NS 6/Mozilla: see
					// http://bugzilla.mozilla.org/show_bug.cgi?id=51944
					ugly_selectorText_workaround();
					if(allStyleRules) {
						if(allStyleRules[y] == i) {
							return z[p];
						}			
					} else {
						// use the native selectorText and style stuff
						if(((z[p] != "") && (z[p] != null)) ||
						   (rules[y].selectorText == i)) {
							return z[p];
						}
					}
				}
			}
		}
	}
	return null;
}

// setStyleByClass: given an element type and a class selector,
// style property and value, apply the style.
// args:
//  t - type of tag to check for (e.g., SPAN)
//  c - class name
//  p - CSS property
//  v - value
var ie = (document.all) ? true : false;

function setStyleByClass(t,c,p,v){
	var elements;
	if(t == '*') {
		// '*' not supported by IE/Win 5.5 and below
		elements = (ie) ? document.all : document.getElementsByTagName('*');
	} else {
		elements = document.getElementsByTagName(t);
	}
	for(var i = 0; i < elements.length; i++){
		var node = elements.item(i);
		for(var j = 0; j < node.attributes.length; j++) {
			if(node.attributes.item(j).nodeName == 'class') {
				if(node.attributes.item(j).nodeValue == c) {
					eval('node.style.' + p + " = '" +v + "'");
				}
			}
		}
	}
}

// getStyleByClass: given an element type, a class selector and a property,
// return the value of the property for that element type.
// args:
//  t - element type
//  c - class identifier
//  p - CSS property
function getStyleByClass(t, c, p) {
	// first loop over elements, because if they've been modified they
	// will contain style data more recent than that in the stylesheet
	var elements;
	if(t == '*') {
		// '*' not supported by IE/Win 5.5 and below
		elements = (ie) ? document.all : document.getElementsByTagName('*');
	} else {
		elements = document.getElementsByTagName(t);
	}
	for(var i = 0; i < elements.length; i++){
		var node = elements.item(i);
		for(var j = 0; j < node.attributes.length; j++) {
			if(node.attributes.item(j).nodeName == 'class') {
				if(node.attributes.item(j).nodeValue == c) {
					var theStyle = eval('node.style.' + p);
					if((theStyle != "") && (theStyle != null)) {
						return theStyle;
					}
				}
			}
		}		
	}
	// if we got here it's because we didn't find anything
	// try styleSheets
	var sheets = document.styleSheets;
	if(sheets.length > 0) {
		// loop over each sheet
		for(var x = 0; x < sheets.length; x++) {
			// grab stylesheet rules
			var rules = sheets[x].cssRules;
			if(rules.length > 0) {
				// check each rule
				for(var y = 0; y < rules.length; y++) {
					var z = rules[y].style;
					// selectorText broken in NS 6/Mozilla: see
					// http://bugzilla.mozilla.org/show_bug.cgi?id=51944
					ugly_selectorText_workaround();
					if(allStyleRules) {
						if((allStyleRules[y] == c) ||
						   (allStyleRules[y] == (t + "." + c))) {
							return z[p];
						}			
					} else {
						// use the native selectorText and style stuff
						if(((z[p] != "") && (z[p] != null)) &&
						   ((rules[y].selectorText == c) ||
						    (rules[y].selectorText == (t + "." + c)))) {
							return z[p];
						}
					}
				}
			}
		}
	}

	return null;
}

// setStyleByTag: given an element type, style property and 
// value, and whether the property should override inline styles or
// just global stylesheet preferences, apply the style.
// args:
//  e - element type or id
//  p - property
//  v - value
//  g - boolean 0: modify global only; 1: modify all elements in document
function setStyleByTag(e, p, v, g) {
	if(g) {
		var elements = document.getElementsByTagName(e);
		for(var i = 0; i < elements.length; i++) {
			elements.item(i).style[p] = v;
		}
	} else {
		var sheets = document.styleSheets;
		if(sheets.length > 0) {
			for(var i = 0; i < sheets.length; i++) {
				var rules = sheets[i].cssRules;
				if(rules.length > 0) {
					for(var j = 0; j < rules.length; j++) {
						var s = rules[j].style;
						// selectorText broken in NS 6/Mozilla: see
						// http://bugzilla.mozilla.org/show_bug.cgi?id=51944
						ugly_selectorText_workaround();
						if(allStyleRules) {
							if(allStyleRules[j] == e) {
								s[p] = v;
							}			
						} else {
							// use the native selectorText and style stuff
							if(((s[p] != "") && (s[p] != null)) &&
							   (rules[j].selectorText == e)) {
								s[p] = v;
							}
						}

					}
				}
			}
		}
	}
}

// setStyleByName: given an element name, style property and 
// value. it overides the inline style
// args:
//  e - element name
//  p - property
//  v - value
function setStyleByName(e, p, v) {
	var elements = document.getElementsByName(e);
	for(var i = 0; i < elements.length; i++) {
		elements.item(i).style[p] = v;
	}
}



// getStyleByTag: given an element type and style property, return
// the property's value
// args:
//  e - element type
//  p - property
function getStyleByTag(e, p) {
	var sheets = document.styleSheets;
	if(sheets.length > 0) {
		for(var i = 0; i < sheets.length; i++) {
			var rules = sheets[i].cssRules;
			if(rules.length > 0) {
				for(var j = 0; j < rules.length; j++) {
					var s = rules[j].style;
					// selectorText broken in NS 6/Mozilla: see
					// http://bugzilla.mozilla.org/show_bug.cgi?id=51944
					ugly_selectorText_workaround();
					if(allStyleRules) {
						if(allStyleRules[j] == e) {
							return s[p];
						}			
					} else {
						// use the native selectorText and style stuff
						if(((s[p] != "") && (s[p] != null)) &&
						   (rules[j].selectorText == e)) {
							return s[p];
						}
					}

				}
			}
		}
	}

	// if we don't find any style sheets, return the value for the first
	// element of this type we encounter without a CLASS or STYLE attribute
	var elements = document.getElementsByTagName(e);
	var sawClassOrStyleAttribute = false;
	for(var i = 0; i < elements.length; i++) {
		var node = elements.item(i);
		for(var j = 0; j < node.attributes.length; j++) {
			if((node.attributes.item(j).nodeName == 'class') ||
			   (node.attributes.item(j).nodeName == 'style')){
			   sawClassOrStyleAttribute = true;
			}
		}
		if(! sawClassOrStyleAttribute) {
			return elements.item(i).style[p];
		}
	}
}