﻿// for intellisense
/// <reference path="jquery-1.3.2.js" />

var yuunik = yuunik || {};

yuunik.ajax = {
    load: function (url, params, update_elem, callback) {
        yuunik.ajax.call_server(url, params, [update_elem], "POST", callback);
    },

    call: function(url, params, updateElems, callback, callback_params, error_callback) {
        yuunik.ajax.call_server(url, params, updateElems, "POST", callback, callback_params, error_callback);
    },

    call_get: function(url, params, updateElems, callback, callback_params, error_callback) {
        yuunik.ajax.call_server(url, params, updateElems, "GET", callback, callback_params, error_callback);
    },

    call_server: function(url, params, updateElems, httpverb, callback, callback_params, error_callback) {
        $.ajax({ dataType: "html", type: httpverb, cache: false, url: url, data: params,
            success: function(response) {
                if (response.substring(0, 6) == "error:") {
                    yuunik.ajax.handle_error(error_callback, response.substring(6));
                    return;
                }

                $.each(updateElems, function(n, value) {
                    $(value).html(response);
                });

                if (callback != undefined) {
                    callback(callback_params);
                }
            },

            error: function(xhr, textStatus, errorThrown) {
                yuunik.ajax.handle_error(error_callback, xhr.responseText);
            }
        });
    },

    handle_error: function(error_callback, response) {
        if (error_callback != undefined) {
            error_callback(response);
        }
        else {
            alert(response);
        }
    },

    callJson: function(url, params, callback) {
        $.ajax({ dataType: "json", type: "POST", url: url, data: params,
            success: function(response) {
                if (callback != undefined)
                    callback(response);
            },

            error: function(xhr, textStatus, errorThrown) {
                alert(xhr.responseText);
            }
        });
    }
};

