function urlencode( str ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Philip Peterson
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: AJ
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Brett Zamir
    // %          note: info on what encoding functions to use from: http://xkr.us/articles/javascript/encode-compare/
    // *     example 1: urlencode('Kevin van Zonneveld!');
    // *     returns 1: 'Kevin+van+Zonneveld%21'
    // *     example 2: urlencode('http://kevin.vanzonneveld.net/');
    // *     returns 2: 'http%3A%2F%2Fkevin.vanzonneveld.net%2F'
    // *     example 3: urlencode('http://www.google.nl/search?q=php.js&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:en-US:unofficial&client=firefox-a');
    // *     returns 3: 'http%3A%2F%2Fwww.google.nl%2Fsearch%3Fq%3Dphp.js%26ie%3Dutf-8%26oe%3Dutf-8%26aq%3Dt%26rls%3Dcom.ubuntu%3Aen-US%3Aunofficial%26client%3Dfirefox-a'
                             
    var histogram = {}, tmp_arr = [];
    var ret = str.toString();
    
    var replacer = function(search, replace, str) {
        var tmp_arr = [];
        tmp_arr = str.split(search);
        return tmp_arr.join(replace);
    };
    
    // The histogram is identical to the one in urldecode.
    histogram["'"]   = '%27';
    histogram['(']   = '%28';
    histogram[')']   = '%29';
    histogram['*']   = '%2A';
    histogram['~']   = '%7E';
    histogram['!']   = '%21';
    histogram['%20'] = '+';
    
    // Begin with encodeURIComponent, which most resembles PHP's encoding functions
    ret = encodeURIComponent(ret);
    
    for (search in histogram) {
        replace = histogram[search];
        ret = replacer(search, replace, ret) // Custom replace. No regexing
    }
    
    // Uppercase for full PHP compatibility
    return ret.replace(/(\%([a-z0-9]{2}))/g, function(full, m1, m2) {
        return "%"+m2.toUpperCase();
    });
    
    return ret;
}

