/**
 * Перед отправкой данных проверяем корректность номера
 * 
 * @param oForm
 * @param sWarningText
 * @return false- возвращаем всегда false, нам не нужно, чтобы форма сработала
 */
function bPfBeforeSubmit(oForm, sWarningText) {
	if (oPfUtils.bGoodAbonentNumber(oForm.sMSISDN.value, sWarningText,
			oForm.sMask.value)) {
		var sUrl = oForm.action + '?d=' + oForm.d.value + '&iItemId='
				+ oForm.iItemId.value + '&sMSISDN=' + oForm.sMSISDN.value
				+ '&reload=' + oForm.bDontClose.value;
		oPfUtils.nAjax(sUrl, nPfAfterSubmit);
	}
	return false;

}
/**
 * После отправки данных смотрим результат. Или покажем ошибку, или закроем
 * форму.
 * 
 * @param aData
 * @return
 */
function nPfAfterSubmit(aData) {
	if (aData.error) {
		alert(aData.result_text);
	} else if (aData.reload) {
		window.location.reload();
	} else {
		window.close();
	}
}

/**
 * набор сервисных функций и данных
 */
var oPfUtils = new function() {
	// ID скрипта отсылающего данные
	this.sAjaxScriptId = 'pf_ajax_script';
	// функция, которая обработает результат запроса
	this.fAjaxCallback = null;

	/**
	 * Номер абонента должен быть по маске sregexp
	 */
	this.bGoodAbonentNumber = function(sNumber, sWarningText, sregexp) {
		regexp = new RegExp(sregexp, 'i');
		if (!(regexp.test(sNumber.replace(/[^+\d]/g, '')))) {
			alert(sWarningText);
			return false;
		} else {
			return true;
		}
	}
	/**
	 * Дернем sUrl. В ответ ожидаются JSON данные, которые передадим в fCallback
	 */
	this.nAjax = function(sUrl, fCallback) {
		if (document.getElementById(this.sAjaxScriptId) == null) {
			sUrl += '&callback=oPfUtils.jcb';
			this.fAjaxCallback = fCallback;
			var oScript = document.createElement('script');
			oScript.setAttribute("type", "text/javascript");
			oScript.setAttribute("src", sUrl);
			oScript.setAttribute("id", this.sAjaxScriptId);
			document.getElementsByTagName('head')[0].appendChild(oScript);
		}
	}
	/**
	 * Удаляем сервисный тег script и вызываем CallBack функцию
	 */
	this.nJsonCallback = function(aData) {
		this.fAjaxCallback(aData);
		this.fAjaxCallback = null;
		// удаляю oScript после того, как выполнится CallBack функция, чтобы не
		// было параллельных процессов
		var oScript = document.getElementById(this.sAjaxScriptId);
		if (oScript != null) {
			document.getElementsByTagName('head')[0].removeChild(oScript);
		}
	}
	// короткое имя
	this.jcb = this.nJsonCallback;
}
