var xmlHttp
function interactiePagina(url){ xmlHttp=GetXmlHttpObject();if (xmlHttp==null){alert ("De browser ondersteund geen AJAX technologie!");return;} url=url+"&sid="+Math.random(); xmlHttp.onreadystatechange=stateChanged; xmlHttp.open("GET",url,true); xmlHttp.send(null);}
function stateChanged(){if(xmlHttp.readyState==4){document.getElementById("globalcontainer_tekst").innerHTML=xmlHttp.responseText;}}
function GetXmlHttpObject(){var xmlHttp=null; try{xmlHttp=new XMLHttpRequest();}catch (e){try{xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");}catch (e){xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");}}return xmlHttp;}
function setValue(obj){if(obj!=null){if(obj.value!=null && obj.value == 'zoekwoord'){obj.value='';}obj.style.color='black'}}
function loadMenu(){
if(document.getElementById){
document.getElementById('menu_leeg').innerHTML=document.getElementById('menu_hide').innerHTML;
//parent.document.getElementById('menu_leeg').innerHTML=document.getElementById('menu_hide').contentWindow.document.body.innerHTML;
}
}
function loadGoogleAds(){
if(document.getElementById){
document.getElementById('ads_leeg_header').innerHTML=document.getElementById('ads_hide_header').innerHTML;
document.getElementById('ads_leeg_boven').innerHTML=document.getElementById('ads_hide_boven').innerHTML;
document.getElementById('ads_leeg_onder').innerHTML=document.getElementById('ads_hide_onder').innerHTML;
}
}
function waitPreloadPage(){
if(document.getElementById){
document.getElementById('prepage').style.visibility='hidden';
}else{
if(document.layers){
document.prepage.visibility='hidden';
}else{
document.all.prepage.style.visibility='hidden';
}
}
}
var d=new Date()
var maand_vandaag=(d.getMonth())
var month=new Array(12)
month[0]="January"
month[1]="February"
month[2]="Maart"
month[3]="April"
month[4]="Mei"
month[5]="Juni"
month[6]="July"
month[7]="Augustus"
month[8]="September"
month[9]="October"
month[10]="November"
month[11]="December"
/////////////////////////////////////////////////////////////////
function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
} else {
window.onload = function() {
if (oldonload) {
oldonload();
}
func();
}
}
}
////////////////////////////////////////////////////////////////////////
function HideDIV(d) {document.getElementById(d).style.display = "none"; }
function DisplayDIV(d) {document.getElementById(d).style.display = "block"; }
///////////////////////////////////////////////////////////////////
function popUp(URL){
day=new Date();
id=day.getTime();
eval("page"+id+" = window.open(URL, '"+id+"', 'toolbar=0,titlebar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=0,width=700,height=500');");
}
function popUptelefoon(URL){
day=new Date();
id=day.getTime();
eval("page"+id+" = window.open(URL, '"+id+"', 'toolbar=0,titlebar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=100,height=20');");
}
function waitPreloadPage(){
if(document.getElementById){
document.getElementById('prepage').style.visibility='hidden';
}else{
if(document.layers){
document.prepage.visibility='hidden';
}
else{
document.all.prepage.style.visibility='hidden';
}
}
}
function globalTabOver(tabNumber){
if(document.body.className!='navscheme'+(tabNumber+1)){
document.getElementById('globaltab'+tabNumber).className='on';
}
}
function globalTabOut(tabNumber){
if(document.body.className!='navscheme'+(tabNumber+1)){
document.getElementById('globaltab'+tabNumber).className='';
}
}
function ToggleNext(el){
if(!el)return false;
var orgEl=el;
while(el&&(el=el.nextSibling))if(el.nodeType==1)break;
if(!el||!el.style)return false;
var bActive=el.style.display!="block";
el.style.display=bActive?"block":"none";
orgEl.className=bActive?"active":"";
return false
}
function evenWachten() {
document.getElementById('globalcontainer_evenwachten').innerHTML='
';
}
var triggerKaart=2;
function plaatsKaart(mapgeocode,mapzoom,maptype,paginaid,width) {
if (triggerKaart){
document.getElementById('globalcontainer_kaart').innerHTML='';triggerKaart=0
}else{
document.getElementById('globalcontainer_kaart').innerHTML='';triggerKaart=1;
}
}
var triggerDocument=2;
function plaatsDocument(documentid) {
if (triggerDocument){
document.getElementById('globalcontainer_document').innerHTML='';triggerDocument=0
}else{
document.getElementById('globalcontainer_document').innerHTML='';triggerDocument=1;
}
}
var triggerReactie=2;
function plaatsReactie(paginaid) {
if (triggerReactie){
document.getElementById('globalcontainer_tekst').innerHTML='';triggerReactie=0
}else{
window.location ='/pagina/index.asp?pagina_id='+paginaid+'';triggerReactie=1;
}
}
var triggerBeoordeling=2;
function plaatsBeoordeling(paginaid) {
if (triggerBeoordeling){
document.getElementById('globalcontainer_tekst').innerHTML='';triggerBeoordeling=0
}else{
window.location ='/pagina/index.asp?pagina_id='+paginaid+'';triggerBeoordeling=1;
}
}
var triggerZoom=2;
function zoomFoto(url_foto,width_foto,height_foto,teller) {
if (triggerZoom){
document.getElementById('globalcontainer_foto'+teller+'').innerHTML='
';triggerZoom=0
}else{
document.getElementById('globalcontainer_foto'+teller+'').innerHTML='
';triggerZoom=1;
}
}
function nozoomFoto(url_foto,width_foto,height_foto,teller) {
document.getElementById('globalcontainer_foto'+teller+'').innerHTML='
';triggerZoom=1;
}
var triggerFoto=2;
function wijzigFoto(pic_id,teller,width) {
if (triggerFoto){
document.getElementById('globalcontainer_foto'+teller+'').innerHTML='';triggerFoto=0
}else{
document.getElementById('globalcontainer_foto'+teller+'').innerHTML='';triggerFoto=1;
}
}
var triggerVideo=2;
function wijzigVideo(video_id,teller,width) {
if (triggerVideo){
document.getElementById('globalcontainer_video'+teller+'').innerHTML='';triggerVideo=0
}else{
document.getElementById('globalcontainer_video'+teller+'').innerHTML='';triggerVideo=1;
}
}
var triggerDocument=2;
function wijzigDocument(document_id,width) {
if (triggerDocument){
document.getElementById('globalcontainer_document').innerHTML='';triggerDocument=0
}else{
document.getElementById('globalcontainer_document').innerHTML='';triggerDocument=1;
}
}
var triggerFormulier=2;
function plaatsFormulier() {
if (triggerFormulier){
document.getElementById('globalcontainer_formulier').innerHTML = document.getElementById('globalcontainer_formulier_hidden').innerHTML;triggerFormulier=0
}else{
document.getElementById('globalcontainer_formulier').innerHTML = '';triggerFormulier=1;
}
}
var triggerSmilies=2;
function plaatsSmilies() {
if (triggerSmilies){
document.getElementById('globalcontainer_smilies').innerHTML = document.getElementById('globalcontainer_smilies_hidden').innerHTML;triggerSmilies=0
}else{
document.getElementById('globalcontainer_smilies').innerHTML = '';triggerSmilies=1;
}
}
function insertSmiley(s) {
//if (typeof document.frmControl != 'undefined' && document.frmControl.message != 'undefined') {
//document.frmControl.messagetobesent.value += "["+s+"]";
if (typeof frames.message != 'undefined' && frames.message.document != 'undefined') {
frames.message.document.body.innerHTML +="
";
}
}
function insertHR() {
//if (typeof document.frmControl != 'undefined' && document.frmControl.message != 'undefined') {
//document.frmControl.messagetobesent.value += "["+s+"]";
if (typeof frames.message != 'undefined' && frames.message.document != 'undefined') {
frames.message.document.body.innerHTML +="
";
}
}
function insertFormulier(addform) {
//if (typeof document.frmControl != 'undefined' && document.frmControl.message != 'undefined') {
//document.frmControl.messagetobesent.value += "["+s+"]";
if (typeof frames.message != 'undefined' && frames.message.document != 'undefined') {
frames.message.document.body.innerHTML +=""+addform+"";
}
}
function insertIframe(url,h,w) {
if (typeof parent.message != 'undefined' && parent.message.document != 'undefined') {
parent.message.document.body.innerHTML +='';
}
}
function insertIframe2(url,h,w) {
if (typeof frames.message != 'undefined' && frames.message.document != 'undefined') {
frames.message.document.body.innerHTML +='';
}
}
var triggerIframe=2;
function plaatsIframe(pid) {
if (triggerIframe){
document.getElementById('globalcontainer_wysiwyg').innerHTML = document.getElementById('globalcontainer_iframe_hidden').innerHTML;triggerIframe=0
}else{
document.getElementById('globalcontainer_iframe').innerHTML = '';triggerIframe=1;
}
}
var triggerIframe2=2;
function plaatsIframe2(width) {
if (triggerIframe2){
document.getElementById('globalcontainer_iframe').innerHTML = '';triggerIframe2=0
}else{
document.getElementById('globalcontainer_iframe').innerHTML ='';triggerIframe2=1; }
}
var triggerTabel=2;
function plaatsTabel(width) {
if (triggerTabel){
document.getElementById('globalcontainer_tabel').innerHTML ='';triggerTabel=0
//document.getElementById('globalcontainer_tabel').innerHTML = document.getElementById('globalcontainer_tabel_hidden').innerHTML;triggerTabel=0
}else{
document.getElementById('globalcontainer_tabel').innerHTML='';triggerTabel=1;
}
}
//Dynamic Version by: Nannette Thacker
//http://www.shiningstar.net
//Original by : Ronnie T. Moore
//Web Site: The JavaScript Source
//Use one function for multiple text areas on a page
//Limit the number of characters per textarea
function textCounter(field,cntfield,maxlimit) {
if (field.value.length > maxlimit) // if too long...trim it!
field.value = field.value.substring(0, maxlimit);
// otherwise, update 'characters left' counter
else
cntfield.value = maxlimit - field.value.length;
}
var triggerTekst=2;
function plaatsTekst(paginaid,width) {
if (triggerTekst){
document.getElementById('globalcontainer_tekst_wijzig').innerHTML='';triggerTekst=0
//document.getElementById('globalcontainer_plusmin').innerHTML='
';
}else{
document.getElementById('globalcontainer_tekst_wijzig').innerHTML='';triggerTekst=1;
//document.getElementById('globalcontainer_plusmin').innerHTML='
';
}
}
var triggerTags=2;
function plaatsTags(paginaid,width) {
if (triggerTags){
document.getElementById('globalcontainer_tags_wijzig').innerHTML='';triggerTags=0
}else{
document.getElementById('globalcontainer_tags_wijzig').innerHTML='';triggerTags=1;
}
}
var triggerKolomindeling=2;
function plaatsKolomindeling(paginaid,width) {
if (triggerKolomindeling){
document.getElementById('globalcontainer_kolomindeling_wijzig').innerHTML='';triggerKolomindeling=0
}else{
document.getElementById('globalcontainer_kolomindeling_wijzig').innerHTML='';triggerKolomindeling=1;
}
}
var triggerExtra=2;
function plaatsExtra(paginaid) {
if (triggerExtra){
document.getElementById('globalcontainer_extra_wijzig').innerHTML='';triggerExtra=0
}else{
document.getElementById('globalcontainer_extra_wijzig').innerHTML='';triggerExtra=1;
}
}
var triggerRssfeed=2;
function plaatsRssfeed(paginaid) {
if (triggerRssfeed){
document.getElementById('globalcontainer_rssfeed_wijzig').innerHTML='';triggerRssfeed=0
}else{
document.getElementById('globalcontainer_rssfeed_wijzig').innerHTML='';triggerRssfeed=1;
}
}
var triggerIframecode=2;
function plaatsIframecode(paginaid) {
if (triggerIframecode){
document.getElementById('globalcontainer_iframecode_wijzig').innerHTML=document.getElementById('globalcontainer_iframecode_wijzig_hide').innerHTML;triggerIframecode=0
}else{
document.getElementById('globalcontainer_iframecode_wijzig').innerHTML='';triggerIframecode=1;
}
}
var triggerYouTube=2;
function plaatsYouTube(paginaid,width) {
if (triggerYouTube){
document.getElementById('globalcontainer_youtube_wijzig').innerHTML='';triggerYouTube=0
}else{
document.getElementById('globalcontainer_youtube_wijzig').innerHTML='';triggerYouTube=1;
}
}
var triggerYouTube=2;
function wijzigYouTube(paginaid,width,youtubeid) {
if (triggerYouTube){
document.getElementById('globalcontainer_tekst').innerHTML='';triggerYouTube=0
}else{
document.getElementById('globalcontainer_tekst').innerHTML='';triggerYouTube=1;
}
}
var triggerGadgets=2;
function plaatsGadgets(paginaid,width) {
if (triggerGadgets){
document.getElementById('globalcontainer_gadgets_wijzig').innerHTML='';triggerGadgets=0
}else{
document.getElementById('globalcontainer_gadgets_wijzig').innerHTML='';triggerGadgets=1;
}
}
var triggerAnimaties=2;
function plaatsAnimaties(paginaid,width) {
if (triggerAnimaties){
document.getElementById('globalcontainer_animaties_wijzig').innerHTML='';triggerAnimaties=0
}else{
document.getElementById('globalcontainer_animaties_wijzig').innerHTML='';triggerAnimaties=1;
}
}
var triggerGadgets=2;
function wijzigGadgets(paginaid,width,gadgetsgeplaatstid) {
if (triggerGadgets){
document.getElementById('globalcontainer_tekst').innerHTML='';triggerGadgets=0
}else{
document.getElementById('globalcontainer_tekst').innerHTML='';triggerGadgets=1;
}
}
var triggerPrijs=2;
function plaatsPrijs(paginaid,width) {
if (triggerPrijs){
document.getElementById('globalcontainer_prijs_wijzig').innerHTML='';triggerPrijs=0
}else{
document.getElementById('globalcontainer_prijs_wijzig').innerHTML='';triggerPrijs=1;
}
}
var triggerActies=2;
function plaatsActies(paginaid,width) {
if (triggerActies){
document.getElementById('globalcontainer_acties_wijzig').innerHTML='';triggerActies=0
}else{
document.getElementById('globalcontainer_acties_wijzig').innerHTML='';triggerActies=1;
}
}
var triggerAgenda=2;
function plaatsAgenda(paginaid,width) {
if (triggerAgenda){
document.getElementById('globalcontainer_agenda_wijzig').innerHTML='';triggerAgenda=0
}else{
document.getElementById('globalcontainer_agenda_wijzig').innerHTML='';triggerAgenda=1;
}
}
var triggerFormulier=2;
function plaatsFormulier(paginaid,width) {
if (triggerFormulier){
document.getElementById('globalcontainer_formulier_wijzig').innerHTML='';triggerFormulier=0
}else{
document.getElementById('globalcontainer_formulier_wijzig').innerHTML='';triggerFormulier=1;
}
}
var triggerTonen=2;
function plaatsTonen(paginaid,width,overzicht) {
if (triggerTonen){
document.getElementById('globalcontainer_tonen_wijzig').innerHTML='';triggerTonen=0
}else{
document.getElementById('globalcontainer_tonen_wijzig').innerHTML='';triggerTonen=1;
}
}
var triggerFoto=2;
function plaatsFoto(paginaid,width) {
if (triggerFoto){
document.getElementById('globalcontainer_images').innerHTML='';triggerFoto=0
}else{
document.getElementById('globalcontainer_images').innerHTML='';triggerFoto=1;
}
}
var triggerFotoPositie=2;
function plaatsFotoPositie(paginaid,width) {
if (triggerFotoPositie){
document.getElementById('globalcontainer_foto_positie').innerHTML='';triggerFotoPositie=0
}else{
document.getElementById('globalcontainer_foto_positie').innerHTML='';triggerFotoPositie=1;
}
}
var triggerFotoPositie=2;
function wijzigFotoPositie(paginaid,width) {
if (triggerFotoPositie){
document.getElementById('globalcontainer_tekst_wijzig').innerHTML='';triggerFotoPositie=0
}else{
document.getElementById('globalcontainer_tekst_wijzig').innerHTML='';triggerFotoPositie=1;
}
}
var triggerVideo=2;
function plaatsVideo(paginaid,width) {
if (triggerVideo){
document.getElementById('globalcontainer_video').innerHTML='';triggerVideo=0
}else{
document.getElementById('globalcontainer_video').innerHTML='';triggerVideo=1;
}
}
var triggerDocument=2;
function plaatsDocument(paginaid,width) {
if (triggerDocument){
document.getElementById('globalcontainer_document').innerHTML='';triggerDocument=0
}else{
document.getElementById('globalcontainer_document').innerHTML='';triggerDocument=1;
}
}
function kiesDatum() {
document.getElementById('globalcontainer_datum').innerHTML='tonen op
tonen tot '
}
function geenDatum() {
document.getElementById('globalcontainer_datum').innerHTML=''
}
//Function to format text in the text box
function FormatText(command, option){
frames.message.document.execCommand(command, true, option);
frames.message.focus();
}
//Function to add image
function AddImage(){
imagePath = prompt('Enter the web address of the image', 'http://');
if ((imagePath != null) && (imagePath != "")){
frames.message.document.execCommand('InsertImage', false, imagePath);
frames.message.focus();
}
frames.message.focus();
}
//Function to add smiley
function AddSmileyIcon(imagePath){
frames.message.document.execCommand('InsertImage', false, imagePath);
frames.message.focus();
}
//Function to clear form
function ResetForm(){
if (window.confirm('Are you sure you want to clear the e-mail you have entered?')){
frames.message.document.body.innerHTML = '';
return true;
}
return false;
}
function verwijderPagina(pagina_id)
{
if (confirm("Wilt u deze pagina verwijderen? Alle geplaatste foto's , video's, bestanden, beoordelingen en reacties zullen dan worden verwijderd") == true)
window.location ='/beheerpagina/pagina/verwerken.asp?pagina_id='+pagina_id+'&action=delete'
}
function verwijderMenu()
{
if (confirm("Wilt u dit menu verwijderen? Alle gekoppelde menus, paginas en bestanden zullen dan worden verwijderd") == false)
return false
}
var triggerWijzig=2;
function wijzigPagina(wijzigurl,width,height,elementid) {
if (triggerWijzig){
document.getElementById(''+elementid+'').innerHTML='';triggerWijzig=0
}else{
document.getElementById(''+elementid+'').innerHTML='';triggerWijzig=1;
}
}
var printPagina=2;
function printpagina(printurl) {
if (printPagina){
document.getElementById('paginabackground').innerHTML=document.getElementById('middencontent').innerHTML;printPagina=0;window.print();
}else{
document.getElementById('globalcontainer').innerHTML=document.getElementById('globalcontainer').innerHTML;printPagina=1;
}
}
function fValConfig()
{
/* Globals. Modify these to suit your setup
------------------------------------------- */
// Attribute used for fValidate Validator codes
this.code = 'alt';
// Attribute used for custom error messages (override built-in error messages)
this.emsg = 'emsg';
// Attribute used for pattern with custom validator type
this.pattern = 'pattern';
// Change this to the classname you want for the error highlighting
this.errorClass = 'errHilite';
// If you wish fValidate to use only single classNames for errors
this.useSingleClassNames = false; // or true
// This is the even that triggers the clearing of the errorClass hilighting
this.clearEvent = 'change'; // 'change' | 'blur' | null
// For browsers that don't support attachEvent or addEventListere - override existing events for error reverting?
this.eventOverride = false;
// If the bConfirm flag is set to true, the users will be prompted with CONFIRM box with this message
// See your language file for this value
this.confirmMsg = fvalidate.i18n.config.confirmMsg;
// If user cancels CONFIRM, then this message will be alerted. If you don't want this alert to show, then
// empty the variable ( this.confirmAbortMsg = ''; )
// See your langauge file for this value
this.confirmAbortMsg = fvalidate.i18n.config.confirmAbortMsg;
// Enter the name/id of your form's submit button here. Can be a string or array of strings
this.submitButton = ['Submit','Submit2'];
// Enter the name/id of your form's reset button here
this.resetButton = 'Reset';
// Ender the name or id of the SELECT object here. Make sure you pay attention to the values (CC Types)
// used in the case statement for the function validateCC()
this.ccType = 'Credit_Card_Type';
// NOTE: The config value below exists for backwards compatibility with fValidate 3.55b. If you have a newer
// version, use the above this.ccType instead.
// Enter the DOM name of the SELECT object here. Make sure you pay attention to the values (CC Types)
// used in the case statement for the function validateCC()
this.ccTypeObj = 'form1.Credit_Card_Type';
// Element where box errors will appear
this.boxError = 'errors';
// Prefix given to all error paragraphs in box error mode
this.boxErrorPrefix = 'fv_error_';
}
// EOF
/***************************************************************************************************
*
*-- Form validation script by Peter Bailey, Copyright (c) 2001-2003
* Version 5.01b
* Updated on Feb 07, 2004
* www.peterbailey.net
* me@peterbailey.net
*
* IF YOU USE THIS SCRIPT, GIVE ME CREDIT PLEASE =)
*
* Visit http://www.peterbailey.net/fValidate/ for more info
*
* Feel free to contact me with any questions, comments, problems, or suggestions
*
* Note: This document most easily read with tab spacing set to 4
*
*******************************************************************************************************/
/* Create static fvalidate object
------------------------------------------- */
if ( typeof fvalidate == 'undefined' )
{
var fvalidate = new Object();
}
/* Generic event handling
------------------------------------------- */
fvalidate.addEvent = function( obj, evt, fn, useCapture )
{
if ( typeof obj.attachEvent != 'undefined' )
{
obj.attachEvent( "on" + evt, fn );
}
else if ( typeof obj.attachEventListener != 'undefined' )
{
obj.addEventListener( evt, fn, Boolean( useCapture ) );
}
}
fvalidate.addEvents = function( obj, evts, fn, useCapture )
{
var i = 0, evt;
while( evt = evts[i++] )
{
this.addEvent( obj, evt, fn, Boolean( useCapture ) );
}
}
/* Main validation routine
------------------------------------------- */
function validateForm( f, bConfirm, bDisable, bDisableR, groupError, errorMode )
{
// Set defaults
bConfirm = Boolean( bConfirm );
bDisable = Boolean( bDisable );
bDisableR = Boolean( bDisableR );
groupError = Boolean( groupError );
errorMode = ( typeof errorMode != 'undefined' ) ? parseInt( errorMode, 10 ) : 0;
// Init vars and fValidate object
var params, fvCode, type;
if ( typeof f.fv == 'undefined' )
{
f.fv = new fValidate( f, errorMode, groupError );
} else {
f.fv._reset();
f.fv.errorMode = errorMode;
}
// Loop through all form elements
var elem, i = 0, attr = f.fv.config.code;
while ( elem = f.elements[i++] )
{
// Skip fieldsets
if ( elem.nodeName == "FIELDSET" ) continue;
// Does element have validator attribute? (short-circuit check)
fvCode = ( elem[attr] ) ? elem[attr] : elem.getAttribute( attr );
if ( !( typeof fvCode == 'undefined' || fvCode == null || fvCode == "" ) )
{
// Set params, validation type, and validation state
params = fvCode.split( "|" );
type = params[0];
elem.validated = true;
// Valid validator type?
if ( typeof f.fv[type] == 'undefined' )
{
f.fv.devError( [type, elem.name], 'notFound' );
return false;
}
// Check for modifiers
switch( params.last() )
{
case 'bok' : // bok requested
params = params.reduce( 1, 1 );
elem.bok = true;
break;
case 'if' : // Conditional validation requested
params = params.reduce( 1, 1 );
elem._if_ = true;
break;
case 'then' : // Conditional validation requested
params = params.reduce( 1, 1 );
elem._then_ = true;
break;
default : // No modifiers
params = params.reduce( 1, 0 );
}
// Is element an array?
if ( /radio|checkbox/.test( elem.type ) )
{
// Set group property
elem.group = f.elements[elem.name];
}
// Add events if not already added
if ( typeof elem.fName == 'undefined' )
{
// If element is an array
if ( typeof elem.group != 'undefined' )
{
for ( var j = 0; j < elem.group.length; j++ )
{
// Apply event-function to each child
if ( f.fv.config.clearEvent != null )
{
// fvalidate.addEvent( elem.group.item( j ), fv.config.clearEvent, fv.revertError, false );
addEvent( elem.group.item( j ), f.fv.config.clearEvent, f.fv, 'revertError', false );
}
}
}
else
{
// Apply event-function to element
// fvalidate.addEvent( elem, fv.config.clearEvent, fv.revertError, false );
addEvent( elem, f.fv.config.clearEvent, f.fv, 'revertError', false );
}
}
// Set formatted name, current element
elem.fName = elem.name.format();
f.fv.elem = elem;
f.fv.type = type;
// Create function to call the proper validator method of the fValidate class
var func = new Function( "obj", "method", "obj[method]( " + params.toArgString() + " );" );
func( f.fv, type );
// If element test failed AND group error is off, return false
if ( elem.validated == false && groupError == false ) return false;
// Clear error if field okay
if ( elem.validated == true ) f.fv.revertError();
}
} // end of element loop
// If group error, show it
if ( groupError ) f.fv.showGroupError();
// Return false if errors found
if ( f.fv.errors.length > 0 ) return false;
// Show pre-submission confirmation
if ( bConfirm && !confirm( f.fv.config.confirmMsg ) )
{
if ( f.fv.config.confirmAbortMsg != '' ) alert( f.fv.config.confirmAbortMsg );
return false;
}
// Disable reset and/or submit buttons if requested
if ( bDisable )
{
if ( typeof f.fv.config.submitButton == 'object' )
{
var sb, j = 0;
while( sb = f.fv.config.submitButton[j++] )
{
if ( f.fv.elementExists( sb ) )
{
f.elements[sb].disabled = true;
}
}
}
else if ( f.fv.elementExists( f.fv.config.submitButton ) )
{
f.elements[f.fv.config.submitButton].disabled = true;
}
}
if ( bDisableR && f.fv.elementExists( f.fv.config.resetButton ) )
{
f.elements[f.fv.config.resetButton].disabled = true;
}
// Successful Validation. Submit form
return true;
function addEvent( elem, evt, obj, method, capture )
{
var self = elem;
if ( typeof elem.attachEvent != 'undefined' )
{
elem.attachEvent( "on" + evt, function() { obj[method]( self ) } );
}
else if ( typeof elem.addEventListener != 'undefined' )
{
elem.addEventListener( evt, function() { obj[method]( self ) }, capture );
}
else if ( f.fv.config.eventOverride )
{
eleme['on' + evt] = function() { obj[method]( self ) };
}
}
}
/* Constructor
------------------------------------------- */
function fValidate( f, errorMode, groupError )
{
var self = this;
this.form = f;
this.errorMode = errorMode;
this.groupError = groupError;
this.errors = new Array();
this.validated = true;
this.config = new fValConfig();
this.i18n = fvalidate.i18n;
// Add reset action to clear visual error cues
f.onreset = function()
{
var elem, i = 0;
while ( elem = this.elements[i++] )
{
self.revertError( elem );
}
}
addLabelProperties();
// Parses form and adds label properties to elements that have one specified
function addLabelProperties()
{
// Collect all label elements in form, init vars
if ( typeof f.getElementsByTagName == 'undefined' ) return;
var labels = f.getElementsByTagName( "label" );
var label, i = j = 0;
var elem;
// Loop through labels retrieved
while ( label = labels[i++] )
{
// For Opera 6
if ( typeof label.htmlFor == 'undefined' ) return;
// Retrieve element
elem = f.elements[label.htmlFor];
if ( typeof elem == 'undefined' )
{ // No element found for label
self.devError( [label.htmlFor], 'noLabel' );
}
else if ( typeof elem.label != 'undefined' )
{ // label property already added
continue;
}
else if ( typeof elem.length != 'undefined' && elem.length > 1 && elem.nodeName != 'SELECT' )
{ // For arrayed elements
for ( j = 0; j < elem.length; j++ )
{
elem.item( j ).label = label;
}
}
// Regular label
elem.label = label;
}
}
}
/* Reset for another validation
------------------------------------------- */
fValidate.prototype._reset = function()
{
this.errors = new Array();
this.showErrors = new Array();
}
/* Checks if element exists in form
------------------------------------------- */
fValidate.prototype.elementExists = function( elemName )
{
return Boolean( typeof this.form.elements[elemName] != 'undefined' );
}
/* Receives error message and determines action
------------------------------------------- */
fValidate.prototype.throwError = function( args, which )
{
var elem = this.elem;
// Arrayed element?
if ( typeof elem.name == 'undefined' )
{
elem = elem[0];
}
// Bok requested AND element blank OR conditional validation?
if ( elem.bok && this.isBlank() )
{ // skip
elem.validated = true;
return;
}
// Part of a conditional validation?
if ( elem.cv )
{
return;
}
// Set failsafe to false
elem.validated = false;
// Create error message
which = this.setArg( which, 0 );
args = this.setArg( args, [] );
emsgElem = ( typeof this.elem.getAttribute == "undefined" ) ?
this.elem[0]:
this.elem;
if ( emsgElem.getAttribute( this.config.emsg ) )
{
var error = emsgElem.getAttribute( this.config.emsg );
}
var error = this.translateMessage( args, this.i18n.errors[this.type][which] );
// Group error mode?
if ( this.groupError )
{
// Push error onto stack
this.errors.push( {'elem':elem, 'msg': error} );
}
else
{
// Process error message
this.showError( error, false, emsgElem );
var focusElem = ( typeof elem.fields != 'undefined' )?
elem.fields[0]:
elem;
// Focus and select elements, if possible
this.selectFocus( focusElem );
}
}
/* Shows error message to user
------------------------------------------- */
fValidate.prototype.showError = function( emsg, last, elem )
{
// Set variables
var self = this,
elem = this.setArg( elem, this.elem ),
isHidden = Boolean( elem.type == 'hidden' ),
label = ( isHidden ) ? null : elem.label || null,
emsg = ( elem.getAttribute( this.config.emsg ) ) ? elem.getAttribute( this.config.emsg ).replace( /\\n/g, "\n" ) : emsg,
errorClass = this.config.errorClass,
singleCSS = this.config.useSingleClassNames;
if ( typeof this.showErrors == 'undefined' ) this.showErrors = new Array();
// Determine which error modes to use
switch( this.errorMode )
{ // This represents all possible combinations
case 0 : alertError(); break;
case 1 : inputError(); break;
case 2 : labelError(); break;
case 3 : appendError(); break;
case 4 : boxError(); break;
case 5 : inputError(); labelError(); break;
case 6 : inputError(); appendError(); break;
case 7 : inputError(); boxError(); break;
case 8 : inputError(); alertError(); break;
case 9 : labelError(); appendError(); break;
case 10 : labelError(); boxError(); break;
case 11 : labelError(); alertError(); break;
case 12 : appendError(); boxError(); break;
case 13 : appendError(); alertError(); break;
case 14 : boxError(); alertError(); break;
case 15 : inputError(); labelError(); appendError(); break;
case 16 : inputError(); labelError(); boxError(); break;
case 17 : inputError(); labelError(); alertError(); break;
case 18 : inputError(); appendError(); boxError(); break;
case 19 : inputError(); appendError(); alertError(); break;
case 20 : inputError(); boxError(); alertError(); break;
case 21 : labelError(); appendError(); boxError(); break;
case 22 : labelError(); appendError(); alertError(); break;
case 23 : appendError(); boxError(); alertError(); break;
case 24 : inputError(); labelError(); appendError(); boxError(); break;
case 25 : inputError(); labelError(); appendError(); alertError(); break;
case 26 : inputError(); appendError(); boxError(); alertError(); break;
case 27 : labelError(); appendError(); boxError(); alertError(); break;
case 28 : inputError(); labelError(); appendError(); boxError(); alertError(); break;
}
// Regular alert error
function alertError()
{
if ( self.groupError ) self.showErrors.push( emsg );
else alert( emsg );
if ( last ) alert( self.i18n.groupAlert + self.showErrors.join( "\n\n- " ) );
}
// Applies class to form element
function inputError()
{
if ( ( typeof elem.length != 'undefined' && elem.length > 1 && elem.nodeName != 'SELECT' ) || isHidden )
{
var subelem, i = 0;
while( subelem = ( isHidden ) ? elem.fields[i++] : elem.item( i++ ) )
{
if ( subelem.className != '' && singleCSS )
{
subelem.revertClass = subelem.className;
subelem.className = errorClass;
} else {
self.addCSSClass( subelem, errorClass );
}
}
}
else
{
if ( singleCSS )
{
elem.revertClass = elem.className;
elem.className = errorClass;
} else {
self.addCSSClass( elem, errorClass );
}
}
}
// Applies class to element's label
function labelError()
{
if ( label == null ) return;
if ( self.config.useSingleClassNames )
{
label.className = errorClass;
} else {
self.addCSSClass( label, errorClass );
}
}
// Appends error message to element's label
function appendError()
{
if ( label == null || typeof label.innerHTML == 'undefined' ) return;
if ( typeof label.original == 'undefined' )
label.original = label.innerHTML;
label.innerHTML = label.original + " - " + emsg.toHTML();
}
// Appends Error message to pre-defined element
function boxError()
{
if ( typeof self.boxError == 'undefined' ) self.boxError = document.getElementById( self.config.boxError );
if ( self.boxError == null )
{
self.devError( [self.config.boxError], 'noBox' );
return;
}
if ( typeof self.elem.name == 'undefined' || self.elem.name == "" )
{
self.devError( [self.elem[self.config.code]], 'missingName' );
return;
}
var errorId = self.config.boxErrorPrefix + self.elem.name,
errorElem;
if ( errorElem = document.getElementById( errorId ) ) // short-circuit
{
errorElem.firstChild.nodeValue = emsg.toHTML();
}
else
{
errorElem = document.createHTMLElement( 'li', { id: errorId, 'innerHTML': emsg.toHTML(), title: self.i18n.boxToolTip } );
self.boxError.appendChild( errorElem );
errorElem.onclick = function()
{
var elem = self.form.elements[this.id.replace( self.config.boxErrorPrefix, "" )];
if ( typeof elem.fields != 'undefined' ) elem = elem.fields[0];
if ( typeof elem.select != 'undefined' ) elem.select();
if ( typeof elem.focus != 'undefined' ) elem.focus();
}
}
self.boxError.style.display = "block";
}
}
/*********************************************************
*
*-- fValidate US-English language file.
*
* Translation by: Peter Bailey
* Email: me@peterbailey.net
*
* Visit http://www.peterbailey.net/fValidate/api/i18n/
* for additional translations and instructions on
* making your own translation.
*
* !!! WARNING !!! Changing anything but the literal
* strings will likely cause script failure!
*
* Note: This document most easily read/edited with tab-
* spacing set to 4
*
*********************************************************/
if ( typeof fvalidate == 'undefined' )
{
var fvalidate = new Object();
}
fvalidate.i18n =
{
// Validation errors
errors:
{
blank: [
["Please enter ", 0]
],
length: [
[0, " must be at least ", 1, " characters long"],
[0, " must be no more than ", 1, " characters long.\nThe current text is ", 2, " characters long."]
],
equalto: [
[0, " must be equal to ", 1]
],
number: [
["The number you entered for ", 0, " is not valid"]
],
numeric: [
["Only numeric values are valid for the ", 0],
["A minimum of ", 0, " numeric values are required for the ", 1]
],
alnum: [
["The data you entered, \"", 0, "\", does not match the requested format for ", 1,
"\nMinimum Length: ", 2,
"\nCase: ", 3,
"\nNumbers allowed: ", 4,
"\nSpaces allowed: ", 5,
"\nPunctuation characters allowed: ", 6, "\n"]
],
decimal: [
["The data you entered,", 0, " is not valid. Please re-enter the ", 1]
],
decimalr: [
[0, " is not a valid. Please re-enter."]
],
ip: [
["Please enter a valid IP"],
["The port number you specified, ", 0, ", is out of range.\nIt must be between ", 1, " and ", 2]
],
ssn: [
["You need to enter a valid Social Security Number.\nYour SSN must be entered in 'XXX-XX-XXXX' format."]
],
money: [
[0, " does not match the required format of ", 1]
],
cc: [
["The ", 0, " you entered is not valid. Please check again and re-enter."]
],
ccDate: [
["You credit card has expired! Please use a different card."]
],
zip: [
["Please enter a valid 5 or 9 digit Zip code."]
],
phone: [
["Please enter a valid phone number plus Area Code."],
["Please enter a valid phone number - seven or ten digits."]
],
email: [
["Please enter a valid email address"]
],
url: [
[0, " is not a valid domain"]
],
date: [
["The data entered for ", 0, " is not a valid date\nPlease enter a date using the following format: ", 1],
["Date must be before ", 0],
["Date must be on or before ", 0],
["Date must be after ", 0],
["Date must be on or after ", 0]
],
select: [
["Please select a valid option for ", 0]
],
selectm: [
["Please select between ", 0, " and ", 1, " options for ", 2, ".\nYou currently have ", 3, " selected"]
],
selecti: [
["Please select a valid option for ", 0]
],
checkbox: [
["Please check ", 0, " before continuing"],
["Please select between ", 0, " and ", 1, " options for ", 2, ".\nYou currently have ", 3, " selected"]
],
radio: [
["Please check ", 0, " before continuing"],
["Please select an option for ", 0 ]
],
comparison: [
[0, " must be ", 1, " ", 2]
],
eitheror: [
["One and only one of the following fields must be entered:\n\t-", 0, "\n"]
],
atleast: [
["At least ", 0, " of the following fields must be entered:\n\t-", 1, "\n\nYou have only ", 2, " filled in.\n"]
],
allornone: [
["All or none of the following fields must be entered and accurate:\n\t-", 0, "\nYou have only ", 1, " accurate field entered.\n"]
],
file: [
["The file must be one of the following types:\n", 0, "\nNote: File extension may be case-sensitive."]
],
custom: [
[0, " is invalid."]
],
cazip: [
["Please enter a valid postal code."]
],
ukpost: [
["Please enter a valid postcode."]
],
germanpost: [
["Please enter a valid postcode."]
],
swisspost: [
["Please enter a valid postcode."]
]
},
comparison:
{
gt: "greater than",
lt: "less than",
gte: "greater than or equal to",
lte: "less than or equal to",
eq: "equal to",
neq: "not equal to"
},
// Developer assist errors
devErrors:
{
number: ["The lower-bound (", 0, ") is greater than the upper-bound (", 1, ") on this element: ", 2],
length: ["The minimum length (", 0, ") is greater than the maxiumum legnth (", 1, ") on this element: ", 2],
cc: ["Credit Card type (", 0, ") not found."],
lines: ["! WARNING ! -- fValidate developer-assist error\n", "\nIf you are not the developer, please contact the website administrator regarding this error."],
paramError: ["You must include the '", 0, "' parameter for the '", 1, "' validator type on this field: ", 2],
notFound: ["The validator '", 0, "' was not found.\nRequested by: ", 1],
noLabel: ["No element found for label: ", 0],
noBox: ["An element with the requested id '", 0, "' was not found for the 'boxError' config value."],
missingName:["The hidden input calling the following logical validator must have a valid name\nattribute when used in conjunction with the 'box' error-type.\n\t", 0],
mismatch: ["Validator/Element type mismatch.\n\nElement: ", 0, "\nElement type: ", 1, "\nType required by validator: ", 2],
noCCType: ["You must include a SELECT item with Credit Card type choices!"]
},
// Config values
config :
{
confirmMsg : "u gaat nu de informatie plaatsen of wijzigen.\nklik op 'Ok' om verder te gaan of 'annuleren' om af te breken.",
confirmAbortMsg : "de gegevens zijn niet geplaats."
},
// Tooltip attached to Box-item errors
boxToolTip: "Click to target field",
// Message displayed at top of alert error in group mode
groupAlert: "The following errors occured:\n\n- ",
// Literal translation of the English 'or', include padding spaces.
or: " or "
}
/*< blank basic *******************************************************************/
fValidate.prototype.blank = function()
{
if ( this.typeMismatch( 'text' ) ) return;
if ( this.isBlank() )
{
this.throwError( [this.elem.fName] );
}
}
/*/>*/
/*< number numbers *******************************************************************/
fValidate.prototype.number = function( type, lb, ub )
{
if ( this.typeMismatch( 'text' ) ) return;
var num = ( type == 0 ) ? parseInt( this.elem.value, 10 ) : parseFloat( this.elem.value );
lb = this.setArg( lb, 0 );
ub = this.setArg( ub, Number.infinity );
if ( lb > ub )
{
this.devError( [lb, ub, this.elem.name] );
return;
}
var fail = Boolean( isNaN( num ) || num != this.elem.value );
if ( !fail )
{
switch( true )
{
case ( lb != false && ub != false ) : fail = !Boolean( lb <= num && num <= ub ); break;
case ( lb != false ) : fail = Boolean( num < lb ); break;
case ( ub != false ) : fail = Boolean( num > ub ); break;
}
}
if ( fail )
{
this.throwError( [this.elem.fName] );
return;
}
this.elemPass = true;
}
/*/>*/
/*< numeric numbers *******************************************************************/
fValidate.prototype.numeric = function( len )
{
if ( this.typeMismatch( 'text' ) ) return;
len = this.setArg( len, '*' );
var regex = new RegExp( ( len == '*' ) ? "^\\d+$" : "^\\d{" + parseInt( len, 10 ) + "}\\d*$" );
if ( !regex.test( this.elem.value ) )
{
if ( len == "*" )
{
this.throwError( [this.elem.fName] );
} else {
this.throwError( [len, this.elem.fName], 1 );
}
}
}
/*/>*/
/*< length basic *******************************************************************/
fValidate.prototype.length = function( len, maxLen )
{
if ( this.typeMismatch( 'text' ) ) return;
var vlen = this.elem.value.length;
len = Math.abs( len );
maxLen = Math.abs( this.setArg( maxLen, Number.infinity ) );
if ( len > maxLen )
{
this.devError( [len, maxLen, this.elem.name] );
return;
}
if ( len > parseInt( vlen, 10 ) )
{
this.throwError( [this.elem.fName, len] );
}
if ( vlen > maxLen )
{
this.throwError( [this.elem.fName, maxLen, vlen], 1 );
}
}
/*/>*/
/*< alnum extended *******************************************************************/
fValidate.prototype.alnum = function( minLen, tCase, numbers, spaces, puncs )
{
if ( this.typeMismatch( 'text' ) ) return;
tCase = this.setArg( tCase, "a" );
//alert( [minLen,tCase,numbers,spaces,puncs] );
numbers = ( numbers == "true" || numbers == "1" );
spaces = ( spaces == "true" || spaces == "1" );
//alert( [minLen,tCase,numbers,spaces,puncs] );
var okChars = "",
arrE = ['None','Any','No','No','Any'];
if ( minLen != '*' )
{
minLen = parseInt( minLen, 10 );
arrE[0] = minLen;
} else {
minLen = 0;
}
switch( tCase.toUpperCase() )
{
case 'U':
okChars += 'A-Z';
arrE[1] = 'UPPER';
break;
case 'L':
okChars += 'a-z';
arrE[1] = 'lower';
break;
case 'C':
okChars += 'A-Z][a-z';
arrE[1] = 'Intial capital';
minLen--;
break;
default:
okChars += 'a-zA-Z';
break;
}
if ( numbers == true )
{
okChars += '0-9';
arrE[2] = 'Yes';
}
if ( spaces == true )
{
okChars += ' ';
arrE[3] = 'Yes';
}
if ( puncs == "any" )
{
arrE[4] = "Any";
}
else if ( puncs == "none" )
{
arrE[4] = "None";
}
else
{
puncs = puncs.replace( /pipe/g, "|" );
okChars += puncs;
arrE[4] = puncs; //.toPattern().replace( /\\/g, "" );
}
var length = ( minLen != "*" )?
"{" + minLen + ",}":
"+";
var regex = ( puncs == "any" ) ?
new RegExp( "^([" + okChars + "]|[^a-zA-Z0-9\\s])" + length + "$" ):
new RegExp( "^[" + okChars + "]" + length + "$" );
if ( !regex.test( this.elem.value ) )
{
this.throwError( [this.elem.value, this.elem.fName, arrE[0], arrE[1], arrE[2], arrE[3], arrE[4]] );
}
}
/*/>*/
/*< equalto logical *******************************************************************/
fValidate.prototype.equalto = function( oName )
{
if ( this.typeMismatch( 'text' ) ) return;
if ( typeof oName == 'undefined' )
{
this.paramError( 'oName' );
}
var otherElem = this.form.elements[oName];
if ( this.elem.value != otherElem.value )
{
this.throwError( [this.elem.fName,otherElem.fName] );
}
}
/*/>*/
/*< ssn extended *******************************************************************/
fValidate.prototype.ssn = function()
{
if ( this.typeMismatch( 'text' ) ) return;
if ( !( /^\d{3}\-\d{2}\-\d{4}$/.test( this.elem.value ) ) )
this.throwError();
}
/*/>*/
/*< select controls *******************************************************************/
fValidate.prototype.select = function()
{
if ( this.typeMismatch( 's1' ) ) return;
if ( this.elem.selectedIndex == 0 )
{
this.throwError( [this.elem.fName] );
}
}
/*/>*/
/*< selectm controls *******************************************************************/
fValidate.prototype.selectm = function( minS, maxS )
{
if ( this.typeMismatch( 'sm' ) ) return;
if ( typeof minS == 'undefined' )
{
this.paramError( 'minS' );
}
if ( maxS == 999 || maxS == '*' || typeof maxS == 'undefined' || maxS > this.elem.length ) maxS = this.elem.length;
var count = 0;
for ( var opt, i = 0; ( opt = this.elem.options[i] ); i++ )
{
if ( opt.selected ) count++;
}
if ( count < minS || count > maxS )
{
this.throwError( [minS, maxS, this.elem.fName, count] );
}
}
/*/>*/
/*< selecti controls *******************************************************************/
fValidate.prototype.selecti = function( indexes )
{
if ( this.typeMismatch( 's1' ) ) return;
if ( typeof indexes == 'undefined' )
{
this.paramError( 'indexes' );
return;
}
indexes = indexes.split( "," );
var selectOK = true;
for ( var i = 0; i < indexes.length; i++ )
{
if ( this.elem.options[indexes[i]].selected )
{
selectOK = false;
break;
}
}
if ( !selectOK )
{
this.throwError( [this.elem.fName] );
}
}
/*/>*/
/*< cazip international *******************************************************************/
fValidate.prototype.cazip = function()
{
var elem = this.elem;
if ( this.typeMismatch( 'text' ) ) return;
elem.value = elem.value.toUpperCase();
if ( !( /^[A-Z][0-9][A-Z] [0-9][A-Z][0-9]$/.test( elem.value ) ) )
{
this.throwError();
}
}
fValidate.prototype.capost = fValidate.prototype.cazip;
/*/>*/
/*< ukpost international *******************************************************************/
fValidate.prototype.ukpost = function()
{
var elem = this.elem;
if ( this.typeMismatch( 'text' ) ) return;
elem.value = elem.value.toUpperCase();
if ( !( /^[A-Z]{1,2}\d[\dA-Z] ?\d[A-Z]{2}$/.test( elem.value ) ) )
{
this.throwError();
}
}
/*/>*/
/*< germanpost international *******************************************************************/
fValidate.prototype.germanpost = function()
{
var elem = this.elem;
if ( this.typeMismatch( 'text' ) ) return;
elem.value = elem.value.toUpperCase();
if ( !( /^(?:CH\-)\d{4}$/.test( elem.value ) ) )
{
this.throwError();
}
}
/*/>*/
/*< swisspost international *******************************************************************/
fValidate.prototype.swisspost = function()
{
var elem = this.elem;
if ( this.typeMismatch( 'text' ) ) return;
elem.value = elem.value.toUpperCase();
if ( !( /^(?:D\-)\d{5}$/.test( this.elem.value ) ) )
{
this.throwError();
}
}
/*/>*/
/*< email web *******************************************************************/
fValidate.prototype.email = function( level )
{
if ( this.typeMismatch( 'text' ) ) return;
if ( typeof level == 'undefined' ) level = 0;
var emailPatterns = [
/.+@.+\..+$/i,
/^\w.+@\w.+\.[a-z]+$/i,
/^\w[-_a-z~.]+@\w[-_a-z~.]+\.[a-z]{2}[a-z]*$/i,
/^\w[\w\d]+(\.[\w\d]+)*@\w[\w\d]+(\.[\w\d]+)*\.[a-z]{2,7}$/i
];
if ( ! emailPatterns[level].test( this.elem.value ) )
{
this.throwError();
}
}
/*/>*/
/*< url web *******************************************************************/
fValidate.prototype.url = function( hosts, hostOptional, allowQS )
{
if ( this.typeMismatch( 'text' ) ) return;
this.setArg( hosts, "http" );
var front = "^(?:(" + hosts.replace( /\,/g, "|" ) + ")\\:\\/\\/)";
var end = ( Boolean( allowQS ) == true ) ? "(\\?.*)?$" : "$";
if ( Boolean( hostOptional ) == true ) front += "?";
var regex = new RegExp( front + "([\\w\\d-]+\\.?)+" + end );
if ( !regex.test( this.elem.value ) )
{
this.throwError( [this.elem.fName] );
}
}
/*/>*/
/*< ip web *******************************************************************/
fValidate.prototype.ip = function( portMin, portMax )
{
if ( this.typeMismatch( 'text' ) ) return;
portMin = this.setArg( portMin, 0 );
portMax = this.setArg( portMax, 99999 );
if ( !( /^\d{1,3}(\.\d{1,3}){3}(:\d+)?$/.test( this.elem.value ) ) )
{
this.throwError();
}
else
{
var part, i = 0, parts = this.elem.value.split( /[.:]/ );
while ( part = parts[i++] )
{
if ( i == 5 ) // Check port
{
if ( part < portMin || part > portMax )
{
this.throwError( [part, portMin, portMax], 1 );
}
}
else if ( part < 0 || part > 255 )
{
this.throwError();
}
}
}
}
/*/>*/
/*< decimal numbers *******************************************************************/
fValidate.prototype.decimal = function( lval, rval )
{
if ( this.typeMismatch( 'text' ) ) return;
var regex = '', elem = this.elem;
if ( lval != '*' ) lval = parseInt( lval, 10 );
if ( rval != '*' ) rval = parseInt( rval, 10 );
if ( lval == 0 )
regex = "^\\.[0-9]{" + rval + "}$";
else if ( lval == '*' )
regex = "^[0-9]*\\.[0-9]{" + rval + "}$";
else if ( rval == '*' )
regex = "^[0-9]{" + lval + "}\\.[0-9]+$";
else
regex = "^[0-9]{" + lval + "}\\.[0-9]{" + rval + "}$";
regex = new RegExp( regex );
if ( !regex.test( elem.value ) )
{
this.throwError( [elem.value,elem.fName] );
}
}
/*/>*/
/*< decimalr numbers *******************************************************************/
fValidate.prototype.decimalr = function( lmin, lmax, rmin, rmax )
{
if ( this.typeMismatch( 'text' ) ) return;
lmin = ( lmin == '*' )? 0 : parseInt( lmin, 10 );
lmax = ( lmax == '*' )? '': parseInt( lmax, 10 );
rmin = ( rmin == '*' )? 0 : parseInt( rmin, 10 );
rmax = ( rmax == '*' )? '': parseInt( rmax, 10 );
var decReg = "^[0-9]{"+lmin+","+lmax+"}\\.[0-9]{"+rmin+","+rmax+"}$"
var regex = new RegExp(decReg);
if ( !regex.test( this.elem.value ) )
{
this.throwError( [this.elem.fName] );
}
return true;
}
/*/>*/
/*< zip extended *******************************************************************/
fValidate.prototype.zip = function( sep )
{
if ( this.typeMismatch( 'text' ) ) return;
sep = this.setArg( sep, "- " );
var regex = new RegExp( "^[0-9]{5}(|[" + sep.toPattern() + "][0-9]{4})?$" );
if ( ! regex.test( this.elem.value ) )
{
this.throwError();
}
}
/*/>*/
/*< phone extended *******************************************************************/
fValidate.prototype.phone = function( format )
{
if ( this.typeMismatch( 'text' ) ) return;
format = this.setArg( format, 0 );
var patterns = [
/^(\(?\d\d\d\)?)?[ -]?\d\d\d[ -]?\d\d\d\d$/, // loose
/^(\(\d\d\d\) )?\d\d\d[ -]\d\d\d\d$/ // strict
];
if ( !patterns[format].test( this.elem.value ) )
{
if ( format == 1 )
{
this.throwError();
} else {
this.throwError( [], 1 );
}
}
}
/*/>*/
/*< date datetime *******************************************************************/
fValidate.prototype.date = function( formatStr, delim, code, specDate )
{
if ( this.typeMismatch( 'text' ) ) return;
if ( typeof formatStr == 'undefined' )
{
this.paramError( 'formatStr' );
return;
}
delim = this.setArg( delim, "/" );
var error = [this.elem.fName, formatStr.replace( /\//g, delim )];
var format = formatStr.split( "/" );
var compare = this.elem.value.split( delim );
var order = new Object();
for ( var i = 0; i < format.length; i++ )
{
switch( format[i].charAt( 0 ).toLowerCase() )
{
case 'm' :
order.months = i;
break;
case 'd' :
order.days = i;
break;
case 'y' :
order.years = i;
break;
}
}
var thisDate = new Date( compare[order.years], compare[order.months]-1, compare[order.days] );
if ( isNaN( thisDate ) || thisDate.getDate() != compare[order.days] || thisDate.getMonth() != compare[order.months]-1 || thisDate.getFullYear().toString().length != formatStr.match( /y/g ).length )
{
this.throwError( error );
return;
}
var compareElem = this.form.elements[specDate];
if ( typeof compareElem != 'undefined' )
{
specDate = compareElem.validDate || compareElem.value;
}
var compareDate = ( specDate == 'today' )?
new Date():
new Date( specDate );
compareDate.setHours(0);
compareDate.setMinutes(0);
compareDate.setSeconds(0);
compareDate.setMilliseconds(0);
var timeDiff = compareDate.getTime() - thisDate.getTime();
var dateOk = false;
switch ( parseInt( code ) ) {
case 1 : // Before specDate
dateOk = Boolean( timeDiff > 0 );
error = 1;
break;
case 2 : // Before or on specDate
dateOk = Boolean( ( timeDiff + 86400000 ) > 0 );
error = 2;
break;
case 3 : // After specDate
dateOk = Boolean( timeDiff < 0 );
error = 3;
break;
case 4 : // After or on specDate
dateOk = Boolean( ( timeDiff - 86400000 ) < 0 );
error = 4;
break;
default : dateOk = true;
}
if ( !dateOk )
{
this.throwError( [specDate], error );
}
this.elem.validDate = thisDate.toString();
}
/*/>*/
/*< money ecommerce *******************************************************************/
fValidate.prototype.money = function( ds, grp, dml )
{
if ( this.typeMismatch( 'text' ) ) return;
ds = ( ds == ' ' ) ? false : ds.toPattern();
grp = ( grp == ' ' ) ? false : grp.toPattern();
dml = ( dml == ' ' ) ? false : dml.toPattern();
var moneySyntax, pattern;
switch( true )
{
case Boolean( ds && grp && dml ): // Dollar sign, grouping, and decimal
pattern = "^" + ds + "(?:(?:[0-9]{1,3}" + grp + ")(?:[0-9]{3}" + grp + ")*[0-9]{3}|[0-9]{1,3})(" + dml + "[0-9]{2})$";
moneySyntax = ds + "XX" + grp + "XXX" + dml + "XX";
break;
case Boolean( ds && grp && !dml ): // Dollar sign and grouping
pattern = "^" + ds + "(?:(?:[0-9]{1,3}" + grp + ")(?:[0-9]{3}" + grp + ")*[0-9]{3}|[0-9]{1,3})$";
moneySyntax = "" + ds + "XX" + grp + "XXX";
break;
case Boolean( ds && !grp && dml ): // Dollar sign and decimal
pattern ="^" + ds + "[0-9]*(\\.[0-9]{2})$";
moneySyntax ="" + ds + "XXXXX" + dml + "XX";
break;
case Boolean( !ds && grp && dml ): // Grouping and decimal
pattern ="^(?:(?:[0-9]{1,3}" + grp + ")(?:[0-9]{3}" + grp + ")*[0-9]{3}|[0-9]{1,3})(" + dml + "[0-9]{2})?$";
moneySyntax ="XX" + grp + "XXX" + dml + "XX";
break;
case Boolean( ds && !grp && !dml ): // Dollar sign only
pattern ="^" + ds + "[0-9]*$";
moneySyntax ="" + ds + "XXXXX";
break;
case Boolean( !ds && grp && !dml ): // Grouping only
pattern ="^(?:(?:[0-9]{1,3}" + grp + ")(?:[0-9]{3}" + grp + ")*[0-9]{3}|[0-9]{1,3})$";
moneySyntax ="XX" + grp + "XXX";
break;
case Boolean( !ds && !grp && dml ): // Decimal only
pattern ="^[0-9]*(" + dml + "[0-9]{2})$";
moneySyntax ="XXXXX" + dml + "XX";
break;
case Boolean( !ds && !grp && !dml ): // No params set, all special chars become optional
pattern ="^.?(?:(?:[0-9]{1,3}.?)(?:[0-9]{3}.?)*[0-9]{3}|[0-9]{1,3})(.[0-9]{2})?$";
moneySyntax ="[?]XX[?]XXX[?XX]";
}
var regex = new RegExp( pattern );
if ( !regex.test( this.elem.value ) )
{
this.throwError( [this.elem.fName, moneySyntax.replace( /\\/g, '' )] );
}
}
/*/>*/
/*< checkbox controls *******************************************************************/
fValidate.prototype.checkbox = function( minC, maxC )
{
if ( this.typeMismatch( 'cb' ) ) return;
if ( typeof minC == 'undefined' )
{
this.paramError( 'minC' );
return;
}
if ( this.elem == this.form.elements[this.elem.name] && !this.elem.checked )
{
this.throwError( [this.elem.fName] );
}
else
{
this.elem = this.form.elements[this.elem.name];
var len = this.elem.length;
var count = 0;
if ( maxC == 999 || maxC == '*' || typeof maxC == 'undefined' || maxC > this.elem.length )
{
maxC == len;
}
var i = len;
while( i-- > 0 )
{
if ( this.elem[i].checked )
{
count++;
}
}
if ( count < minC || count > maxC )
{
this.throwError( [minC, maxC, this.elem[0].fName, count] );
}
}
}
/*/>*/
/*< radio controls *******************************************************************/
fValidate.prototype.radio = function()
{
if ( this.typeMismatch( 'rg' ) ) return;
if ( this.elem == this.form.elements[this.elem.name] && !this.elem.checked )
{
this.throwError( [this.elem.fName] );
}
else
{
this.elem = this.form.elements[this.elem.name];
for ( var i = 0; i < this.elem.length; i++ )
{
if ( this.elem.item( i ).checked )
{
return;
}
}
this.throwError( [this.elem[0].fName] );
}
}
/*/>*/
/*< eitheror logical *******************************************************************/
fValidate.prototype.eitheror = function()
{
if ( this.typeMismatch( 'hidden' ) ) return;
if ( typeof arguments[0] == 'undefined' )
{
this.paramError( 'delim' );
return;
}
if ( typeof arguments[1] == 'undefined' )
{
this.paramError( 'fields' );
return;
}
var arg, i = 0,
fields = new Array(),
field,
nbCount = 0,
args = arguments[1].split( arguments[0] );
this.elem.fields = new Array();
while ( arg = args[i++] )
{
field = this.form.elements[arg];
fields.push( field.fName );
this.elem.fields.push( field );
if ( !this.isBlank( arg ) )
{
nbCount++;
}
}
if ( nbCount != 1 )
{
this.throwError( [fields.join( "\n\t-" )] );
}
}
/*/>*/
/*< atleast logical *******************************************************************/
fValidate.prototype.atleast = function()
{
if ( this.typeMismatch( 'hidden' ) ) return;
if ( typeof arguments[0] == undefined )
{
this.paramError( 'qty' );
return;
}
if ( typeof arguments[1] == undefined )
{
this.paramError( 'delim' );
return;
}
if ( typeof arguments[2] == undefined )
{
this.paramError( 'fields' );
return;
}
var arg, i = 0,
fields = new Array(),
field,
nbCount = 0,
args = arguments[2].split( arguments[1] );
this.elem.fields = new Array();
while ( arg = args[i++] )
{
field = this.form.elements[arg];
fields.push( field.fName );
this.elem.fields.push( field );
if ( !this.isBlank( arg ) )
{
nbCount++;
}
}
if ( nbCount < arguments[0] )
{
this.throwError( [arguments[0], fields.join( "\n\t-" ), nbCount] );
}
}
/*/>*/
/*< allornone logical *******************************************************************/
fValidate.prototype.allornone = function()
{
if ( this.typeMismatch( 'hidden' ) ) return;
if ( typeof arguments[0] == 'undefined' )
{
this.paramError( 'delim' );
return;
}
if ( typeof arguments[1] == 'undefined' )
{
this.paramError( 'fields' );
return;
}
var arg, i = 0,
fields = new Array(),
field,
nbCount = 0,
args = arguments[1].split( arguments[0] );
this.elem.fields = new Array();
while ( arg = args[i++] )
{
field = this.form.elements[arg];
fields.push( field.fName );
this.elem.fields.push( field );
if ( !this.isBlank( arg ) )
{
nbCount++;
}
}
if ( nbCount > 0 && nbCount < args.length )
{
this.throwError( [fields.join( "\n\t-" ), nbCount] );
}
}
/*/>*/
/*< comparison logical *******************************************************************/
fValidate.prototype.comparison = function( field1, operator, field2 )
{
if ( this.typeMismatch( 'hidden' ) ) return;
var elem1 = this.form.elements[field1],
elem2 = this.form.elements[field2],
value1 = this.getValue( elem1 ),
value2 = this.getValue( elem2 );
i18n = this.i18n.comparison;
i = -1;
var operators =
[
['>', i18n.gt],
['<', i18n.lt],
['>=', i18n.gte],
['<=', i18n.lte],
['==', i18n.eq],
['!=', i18n.neq]
];
while( operators[++i][0] != operator ){ }
this.elem.fields = [elem1, elem2];
if ( ! eval( value1 + operator + value2 ) )
{
this.throwError( [elem1.fName, operators[i][1], elem2.fName] );
}
}
/*/>*/
/*< file controls *******************************************************************/
fValidate.prototype.file = function( extensions, cSens )
{
if ( this.typeMismatch( 'file' ) ) return;
if ( typeof extensions == 'undefined' )
{
this.paramError( 'extensions' );
return;
}
cSens = Boolean( cSens ) ? "" : "i";
var regex = new RegExp( "^.+\\.(" + extensions.replace( /,/g, "|" ) + ")$", cSens );
if ( ! regex.test( this.elem.value ) )
{
this.throwError( [extensions.replace( /,/g, "\n" )] );
}
}
/*/>*/
/*< custom special *******************************************************************/
fValidate.prototype.custom = function( flags, reverseTest )
{
if ( this.typeMismatch( 'text' ) ) return;
flags = ( flags ) ? flags.replace( /[^gim]/ig ) : "";
var regex = new RegExp( this.elem.getAttribute( this.config.pattern ), flags );
if ( !regex.test( this.elem.value ) )
{
this.throwError( [this.elem.fName] );
}
}
/*/>*/
/*< cc ecommerce *******************************************************************/
fValidate.prototype.cc = function()
{
if ( this.typeMismatch( 'text' ) ) return;
var typeElem = this.form.elements[this.config.ccType];
if ( !typeElem )
{
this.devError( 'noCCType' )
return;
}
var ccType = typeElem.options[typeElem.selectedIndex].value.toUpperCase();
var types = {
'VISA' : /^4\d{12}(\d{3})?$/,
'MC' : /^5[1-5]\d{14}$/,
'DISC' : /^6011\d{12}$/,
'AMEX' : /^3[4|7]\d{13}$/,
'DINERS' : /^3[0|6|8]\d{12}$/,
'ENROUTE' : /^2[014|149]\d{11}$/,
'JCB' : /^3[088|096|112|158|337|528]\d{12}$/,
'SWITCH' : /^(49030[2-9]|49033[5-9]|49110[1-2]|4911(7[4-9]|8[1-2])|4936[0-9]{2}|564182|6333[0-4][0-9]|6759[0-9]{2})\d{10}(\d{2,3})?$/,
'DELTA' : /^4(1373[3-7]|462[0-9]{2}|5397[8|9]|54313|5443[2-5]|54742|567(2[5-9]|3[0-9]|4[0-5])|658[3-7][0-9]|659(0[1-9]|[1-4][0-9]|50)|844[09|10]|909[6-7][0-9]|9218[1|2]|98824)\d{10}$/,
'SOLO' : /^(6334[5-9][0-9]|6767[0-9]{2})\d{10}(\d{2,3})?$/
};
if ( typeElem.validated == false && this.groupError == true ) return;
if ( typeof types[ccType] == 'undefined' && typeElem.validated == false && this.groupError == false )
{
this.devError( [ccType] );
return;
}
this.elem.value = this.elem.value.replace( /[^\d]/g, "" );
if ( !types[ccType].test( this.elem.value ) || !this.elem.value.luhn() )
{
this.throwError( [this.elem.fName] );
}
}
String.prototype.luhn = function()
{
var i = this.length;
var checkSum = "", digit;
while ( digit = this.charAt( --i ) )
{
checkSum += ( i % 2 == 0 ) ? digit * 2 : digit;
}
checkSum = eval( checkSum.split('').join('+') );
return ( checkSum % 10 == 0 );
}
/*/>*/
/*< ccDate ecommerce *******************************************************************/
fValidate.prototype.ccDate = function( month, year )
{
if ( this.typeMismatch( 's1' ) ) return;
year = parseInt( this.getValue( this.form.elements[year] ), 10 ) + 2000;
month = parseInt( this.getValue( this.form.elements[month] ), 10 );
var today = new Date();
var expDate = new Date( year, month )
if ( expDate < today )
{
alert( ["Card Expired",today,expDate].join( "\n" ) );
}
}
/*/>*/
/* EOF */
/***************************************************
fValidate
Copyright (c) 2000-2003
by Peter Bailey
www.peterbailey.net/fValidate/
fValidate.controls.js
Included Validators
-------------------
select
selectm
selecti
checkbox
radio
file
This file is only part of a larger validation
library and will not function autonomously.
Created at a tab-spacing of four (4)
****************************************************/
fValidate.prototype.select = function()
{
if ( this.typeMismatch( 's1' ) ) return;
if ( this.elem.selectedIndex == 0 )
{
this.throwError( [this.elem.fName] );
}
}
fValidate.prototype.selectm = function( minS, maxS )
{
if ( this.typeMismatch( 'sm' ) ) return;
if ( typeof minS == 'undefined' )
{
this.paramError( 'minS' );
}
if ( maxS == 999 || maxS == '*' || typeof maxS == 'undefined' || maxS > this.elem.length ) maxS = this.elem.length;
var count = 0;
for ( var opt, i = 0; ( opt = this.elem.options[i] ); i++ )
{
if ( opt.selected ) count++;
}
if ( count < minS || count > maxS )
{
this.throwError( [minS, maxS, this.elem.fName, count] );
}
}
fValidate.prototype.selecti = function( indexes )
{
if ( this.typeMismatch( 's1' ) ) return;
if ( typeof indexes == 'undefined' )
{
this.paramError( 'indexes' );
return;
}
indexes = indexes.split( "," );
var selectOK = true;
for ( var i = 0; i < indexes.length; i++ )
{
if ( this.elem.options[indexes[i]].selected )
{
selectOK = false;
break;
}
}
if ( !selectOK )
{
this.throwError( [this.elem.fName] );
}
}
fValidate.prototype.checkbox = function( minC, maxC )
{
if ( this.typeMismatch( 'cb' ) ) return;
if ( typeof minC == 'undefined' )
{
this.paramError( 'minC' );
return;
}
if ( this.elem == this.form.elements[this.elem.name] && !this.elem.checked )
{
this.throwError( [this.elem.fName] );
}
else
{
this.elem = this.form.elements[this.elem.name];
var len = this.elem.length;
var count = 0;
if ( maxC == 999 || maxC == '*' || typeof maxC == 'undefined' || maxC > this.elem.length )
{
maxC == len;
}
var i = len;
while( i-- > 0 )
{
if ( this.elem[i].checked )
{
count++;
}
}
if ( count < minC || count > maxC )
{
this.throwError( [minC, maxC, this.elem[0].fName, count] );
}
}
}
fValidate.prototype.radio = function()
{
if ( this.typeMismatch( 'rg' ) ) return;
if ( this.elem == this.form.elements[this.elem.name] && !this.elem.checked )
{
this.throwError( [this.elem.fName] );
}
else
{
this.elem = this.form.elements[this.elem.name];
for ( var i = 0; i < this.elem.length; i++ )
{
if ( this.elem.item( i ).checked )
{
return;
}
}
this.throwError( [this.elem[0].fName] );
}
}
fValidate.prototype.file = function( extensions, cSens )
{
if ( this.typeMismatch( 'file' ) ) return;
if ( typeof extensions == 'undefined' )
{
this.paramError( 'extensions' );
return;
}
cSens = Boolean( cSens ) ? "" : "i";
var regex = new RegExp( "^.+\\.(" + extensions.replace( /,/g, "|" ) + ")$", cSens );
if ( ! regex.test( this.elem.value ) )
{
this.throwError( [extensions.replace( /,/g, "\n" )] );
}
}
// EOF
/* Handles element className manipulation
------------------------------------------- */
fValidate.prototype.removeCSSClass = function( elem, className )
{
elem.className = elem.className.replace( className, "" ).trim();
}
fValidate.prototype.addCSSClass = function( elem, className )
{
this.removeCSSClass( elem, className );
elem.className = ( elem.className + " " + className ).trim();
}
/* Processes errors in stack for group error mode
------------------------------------------- */
fValidate.prototype.showGroupError = function()
{
for ( var error, firstElem, i = 0; ( error = this.errors[i] ); i++ )
{
if ( i == 0 ) firstElem = error.elem;
this.elem = error.elem;
this.showError( error.msg, Boolean( i == ( this.errors.length - 1 ) ) );
}
var focusElem = ( typeof firstElem.fields != 'undefined' )?
firstElem.fields[0]:
firstElem;
this.selectFocus( focusElem );
}
/* Reverts any visible error notification upon event
------------------------------------------- */
fValidate.prototype.revertError = function( elem )
{
elem = this.setArg( elem, this.elem );
var isHidden = Boolean( elem.type == 'hidden' ),
errorClass = this.config.errorClass,
i = 0,
errorElem,
subelem;
if ( ( typeof elem.length != 'undefined' && elem.length > 1 && elem.nodeName != 'SELECT' ) || isHidden )
{
if ( isHidden && typeof elem.fields != 'undefined' )
{
while( subelem = ( isHidden ) ? elem.fields[i++] : elem.item( i++ ) )
{
if ( typeof subelem.revertClass != 'undefined' )
{
subelem.className = subelem.revertClass;
}
}
}
} else {
if ( this.config.useSingleClassNames )
{
if ( typeof subElement.revertClass != 'undefined' )
{
elem.className = elem.revertClass;
}
} else {
this.removeCSSClass( elem, errorClass );
}
}
if ( typeof elem.label != 'undefined' )
{
if ( this.config.useSingleClassNames )
{
elem.label.className = '';
} else {
this.removeCSSClass( elem.label, errorClass );
}
elem.label.innerHTML = ( elem.label.original || elem.label.innerHTML );
}
if ( typeof this.boxError != 'undefined' )
{
if ( typeof this.boxError.normalize != 'undefined' ) this.boxError.normalize();
if ( errorElem = document.getElementById( this.config.boxErrorPrefix + elem.name ) )
{
this.boxError.removeChild( errorElem );
}
if ( this.boxError.childNodes.length == 0 ) this.boxError.style.display = "none";
}
}
/* Focus and select elements, if possible
------------------------------------------- */
fValidate.prototype.selectFocus = function( elem )
{
if ( typeof elem.select != 'undefined' ) elem.select();
if ( typeof elem.focus != 'undefined' ) elem.focus();
}
/* Developer assistance method - shows error if validator/element-type mismatch
------------------------------------------- */
fValidate.prototype.typeMismatch = function()
{
var pats = {
'text': 'text|password|textarea',
'ta': 'textarea',
'hidden': 'hidden',
's1': 'select-one',
'sm': 'select-multiple',
'select': 'select-one|select-multiple',
'rg': 'radio',
'radio': 'radio',
'cb': 'checkbox',
'file': 'file'
};
var fail = false,
expected = new Array(),
result = key = type = regex = "";
for ( var i = 0; i < arguments.length; i++ )
{
type = pats[arguments[i]];
regex = new RegExp( type );
result += ( regex.test( this.elem.type ) ) ? "1" : "0";
key += "0";
expected.push( type );
}
if ( key ^ result == 0 )
{
this.devError( [this.elem.fName, this.elem.type, expected.join( "|" ).replace( /\|/g, this.i18n.or )], 'mismatch' );
this.elem.validated = false;
return true;
}
return false;
}
/* Returns value(s) of reference element passed
------------------------------------------- */
fValidate.prototype.getValue = function( elem )
{
switch ( elem.type )
{
case 'text' :
case 'password' :
case 'textarea' :
case 'hidden' :
case 'file' :
return elem.value;
case 'radio':
case 'select-single':
if ( typeof elem.length == 'undefined' )
{
return elem.value;
} else {
for ( var i = 0; i < elem.length; i++ )
{
choice = ( elem.type == 'radio' ) ? "checked" : "selected";
if ( elem[i][choice] )
{
return elem[i].value;
}
}
}
case 'select-multiple' :
case 'checkbox' :
if ( typeof elem.length == 'undefined' )
{
return elem.value
} else {
var returnValues = new Array();
for ( var i = 0; i < elem.length; i++ )
{
choice = ( elem.type == 'checkbox' ) ? "checked" : "selected";
if ( elem[i][choice] )
{
returnValues.push( elem[i].value );
}
}
return returnValues;
}
default: return null;
}
}
/* Generic argument setting method
------------------------------------------- */
fValidate.prototype.setArg = function( arg, def )
{
return ( typeof arg == 'undefined' || arg == '' || arg == null ) ? def : arg;
}
/* Blank checker. Optional string argument for evaluating element other than current
------------------------------------------- */
fValidate.prototype.isBlank = function( el )
{
var elem = this.form.elements[el] || this.elem;
return Boolean( /^\s*$/.test( elem.value ) );
}
/* Translates messages using language file
------------------------------------------- */
fValidate.prototype.translateMessage = function( args, format )
{
var msg = ""
for ( var i = 0; i < format.length; i++ )
{
msg += ( typeof format[i] == 'number' ) ? args[format[i]] : format[i];
}
return msg;
}
/* Throws developer errors
------------------------------------------- */
fValidate.prototype.devError = function( args, which )
{
if ( typeof args == 'string' )
{
which = args;
args = [];
}
which = this.setArg( which, this.type );
var format = this.i18n.devErrors[which];
var a = [
this.i18n.devErrors.lines[0],
'----------------------------------------------------------------------------------------------',
this.translateMessage( args, format ),
'----------------------------------------------------------------------------------------------',
this.i18n.devErrors.lines[1]
];
alert( a.join( "\n" ) );
}
/* Throws specific developer error
------------------------------------------- */
fValidate.prototype.paramError = function( param, elemName )
{
elemName = this.setArg( elemName, this.elem.name );
this.devError( [param, this.type, elemName], 'paramError' );
}
/* Non-fValidate methods *****************************************/
/* For easy creation of DOM nodes
------------------------------------------- */
document.createHTMLElement = function( elemName, attribs )
{
if ( typeof document.createElement == 'undefined' ) return;
var elem = document.createElement( elemName );
if ( typeof attribs != 'undefined' )
{
for ( var i in attribs )
{
switch ( true )
{
case ( i == 'text' ) : elem.appendChild( document.createTextNode( attribs[i] ) ); break;
case ( i == 'class' ) : elem.className = attribs[i]; break;
default : elem.setAttribute( i, '' ); elem[i] = attribs[i];
}
}
}
return elem;
}
/* Trims b items from the beginning of the array, e items from the end
------------------------------------------- */
Array.prototype.reduce = function( b, e )
{
var a = new Array();
var count = 0;
for ( var i = b; i < this.length - e; i++ )
{
a[count++] = this[i];
}
return a;
}
/* Returns array as argument-compatible string
------------------------------------------- */
Array.prototype.toArgString = function()
{
var a = new Array();
for ( var i = 0; i < this.length; i++ )
{
a.push( "'" + this[i] + "'" );
}
return a.toString();
}
/* Returns last item of the array
------------------------------------------- */
Array.prototype.last = function()
{
return this[this.length-1];
}
/* Removes the follow charaters _[] from an elements name for human-reading
------------------------------------------- */
String.prototype.format = function()
{
return this.replace( /\_/g, " ").replace( /\[|\]/g, "" );
}
/* Replaces newline characters with XHTML BR tags
------------------------------------------- */
String.prototype.toHTML = function()
{
return this.replace( /\n/g, "
" ).replace( /\t/g, " " );
}
/* Trims leading and trailing whitespace from string
------------------------------------------- */
String.prototype.trim = function()
{
return this.replace( /^\s+|\s+$/, "" );
}
/* Escapes necessary charactes for string-generated regular expressions
------------------------------------------- */
String.prototype.toPattern = function()
{
return this.replace( /([\.\*\+\{\}\(\)\<\>\^\$\\])/g, "\\$1" );
}
// EOF