Event.observe(window, 'load', QV_InitializeValidation);

function QV_InitializeValidation() {
  var zForms = document.forms;
  for (var j = 0; j < zForms.length; j++) {
    Event.observe(zForms[j], 'submit', QV_ValidateForm);
//	appendEventHandler(zForms[j],'onsubmit',QV_ValidateForm,zForms[j]);
    QV_UpdateRequiredStyles(false, zForms[j]);
  }
  return true;
}
function QV_RequiredInput(aInput, aForm) {
  this.inputObject = aInput;
  this.form = aForm;
  this.validationStyleObject = new Object();
  this.shouldStyle = new Object();
  this.shouldStyle = true;
  if (!this.inputObject.getAttribute('validationStyleId')) {
    this.inputObject.validationStyleObject = this.inputObject;
  } else {
    this.inputObject.validationStyleObject = $(this.inputObject.getAttribute('validationStyleId'));
  }
  if ((this.getInputType() == 'radio' || this.getInputType() == 'checkbox') && this.inputObject == this.validationStyleObject)
    this.shouldStyle = false;
}
QV_RequiredInput.prototype.getInputType = function () {
  if (this.inputObject.tagName == 'INPUT') return this.inputObject.type;
  else return this.inputObject.tagName;
}
QV_RequiredInput.prototype.styleAs = function (aType) {
  if (this.inputObject.validationStyleObject && this.shouldStyle) {
    if (aType == 'Invalid') {
      AddClass(this.inputObject.validationStyleObject, 'QV_RequiredAlert');
      RemoveClass(this.inputObject.validationStyleObject, 'QV_RequiredStart');
    } else if (aType == 'Required') {
      RemoveClass(this.inputObject.validationStyleObject, 'QV_RequiredAlert');
      AddClass(this.inputObject.validationStyleObject, 'QV_RequiredStart');
    } else if (aType == 'None') {
      RemoveClass(this.inputObject.validationStyleObject, 'QV_RequiredAlert');
      RemoveClass(this.inputObject.validationStyleObject, 'QV_RequiredStart');
    } else if (aType == 'NotRequired') {
      RemoveClass(this.inputObject.validationStyleObject, 'QV_RequiredStart');
    }
  }
}
function QV_SetIsValidFunction(aElement, aFunction) {
	if (!aElement.QV_RequiredInput)
		aElement.QV_RequiredInput = new QV_RequiredInput(aElement,aElement.form);
	aElement.QV_RequiredInput.isValid = aFunction;
}
function QV_SetIsRequiredFunction(aElement, aFunction) {
  if (!aElement.QV_RequiredInput)
    aElement.QV_RequiredInput = new QV_RequiredInput(aElement,aElement.form);
  aElement.QV_RequiredInput.isRequired = aFunction;
}
function QV_UpdateRequiredStyles(e, aForm) {
  var allInputs = getElementsWithAttribute('customValidation','Y','',aForm);
  for (var i = 0; i < allInputs.length; i++) {
    if (allInputs[i].getAttribute('customValidation') != 'Y') {
      var zConditionArray = allInputs[i].getAttribute('customValidation').split(',');
      var zConditionalInput = $(zConditionArray[0]);
      if (zConditionalInput) {
//        removeEventHandler(zConditionalInput,'onblur',QV_UpdateRequiredStyles);
//        appendEventHandler(zConditionalInput,'onblur',QV_UpdateRequiredStyles, aForm);
      }
    }
    if (!allInputs[i].QV_RequiredInput)
      allInputs[i].QV_RequiredInput = new QV_RequiredInput(allInputs[i], aForm);
    allInputs[i].QV_RequiredInput.styleAs('NotRequired');
    if (allInputs[i].QV_RequiredInput.isRequired()) {
      allInputs[i].QV_RequiredInput.styleAs('Required');
    }
  }
}
QV_RequiredInput.prototype.isValid = function () {
  if (!this.isRequired()) return true;
  if (this.getInputType() == 'radio' || this.getInputType() == 'checkbox') {
    if (this.inputObject.getAttribute('validationGroup'))
      var zAssociatedInputs = getElementsWithAttribute('validationGroup',this.inputObject.getAttribute('validationGroup'),'',this.form);
    else var zAssociatedInputs = getElementsWithAttribute('name',this.inputObject.getAttribute('name'),'',this.form);
    var atLeastOne = false;
    for (var i = 0; i < zAssociatedInputs.length; i++) {
      if (zAssociatedInputs[i].checked) atLeastOne = true;
    }
    if (atLeastOne) return true;
  } else {
    if (this.inputObject.value) return true;
  }
  return false;
}
QV_RequiredInput.prototype.isRequired = function (aElement) {
  if (this.inputObject.disabled) return false;
  var zConditionString = this.inputObject.getAttribute('customValidation');
  var zConditionArray = zConditionString.split(',');
  if (zConditionArray.length > 0) {
    if (zConditionArray[0] == 'Y') {
      return true;
    }
    var zRequiredOwner = $(zConditionArray[0]);
    if (zRequiredOwner) {
      if (zConditionArray[1] == 'selected') {
        if (zRequiredOwner.selected && zConditionArray[2] == 'true' || !zRequiredOwner.selected && zConditionArray[2] == 'false')
          return true;
        else
          return false;
      }
      else if (zConditionArray[1] == 'value') {
        if (zRequiredOwner.value == zConditionArray[2])
          return true;
        else
          return false;
      }
      else if (zConditionArray[1] == 'checked') {
        if (zRequiredOwner.checked && zConditionArray[2] == 'true' || !zRequiredOwner.checked && zConditionArray[2] == 'false')
          return true;
        else
          return false;
      }
    }
  }
  return true;
}
QV_RequiredInput.prototype.getErrorMessage = function () {
  return this.inputObject.getAttribute('validationMessage');
}
QV_RequiredInput.prototype.hasErrorMessage = function () {
  if (this.inputObject.getAttribute('validationMessage'))
    return true;
  else return false;
}
function QV_HandleInvalidFields(aForm, aInvalidFieldsArray) {
  var zDefaultErrorMessage = 'Please fill out all required fields.\n';
  if (aForm.getAttribute('validationMessage')) zDefaultErrorMessage = aForm.getAttribute('validationMessage');
    var zErrorMessage = zDefaultErrorMessage;
  for (var i = 0; i < aInvalidFieldsArray.length; i++) {
    if (aInvalidFieldsArray[i].QV_RequiredInput.hasErrorMessage())
      zErrorMessage += '\n' + aInvalidFieldsArray[i].QV_RequiredInput.getErrorMessage();
  }
  //alert(zErrorMessage);
}
function QV_ValidateForm(e, aForm) {
  e = e || window.event;
  aForm = aForm || Event.element(e);
  var zValidForm = true;
  var zRequiredInputs = getElementsWithAttribute('customValidation','Y','',aForm);
  var zInvalidInputs = new Array();
  for (var i = 0; i < zRequiredInputs.length; i++) {
    if (!zRequiredInputs[i].QV_RequiredInput)
      zRequiredInputs[i].QV_RequiredInput = new QV_RequiredInput(zRequiredInputs[i], aForm);
    zRequiredInputs[i].QV_RequiredInput.styleAs('None');
    if (zRequiredInputs[i].QV_RequiredInput.isRequired())
      zRequiredInputs[i].QV_RequiredInput.styleAs('Required');
    if (zRequiredInputs[i].QV_RequiredInput.isRequired() && !zRequiredInputs[i].QV_RequiredInput.isValid())  {
      zRequiredInputs[i].QV_RequiredInput.styleAs('Invalid');
      zInvalidInputs[zInvalidInputs.length] = zRequiredInputs[i];
      zValidForm = false;
    }
  }
  if (!zValidForm)
    QV_HandleInvalidFields(aForm, zInvalidInputs);
  return zValidForm;
}

