/**
 * Plugin for filter input data
 *
 * @author Elena Levadnaya
 * @since sprint11
 */

(function($){

	var filters = {
		'filterText_6': function (event) {
			var keyCode = (event.charCode) ? event.charCode : event.keyCode;
			if (keyCode == 8) {
				return true;
			}
			return event.target.value.length < 6;
		},

		'filterInteger_4': function (event) {
			var isSystemCode = 0 == event.charCode && event.keyCode != 0;
			var value = event.target.value;
			var keyCode = (event.charCode) ? event.charCode : event.keyCode;
			if (keyCode == 8) {
				return true;
			}
			if (value.length < 4) {
				return ((keyCode == 0) || (keyCode == 8) || (keyCode == 9) || (keyCode > 47 && keyCode < 58) || isSystemCode);
			}
			return false;
		},

		'filterInteger': function (event) {
			var isSystemCode = 0 == event.charCode && event.keyCode != 0;
			var keyCode = (event.charCode) ? event.charCode : event.keyCode;
			return result = (((event.keyCode == 46) && !($.browser.msie)) ||
				(keyCode == 63275) || (keyCode == 0) ||
				(keyCode == 8) || (keyCode == 9) || isSystemCode || (keyCode > 47 && keyCode < 58));
		},

		'filterVolume': function (event) {
			var isSystemCode = 0 == event.charCode && event.keyCode != 0;
			var keyCode = (event.charCode) ? event.charCode : event.keyCode;
			var target = event.target;
			if (target.value.length == 1) {
				if (keyCode == 46) {
					target.value = target.value + ',';
					return false;
				}
				return (keyCode == 44 || keyCode == 8 || keyCode == 46 || isSystemCode);
			} else if (target.value.length < 3) {
				return ( (keyCode == 0) || (keyCode == 8) || (keyCode == 9) || (keyCode > 47 && keyCode < 58) || isSystemCode);
			} else {
				return ( (keyCode == 0) || (keyCode == 8) || (keyCode == 9) || isSystemCode);
			}
		},

		'filterFloat4_2': function (event) {
			var isSystemCode = 0 == event.charCode && event.keyCode != 0;
			var value = event.target.value;
			var pos = value.length;
			var keyCode = (event.charCode) ? event.charCode : event.keyCode;
			if (keyCode == 8) {
				return true;
			}
			if (pos < 1) {
				return ((keyCode == 0) || (keyCode == 8) || (keyCode == 9) || (keyCode > 47 && keyCode < 58) || isSystemCode);
			}

			if (pos < 4 && value.indexOf(",") == -1) {
				return ((keyCode == 0) || (keyCode == 8) || (keyCode == 9) || (keyCode > 47 && keyCode < 58) ||
					(keyCode == 44) || isSystemCode);
			}

			if (pos == 4 && value.indexOf(",") == -1) {
				return (keyCode == 44);
			}

			if (value.indexOf(",") != -1 && pos < value.indexOf(",") + 3) {
				return ((keyCode == 0) || (keyCode == 8) || (keyCode == 9) || (keyCode > 47 && keyCode < 58) || isSystemCode);
			}

			return false;
		},

		'filterInteger_2': function (event) {
			var isSystemCode = 0 == event.charCode && event.keyCode != 0;
			var pos = event.target.value.length;
			var keyCode = (event.charCode) ? event.charCode : event.keyCode;
			if (keyCode == 8) {
				return true;
			}
			if (pos == 0 || pos < 2) {
				return ((keyCode == 0) || (keyCode == 8) || (keyCode == 9) || (keyCode > 48 && keyCode < 58) || isSystemCode);
			}
			return false;
		},

		'filterInteger_1_9': function (event) {
			var isSystemCode = 0 == event.charCode && event.keyCode != 0;
			var pos = event.target.value.length;
			var keyCode = (event.charCode) ? event.charCode : event.keyCode;
			return pos == 0 && ( keyCode > 48 && keyCode < 58 ) || keyCode == 8 || keyCode == 9  || isSystemCode;
		},

		'filterPhone': function (event) {
			var isSystemCode = 0 == event.charCode && event.keyCode != 0;
			var keyCode = (event.charCode) ? event.charCode : event.keyCode;
			return ((keyCode == 40) || (keyCode == 63275) || (keyCode == 41) || (keyCode == 43) || (keyCode == 45) ||
				(keyCode == 46) || (keyCode == 0) || (keyCode == 8) || (keyCode == 9) || (keyCode == 37) ||
				(keyCode == 39) || (keyCode > 47 && keyCode < 58) || isSystemCode);
		},

		'filterIcq': function (event) {
			var isSystemCode = 0 == event.charCode && event.keyCode != 0;
			var keyCode = (event.charCode) ? event.charCode : event.keyCode;
			return ((keyCode == 45) || (keyCode == 63275) || (keyCode == 46) || (keyCode == 0) || (keyCode == 8) ||
				(keyCode == 9) || (keyCode == 37) || (keyCode == 39) || (keyCode > 47 && keyCode < 58) || isSystemCode);
		}

	};

	/**
	 * Plugin creator
	 */
	$.fn.dataFilter = function() {
		return this.each(function() {
			$(this).keypress(function(event) {
				var filter = $(this).attr('data-filter');
				if(typeof filters[filter] === 'function') {
					var res = filters[filter](event);
					if (!res) {
						event.stopPropagation();
					}
					return res;
				}
			});
		});
	};
})(jQuery);

