﻿/// <reference path="jquery.js"/>

/****************************
*** Send ajax request and get json data
****************************/

function GetJson(handler, params, callback, updateNulls, errorCallback) {
//    $.getJSON('/Handlers/' + handler + 'Handler.ashx', params, callback);
    $.ajax({
        type: 'get',
        url: '/Handlers/' + handler + 'Handler.ashx',
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        data: params,
        success: (updateNulls) ? function(data) { callback(UpdateNulls(data)); } : callback,
        error: errorCallback != undefined ? errorCallback : defaultErrorCallback        
        
    });
}
function SubmitForm(url, params) {
    $.ajax({
        async: false,
        type: 'post',
        url: url,
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        data: params
    });
}

function UploadFile(handler, params, fileId, callback, errorCallback) {
    params.Invoke = 'Invoke';
    $.ajaxFileUpload
	(
		{
		    url: '/Handlers/' + handler + 'Handler.ashx?' + $.param(params),
		    secureuri: false,
		    fileElementId: fileId,
		    dataType: 'json',
		    success: function(data) { if (callback != undefined) callback(data); },
		    error: function(e) { alert('fuck'); if (errorCallback != undefined) errorCallback(e); else defaultErrorCallback(e); }
		}
	)
}

function defaultErrorCallback(e)
{
    if (e.status == '200') {
        var response = JSON.parse(e.responseText);
        if (ResponseOk(response) && WasErrors(response.error))
            infoPanel.CreateError('Error Details<br> Code: ' + response.error.Code + '.<br>Message: ' + response.error.errorMessage, 'Error on Page');
    } else {
        var msg = '';
        switch (e.status) {
            case 400: msg = 'Bad Request'; break;
            case 401: msg = 'Unauthorized'; break;
            case 402: msg = 'Payment Required'; break;
            case 403: msg = 'Forbidden'; break;
            case 404: msg = 'Requested resourse not found on this server'; break;

            case 405: msg = 'Method Not Allowed'; break;
            case 406: msg = 'Not Acceptable'; break;
            case 407: msg = 'Proxy Authentication Required'; break;
            case 408: msg = 'Request Timeout'; break;
            case 409: msg = 'Conflict'; break;
            case 410: msg = 'Gone'; break;
            case 411: msg = 'Length Required'; break;
            case 412: msg = 'Precondition Failed'; break;
            case 413: msg = 'Request Entity Too Large'; break;
            case 414: msg = 'Request-URI Too Large'; break;
            case 415: msg = 'Unsupported Media Type'; break;
            case 416: msg = 'Requested Range Not Satisfiable'; break;
            case 417: msg = 'Expectation Failed'; break;

            case 500: msg = 'Internal server error'; break;
            case 501: msg = 'Not Implemented'; break;
            case 502: msg = 'Bad Gateway'; break;
            case 503: msg = 'Service Unavailable'; break;
            case 504: msg = 'Gateway Timeout'; break;
            case 505: msg = 'HTTP Version not supported'; break;
            default: msg = 'Internal Server Error';
        }
        infoPanel.CreateError(msg + '<br>Code: ' + e.status, 'Error on Page');
    }
}

function ResponseOk(data) {
    return (data != undefined
        && data.error != undefined
        && data.results != undefined);
}
function WasErrors(data)
{
    return (data.error.Code > 0);
}
