/*  Copyright 2005 Accordare, Inc.  All rights reserved.
    May not be used without written permission from Accordare, Inc.
*/
	function refresh() {
		var url = window.location.href;
		window.location.href = url;
	}
	/*
	function setCookie(name, value, expires, path, domain, secure) {
	  var curCookie = name + "=" + escape(value) +
	      ((expires) ? "; expires=" + expires.toGMTString() : "") +
	      ((path) ? "; path=" + path : "") +
	      ((domain) ? "; domain=" + domain : "") +
	      ((secure) ? "; secure" : "");
	  document.cookie = curCookie;
	}
	
	function getCookie(name) {
	  var dc = document.cookie;
	  var prefix = name + "=";
	  var begin = dc.indexOf("; " + prefix);
	  if (begin == -1) {
	    begin = dc.indexOf(prefix);
	    if (begin != 0) return null;
	  } else
	    begin += 2;
	  var end = document.cookie.indexOf(";", begin);
	  if (end == -1)
	    end = dc.length;
	  return unescape(dc.substring(begin + prefix.length, end));
	}
	
	function deleteCookie(name, path, domain) {
	  if (getCookie(name)) {
	    document.cookie = name + "=" +
	    ((path) ? "; path=" + path : "") +
	    ((domain) ? "; domain=" + domain : "") +
	    "; expires=Thu, 01-Jan-70 00:00:01 GMT";
	  }
	}
	*/
	function present(id) {
		//alert("present id=" + id);
		if (!document.getElementById(id)) return false;
		var item = document.getElementById(id).value;
		if ((item == "") || (item == null) || item == "null") return false;
		else {
			item = trim(item);
			if( item == "" )
				return false;
			//alert(id + " value=" + item);
			return true;
		}
	}
	function valueByName(id) {
		var retVal = '';
		//alert("1 valueByName id=" + id);
		if (!document.getElementsByName(id)) return retVal;
		//alert("2 valueByName id=" + id);
		var nameset = document.getElementsByName(id);
		if ( (nameset == null) ) return retVal;
		else {
			for(var i=0;i<nameset.length;i++){
				try{
					if( nameset[i].checked && nameset[i].value != null && nameset[i].value != "" && nameset[i].value != "null" ) {
						retVal = trim(nameset[i].value);
						break;
					}
				}
				catch(e){
					//alert("error getting nameset sub " + i);
				}
			}
		}
		return retVal;
	}

