/*

 * 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)

				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);

}



