/////////////////////////////////////////////////////////////////////
// Helper for validate()

if (typeof(array_errors) != "object") {
	var array_errors = [];
}

/////////////////////////////////////////////////////////////////////
// function name: validate(_id, _val, _class_style)

function validate(_id, _val, _class_style) {
    warning(_id, 0, 0, 0);
    if (!_class_style || !_id) {
        return false;
    }
	if(_val === undefined) { _val = ""; }
	
	var _class = _class_style.split(" ");
	for (var i = 0; i < _class.length; i++) {
		if (_class[i].substr(0, 1) === "v") {
			var type = _class[i].substr(1, 2);
			_class_style = _class[i];
			break;
		}
	}
	var len = [];
    if (_class_style.length > 3) {
        len = _class_style.replace('v' + type, '').split('|');
    } else {
		len[0] = 0;
	}
    if (typeof(array_errors) != "object") {
        alert("Array: " + typeof(array_errors));
        return false;
    }
    array_errors.Add(_id);
    switch (type) {
		
    case 'TX':
        // Text input
        if (_val.length < len[0]) {
            warning(_id, 'Minimum length is ' + len[0], 1);
            break;
        }
        if (_val.length > len[1]) {
            warning(_id, 'Maximum length is ' + len[1], 1);
            break;
        }
        warning(_id, 0, 0, 0);
        array_errors.RemoveAll(_id);
        break;
		
    case 'ST':
        // States
        $('#' + _id).val($('#' + _id).val().toUpperCase());
        if ($('#' + _id.substr(0, 1) + 'Country').val() == 'us') {
            if (_val.length != 2) {
                warning(_id, 'Please use abreviation. California -> CA', 1);
                break;
            }
            if (_val.match(/[0-9]/)) {
                warning(_id, 'No numbers, abreviation only. CA -> California', 1);
                break;
            }
        } else {
            if (_val.length < 2) {
                warning(_id, 'Please use state abreviation.', 1);
                break;
            }
        }
        warning(_id, 0, 0, 0);
        array_errors.RemoveAll(_id);
        break;
		
    case 'PC':
        // Postal Code
        $('#' + _id).val($('#' + _id).val().toUpperCase());
        if ($('#' + _id.substr(0, 1) + 'Country').val() == 'us') {
            if (_val.length != 5) {
                warning(_id, 'US zip codes must be 5 digits', 1);
                break;
            }
            if (!_val.match(/[0-9]/)) {
                warning(_id, 'Numbers only, 5 digits.', 1);
                break;
            }
        } else {
            if (_val.length < 2) {
                warning(_id, 'Please provide a postal code.', 1);
                break;
            }
        }
        warning(_id, 0, 0, 0);
        array_errors.RemoveAll(_id);
        break;
		
    case 'EM':
        // Email
        var pattern = new RegExp(/([\w-\.]+)@((?:[\w]+\.)+)([a-zA-Z]{2,4})/gi);
        if (!pattern.test(_val)) {
            warning(_id, 'This is not a valid email address.', 1);
            break;
        }
        if (len[0] > 2) {
            $.get(_class_style[2] + "&email=" + _val + location.search.replace('?', '&'), function (data) {
                if (parseInt(data)) {
                    warning(_id, 'This is email is already in use.', 1);
                } else {
                    warning(_id, 0, 0, 0);
                    array_errors.RemoveAll(_id);
                }
            },
            '', 'text');
        }
        warning(_id, 0, 0, 0);
        array_errors.RemoveAll(_id);
        break;
		
    case 'E2':
        // Email should have a match
        var pattern = new RegExp(/([\w-\.]+)@((?:[\w]+\.)+)([a-zA-Z]{2,4})/gi);
        if (!pattern.test(_val)) {
            warning(_id, 'This is not a valid email address.', 1);
            break;
        }
        if (len[0] > 2) {
            $.get(_class_style[2] + "&email=" + _val + location.search.replace('?', '&'), function (data) {
                if (!parseInt(data)) {
                    warning(_id, 'We d_id not find a match.', 1);
                } else {
                    warning(_id, 0, 0, 0);
                    array_errors.RemoveAll(_id);
                }
            },
            '', 'text');
        }
        warning(_id, 0, 0, 0);
        array_errors.RemoveAll(_id);
        break;
		
    case 'PH':
        // Phone number
        if (_val) {
            _val = _val.replace(/\D/gi, '');
            $('#' + _id).val(_val);
				if ( len[0].toString() === "us" ) {
					if (_val.substr(0,1).toString() === "1" ) { 
						_val = _val.substr(1, _val.length); 
						$('#' + _id).val(_val);
					}
					if (_val.length === 10) {
						_val = "("+ _val.substr(0,3) +") "+ _val.substr(3,3) +"-"+ _val.substr(6,4);
						$('#' + _id).val(_val);
					} else {
						warning(_id, "The phone number is too short", 1);
						 break;
					}
				} else {
				// INTERNATIONAL
				}
        }
        warning(_id, 0, 0, 0);
		array_errors.RemoveAll(_id);
        break;
		
    case 'PW':
        // Password
        if (_val) {
            if (_val.length < len[0]) {
                warning(_id, 'Minimum password length is ' + len[0], 1);
                break;
            }
            if (_val.length > len[1]) {
                warning(_id, 'Maximum password length is ' + len[1], 1);
                break;
            }
        }
        warning(_id, 0, 0, 0);
        array_errors.RemoveAll(_id);
        break;
		
    case 'NM':
        // Number
        _val = _val.toString().replace(/\D/gi, '');
        $('#' + _id).val(_val);
        if (_val.length > 0) {
            if (_val.length < len[0]) {
                warning(_id, 'Minimum digits are ' + len[0], 1);
                break;
            }
            if (_val.length > len[1]) {
                warning(_id, 'Maximum digits are ' + len[1], 1);
                break;
            }
        } else {
			warning(_id, 'Minimum digits are ' + len[0], 1);
			break;
		}
        warning(_id, 0, 0, 0);
        array_errors.RemoveAll(_id);
        break;
		
    case 'CR':
        // Currency, alows "."
        _val = _val.toString().replace(/[^0-9\.]/gi, '');
        $('#' + _id).val(_val);
        if (_val.length > 0) {
            if (_val.length < len[0]) {
                warning(_id, 'Minimum digits are ' + len[0], 1);
                break;
            }
            if (_val.length > len[1]) {
                warning(_id, 'Maximum digits are ' + len[1], 1);
                break;
            }
        } else {
			warning(_id, 'Minimum digits are ' + len[0], 1);
			break;
		}
        warning(_id, 0, 0, 0);
        array_errors.RemoveAll(_id);
        break;		
		
		
		
    case 'PD':
        // Pulldown		
        if (nInt(_val) < 1) {
			warning(_id, 'Please make a selection', 1);
			break;
        }
        warning(_id, 0, 0, 0);
        array_errors.RemoveAll(_id);			
		break;
	
    case 'HM': 
        // Hours Minutes Seconds
		x = _val.split(":");
		if (x.length < 3) { 
			_val.toString().replace(/\D/gi, '');
			$('#' + _id).val( sec2hms(_val) );
		} else {
			x[0] = "00"+nInt(x[0]);
			x[1] = "00"+nInt(x[1]);
			x[2] = "00"+nInt(x[2]);
			
			$('#' + _id).val( x[0].substr(x[0].length-2, 2) +":"+ x[1].substr(x[1].length-2, 2) +":"+ x[2].substr(x[2].length-2, 2) );
		}
		if (len[0]) {
			if ( nInt($('#' + _id).val()) < nInt(len[0]) ) {
				warning(_id, 'Minimum time duration '+ len[0], 1);
				break;				
			}
		}
        warning(_id, 0, 0, 0);
        array_errors.RemoveAll(_id);			
		break;
	
	
    case 'CB': 
        // Checkbox
		if (!_val.length) { 
			warning(_id, 'Checkbox must be checked to continue', 1);
			break;
		}
        warning(_id, 0, 0, 0);
        array_errors.RemoveAll(_id);			
		break;
		
		
    case 'RB': 
        // Radio Button
		if (!_val.length) { 
			warning(_id, 'A radio button must be choosen to continue', 1);
			break;
		}
        warning(_id, 0, 0, 0);
        array_errors.RemoveAll(_id);			
		break;	
		
	
	
    case 'PR':
        // Price
        _val = _val.toString().replace(/[^\.|\d]/gi, '');
        $('#' + _id).val(_val);
        if (_val.length > 0) {
            if (_val.length < len[0]) {
                warning(_id, 'Minimum price is ' + len[0], 1);
                break;
            }
            if (_val.length > len[1]) {
                warning(_id, 'Maximum price is ' + len[1], 1);
                break;
            }
        } else {
			warning(_id, 'Minimum price is ' + len[0], 1);
			break;
		}
        warning(_id, 0, 0, 0);
        array_errors.RemoveAll(_id);
        break;

    case 'DT':
        // Date
        _val = _val.toString().replace(/[^\/|-|\d]/gi, '');
        $('#' + _id).val(_val);
        if (_val) {
			var _d = _val.toString().match(/\//);
			var _d2 = _val.toString().match(/-/);			
			if (!_d && !_d2) {
				warning(_id, 'Date format MM/DD/YYYY', 1);
				break;
			}
			
        } else {
			warning(_id, 'Date is needed', 1);
			break;
		}
        warning(_id, 0, 0, 0);
        array_errors.RemoveAll(_id);
        break

	

	}
	
}

/////////////////////////////////////////////////////////////////////
// function name: warning(_id, _msg, _bool_remove, _bool_good)

function warning(_id, _msg, _bool_remove, _bool_good) {
    if (_bool_remove) {
        var css = "WarningX";
        if (_bool_good) {
            css = "Success";
        }
        var div = '<div id="WARNING_' + _id + '" class="displayInline ui-state-error ui-corner-all ' + css + '"><span style="float: left; margin-right: 0.3em; margin-left:0.5em;" class="ui-icon ui-icon-alert"></span><span class="padL10 padR10" style="font-weight:normal; font-size:12px;" >' + _msg + '</span></div>';
	  $("#WARNING_" + _id).remove();
        $('#' + _id).parent('div').append(div);
    } else {
        $("#WARNING_" + _id).remove();
    }
}
