drupal_theme__dotclear/dotclear/ecrire/js/form.js
2012-02-26 23:07:01 +01:00

88 lines
1.7 KiB
JavaScript

var currentForms = new Array();
var formsInPage = new Array();
var formSubmit = false;
var closePagePrompt = 'You have unsaved changes';
function getCurrentForms() {
if (document.getElementById && document.getElementsByTagName) {
formsInPage = document.getElementsByTagName('form');
for (var i=0; i<formsInPage.length; i++) {
f = formsInPage[i];
var tmpForm = new Array();
for (var j=0; j<f.elements.length; j++) {
tmpForm.push(getFormElementValue(f[j]));
}
currentForms.push(tmpForm);
}
}
}
function addFormsEvent() {
if (formsInPage.length == 0) {
return null;
}
for (var i=0; i<formsInPage.length; i++) {
formsInPage[i].onsubmit = function() { formSubmit = true; };
}
}
function compareForms() {
if (currentForms.length == 0) {
return null;
}
for (var i=0; i<formsInPage.length; i++) {
form = formsInPage[i];
for (var j=0; j<form.elements.length; j++) {
if (currentForms[i][j] != getFormElementValue(form[j])) {
return false;
}
}
}
return true;
}
function getFormElementValue(e) {
if (e.type == 'radio') {
return getFormRadioValue(e);
} else if (e.type == 'checkbox') {
return getFormCheckValue(e);
} else {
return e.value;
}
}
function getFormCheckValue(e) {
if (e.checked) {
return e.value;
}
return null;
}
function getFormRadioValue(e) {
for (var i=0; i <e.length; i++) {
if (e[i].checked) {
return e[i].value;
} else {
return null;
}
}
}
function confirmCloseForms(event_) {
if (!event_ && window.event) {
event_ = window.event;
}
if (!formSubmit) {
if (!compareForms()) {
event_.returnValue = closePagePrompt;
return closePagePrompt;
}
}
}