/* This HTTP class is from "Javascript The Definitive Guide" by
 * David Flanagan
 */

HTTP = {};

HTTP._factories = [
    function() {return new XMLHttpRequest(); },
    function() {return new ActiveXObject("Msxml2.XMLHTTP"); },
    function() {return new ActiveXObject("Microsoft.XMLHTTP"); }
    ];

HTTP._factory = null;

HTTP.newRequest = function() {
    if (HTTP._factory != null) return HTTP._factory();
    for (var i = 0; i < HTTP._factories.length; i++) {
	try {
	    var factory = HTTP._factories[i];
	    var request = factory();
	    if (request != null) {
		HTTP._factory = factory;
		return request;
	    }
	}
	catch(e){
	    continue;
	}
    }
    HTTP._factory = function() {
	throw new Error("XMLHttpRequest not supported");
    }
    HTTP._factory();
}

function passwordCheck(pass0,pass1,pass1alert){
    var pass0Elt = document.getElementById(pass0);
    var pass1Elt = document.getElementById(pass1);
    var alertElt = document.getElementById(pass1alert);
    if (pass1Elt.value != pass0Elt.value) {
	pass1Elt.style.backgroundColor = 'red';
	if (!alertElt.firstChild){
	    alertElt.appendChild(document.createTextNode('passwords do not match'));
	}
    } else {
	pass1Elt.style.backgroundColor = 'white';
	if (alertElt.firstChild) {
	    alertElt.removeChild(alertElt.firstChild);
	}
    }
}

/* Check for required fields before submitting 
   e.g. username, password and email */
function formRegCheck(){
    var valid = true;
    var userBox = document.getElementById('user');
    var pass0Box = document.getElementById('pass0');
    var emailBox = document.getElementById('email');
    var userAlert = document.getElementById('useralert');
    var pass0Alert = document.getElementById('pass0alert');
    var emailAlert = document.getElementById('emailalert');
    if (userBox.value == '') {
	valid = false;
	if (!userAlert.firstChild){
	    userAlert.appendChild(document.createTextNode('fill in username'));
	    userAlert.style.backgroundColor = 'yellow';
	}
    }else{
	if(userAlert.firstChild) userAlert.removeChild(userAlert.firstChild);
	userAlert.style.backgroundColor = 'white';
    }
    if (pass0Box.value == ''){
	valid = false;
	if (!pass0Alert.firstChild){
	    pass0Alert.appendChild(document.createTextNode('fill in password'));
	    pass0Alert.style.backgroundColor = 'yellow';
	}
    }else{
	if (pass0Alert.firstChild) pass0Alert.removeChild(pass0Alert.firstChild);
	pass0Alert.style.backgroundColor = 'white';
    }
    if (emailBox.value == ''){
	valid = false;
	if (!emailAlert.firstChild){
	    emailAlert.appendChild(document.createTextNode('fill in email'));
	    emailAlert.style.backgroundColor = 'yellow';
	}
    }else{
	if (emailAlert.firstChild) emailAlert.removeChild(emailAlert.firstChild);
	emailAlert.style.backgroundColor = 'white';
    }
    if(valid) document.getElementById('form-reg').submit();
}

/*
   The showHelp function makes some help cells visible on the
   new-entry form.
*/

function showHelp(id){
    var ctgElt = document.getElementById(id);
    var elements = getElementsByClassName(ctgElt,'td','help');
    if(elements[0].style.display == 'none') var classString = 'block';
    else var classString = 'none';
    for(var i = 0; i < elements.length; i++) {
	elements[i].style.display = classString;
    }
}

/*  
    Here's a utility function for getting all child elements of a given
    element (elt)  according to their class name.

    This function by Jonathan Snook and Robert Nyman. Thanks.
*/
function getElementsByClassName(oElm, strTagName, strClassName){
	var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	strClassName = strClassName.replace(/\-/g, "\\-");
	var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
	var oElement;
	for(var i=0; i<arrElements.length; i++){
		oElement = arrElements[i];
		if(oRegExp.test(oElement.className)){
			arrReturnElements.push(oElement);
		}
	}
	return (arrReturnElements)
}
