//---------------------------------------------------------------------------
// FormValidator 0.3.8 - Simple form validation for flash
//
// Author : Niklas Lindgren
//
// LICENSE
// You are free to use this in any way you choose. If you redistribute this
// text should be included. I am not to be considered liable to any grief
// or information loss (or hair loss for that matter :) due to using this.
//
// HISTORY
// 0.3.8 - Fixed an error in the email-regexp
// 0.3.7 - Fixed an error in the email-regexp
// 0.3.6 - Minor fix to date-checking
// 0.3.5 - Added boolean (_FIELD_BOOL). Quite unnecessary really, I only added it
// so FV won't get stuck on them. I do like to add them to the form-array
// so I can use the copyValuesTo()-method.
// 0.3.4 - I finally realized what _global does. FormValidator is now
// initialized into the _global scope.
// 0.3.3 - Fixed one more bug. Now "real" numbers are also copied correctly
// 0.3.2 - Some bugfixes. Path to variables works like it should now when you
// don't use "self". "Real" numbers were validated incorrectly.
// 0.3.0 - Added resetForm() -method for resetting form to default values.
// Now if I only could figure out a way to get the inputs to reflect it too...
// 0.2.8 - _Keep It Simple Stupid_. When I changed the code to how it should
// have been in the first place (it was suddenly obvious), I achieved
// a slight increase in speed.
// 0.2.7 - Further optimization attempted but with quite poor success. But,
// on the bright side, I now have an extended String-object :)
// 0.2.6 - Tried to optimize the code a bit because it became *slow*.
// Quite a bit was changed... It seems that Objects that contain
// Objects is not a good idea. Further optimization is still needed.
// The way your form is structured also effects the runtime. My demo
// is a horrible scenario. It's very expensive because of multiple
// compilations of complex regexps are required. A real world
// application would not need that.
// 0.2.5 - Fixed the DateConstruct bug/feature. Decided loose-checking is
// not really what this is about.
// 0.2.4 - Even more bugfixes. New demo flash.
// 0.2.3 - More DateConstruct bugfixes. And a new bug/feature introduced :D
// Invalid data or empty data in an optional DateConstruct evals to
// to true as the constructed date is then built to empty (= "") so
// data-integrity is still ok.
// 0.2.2 - Bugfix regarding DateConstruct
// 0.2.1 - Fixed a bug in the date check
// added a feature; four digit years are now checked to be in a
// certain yearspan (predefined century-span, default 1700-2199)
// 0.2 - Added two datatypes. Date and DateConstruct
// 0.1.5 - Fixed a bug in email checking
// 0.1.4 - Added copyValuesTo() function
// 0.1.3 - Enabled variables to be stored in the FormValidator-object
// 0.1.2 - Fixed a bug in email checking
// 0.1 - Initial Release
//
// KNOWN BUGS/LACKING FEATURES
// - An email address with an ip-address as host will not validate to true
// - Dates aren't formally verified to be valid. Only "grammatically"
// - Proper instructions for use.
//
// USAGE
// Initiation
// objname = new FormValidator() or
// objname = new FormValidator(varHolder, formElements)
//
// varHolder is an object where the variables are stored.
// This is just my way of doing this. I suppose it wouldn't be a big effort
// to modify the code to use textfield-instancenames instead to reference
// them directly. But this would work only for textfields...
//
// Since version 0.2.6 assigning varHolder the value "self" will make
// the FormValidator object store the variables in an object called
// '_FV_vars' which resides on the timeline, Not in the FormValidator-object
// itself. The textfield variable would be '_FV_vars.varname'. The downside
// to this is textfields aren't updated before a frameadvance (=default
// values don't show up).
//
// formElements is the form passed to the object as an array
// in which each form-element is an array in the form:
// [variable name][default value][type][required]
//
// Forms can be redefined at a later point by calling
// objname.defineForm(varHolder, formElements)
//
// SUPPORTED FIELD TYPES
// FormValidator.prototype._FIELD_TEXT for textfields
// FormValidator.prototype._FIELD_NUM for numeric fields
// FormValidator.prototype._FIELD_EMAIL for e-mail addresses
// FormValidator.prototype._FIELD_DATE for dates in the format dd.mm.yyyy
// FormValidator.prototype._FIELD_DATEC for date constructs. See example.
// FormValidator.prototype._FIELD_BOOL for booleans. (Checkboxes)
//
// After init all you have to do is call objname.validateForm() which
// returns true or false
//
// REQUIRES
// - RegExp.as (downloadable from http://www.jurjans.lv/flash/RegExp.html)
// (A huge thanks to Pavils Jurjans for making regexps for flash!)
//
// - String.as (included)
//
// METHODS (not all but those of value to you, aka public methods :)
// o validateForm()
// Validates the form-values
// returns true or false
//
// o isFormOk()
// The result from the previous validation can be fetched by calling
// objname.isFormOk()
// returns true or false
//
// o copyValuesTo(target)
// Copies the form-values to an object target. (I used this to propagate
// a LoadVars-object). This might be unnecessary since you could define
// the target as varHolder.
// returns nothing
//
// o defineForm(varHolder, formElements)
// Defines or re-defines the form (meta)-data
//
// o resetForm()
// Resets all the variables to their default values
//-------------------------------------------------------------------------//
|