var
	sProject = 'tmp',
	sAjaxMethod = 'POST',
	sAjaxError = 'При загрузке данных произошла ошибка.',
	sAjaxUpdateError = 'При отправке данных произошла ошибка.',
	sAjaxUpdateSucces = 'Данные успешно сохранены.'
;

function clearSelect(oSelect){
	oSelect.empty();
	oSelect.append('<option value="">&nbsp;</option>');
	oSelect.val('');
	oSelect.trigger('change');
}

function fillSelect(oSelect, oData){
	for(var sKey in oData){
		oSelect.append(
			'<option value="'
			+ sKey +
			'">'
			+ oData[sKey] +
			'</option>'
		);
	}
	oSelect.trigger('change');
}

function loadItems(aFields, oData, sPath, fCallback){
	for(var i = 0, n = aFields.length; i < n; i++){
		aFields[i].parent().addClass('waiting');
	}

	oData['pmp_project'] = sProject;

	var oForm = aFields[0].parents('form.zf');
	lockForm(oForm);

	$.ajax({
		type: sAjaxMethod,
		url: sPath,
		data: oData,
		dataType: 'json',
		cache : false,

		success : function(oData){
			unlockForm(oForm);
			for(var i = 0, n = aFields.length; i < n; i++){
				aFields[i].parent().removeClass('waiting');
			}
			if(fCallback){
				fCallback(oData);
			}
			if(window.initSessionTimer) initSessionTimer();
		},

		error : function(){
			unlockForm(oForm);
			for(var i = 0, n = aFields.length; i < n; i++){
				aFields[i].parent().removeClass('waiting');
			}
		}
	});
}

function loadItemsWF(oForm, sPath, fSuccessCallback){
	$.ajax({
			type: sAjaxMethod,
			url: sPath,
			data: oData,
			dataType: 'json',
			cache : false,

			success : function(oData){
				if(oData.result.redirect){
					document.location.href = oData.result.redirectUrl;
				} else {
					unlockForm(oForm);

					if(oData.result.success){
						oForm.removeClass('zf-submitted');

						if(fSuccessCallback){
							fSuccessCallback(oForm, oData);
						}

						showOKMessage(
							oForm,
							((oData.result.successText) ? oData.result.successText : sAjaxUpdateSucces)
						);

					} else {
						if(fErrorCallback){
							fErrorCallback(oForm);
						}

						showErrorMessage(
							oForm,
							((oData.result.errorText) ? oData.result.errorText : sAjaxUpdateError)
						);
					}

					if(window.initSessionTimer) initSessionTimer();
				}
			},

			error : function(){
				unlockForm(oForm);

				if(fErrorCallback){
					fErrorCallback(oForm);
				}

				showErrorMessage(
					oForm,
					sAjaxUpdateError
				);

				return false;
			}

		});

		return false;
}

function initForm(oForm){
	oForm.find('input:submit').click(function(){
		if(checkForm(oForm)){
			$(this).removeClass('hover');
			oForm[0].submit();
		}
	});
}

function initAjaxForm(oForm, sPath, fSuccessCallback, fErrorCallback){




	ZForms.buildForm(oForm[0]);



	oForm.find('input:submit').click(function(){
		if(checkForm(oForm)){
			$(this).removeClass('hover');



			submitAjaxForm(
				oForm,
				sPath,
				fSuccessCallback,
				fErrorCallback
			);
		}
	});
}

function initAjaxFormSimple(oForm, sPath, fSuccessCallback, fErrorCallback){
	ZForms.buildForm(oForm[0]);
	oForm.find('input:submit').click(function(){
		if(checkForm(oForm)){
			$(this).removeClass('hover');
			submitAjaxFormSimple(
				oForm,
				sPath,
				fSuccessCallback,
				fErrorCallback
			);
		}
	});
}


function initSpecAjaxFormSimple(oForm, sPath, fSuccessCallback, fErrorCallback){
	oForm.find('input:submit').click(function(){
		if(checkForm(oForm)){
			$(this).removeClass('hover');
			submitAjaxFormSimple(
				oForm,
				sPath,
				fSuccessCallback,
				fErrorCallback
			);
		}
	});
}




function initSpecAjaxForm(oForm, sPath, fSuccessCallback, fErrorCallback, fBeforeCallback){
	oForm.find('input:submit').click(function(){
		if(checkForm(oForm)){
			$(this).removeClass('hover');
			submitAjaxForm(
				oForm,
				sPath,
				fSuccessCallback,
				fErrorCallback,
                fBeforeCallback
			);
		}
	});
}

