﻿/*Подключает к документу заданный скрипт*/
function LoadJavascript(path) {
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = path;
    document.getElementsByTagName('head')[0].appendChild(script);
}

/*Загружаем парсер json*/
LoadJavascript("/content/main/scripts/json.js");

/* Формирование строки запроса к контроллеру */
function GetAjaxPostLink(controller, action) {
    return "/" + controller + "/" + action;
}

/* Вызов события на сервере через Ajax */
function RaiseAction_post(controller, action, param) {
    $.post(
      GetAjaxPostLink(controller, action),
      { param: param },
      function(html) { UpdateControls(html) },
      "html"
   );
    return false;
};

/* Вызов события на сервере через Ajax */
function RaiseAction(controller, action, param) {
    $.ajax({
        type: "POST",
        url: GetAjaxPostLink(controller, action),
        dataType: "html",
        data: ({ param: param }),
        success: function(text) { UpdateControls(text); },
        error: function(xMLHttpRequest, textStatus, errorThrown) { ShowError(xMLHttpRequest, textStatus, errorThrown); }
    });
    return false;
};


/* !!! прокоментировать !!! */
jQuery.fn.outerHTML = function(s) {
    return (s)
? this.before(s).remove()
: jQuery("<p>").append(this.eq(0).clone()).html();
}

function ShowError(xMLHttpRequest, textStatus, errorThrown){
    alert("Статус: " + textStatus + "\nОшибка: " + errorThrown + "\nТекст ответа: " + xMLHttpRequest.responseText);
}

/* !!! прокоментировать !!! */
function isEncHTML(str) {
    if (str.search(/&amp;/g) != -1 || str.search(/&lt;/g) != -1 || str.search(/&gt;/g) != -1)
        return true;
    else
        return false;
};

/* !!! прокоментировать !!! */
function decHTMLifEnc(str) {
    var s = str.replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&quot;/g, '"').replace(/&amp;/g, '&').replace(/\\/g, '\\'); ;

    return s;
}

/* Обновление контролов из json объекта*/
function UpdateControls(text) {
    try {
        //var json = jQuery.parseJSON(text); Очень медлено!!!
        var json = json_parse(text, null);
    }
    catch (err) {
        alert("Ошибка: " + err);
    }
       
    
    for (i = 0; i < json.controls.length; i++) {
        $("#" + json.controls[i].id).outerHTML(decHTMLifEnc(unescape(json.controls[i].html)));
    }

    /* TODO: нужно убрать отсюда эту строку, чтобы механизм был универсальный */
    InitializeOnClick("ajax-update-action");
}

/* Инициализация события OnClick по имени стиля*/
function InitializeOnClick(styleName) {
    $("." + styleName).click(function() {
        var controller = $(this).attr("meta:controller");
        var action = $(this).attr("meta:action");
        var param = $(this).attr("meta:param");
        RaiseAction(controller, action, param);
        return false;
    });
}