function JS_CheckCC(str_num,str_exp_m,str_exp_y) {
	var int_exp_m = parseInt(str_exp_m), int_exp_y = parseInt(str_exp_y);
	var int_y = new Date().getFullYear();
	if (isNaN(int_exp_y) || int_exp_y < int_y || int_exp_y > int_y + 10)
	return {err:true,err_msg:"Invalid Expiration Date"};
	var int_m = new Date().getMonth() + 1;
	if (isNaN(int_exp_m) || int_exp_m < 1 || int_exp_m > 12 || (int_exp_y == int_y && int_exp_m < int_m))
	return {err:true,err_msg:"Invalid Expiration Date"};
	var int_n = parseInt(str_num);
	if (isNaN(int_n)) int_n = 0;
	var str_n = new String(int_n);
	var arr_c = [
		['Visa','4','13,16'],
		['MasterCard','51,52,53,54,55','16'],
		['Discover','6011','16'],
		['American Express','34,37','15']
	];
	var str_t;
	for (var i=0;i<arr_c.length;i++) {
		var r = false;
		var a = arr_c[i][2].split(',');
		for (var j=0;j<a.length;j++) if (str_n.length.toString() == a[j]) r = true;
		if (r) {
			r = false;
			var a = arr_c[i][1].split(',');
			for (var j=0;j<a.length;j++) if (str_n.indexOf(a[j]) == 0) r = true;
		}
		if (r) str_t = arr_c[i][0];
	}
	if (!str_t)
	return {err:true,err_msg:"Invalid Card Number"};
	var fn_luhn = function(n) {
		var r = n.length & 1, s = 0;
		for (var i=0;i<n.length;i++) {
			var d = parseInt(n.charAt(i));
			if (!((i & 1) ^ r)) {
				d *= 2;
				if (d > 9) d -= 9;
			}
			s += d;
		}
		return (s % 10 == 0);
	}
	if (fn_luhn(str_n)) {
		return {err:false,type:str_t};
	} else {
		return {err:true,err_msg:"Invalid Card Number"};
	}
}
