﻿//include common.js
//document.write("<script src=\"" + "common.js" + "\" type=\"text/javascript\"></script>");

(function ($) {
	$.format = function (format) {
	// TODO: REGEXP
		var args = Array.prototype.slice.call(arguments, 1);
		var result = format;
		if (format && args.length) {
			for (var i = 0; i < args.length; i++) {
				while (result.indexOf("{" + i + "}") > -1) {
					result = result.replace("{" + i + "}", args[i]);
				}
				//result = result.replace(eval("/{{" + i + "}}/g"), args[i]);				
			}
			return result;
		}
		else {
			return "";
		}	
	}

	// защита от дурака (проверка Полей на валидность)
	// params -- Полеы для проверки
	// options -- опции проверки (проверять/не проверять)
	$.goofDefence = function (params, options) {

		var errorObj = {};
		if (!params) {
			return {common: "Поля не заполнены!"};
		}

		/* ниже описан формат option
		option = {
			empty : "",
			length : {max: 0, min: 0} || 0,
			format : regexp,
			valid: {
				fn: function(param) {},
				errorMsg: ""
			},			
			name : "",
			elem : $elem,
			prior: 0
		}
		*/
		
		$.each(options, function (i, e) {
			var param = params[i];
			var opt = e;
			var errorFound = false;
			var error = "";
			// if (e.elem) {
				// errorObj[i].elem = elem;
			// }
			if (param !== undefined) {
				// проверка параметра на пустоту
				if (opt.empty && !param) {
					error = "Поле '" + opt.name + "' пусто";
					errorFound = true;					
				}
				// проверка параметра на длину
				if (!errorFound && opt.length) {
					// opt.length по умолчанию проверяет на превышение лимита
					var max = opt.length.max ? opt.length.max : opt.length;
					var min = opt.length.min ? opt.length.min : -1;
					error = new Array();
					if (param.length > max) {
						error.push("Длина поля '" + opt.name + "' превышает " + opt.length + " символов");
						errorFound = true;
					}
					if (param.length < min) {
						error.push("Длина поля '" + opt.name + "' должна быть более " + opt.length + " символов");
						errorFound = true;
					}				
					if (!error.length) {
						delete error;
					}
				}
				// проверка соответствия параметра формату
				if (!errorFound && opt.format && !opt.format.test(param)) {
					error = "Поле '" + opt.name + "' не соответствует формату\n";
					errorFound = true;
				}
				// кастомная валидация
				if (!errorFound && opt.valid) {					
					if (!opt.valid.fn.call(opt.elem ? opt.elem : null, param)) {
						error = opt.valid.errorMsg;
						errorFound = true;				
					}
				}
			}
			if (errorFound) {
				errorObj[i] = {
					elem: opt.elem ? opt.elem : null,
					error: error
				};
				errorObj[i].prior = opt.prior ? opt.prior : -1;
			}
		});
		return errorObj;
	}
})(jQuery);