function getElementsWithAttribute(aAttribute,aValue,aTagName,aElement) {
  var i, zElements = new Array(), zAllElements = (aElement || document).getElementsByTagName(aTagName || "*");
  for(i = 0; i < zAllElements.length; i++) {
    if(!aAttribute||zAllElements[i].getAttribute(aAttribute) == aValue) {
      zElements.push(zAllElements[i]);
    }
  }
  return zElements;
}

function isClass(object, className) {
  return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
}
function AddClass(aElement,aClass) {
  aElement.className = aElement.className + ' ' + aClass;
}
function RemoveClass(aElement,aClass) {
  var zRegExp = new RegExp('(^|\\s)' + aClass + '\\b');
  aElement.className = aElement.className.replace(zRegExp, '').Trim();
}
String.prototype.Trim = function(){
  return this.replace(/^\s*|\s*$/g,'');
}



//Registration JS

function trim(a){return a.replace(/^\s*|\s*$/g,"");}

function XMLParser(arg) {
	var xmlDoc;
	  if ( window.ActiveXObject ){
	   xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
	   xmlDoc.async="false";
	   xmlDoc.loadXML(trim(arg));
	  } else if ( document.implementation.createDocument ){
	   //xmlDoc = document.implementation.createDocument("", "", null);
	   var parser = new DOMParser();
	   arg = arg.replace(/\s*\n\s*/g, "");
	   xmlDoc = parser.parseFromString(trim(arg), "text/xml"); 
	  }
	  return xmlDoc;
}

