///////////////////////////////////////////////////////////////////////////////
// VDaemon PHP Library version 3.0.10
// Copyright (C) 2002-2007 Alexander Orlov
//
// VDaemon client-side validation file
//
///////////////////////////////////////////////////////////////////////////////
function VDSymError()
{
return true;
}
window.onerror = VDSymError;
var vdAllForms = new Object();
var vdForm = null;
function VDValidateForm(formName, submit)
{
if (typeof(vdAllForms[formName]) == "undefined")
return true;
var browser = VDDetectBrowser();
if (browser != "IE" && browser != "Opera" && browser != "Gecko")
return true;
vdForm = vdAllForms[formName];
vdForm.focus = false;
VDPrepareValues();
var isPageValid = true;
var eventType = submit ? "submit" : "blur";
for (var idx = 0; idx < vdForm.validators.length; idx++) {
if (typeof(vdForm.validators[idx]) != "undefined") {
VDValidateValidator(vdForm.validators[idx], eventType);
isPageValid = isPageValid && vdForm.validators[idx].isvalid;
}
}
vdForm.isvalid = isPageValid;
VDUpdateLabels(eventType);
VDUpdateSummaries(eventType);
vdForm = null;
return isPageValid;
}
function VDResetForm(formName)
{
if (typeof(vdAllForms[formName]) == "undefined")
return true;
var browser = VDDetectBrowser();
if (browser != "IE" && browser != "Opera" && browser != "Gecko")
return true;
vdForm = vdAllForms[formName];
if (typeof(vdForm.controls) == "undefined")
VDPrepareControls();
VDUpdateLabels("reset");
VDUpdateSummaries("reset");
vdForm = null;
return true;
}
function VDBindHandlers()
{
var browser = VDDetectBrowser();
for (var key in vdAllForms) {
if (browser == "IE" || browser == "Opera") {
document.forms[key].attachEvent('onsubmit', VDIeSubmitHandler);
document.forms[key].attachEvent('onreset', VDIeResetHandler);
} else if (browser == "Gecko") {
document.forms[key].addEventListener('submit', VDGeckoSubmitHandler, false);
document.forms[key].addEventListener('reset', VDGeckoResetHandler, false);
}
for (var idx = 0; idx < document.forms[key].elements.length; idx++) {
var element = document.forms[key].elements[idx];
if (element.type == "submit" && element.tagName != "BUTTON") {
if (browser == "IE" || browser == "Opera") {
element.attachEvent('onclick', VDIeClickHandler);
} else if (browser == "Gecko") {
element.addEventListener('click', VDGeckoClickHandler, false);
}
}
else if (element.type != "button" && element.type != "image" &&
element.type != "submit" && element.type != "reset") {
if (vdAllForms[key].validationmode == "onchange") {
if (browser == "IE" || browser == "Opera") {
element.attachEvent('onblur', VDIeSubmitHandler);
} else if (browser == "Gecko") {
element.addEventListener('blur', VDGeckoSubmitHandler, false);
}
}
}
}
}
}
function VDIeSubmitHandler()
{
if (vdForm == null) {
var formName = VDGetFormName(event.srcElement);
var submit = event.type == "submit";
var valid = VDValidateForm(formName, submit);
if (submit) {
if (valid) {
VDDisableButtons(formName);
} else {
event.returnValue = false;
}
}
}
}
function VDIeResetHandler()
{
if (vdForm == null) {
var formName = VDGetFormName(event.srcElement);
VDResetForm(formName);
}
}
function VDIeClickHandler()
{
if (vdForm == null) {
var formName = VDGetFormName(event.srcElement);
vdAllForms[formName].submit = event.srcElement;
}
}
function VDGeckoSubmitHandler(event)
{
if (vdForm == null) {
var formName = VDGetFormName(event.target);
var submit = event.type == "submit";
var valid = VDValidateForm(formName, submit);
if (submit) {
if (valid) {
VDDisableButtons(formName);
} else {
event.preventDefault();
}
}
}
}
function VDGeckoResetHandler(event)
{
if (vdForm == null) {
var formName = VDGetFormName(event.target);
VDResetForm(formName);
}
}
function VDGeckoClickHandler(event)
{
if (vdForm == null) {
var formName = VDGetFormName(event.target);
vdAllForms[formName].submit = event.target;
}
}
function VDGetFormName(element)
{
var result = '';
if (element.tagName == "INPUT" || element.tagName == "SELECT" || element.tagName == "TEXTAREA") {
element = element.form;
}
if (element != null) {
if (typeof(element.id) == "string") {
result = element.id;
} else if (element.getAttributeNode("ID") != null) {
result = element.getAttributeNode("ID").value;
}
if (result == '') {
if (typeof(element.name) == "string") {
result = element.name;
} else if (element.getAttributeNode("NAME") != null) {
result = element.getAttributeNode("NAME").value;
}
}
}
return result;
}
function VDDisableButtons(formName)
{
if (vdAllForms[formName].disablebuttons == "none")
return;
for (var idx = 0; idx < document.forms[formName].elements.length; idx++) {
var element = document.forms[formName].elements[idx];
if (element.type == "submit" || element.type == "image" ||
(vdAllForms[formName].disablebuttons == "all" &&
(element.type == "button" || element.type == "reset"))) {
element.disabled = true;
}
}
}
function VDDetectBrowser()
{
var detect = navigator.userAgent.toLowerCase();
var browser;
if (detect.indexOf('gecko') > -1) browser = "Gecko";
else if (detect.indexOf('opera') > -1) browser = "Opera";
else if (document.all) browser = "IE";
else browser = "Unknown";
return browser;
}
function VDGetPhpControlName(ctrlName)
{
var result = new Array();
var posL, posR, index;
posL = ctrlName.indexOf('[');
if (posL == 0) {
return null;
}
posR = ctrlName.indexOf(']', posL);
result[0] = posL > 0 && posR > 0 ? ctrlName.substring(0, posL) : ctrlName;
result[0] = result[0].replace('[', '_');
result[0] = result[0].replace('.', '_');
while (posL > 0 && posR > 0) {
index = ctrlName.substring(posL + 1, posR);
index = VDEscape(index);
if (index.match(/^0$|^[1-9][0-9]*$/) != null) { // decimal int
index = parseInt(index);
}
result[result.length] = index;
posL = ctrlName.indexOf('[', posR);
if (posL != posR + 1) {
posL = -1;
} else {
posR = ctrlName.indexOf(']', posL);
}
}
return result;
}
function VDPrepareControls()
{
var control;
var phpName;
var element;
vdForm.controls = new Array();
for (var idx = 0; idx < document.forms[vdForm.name].elements.length; idx++) {
element = document.forms[vdForm.name].elements[idx];
if (element.name && element.name != "VDaemonValidators" && element.tagName != "BUTTON" &&
element.type != "button" && element.type != "image" && element.type != "reset") {
phpName = VDGetPhpControlName(element.name);
if (phpName != null) {
control = new Object();
control.phpName = phpName;
control.obj = element;
vdForm.controls[vdForm.controls.length] = control;
}
}
}
}
function VDPrepareValues()
{
var values, index, ref;
if (typeof(vdForm.controls) == "undefined")
VDPrepareControls();
vdForm.values = new Object();
for (var i = 0; i < vdForm.controls.length; i++) {
values = VDGetElementValues(vdForm.controls[i].obj);
for (var v = 0; v < values.length; v++) {
ref = vdForm.values;
index = null;
for (var j = 0; j < vdForm.controls[i].phpName.length; j++) {
if (index != null)
ref = ref[index];
index = vdForm.controls[i].phpName[j];
if (index === "")
index = ref.length;
if (typeof(ref[index]) != "object") {
ref[index] = new Object();
}
}
ref[index] = values[v];
}
}
}
function VDGetElementValues(element)
{
var result = new Array();
if (element.type == "select-multiple") {
var options = element.getElementsByTagName("OPTION");
if (typeof(options.length) == "number") {
for (var idx = 0; idx < options.length; idx++) {
var value = VDGetOptionValue(options[idx]);
if (value != null) {
result[result.length] = value;
}
}
}
} else if (typeof(element.value) == "string") {
if (element.type == "checkbox" || element.type == "radio") {
if (element.checked)
result[result.length] = VDTrim(element.value);
} else if (element.type == "submit") {
if (vdForm.disablebuttons == "none" &&
typeof(vdForm.submit) == "object" && vdForm.submit == element) {
vdForm.submit = null;
result[result.length] = VDTrim(element.value);
}
} else
result[result.length] = VDTrim(element.value);
}
return result;
}
function VDGetOptionValue(option)
{
var result = null;
if (option.selected) {
if (typeof(option.value) == "string") {
result = VDTrim(option.value);
} else {
result = VDTrim(option.text);
}
}
return result;
}
function VDValidateValidator(validator, eventType)
{
validator.isvalid = true;
switch (validator.type) {
case "required":
validator.isvalid = VDEvaluateRequired(validator);
break;
case "checktype":
validator.isvalid = VDEvaluateChecktype(validator);
break;
case "range":
validator.isvalid = VDEvaluateRange(validator);
break;
case "compare":
validator.isvalid = VDEvaluateCompare(validator);
break;
case "regexp":
validator.isvalid = VDEvaluateRegExp(validator);
break;
case "format":
validator.isvalid = VDEvaluateFormat(validator);
break;
case "custom":
validator.isvalid = VDEvaluateCustom(validator);
break;
case "group":
validator.isvalid = -1;
for (var i = 0; i < validator.validators.length; i++) {
VDValidateValidator(validator.validators[i], "");
if (validator.isvalid == -1) {
validator.isvalid = validator.validators[i].isvalid;
} else {
switch (validator.operator) {
case "and":
validator.isvalid = validator.isvalid && validator.validators[i].isvalid;
break;
case "or":
validator.isvalid = validator.isvalid || validator.validators[i].isvalid;
break;
case "xor":
validator.isvalid = validator.isvalid != validator.validators[i].isvalid;
break;
}
}
}
break;
}
if (eventType == "submit" && !validator.isvalid && !vdForm.focus) {
var fcontrol = VDFindFocus(validator);
if (fcontrol) {
var ctrlObj = document.forms[vdForm.name].elements[fcontrol];
if (typeof(ctrlObj) != "undefined") {
if (typeof(ctrlObj.tagName) == "undefined" && typeof(ctrlObj.length) == "number") {
ctrlObj = ctrlObj[0];
}
try {
ctrlObj.focus();
} catch (e) {}
vdForm.focus = true;
}
}
}
}
function VDFindFocus(validator)
{
var fcontrol = null;
if (validator.type == "group") {
for (var i = 0; i < validator.validators.length; i++) {
if (!validator.validators[i].isvalid) {
fcontrol = VDFindFocus(validator.validators[i]);
if (fcontrol)
break;
}
}
} else if (typeof(validator.fcontrol) == "string") {
fcontrol = validator.fcontrol;
}
return fcontrol;
}
function VDUpdateLabels(eventType)
{
if (typeof(vdForm.labels) == "undefined")
return;
var i, j;
for (i = 0; i < vdForm.labels.length; i++) {
var oLabel = vdForm.labels[i];
var label = document.getElementById(oLabel.id);
if (label != null) {
var isValid = true;
if (eventType != "reset") {
for (j = 0; j < oLabel.validators.length; j++) {
var valName = oLabel.validators[j];
var valState = VDGetValidatorState(valName);
if (valState != -1) {
isValid = isValid && valState;
}
}
}
label.innerHTML = "";
if (isValid) {
label.innerHTML = oLabel.oktext;
label.className = oLabel.okclass;
} else {
label.innerHTML = oLabel.errtext;
label.className = oLabel.errclass;
}
if (typeof(oLabel.cokclass) == "object") {
for (j in oLabel.cokclass) {
if (typeof(vdForm.controls[j].obj) == "object") {
vdForm.controls[j].obj.className = isValid ? oLabel.cokclass[j] : oLabel.cerrclass;
}
}
}
}
}
}
function VDUpdateSummaries(eventType)
{
if (typeof(vdForm.summaries) == "undefined")
return;
for (var i = 0; i < vdForm.summaries.length; i++) {
var headerSep, first, pre, post, last, s;
var oSummary = vdForm.summaries[i];
var summary = document.getElementById(oSummary.id);
if (summary != null) {
if (eventType == "reset" || vdForm.isvalid) {
//summary.innerHTML = oSummary.showsummary ? " " : "";
summary.innerHTML = "";
summary.style.display = "none";
} else {
if (oSummary.showsummary) {
switch (oSummary.displaymode) {
case "list":
default:
headerSep = "
";
first = "";
pre = "";
post = "
";
last = "";
break;
case "bulletlist":
headerSep = "";
first = "