function submitAjaxForm(oForm, sPath, fSuccessCallback, fErrorCallback, fBeforeCallback){


	if(oForm.find('input:file').length){

		submitFormWithFiles(oForm, sPath, fSuccessCallback, fErrorCallback);

	} else {

		var oData = oForm.find(':input').filter(':not(.zf-placeholder)').serializeArray();

		lockForm(oForm);
        oForm.find('.load_ind').fadeIn();
		$.ajax({
			type: sAjaxMethod,
			url: sPath,
			data: oData,
			dataType: 'json',
			cache : false,
              beforeSend: function( xhr ) {
                if(fBeforeCallback){

                    fBeforeCallback(xhr, oForm);

                }
              },
			success : function(oData){
				if(oData.result.redirect){
					document.location.href = oData.result.redirectUrl;
				} else {
                    oForm.find('.load_ind').fadeOut();
					unlockForm(oForm);

					if(oData.result.success){
						oForm.removeClass('zf-submitted');

						if(fSuccessCallback){
							fSuccessCallback(oForm, oData);
						}

						showOKMessage(
							oForm,
							((oData.result.successText) ? oData.result.successText : sAjaxUpdateSucces)
						);

					} else {
						if(fErrorCallback){
							fErrorCallback(oForm);
						}

						showErrorMessage(
							oForm,
							((oData.result.errorText) ? oData.result.errorText : sAjaxUpdateError)
						);
					}



					if(window.initSessionTimer) initSessionTimer();
				}
			},

			error : function(){
                oForm.find('.load_ind').fadeOut();
				unlockForm(oForm);

				if(fErrorCallback){
					fErrorCallback(oForm);
				}

				showErrorMessage(
					oForm,
					sAjaxUpdateError
				);



				return false;
			}

		});

		return false;
	}
	return false;
}



function submitAjaxFormSimple(oForm, sPath, fSuccessCallback, fBeforeCallback){
	if(oForm.find('input:file').length){

		submitFormWithFiles(oForm, sPath, fSuccessCallback, fErrorCallback);

	} else {

		var oData = oForm.find(':input').filter(':not(.zf-placeholder)').serializeArray();

		lockForm(oForm);
        oForm.find('.load_ind').fadeIn();
		$.ajax({
			type: sAjaxMethod,
			url: sPath,
			data: oData,
            scriptCharset : 'UTF-8' ,
			cache : false,
              beforeSend: function( xhr ) {
                if(fBeforeCallback){

                    fBeforeCallback(xhr, oForm);


                }
              },
			success : function(oData){
                oForm.find('.load_ind').fadeOut();
                unlockForm(oForm);


                oForm.removeClass('zf-submitted');

                if(fSuccessCallback){
                    fSuccessCallback(oForm, oData);
                }


                if(window.initSessionTimer) initSessionTimer();
			},

			error : function(){
                oForm.find('.load_ind').fadeOut();
				unlockForm(oForm);

				if(fErrorCallback){
					fErrorCallback(oForm);
				}

				showErrorMessage(
					oForm,
					sAjaxUpdateError
				);

				return false;
			}

		});

		return false;
	}
	return false;
}


function submitFormWithFiles(oForm, sPath, fSuccessCallback, fErrorCallback){
	var t = new Date().getTime();
	var sFrameID = 'upload_frame_' + t;
	var oFrame = $('<iframe id="' + sFrameID + '" name="' + sFrameID + '" src="javascript:;" style="display:none">').appendTo(document.body);

	oForm.attr('target', sFrameID);
	oForm.attr('action', sPath);

    oForm.find('.load_ind').fadeIn();
	$(oFrame).load(function(){

		var oData = oFrame.contents().find('*:last').html();
		try{ oData = eval('(' + oData + ')'); } catch(e) { oData = false; }

		if(oData){
			if(oData.result.redirect){
				document.location.href = oData.result.redirectUrl;
			} else {
                oForm.find('.load_ind').fadeOut();
				unlockForm(oForm);

				if(oData.result.success){
					oForm.removeClass('zf-submitted');

					if(fSuccessCallback){
						fSuccessCallback(oForm, oData);
					}

					showOKMessage(
						oForm,
						((oData.result.successText) ? oData.result.successText : sAjaxUpdateSucces)
					);
				} else {
					if(fErrorCallback){
						fErrorCallback(oForm);
					}

					showErrorMessage(
						oForm,
						((oData.result.errorText) ? oData.result.errorText : sAjaxUpdateError)
					);
				}
			}
		} else {
            oForm.find('.load_ind').fadeOut();
			unlockForm(oForm);

			if(fErrorCallback){
				fErrorCallback(oForm);
			}

			showErrorMessage(
				oForm,
				sAjaxUpdateError
			);
		}

	});

	oForm[0].submit();

	lockForm(oForm);
}


