﻿function AjaxValidate(params) {

    params['action'] = 'validate';
    
    var url = GetAutoCompleteRequestUrl(params);
    var currentTime = new Date();
    $("#" + params.fn + " #" + params.fen + "_ajax_validating").show();
    $.ajax({
        type: "POST",
        url: url,
        dataType: "json",
        cache: false,
        success: function(data) { AjaxValidationCompleted(params.fn, params.fen, data, currentTime); if (params.AjaxValidationCompletedCallBack) params.AjaxValidationCompletedCallBack(data)},
        error: function() { AjaxValidationFailed(params.fn, params.fen, currentTime); }
    });
}

function GetAutoCompleteRequestUrl(params) 
{
   return "/_modules/form/form.ashx?"+BuildParams(params);
}

function BuildParams(params)
{
   var result = "";
    
   var i = 0;
   for(field in params) 
   {
       if (typeof params[field] == 'function') continue;
   
       if (i!=0)
       {
        result += '&';
       }else
       {
        i++;
       }
       
       result += field + '=' + params[field];
   }
   
   return result;
}


function AjaxValidationFailed(formName, formElementName, requestStartTime) {
    alert("Произошла ошибка на вызываемой странице.");
    HideAjaxValidatingIndicator(formName, formElementName, requestStartTime);
}

function HideAjaxValidatingIndicator(formName, formElementName, requestStartTime) {
    var currentTime = new Date();
    var requestDuration = currentTime.valueOf() - requestStartTime.valueOf();
    var hideValidatingIndicatorTimeout = 0;

    var timeout = 500;
    if (requestDuration < timeout) {
        hideValidatingIndicatorTimeout = timeout - requestDuration;
    }

    setTimeout('$("#' + formName + ' #' + formElementName + '_ajax_validating").hide();', hideValidatingIndicatorTimeout);
}

function AjaxValidationCompleted(formName, formElementName, data, requestStartTime) 
{
    if (data) 
    {
        HideAjaxValidatingIndicator(formName, formElementName, requestStartTime);

        var formElement = $("#" + formName + " #" + formElementName);
        var errorMessageSpanContainer = $("#" + formName + " #" + formElementName + "_error_message_container");
        var errorMessageSpan = $("#" + formName + " #" + formElementName + "_error_message").get(0);
        if (errorMessageSpan) 
        {

            if (data.errorMessage) 
            {
                errorMessageSpan.innerHTML = data.errorMessage;
                errorMessageSpanContainer.show();
                formElement.data("is_valid", 0);
            }
            else 
            {
                errorMessageSpanContainer.hide();
                formElement.data("is_valid", 1);
            }
        }
    }
}

function OnFormElementClientValidated(formName, formElementName, isElementValid, errorMessage) {
    var elementErrorMessageContainer = $('#' + formName + ' #' + formElementName + '_error_message_container');
    var elementErrorMessageSpan = $('#' + formName + ' #' + formElementName + '_error_message').get(0);

    if (!isElementValid) {
        elementErrorMessageSpan.innerHTML = errorMessage;
        elementErrorMessageContainer.show();
    }
    else {
        elementErrorMessageSpan.innerHTML = '';
        elementErrorMessageContainer.hide();
    }
}

function GetCheckBoxListValue(formName, formElementName) {
    var result = "";
    $("#" + formName + " #" + formElementName + " input[type='checkbox']:checked").each(function() {
        if (result != "") {
            result += ", "
        }
        result += this.value;
    });

    return result;
}


function change_password_input_visibility(id, changePasswordStr, cancelStr) {
    var password_input = $("#" + id).get(0);
    var tr_password_copy = $("#tr_password_copy_" + id).get(0);
    var change_password_link = $("#link_change_password_" + id).get(0);

    var display = "";

    if (change_password_link.innerHTML == changePasswordStr) {
        change_password_link.innerHTML = cancelStr;
    }
    else {
        display = "none"
        change_password_link.innerHTML = changePasswordStr;
    }

    password_input.style.display = display;
    tr_password_copy.style.display = display;
}