function validPhone(id) {
		//var re = /\(?\d{3}\)?-|\/|\.|\b?\d{3}-|\/|\.|\b?\d{4}/;
		//var re2 = /\+?\d|\b(5,19)/;
		var phone = document.getElementById(id).value;
		var patternUs = new RegExp("^\\(?\\d{3}\\)?\\s|-\\d{3}-\\d{4}$");
		var phoneUSq = patternUs.test(phone);
		var patternIntl = new RegExp("^\\d(\\d|-){7,20}");
		var phoneIntlq = patternIntl.test(phone);
		if (!phoneIntlq && !phoneUSq) return false;
		else return true;
	}
	function validEmail(id){
		var email = trim(document.getElementById(id).value);
		var re3 = /^(([^<>()[\]\\.,\';:\s@\"]+(\.[^<>()[\]\\.,\';:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
		if (!email.match(re3)) return false;
		else return true;
	}
	function checkRadioChecked(id){
		var elmnt = document.getElementById(id);
		if( elmnt == null ) return false;
		if (elmnt.checked == true) return true;
		return false;
	}
	function checkIsRadioChecked(radioGroupName){
	 	if( radioGroupName == null || radioGroupName.length < 1 ) return false;
		var elmt = document.getElementsByName(radioGroupName);//getElementById(id);
		if( elmt == null ) return false;
		for(var i = 0; i < elmt.length; i++) {
			if(elmt[i] != null && elmt[i].checked) {
				return true;
			}
		}
		return false;
	}
	function checkListSelection(id){
		if ( !document.getElementById(id) ) return false;
		if (document.getElementById(id).selectedIndex > 0) return true;
		else return false;
	}
	function checkListSelectionMulti(id){
		if ( !document.getElementById(id) ) return false;
		var options = document.getElementById(id).options;
		for (var i = 1; i < options.length; i++){
		//returns true if any selected, false otherwise. 
		// skips 0th element assuming a notation in that entry.
			if (options[i].selected) return true;
		}
		return false;
	}
	function checkListGroupElementSelection(id){
		if ( !document.getElementById(id) ) return false;
		if (document.getElementById(id).selectedIndex > 0) {
			var insel = document.getElementById(id).value;
			// alert("field value = " + insel );
			if (insel != null && (insel!=parseInt(insel) || insel<=0))  return true;
			else return false;
		}
		else return false;
	}
	function ifChecked(id){
		if(!document.getElementById(id)) return false;
		if (document.getElementById(id).checked == true) return true;
		else return false;
	}

function checkListOneOfSelection(namepart){
	var objects = document.getElementsByTagName("input");
	if( objects != "" ) {
		for(var num = 0; num < objects.length; num++ ){
			var boxid = objects[num].id;
			var boxname = objects[num].name;
			if( boxname.indexOf(namepart) > -1 ) {
				if (ifChecked(boxid) )  return true;
			}
		}
	}
	else
		return false;
	return false;
}
function checkAll(elmnt, namepart){
	if (elmnt.type == 'checkbox' && !elmnt.checked) return;
	var objects = document.getElementsByTagName("input");
	if( objects != "" ) {
		for(var num = 0; num < objects.length; num++ ){
			var boxid = objects[num].id;
			var boxname = objects[num].name;
			if( boxname.indexOf(namepart) > -1 ) {
				objects[num].checked = true;
			}
		}
	}
}
function clearAll(namepart){
	//alert("in clearAll");
	var objects = document.getElementsByTagName("input");
	if( objects != "" ) {
		for(var num = 0; num < objects.length; num++ ){
			var boxid = objects[num].id;
			var boxname = objects[num].name;
			if( boxname.indexOf(namepart) > -1 ) {
				objects[num].checked = false;
				//alert("clearAll namepart=" + namepart + " boxname=" + boxname);
			}
		}
	}
}
	
function notNumber(d){
  var testnum = typeof d == 'number' ? d : Number(d.toString().replace(/[$,]/g, ''));
  //alert("in notNumber d=" + d + " testnum=" + testnum);
  if( isNaN( testnum ) ) 
  	return true;
  else return false;
}

function trim(str){
	// trim off leading spaces
	while (str.charAt(0) == ' '){
		str = str.substring(1);
	}

	//trim off trailing spaces
	while (str.charAt(str.length-1) == ' '){
		str = str.substring(0,str.length-1);
	}

	return str;
}

function limitInput(evnt, limit){
	// get the current value
	var thisChar;
	var cursorMove = false;
	var code;
	target = evnt.target;
	if (!target) target = evnt.srcElement;
	if (evnt.keyCode)
		code = evnt.keyCode;
	else code = evnt.which;
		if (code == 8 ||code == 9 || code == 35 || code == 36 || code == 37 || code == 38 || code == 39 || code == 40 || code == 46 ) return true;
		else {
			thisChar = String.fromCharCode(code);
		}
		if (target.value.length < limit) return true;
		else return false;
}

function delNonAscii(str) {
	var retval = "";
	if( str != null && str.length > 0 ) {
		retval = escape(str);
		if( retval.indexOf("%u") > -1 ) {
			//alert("retval = " + retval);
			retval = retval.replace(/%u[a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9]/g,'');
			//alert("after retval = " + retval);
			if( retval == null || retval.length < 1 )
				retval = '';
			//alert("delNonAscii retval = " + retval);
		}
		retval = unescape(retval);
	}
	return retval;
}

function hsvc() {
	var inhsv = "";
	if( window.hsv ) {
		var inhsv = window.hsv;
		if( inhsv.indexOf("null") > -1 ) {
			inhsv = "";
		}
	}
	return inhsv;
}

function goodDecimal(val) {
	// valid numbers:  1, 1., 1.0
	var result = /^\d+\.?\d*$/.test(val);
    return result;
}

function anchorLink(linkAnchor, linkLabel) {
	// create link to anchor on page with given linkLabel
	var retVal = linkLabel;
	if( linkAnchor != null ) {
		var newURL = window.location.pathname;
		var fullURL = parent.document.URL;
		var queryParm = "";
		if( newURL != null && fullURL != null && fullURL.indexOf("?") > -1) {
			queryParm = fullURL.substring(fullURL.indexOf('?')+1, fullURL.length);
			newURL = newURL + "?" + queryParm;
		}
		//alert("in anchorLink newURL = " + newURL);
		retVal = "<a class=\"errorAnchor\" href=\"" + newURL + "#" + linkAnchor + "\">" + linkLabel + "</a>";
	}
    return retVal;
}

function validateRatio(ratio, errMsgArray){
	if( errMsgArray == null ) errMsgArray = new Array("");
	var retVal = "";
    var s = ratio.split(":");
    if (s.length != 2) {
    	errMsgArray[0] = "Please enter the ratio as x colon y (e.g. 4:1)";
    	return retVal;
    }
    var n = s[0];
    var d = s[1];
    if ((n.length == 0 || isNaN(n) ) || (d.length == 0 || isNaN(d))){
    	errMsgArray[0] = "Please enter two numbers with a colon between.";
    	return retVal;
    }
    var nf = factor(n, 'prime');
	var df = factor(d, 'prime');
	var lastTime = false;
	var finished = false;
	while ((nf.length > 1 || df.length > 1) && !finished){
		var matchFound = false;
		if (lastTime) finished = true;
		outerloop:	for (var nfi = 0; nfi < nf.length; nfi++){
			var fn = nf[nfi];
			for (var dfi = 0; dfi < df.length; dfi++){
				if (fn == df[dfi]){
					// we know that fn is a factor of both n and d, reduce;
					matchFound = true;
					n = n / fn;
					d = d / fn;
					nf = factor(n, 'prime');
					df = factor(d, 'prime');
					break outerloop;
				}
			}
		}
		if (!matchFound ) finished = true;
		else if ( nf.length == 1 || df.length == 1) lastTime = true;
	}
	retVal = n + ":" + d;
	return retVal;
}
function factor( a , type) {
 var b = a, c, i = 1, j = Math.floor( a / 2 );//, output = 'Factors of ' + a + ': ', pf = '';
 var factors = new Array();
 var primeFactors = new Array();
 for( ; i<=a; i++ ) {
  c = a / i;
  if( c===Math.floor( c ) ) {
   factors[factors.length] = i;
   //output += i + '  ';
  }
 }
 //output = output + '\rPrime factors:  ';
 for( i = 2; i<=j; i++ ) {
  c = b / i;
  if( c===Math.floor( c ) ) {
   primeFactors[primeFactors.length] = i;
   //pf = pf + i + ' x ';
   b = c;i--;
  }
 }
 if( primeFactors.length == 0 ) { primeFactors[0] = a }
 if (type == null || type == 'prime') return primeFactors;
 else return factors;
 //return ;//output + pf.substr( 0, pf.length - 3 );
}

