/* * Copyright (c) 1995-2005 Macromedia, Inc. All rights reserved. */// ColdFusion JavaScript functions for cfform client-side validationvar _CF_error_messages = new Array();var _CF_error_fields = new Object();var _CF_FirstErrorField = null;var _CF_submit_status= new Array();function _CF_signalLoad(){	_CF_loaded = 1;}function _CF_onError(form_object, input_object, object_value, error_message){	if( _CF_error_fields[input_object] == null )	{		if( _CF_FirstErrorField == null )		{			_CF_FirstErrorField = input_object;		}		_CF_error_exists = true;		_CF_error_fields[input_object] = error_message;		_CF_error_messages[_CF_error_messages.length ] = error_message;	}}function _CF_onErrorAlert(msgArray){	//build error message string	var errorStr = "";	for(var i=0; i < msgArray.length; i++)	{		errorStr += msgArray[i] +"\n";	}			alert(errorStr);	return false;	}/** * called by the flash controls in an html form, to update the right hidden field */function updateHiddenValue(val, form, name){//alert(form +":" +name +":" +val);	if (form == null || form == "") form = 0;	if (document.forms[form] == null || document.forms[form][name] == null)	{	    return;	}	document.forms[form][name].value = val;}function _CF_hasValue(obj, obj_type, obj_trim){		if (obj_type == "TEXT" || obj_type == "FILE" ||obj_type == "PASSWORD" || obj_type == "CFTEXTAREA" || obj_type == "TEXTAREA" || obj_type == "CFTEXTINPUT")	{		if (obj.value.length == 0) 	  		return false;		else 			if( obj_trim )			{			    //trim whitespace - for backward compatability this is optional				str = obj.value.replace(/^\s+/,'').replace(/\s+$/,'');				if (str.length == 0)				{ return false; }			}	  		return true;	}	else if (obj_type == "SELECT")	{		for (i=0; i < obj.length; i++)		{			if (obj.options[i].selected && obj.options[i].value != "")				return true;		}	   	return false;		}	else if (obj_type == "SINGLE_VALUE_RADIO" || obj_type == "SINGLE_VALUE_CHECKBOX")	{		if (obj.checked)			return true;		else	   		return false;		}	else if (obj_type == "RADIO" || obj_type == "CHECKBOX")	{		if( obj.length == undefined && obj.checked )		{			return true;		}else{			for (i=0; i < obj.length; i++)			{				if (obj[i].checked)					return true;			}		}	   	return false;		}else if( obj_type == "CFTREE"){	    if( obj['value'].length > 0 )	    {	        return true;        }else{            return false;        }	}else{	    return true;	}} function _CF_checkdate(object_value, required) {     //Returns true if value is a date format or is NULL     //otherwise returns false    //trim whitespace before we validate    object_value = object_value.replace(/^\s+/,'').replace(/\s+$/,'');    object_value = object_value = object_value.replace(/{d \'/, '').replace(/'}/, '');    if( required )    {        if( object_value.length == 0 )        {            return false;        }    }else{        if( object_value.length == 0 )        {            return true;        }    }     if (object_value.length == 0)         return true;     //Returns true if value is a date in the mm/dd/yyyy format    isplit = object_value.indexOf('/');	splitchr = "/";	if (isplit == -1)	{		isplit = object_value.indexOf('.');		splitchr = ".";	}	if (isplit == -1)	{		isplit = object_value.indexOf('-');		splitchr = "-";	}	if (isplit == -1 || isplit == object_value.length)		return false;    var element1 = object_value.substring(0, isplit);    // check for yyyy-mm-dd format    if( element1.length == 4 )    {        sYear = object_value.substring(0, isplit);        isplit = object_value.indexOf(splitchr, isplit + 1);        if (isplit == -1 || (isplit + 1 ) == object_value.length)                return false;        sMonth = object_value.substring((sYear.length + 1), isplit);        sDay = object_value.substring(isplit + 1);     }    else    {        sMonth = object_value.substring(0, isplit);        isplit = object_value.indexOf(splitchr, isplit + 1);         if (isplit == -1 || (isplit + 1 ) == object_value.length)                return false;        sDay = object_value.substring((sMonth.length + 1), isplit);        sYear = object_value.substring(isplit + 1);     }         if (!_CF_checkinteger(sMonth)) //check month                 return false;         else         if (!_CF_checkrange(sMonth, 1, 12)) //check month                 return false;         else         if (!_CF_checkinteger(sYear)) //check year                 return false;         else         if( sYear.length != 1 && sYear.length != 2 && sYear.length != 4 )                return false;         else         if (!_CF_checkrange(sYear, 0, 9999)) //check year                 return false;         else         if (!_CF_checkinteger(sDay)) //check day                 return false;         else         if (!_CF_checkday(sYear, sMonth, sDay)) // check day                 return false;         else                 return true; }function _CF_checkeurodate(object_value, required){	//trim whitespace before we validate    object_value = object_value.replace(/^\s+/,'').replace(/\s+$/,'');	object_value = object_value = object_value.replace(/{d \'/, '').replace(/'}/, '');    if( required )    {        if( object_value.length == 0 )        {            return false;        }    }else{        if( object_value.length == 0 )        {            return true;        }    }	isplit = object_value.indexOf('/');	splitchr = "/";	if (isplit == -1)	{		isplit = object_value.indexOf('.');		splitchr = ".";	}			if (isplit == -1)	{		isplit = object_value.indexOf('-');		splitchr = "-";	}	if (isplit == -1 || isplit == object_value.length)		return false;     var element1 = object_value.substring(0, isplit);     // check for yyyy-mm-dd format     if( element1.length == 4 )     {         sYear = object_value.substring(0, isplit);         isplit = object_value.indexOf(splitchr, isplit + 1);         if (isplit == -1 || (isplit + 1 ) == object_value.length)                 return false;         sMonth = object_value.substring((sYear.length + 1), isplit);         sDay = object_value.substring(isplit + 1);     }     else     {         sDay = object_value.substring(0, isplit);         isplit = object_value.indexOf(splitchr, isplit + 1);         if (isplit == -1 || (isplit + 1 ) == object_value.length)                 return false;         sMonth = object_value.substring((sDay.length + 1), isplit);         sYear = object_value.substring(isplit + 1);      }	if (!_CF_checkinteger(sMonth))		return false;	else	if (!_CF_checkrange(sMonth, 1, 12))		return false;	else	if (!_CF_checkinteger(sYear))		return false;	else	if (!_CF_checkrange(sYear, 0, null))		return false;	else	if (!_CF_checkinteger(sDay))		return false;	else	if (!_CF_checkday(sYear, sMonth, sDay))		return false;	else		return true;}function _CF_checkday(checkYear, checkMonth, checkDay){	maxDay = 31;	if (checkMonth == 4 || checkMonth == 6 ||		checkMonth == 9 || checkMonth == 11)		maxDay = 30;	else if (checkMonth == 2)	{		if (checkYear % 4 > 0)			maxDay =28;		else if (checkYear % 100 == 0 && checkYear % 400 > 0)			maxDay = 28;		else			maxDay = 29;	}	return _CF_checkrange(checkDay, 1, maxDay);}function _CF_checkinteger(object_value, required){	//trim whitespace before we validate    object_value = object_value.replace(/^\s+/,'').replace(/\s+$/,'');	//remove numeric noise	object_value = object_value.replace(/[$£¥€,~+]?/g, '');    if( required )    {        if( object_value.length == 0 )        {            return false;        }    }else{        if( object_value.length == 0 )        {            return true;        }    }	var decimal_format = ".";	var check_char = object_value.indexOf(decimal_format);	if (check_char == -1)		return _CF_checknumber(object_value);	else		return false;}function _CF_numberrange(object_value, min_value, max_value, required){    //trim whitespace before we validate    //object_value = object_value.replace(/^\s+/,'').replace(/\s+$/,'');    if( required )    {        if( object_value.length == 0 )        {            return false;        }    }else{        if( object_value.length == 0 )        {            return true;        }    }	if (min_value != null)	{		if (object_value < min_value)			return false;	}	if (max_value != null)	{		if (object_value > max_value)			return false;	}	return true;}function _CF_checknumber(object_value, required){	var start_format = " .+-0123456789";	var number_format = " .0123456789";	var check_char;	var decimal = false;	var trailing_blank = false;	var digits = false;	//trim whitespace before we validate    object_value = object_value.replace(/^\s+/,'').replace(/\s+$/,'');	//remove numeric noise	object_value = object_value.replace(/[$£¥€,~+]?/g, '');    if( required )    {        if( object_value.length == 0 )        {            return false;        }    }else{        if( object_value.length == 0 )        {            return true;        }    }	check_char = start_format.indexOf(object_value.charAt(0));	if (check_char == 1)		decimal = true;	else if (check_char < 1)		return false;	for (var i = 1; i < object_value.length; i++)	{		check_char = number_format.indexOf(object_value.charAt(i));		if (check_char < 0)			return false;		else if (check_char == 1)		{			if (decimal)				return false;			else				decimal = true;		}		else if (check_char == 0)		{			if (decimal || digits)					trailing_blank = true;		}		else if (trailing_blank)			return false;		else			digits = true;	}		return true}function _CF_checkrange(object_value, min_value, max_value, required){    object_value = object_value.replace(/^\s+/,'').replace(/\s+$/,'');    if( required )    {        if( object_value.length == 0 )        {            return false;        }    }else{        if( object_value.length == 0 )        {            return true;        }    }	if (!_CF_checknumber(object_value))		return false;	else		return (_CF_numberrange((eval(object_value)), min_value, max_value));	return true;}function _CF_checktime(object_value, required){    object_value = object_value.replace(/^\s+/,'').replace(/\s+$/,'');    // replace the {t'..'} format around the timestamp if it exists    object_value = object_value = object_value.replace(/{t \'/, '').replace(/'}/, '');    if( required )    {        if( object_value.length == 0 )        {            return false;        }    }else{        if( object_value.length == 0 )        {            return true;        }    }    var result = _CF_checkregex(object_value, /^(([0-1]?[0-9]|[2][1-4]):([0-5]?[0-9])(:[0-5]?[0-9])?).?([AP]M|[AP]m|[ap]m|[ap]M)?$/, required);	return result;}/** * validate that the value is formatted as a telephone correctly * This pattern matches any US Telephone Number. * This regular expression excludes the first number, after the area code,from being 0 or 1; * it also allows an extension to be added where it does not have to be prefixed by 'x'. * * Matches:  * 617.219.2000  * 219-2000 * (617)283-3599 x234 * 1(222)333-4444 * 1 (222) 333-4444 * 222-333-4444 * 1-222-333-4444 * Non-Matches:  * 44-1344-458606 * +44-1344-458606 * +34-91-397-6611 * 7-095-940-2000 * +7-095-940-2000 * +49-(0)-889-748-5516*/function _CF_checkphone(object_value, required){	//trim whitespace before we validate    object_value = object_value.replace(/^\s+/,'').replace(/\s+$/,'');    if( required )    {        if( object_value.length == 0 )        {            return false;        }    }else{        if( object_value.length == 0 )        {            return true;        }    }	if (object_value.length == 0)		return true;			return _CF_checkregex(object_value, /^(((1))?[ ,\-,\.]?([\\(]?([1-9][0-9]{2})[\\)]?))?[ ,\-,\.]?([^0-1]){1}([0-9]){2}[ ,\-,\.]?([0-9]){4}(( )((x){0,1}([0-9]){1,5}){0,1})?$/, required);}/** * validate that the value is formatted as a USA zipcode correctly * * This pattern will match any us zip code * matches: 12345, 12345-1234 */function _CF_checkzip(object_value, required){	//trim whitespace before we validate    object_value = object_value.replace(/^\s+/,'').replace(/\s+$/,'');    if( required )    {        if( object_value.length == 0 )        {            return false;        }    }else{        if( object_value.length == 0 )        {            return true;        }    }	return _CF_checkregex(object_value, /^([0-9]){5,5}$|(([0-9]){5,5}(-| ){1}([0-9]){4,4}$)/, required);}function _CF_checkcreditcard(object_value, required){	//trim whitespace before we validate    object_value = object_value.replace(/^\s+/,'').replace(/\s+$/,'');    if( required )    {        if( object_value.length == 0 )        {            return false;        }    }else{        if( object_value.length == 0 )        {            return true;        }    }	if (object_value.length == 0)		return true;	var white_space = " -";	var creditcard_string="";	var check_char;		for (var i = 0; i < object_value.length; i++)	{		check_char = white_space.indexOf(object_value.charAt(i));		if (check_char < 0)			creditcard_string += object_value.substring(i, (i + 1));	}		if (creditcard_string.length < 13 || creditcard_string.length > 19)		return false;	if (creditcard_string.charAt(0) == "+")		return false;	if (!_CF_checkinteger(creditcard_string))		return false;	var doubledigit = creditcard_string.length % 2 == 1 ? false : true;	var checkdigit = 0;	var tempdigit;	for (var i = 0; i < creditcard_string.length; i++)	{		tempdigit = eval(creditcard_string.charAt(i));		if (doubledigit)		{			tempdigit *= 2;			checkdigit += (tempdigit % 10);			if ((tempdigit / 10) >= 1.0)				checkdigit++;			doubledigit = false;		}		else		{			checkdigit += tempdigit;			doubledigit = true;		}	}		return (checkdigit % 10) == 0 ? true : false;}/** * validate that the value is formatted as a SSN# correctly * * this Pattern that the SSN number matches the different formats. (X = [0-9]) * matches: XXX-XX-XXXX, XXX XX XXXX,  * non-match: XXXXXXXXX */function _CF_checkssn(object_value, required){    //trim whitespace before we validate    object_value = object_value.replace(/^\s+/,'').replace(/\s+$/,'');    if( required )    {        if( object_value.length == 0 )        {            return false;        }    }else{        if( object_value.length == 0 )        {            return true;        }    }	return _CF_checkregex(object_value, /^[0-9]{3}(-| )[0-9]{2}(-| )[0-9]{4}$/, required);}/** * validate that the value is formatted as an email address correctly * * this regex matches the majoriity of all email address. * example matches. * Matches:  [rick.jones@unit.army.mil], [john_doe@foobar.com], [foo99@foo.co.uk]   * Non-Matches:  [find_the_mistake.@foo.org], [.prefix.@some.net] * * _CF_checkURL mailto uses this same email regex - keep in sync. */function _CF_checkEmail(object_value, required){	//trim whitespace before we validate    object_value = object_value.replace(/^\s+/,'').replace(/\s+$/,'');    if( required )    {        if( object_value.length == 0 )        {            return false;        }    }else{        if( object_value.length == 0 )        {            return true;        }    }	//return _CF_checkregex(object_value, /^[\w-]+(?:\.[\w-]+)*@(?:[\w-]+\.)+[a-zA-Z]{2,7}$/);	//return _CF_checkregex(object_value, /^[a-zA-Z_0-9-]+(?:\.[a-zA-Z_0-9-]+)*@(?:[a-zA-Z_0-9-]+\.)+[a-zA-Z]{2,7}$/);	return _CF_checkregex(object_value, /^[a-zA-Z_0-9-'\+~]+(\.[a-zA-Z_0-9-'\+~]+)*@([a-zA-Z_0-9-]+\.)+[a-zA-Z]{2,7}$/, required);}/** * validate that the value is formatted correctly for a http/https/ftp url * This pattern will match http/https/ftp urls. * * Matches: http://www.mm.com/index.cfm *          HTTP://WWW.MM.COM *          http://www.mm.com/index.cfm?userid=1&name=mike+nimer *          http://www.mm.com/index.cfm/userid/1/name/mike+nimer - trick used by cf developers so search engines can parse their sites (search engines ignore query strings) *          ftp://www.mm.com/ *          ftp://uname:pass@www.mm.com/ *          mailto:email@address.com *          news:rec.gardening *          news:rec.gardening *          http://a/ *			file://ftp.yoyodyne.com/pub/files/foobar.txt * Non-Matches: www.yahoo.com *              http:www.mm.com * * _CF_checkEmail - the mailto email check is the same as the _CF_checkEmail regex (keep in sync) */function _CF_checkURL(object_value, required){	//trim whitespace before we validate    object_value = object_value.replace(/^\s+/,'').replace(/\s+$/,'');    if( required )    {        if( object_value.length == 0 )        {            return false;        }    }else{        if( object_value.length == 0 )        {            return true;        }    }	//return _CF_checkregex(object_value.toLowerCase(), /^((http|https|ftp|file)\:\/\/([a-zA-Z0-0]*:[a-zA-Z0-0]*(@))?[a-zA-Z0-9-\.]+(\.[a-zA-Z]{2,3})?(:[a-zA-Z0-9]*)?\/?([a-zA-Z0-9-\._\?\,\'\/\+&amp;%\$#\=~])*)|((mailto)\:[\w-]+(?:\.[\w-]+)*@(?:[\w-]+\.)+[a-zA-Z0-9]{2,7})|((news)\:[a-zA-Z0-9\.]*)$/);	return _CF_checkregex(object_value.toLowerCase(), /^((http|https|ftp|file)\:\/\/([a-zA-Z0-0]*:[a-zA-Z0-0]*(@))?[a-zA-Z0-9-\.]+(\.[a-zA-Z]{2,3})?(:[a-zA-Z0-9]*)?\/?([a-zA-Z0-9-\._\?\,\'\/\+&amp;%\$#\=~])*)|((mailto)\:[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+\.)+[a-zA-Z0-9]{2,7})|((news)\:[a-zA-Z0-9\.]*)$/, required);}/** * A string UUID value is required. A UUID is a string * of length 35 formatted as XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXXXXXX, where X is a * hexadecimal digit (0-9 or A-F). */function _CF_checkUUID(object_value, required){	//trim whitespace before we validate    object_value = object_value.replace(/^\s+/,'').replace(/\s+$/,'');    if( required )    {        if( object_value.length == 0 )        {            return false;        }    }else{        if( object_value.length == 0 )        {            return true;        }    }	return _CF_checkregex(object_value, /[A-Fa-f0-9]{8,8}-[A-Fa-f0-9]{4,4}-[A-Fa-f0-9]{4,4}-[A-Fa-f0-9]{16,16}/, required);}/** * A string GUID value is required. A GUID is a string * of length 36 formatted as XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX, where X is a * hexadecimal digit (0-9 or A-F). */function _CF_checkGUID(object_value, required){	//trim whitespace before we validate    object_value = object_value.replace(/^\s+/,'').replace(/\s+$/,'');    if( required )    {        if( object_value.length == 0 )        {            return false;        }    }else{        if( object_value.length == 0 )        {            return true;        }    }	return _CF_checkregex(object_value, /[A-Fa-f0-9]{8,8}-[A-Fa-f0-9]{4,4}-[A-Fa-f0-9]{4,4}-[A-Fa-f0-9]{4,4}-[A-Fa-f0-9]{12,12}/, required);}/** * checks CF boolean value * matches: true, false, 1, 0, yes, no */function _CF_checkBoolean(object_value, required){	    //trim whitespace before we validate    object_value = object_value.replace(/^\s+/,'').replace(/\s+$/,'');    if( required )    {        if( object_value.length == 0 )        {            return false;        }    }else{        if( object_value.length == 0 )        {            return true;        }    }	if( object_value.toUpperCase() == "TRUE" || object_value.toUpperCase() == "YES" || (_CF_checknumber(object_value) && object_value != "0")   )	{ 		return true; 	}else if( object_value.toUpperCase() == "FALSE" || object_value.toUpperCase() == "NO" || object_value == "0" ){		return true;	}else{		return false;	}}function _CF_setFormParam( strFormName, strParamName, strParamValue ){	var strObjName = "document['" + strFormName + "']['" + strParamName +"']";	var obj = eval( strObjName );	if( obj == undefined )	{	    return false;	}else{	    obj.value = strParamValue;	    return true;    }}function _CF_checkregex(object_value, regexPattern, required){    if( required )    {        if( object_value.length == 0 )        {            return false;        }    }else{        if( object_value.length == 0 )        {            return true;        }    }	return regexPattern.test(object_value);}