/**
 * Eigene Validation fÃ¼r das Captcha.
 */
function addValidations() {
	Validation.add('validate-selection-accept-first', 'Keine gÃ¼ltige Auswahl getroffen.', function(v,elm){
		return !Validation.get('IsEmpty').test(v);
	});
			
	Validation.add('validate-captcha', 'Captcha ungÃ¼ltig', function(v, elem) {
		return isCaptchaValid(elem);
	})
	
	Validation.add('validate-confirm-email', 'E-Mail zur BestÃ¤tigung ist nicht identisch!', function(v, elem) {
		return isEmailIdentical(elem);
	})
	
	Validation.add('required-drop-down', 'Drop Down Feld ist nicht ausgewÃ¤hlt.', function(v, elem) {
		return isDropDownSelected(elem);
	})
} 

function isEmailIdentical(confirmField) {
  var emailValue = confirmField.id.replace(/confirm/, "");
  return confirmField.value == $F(emailValue);
}

function isDropDownSelected(dropDownField) {
  return $F(dropDownField.id) != dropDownField.options[0].text;
}

function extractPath(path) {
  return path.substring(0, path.lastIndexOf("/"));
}

function isCaptchaValid(field) {
	var valid = false;
	
	var currentPath = extractPath(location.pathname);
	var diff = currentPath.replace(extractPath(weblicaScriptPath), "");
	if (diff == "/") diff = "";
	var URLToCaptchaScript = location.protocol + "//" + location.host + diff + "/_captcha/validCaptcha.php";

	new Ajax.Request(URLToCaptchaScript, {
        asynchronous: false,
        encoding: 'UTF-8',
        method: 'post',
        parameters: 'captcha=' + field.value,
        onSuccess: function(transport) {
    	    valid = transport.responseText == 'true';
        }
      });
  return valid;
}

function connectToForm() {
  var forms = $$('form.abstractForm');
	for (var i = 0; i < forms.length; ++i) {
		var form = forms[i];
    new Validation(form.id, {immediate:true});
	}
}

function refreshCaptcha() {
  var elems = $$('img[class="captchaImg"]'); // Dieser String plus Img Tag muss gleich sein wie die Konstante aus der Klasse GenerateHtmlVisitor im Formular-Absatz
  var random = Math.round(Math.random() * 100000);
  for (var i = 0; i < elems.length; ++i) {
    var source = elems[i].src.split("?set=");
    elems[i].src = source[0] + "?set=" + random;
  }
}

function observeCaptchaRenew() {
  var links = $$('a[name="captcha"]'); // Dieser String muss gleich sein wie die Konstante aus der Klasse GenerateHtmlVisitor im Formular-Absatz
  for(var i = 0; i < links.length; ++i){ 
    links[i].onclick = function(){
      refreshCaptcha();
      return false;
    }
  }
}

function checkTextAreaLen(field, maxlength) {
  if (field.value.length > maxlength) {
    field.value = field.value.substring(0, maxlength);
  }
}

window.onload = function() {
	addValidations();
	connectToForm();
	observeCaptchaRenew();
}
	