function registrationOnLoadFunction () {
	QV_SetIsValidFunction($('user.emailAddr'), isValidEmailAddress);
	QV_SetIsValidFunction($('user.secretQId'), isValidSecretQuestion);
}

function actOnAvailability (availability) {
	//$('user.userName').setAttribute('customValidation', 'Y');
	//QV_SetIsValidFunction($('user.emailAddr'), isValidEmailAddress);
	if (availability == 'AVAILABLE') {
		j('#AvailabilityContainer').css("color","#009007")
		j('#AvailabilityContainer').html('Available');
		j('#screenName').removeClass('QV_RequiredAlert');
		j('#screenName').attr('customValidation', '');
	} else if (availability == 'USER_EXISTS'){
		j('#AvailabilityContainer').css("color","#FF0000");
		j('#AvailabilityContainer').html('Not Available');
		j('#screenName').addClass('QV_RequiredAlert');
		QV_SetIsValidFunction(j('#screenName'), isNotValid);
	} else if (availability == 'NOT_ALLOWED'){
		j('#AvailabilityContainer').css("color","#FF0000")
		j('#AvailabilityContainer').html('Username not allowed.');
		j('#screenName').addClass('QV_RequiredAlert');
		QV_SetIsValidFunction(j('#screenName'), isNotValid);
	} else if (availability == 'NAME_FORMAT'){
		j('#AvailabilityContainer').css("color","#FF0000")
		j('#AvailabilityContainer').html('Invalid username.');
		j('#screenName').addClass('QV_RequiredAlert');
		QV_SetIsValidFunction(j('#screenName'), isNotValid);
	} else {
		j('#AvailabilityContainer').html('');
		j('#screenName').removeClass('QV_RequiredAlert');
		QV_SetIsValidFunction(j('#screenName'), isNotValid);
	}
}

function isNotValid () { return false; }

function userToLower(Username) {
	var lUsername = Username.toLowerCase();
	document.getElementById('screenName').value = lUsername;
}

function checkUsernameAvailability (Username) {
	if (Username) {
		new Ajax.Request('usernamecheck.jhtml?username=' + Username, {
		  method: 'get',
		  onSuccess: function(transport) {
		  	//alert(transport.responseText);
		  	actOnAvailability(transport.responseText);
		  }
		});
	} else {
		if (document.getElementById('screenName') == '') {
			actOnAvailability('');
		}
	}
}

function submitRegistrationForm() {
	j('#registrationForm').request({
		onComplete: function(transport){ if (transport.responseText) j('#RegistrationFormContainer').html(transport.responseText); }
	});
}

function clearError() {
	if (j('#error1')) {
		j('#error1').html('');
	}
	j('#AvailabilityContainer').html('');
}
function clearError2() {
	if (j('#error2')) {
		j('#error2').html('');
	}
}
function clearError3() {
	if (j('#error3')) {
		j('#error3').html('');
	}
}
function clearError4() {
	if (j('#error4')) {
		j('#error4').html('');
	}
}
function clearError5() {
	if (j('#error5')) {
		j('#error5').html('');
	}
}
function clearError6() {
	if (j('#error6')) {
		j('#error6').html('');
	}
}
function clearErrorZip() {
	if (j('#errorZip')) {
		j('#errorZip').html('');
	}
}

function returnHome() {
	window.location.href="/home/home.jhtml";
}


function selectVal() {
	if (document.getElementById('userOptinControl').checked) {
		document.getElementById('user.emailOptinInternal').value = 'Y';
	} else {
		document.getElementById('user.emailOptinInternal').value = 'N';
	}
}