channelnameRegExp = /^[a-zA-Z0-9_]+$/;
blankRegExp = /^ *$/;
emailRegExp = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/; // fixme: use the one in the php code instead
var serverLocation = "http://www.animasher.com/";
var controllerLocation = "http://www.animasher.com/comm/ajax_controller.php";

correctEmailStr = ""; //Email OK";

correctPasswordStr = ""; //First password OK";
passwordsMatchStr = ""; //Second password OK";
genderSelectedStr = "";
ageSelectedStr = "";

channelnameAvailable = false;

function msgWithClass(elId, theMsg, theClassName) {
	theEl = document.getElementById(elId);
	if (theEl==null) return;
	if (theEl.hasChildNodes()) {
	    theEl.firstChild.nodeValue = theMsg;
	} else {
	    var textNode = document.createTextNode(theMsg);
	    theEl.appendChild(textNode);
	}
	theEl.setAttribute("class", theClassName);
}

function validateChannelname(validateFld, displayFld) {
    enteredchannelname = validateFld.value;
    if (enteredchannelname.match(channelnameRegExp) && enteredchannelname.length <= 20) {
		checkChannelnameAvailability(enteredchannelname, displayFld);
		return true;
    } else {
		msgWithClass(displayFld, "Not possible", "validationError");
		focus(validateFld);
		return false;
    }
}
function validateChanneldescription(validateFld, displayFld) {
    enteredchanneldescr = validateFld.value;
    if (enteredchanneldescr.length > 0 && enteredchanneldescr.length <= 1000) {
		return true;
    } else {
		msgWithClass(displayFld, WHOOPS_NOT_FILLED_IN, "validationError");
		focus(validateFld);
		return false;
    }
}


/*
function validateGender(validateName, displayFld) {
	for (var i=0; i < validateName.length; i++) {
		if (validateName[i].checked) {
			msgWithClass(displayFld, genderSelectedStr, "noValidationError");
			return true;
		}
	}
	msgWithClass(displayFld, noGenderStr, "validationError");
	focus(validateName[i]);
	return false;
}
*/

/*
function validateAge(validateName, displayFld) {
	for (var i=0; i < validateName.length; i++) {
		if (validateName[i].checked) {
			msgWithClass(displayFld, ageSelectedStr, "noValidationError");
			return true;
		}
	}
	msgWithClass(displayFld, noAgeStr, "validationError");
	focus(validateName[i]);
	return false;
}
*/


function validateAllChannelFields() {
	//alert("validateallfields");
	returnval = validateChannelname(document.forms.createChannel.newChannelName, 'channelnameErrInfo');
	returnval = returnval && validateChanneldescription(document.forms.createChannel.description, 'descErrInfo');

	// returnval = returnval && checkUsernameAvailability(document.forms.signup.signUpUsername, 'usernameErrInfo');
	returnval = returnval && channelnameAvailable;

	if (!returnval) {
		msgWithClass('allErrInfo',WHOOPS_NOT_FILLED_IN, "validationError");
	}

	return returnval;
}



function checkChannelnameAvailability(channelname, displayFld){
	var ajaxRequest;

	try {
		ajaxRequest = getAjaxRequest();
	} catch (e) {
		return -1;
	}

	ajaxRequest.onreadystatechange = function() {
		if (ajaxRequest.readyState == 4) {
			if (ajaxRequest.status == 200) {
				if (ajaxRequest.responseText == "OK") {
					// need to set this for the complete form validation later
					channelnameAvailable = true;
					msgWithClass(displayFld, channelname + correctchannelnameStr, "noValidationError");
				} else {
					channelnameAvailable = false;
					msgWithClass(displayFld, channelnameUnavailableStr, "validationError");
				}
			} else {
			alert("name already taken?");
				msgWithClass(displayFld, "", "noValidationError"); // fixme: some error msg here? or just leave user oblivious for now?
			}
		}
	}

	ajaxRequest.open("POST", controllerLocation, true);
	ajaxRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	ajaxRequest.send("checkChannelnameAvailability=true&channelname="+channelname);
}