﻿(function (window, undefined) {

	var tm = {
		webMethod: function (options) {
			options = options || {};

			var o = {};
			jQuery.extend(o, webMethodOptions);
			jQuery.extend(o, options);

			o.error = function (xhr, textStatus, errorThrown) {
				if (textStatus == 'timeout') return;

				if (xhr.responseText.indexOf('session expired') > 0) {
					window.onbeforeunload = null;
					window.location = '/logout.aspx?expired';
				} else if (jQuery.isFunction(options.error)) {
					options.error.apply(this, arguments);
				}
			};

			return jQuery.ajax(o);
		}
	},
	webMethodOptions = {
		type: 'POST',
		contentType: 'application/json; charset=utf-8',
		dataType: 'json'
	},
	TRACKER_DATA_KEY = 'tm_tracker__saved',
	TRACKER_CLASS = 'tm_tracker';

	window.tm = tm;

	// extend and override jQuery
	(function ($) {

		$.fn.tracker = function (action) {
			if ($.isFunction(action)) {
				this.each(function () {
					$(this).change(function () {
						var $this = $(this);
						action.call(this, $this.val() != $this.data(TRACKER_DATA_KEY));
					});
				});
			}

			if ($.isFunction(action) || action == 'save') {
				return this.each(function () {
					var $this = $(this);
					$this.addClass(TRACKER_CLASS).data(TRACKER_DATA_KEY, $this.val());
					if (action == 'save') $this.triggerHandler('change');
				});
			} else if (action == 'restore') {
				return this.each(function () {
					var $this = $(this);
					$this.val($this.data(TRACKER_DATA_KEY));
				});
			} else if (action == 'changed') {
				return $(this).filter(function () {
					var $this = $(this);
					return $this.val() != $this.data(TRACKER_DATA_KEY) && $this.data(TRACKER_DATA_KEY) !== undefined;
				});
			} else {
				return this;
			}
		};
		$.tracker = function (action) {
			return $('.' + TRACKER_CLASS).tracker(action);
		}

		$.webMethod = tm.webMethod;

		$(function () {
			$('input:text').keydown(function (event) {
				if (event.keyCode == 13) return false;
			});
		});

		$.checkTextFilter = function (textFilterToCheck) {
			var TEXT_FILTER_REGEXP = /^(([a-zA-Z0-9]+[-]{0,2})*[.]?){0,2}[A-Za-z]{0,4}$/;

			if (TEXT_FILTER_REGEXP.test(jQuery.trim(textFilterToCheck)) && textFilterToCheck.indexOf('-.') == -1)
				return true;
			return false;
		}

	})(jQuery);

})(window);