function checkForm(oForm){
	bResult = (oForm.find('dl.zf-required,dl.zf-invalid,fieldset.zf-required,fieldset.zf-invalid').length == 0);
	return bResult;
}

function unlockForm(oForm){
	oForm.removeClass('zf-disabled');
	oForm.find('dl,input,.zf').attr('disabled', false).removeClass('zf-disabled');
	oForm.find('.zf-always-disabled')
		.removeClass('zf-always-disabled')
		.addClass('zf-disabled')
		.find('input,select').attr('disabled', true)
	;
	oForm.find('.buttons').removeClass('waiting');
}

function lockForm(oForm){
	oForm.addClass('zf-disabled');
	oForm.find('.zf-disabled').addClass('zf-always-disabled');
	oForm.find('dl,input,.zf').addClass('zf-disabled').attr('disabled', true);
	oForm.find('.buttons').addClass('waiting');
}

function showOKMessage(oForm, sText){
	hideMessage(oForm.find('.zf-result .zf-error'));
	showMessage(oForm.find('.zf-result .zf-ok'), sText);
}

function showErrorMessage(oForm, sText){
	hideMessage(oForm.find('.zf-result .zf-ok'));
	showMessage(oForm.find('.zf-result .zf-error'), sText);
}

function showMessage(oLabel, sText){
	hideMessage(oLabel);
	oLabel.html(sText);
//	roundMessage(oLabel);
	oLabel.css('display', 'block');
	oLabel.oneTime(6000, function(){
		oLabel.fadeOut(500, function(){ $(this).css('display', 'none'); });
	});
}

function hideMessage(oLabel){
	oLabel.stopTime();
	oLabel.stop();
	oLabel.css('display', 'none');
	oLabel.html('');
}

function roundMessage(oLabel){
	//oLabel.prepend('<div class="tl"></div><div class="tr"></div><div class="bl"></div><div class="br"></div>');
}

function phoneCheck(oWidget) {
	var aChildren = oWidget.oParent.getChildren();
	oVal1 = aChildren[0].getValue(),
	oVal2 = aChildren[1].getValue();
	return (oVal2.isEmpty() && oVal1.isEmpty()) || (oVal1.match(/^\d{3}$/) && oVal2.match(/^\d{7}$/));
}

function birthdayCheck(oWidget) {
	var bResult = true;

	var aWidgets = oWidget.getChildren();

	var aDate = [
		parseInt(aWidgets[0].getValue().get()),
		parseInt(aWidgets[1].getValue().get()),
		parseInt(aWidgets[2].getValue().get())
	];

	if(aDate[0] && aDate[1] && aDate[2]){

		var dtBirthDate = new Date(aDate[2], aDate[1] - 1, aDate[0]);

		var bCorrectDate = (
			(aDate[2] - dtBirthDate.getFullYear()) == 0 &&
			(aDate[1] - dtBirthDate.getMonth()) == 1 &&
			(aDate[0] - dtBirthDate.getDate()) == 0
		)

		var bMore18 = (dtBirthDate < dtMax);

		if(bMore18){
			oWidget.removeClass('zf-invalid-less18');
		} else {
			oWidget.addClass('zf-invalid-less18');
		}

		bResult = (bCorrectDate && bMore18);
	}

	return bResult;
}


function initPager(oBlock, sPath){
	var oPager = oBlock.find('.pager');

	var oForm = $('<form action="" name="pagerForm" method="post"><input type="hidden" name="page"><div class="zf-result with-clear"><div class="zf-error"></div></div></form>');
	oPager.first().after(oForm);

	oPager.find('.link').click(function(){
		var iPage = parseInt($(this).attr('title'));
		if(iPage && $(this).hasClass('link')){
			oPager.find('.link')
				.addClass('gray')
				.removeClass('link')
			;
			$.ajax({
				type: sAjaxMethod,
				url: sPath,
				data: { 'page' : iPage },
				dataType: 'json',
				cache : false,
				success : function(oData){
					if(oData.result.success){
						oBlock.html(oData.result.users_list);
						initHints(oBlock);
						initPager(oBlock, sPath);
					} else {
						oPager.find('.gray')
							.addClass('link')
							.removeClass('gray')
						;
						showErrorMessage(
							oForm,
							((oData.result.errorText) ? oData.result.errorText : sAjaxUpdateError)
						);
					}
					if(window.initSessionTimer) initSessionTimer();
				},
				error : function(oForm){
					oPager.find('.gray')
						.addClass('link')
						.removeClass('gray')
					;
					showErrorMessage(
						oForm,
						sAjaxUpdateError
					);
				}
			});
		}
	});
}

function checkPassForgot(oWidget, oDependence) {

	return true;
}