function addslashes( str ) {
	// http://kevin.vanzonneveld.net
	// +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
	// +   improved by: Ates Goral (http://magnetiq.com)
	// +   improved by: marrtins
	// +   improved by: Nate
	// +   improved by: Onno Marsman
	// *     example 1: addslashes("kevin's birthday");
	// *     returns 1: 'kevin\'s birthday'

	return (str+'').replace(/([\\"'])/g, "\\$1").replace(/\0/g, "\\0");
}

function rtrim(str, chars) {
    chars = chars || "\\s";
    return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}

function fireEvent(element, eventName) {
	evt = document.getElementById(element)[eventName];
	if (typeof(evt) == "function") {
		document.getElementById(element)[eventName]();
	} else {}
}

function GetXmlHttpObject() {
	var xmlHttp;
	try {// Firefox, Opera 8.0+, Safari
		xmlHttp=new XMLHttpRequest();
	} catch (e) {// Internet Explorer
		try {
			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {
				alert("Your browser does not support AJAX!");
				return false;
			}
		}
	}
	return xmlHttp;
}

function showHint(str,num,swch) {
	//alert(str+num+swch);
	if (str.length==0) { 
		document.getElementById("resumeInfo").innerHTML="";
		return;
	}
	xmlHttp=GetXmlHttpObject();
	if (xmlHttp==null) {
		alert ("Your browser does not support AJAX!");
		return;
	}
	var url="register.php";
	newswch = str.substring(0,10);
	var wid = document.getElementById("wid").value;
	//alert(wid);
	url = url + "?query=" + str + "&wid=" + wid;
	//alert(newswch+url);
	//document.getElementById("school").innerHTML = url;
	xmlHttp.onreadystatechange = stateChanged;
	xmlHttp.open("GET",url,true);
	xmlHttp.send(null);
}

function stateChanged() {
	if (xmlHttp.readyState == 1) {
		if (swch == 'load') { document.getElementById("resumeInfo").innerHTML='<div align="center"><p>Loading, please wait ...</p></div>'; }
		if (swch == 'save') { document.getElementById("resumeInfo").innerHTML='<div align="center"><p>Saving, please wait ...</p></div>'; }
	}
	if (xmlHttp.readyState == 4) {
		var values = xmlHttp.responseText;
		//alert(values);
		if (newswch == 'testDiv') { document.getElementById(xmlHttp.swch).innerHTML = values; }
		else { document.getElementById(newswch).innerHTML = values; updateSchools(); }
	}
}

function createForms(str,qty) {
	if (qty.value == 0) { qty.value = 1;alert('You must select at least 1');return false; }
	else if (qty.value == 'po') { showHint(str+1,'0','add'); }
	else { showHint(str+qty.value,'0','add'); }
}

function getElementsByClassName(classname, node) {
	if(!node) { node = document.getElementsByTagName("body")[0]; }
	var a = [];
	var re = new RegExp('\\b' + classname + '\\b');
	var els = node.getElementsByTagName("*");
	for(var i=0,j=els.length; i<j; i++)
	if(re.test(els[i].className))a.push(els[i]);
	return a;
}

function DisplayFormValues(toggle,num) {
	swch = toggle;
	//alert(swch);
	if (swch == 'regschools') { var elem = document.getElementById('schoolform').elements; }
	else if (swch == 'regpersons') { var elem = document.getElementById('personform').elements; }
	var data = '';
	var str = '?swch='+swch+'&num='+num;//alert(elem);
	for(var i = 0; i < elem.length; i++) {
		if (elem[i].name != '') {
			if (elem[i].value != undefined) {
				if (elem[i].type == "checkbox") {
					if (elem[i].checked) { data += elem[i].name + ":checked;"; str += "&" + elem[i].name + "=1"; }
					else { data += elem[i].name + ":checked;"; str += "&" + elem[i].name + "=0"; }
				} else if (elem[i].type == "radio") {
					if (elem[i].checked) { data += elem[i].name + ":" + elem[i].value + ";"; str += "&" + elem[i].name + "=" + elem[i].value; }
				} else { data += elem[i].name + ":" + elem[i].value + ";"; str += "&" + elem[i].name + "=" + urlencode(elem[i].value); }
			}
		}
	}
	//alert(str);
	showHint(str,num,swch);
}

function popSelect(schnm,num) {
	elems = document.getElementsByTagName('select');
	//alert(elems[2].className);
	
	for (var i=0; i < elems.length; i++) {
		if (elems[i].className == 'sid') { elems[i].options[num]=new Option(schnm, num, false, false); }
	}
	//for (var i=0; i < elems.length; i++) {
	//	elems[i].options[num - 1]=new Option(schnm, num, false, false);
	//}
}

function updateSchools() {
	elems = document.getElementsByName('schnm[]');
	str = '';
	//alert(elems.length);
	for (var i=0; i < elems.length; i++) {
		str+= "fireEvent('schnm"+i+"','onchange');";
	}
	//alert(str);
	eval(str);
}

//onerror=handleErr;
var txt="";
function handleErr(msg,url,l){
  txt="There was an error on this page.\n\n";
  txt+="Error: " + msg + "\n";
  txt+="URL: " + url + "\n";
  txt+="Line: " + l + "\n\n";
  txt+="Click OK to continue.\n\n";
  alert(txt);
}

function updatePrice() {
	classes = getElementsByClassName('classchk',document.getElementById('register'));
	//alert(document.getElementById('class10').parentNode.innerHTML);
	count = 0;
	var rtotal = 0;
	for (i=0; i< classes.length; i++) {
		if (classes[i].checked) {
			count = count + 1;
			var html = classes[i].parentNode.innerHTML;
			var harray = html.split('$');
			//alert(harray[1]);
			rtotal += parseFloat(harray[1]);
		}
	}
	document.getElementById('ttlprice').innerHTML = "$"+rtotal;
}

function validateForm(form) {
	var valid = true;
	elems = document.getElementsByTagName('input');
	
	schools = document.getElementById('schools');
	persons = document.getElementById('persons');

	if (form.paymthd[0].checked == false && form.paymthd[1].checked == false) { alert('Please select a payment method.'); valid = false; }
	if (form.id == 'register') {
		if (schools.selectedIndex == 0 ) { alert ( "You must complete information for at least one school to register." ); valid = false; }
		if (persons.selectedIndex == 0 ) { alert ( "You must complete information for at least one attendee to register." ); valid = false; }
	}

	for (var i=0; i < elems.length; i++) {
		var label = "";
		if (elems[i].className == 'req' && elems[i].value == '') {
			label = elems[i].previousSibling.innerHTML;
			alert(label + ' is a required field, please fill out all required fields and try again.');
			valid = false;
		}
	}
	//alert(form.id);

	classes = getElementsByClassName('classchk',document.getElementById('register'));
	var reg = [];
	for (var i=0; i < persons.value; i++) {
		//alert(persons.value);
		for (var c=0; c < classes.length; c++) {
			var html = classes[c].id;
			var lhtml = classes[c].id.length;
			var rn = html.substring((lhtml-1),lhtml);
			if (classes[c].checked) {
				//alert(i + "=" + rn);
				if (i == rn) {
					reg[i] = true;
				}
			}
		}
	}
	
	for (var i=0; i < persons.value; i++) {
		if(!reg[i]) {
			valid = false;
			alert('You must select at least one class for Attendee ' + (i+1));
		}
	}
/*		if (!document.getElementById('class1'+i).checked && !document.getElementById('class3'+i).checked && !document.getElementById('class2'+i).checked) {
			alert('You must select at least one class for Attendee '+(i+1));
			valid = false;
		}*/
	if (valid == true) {
		form.submit();
		//alert("form submitted");
	}
}
