﻿function ExecuteRequest(objectType, identificator, methodName, parameters, onCompleted, onError, paramsToPass) {
 
    // Instantiate a WebRequest.
    var request = new Sys.Net.WebRequest();
    
    // Set the request URL.      
    request.set_url("Handler.ashx");

    // Set the request verb.
    request.set_httpVerb("POST");
    
 
    // Set the body for he POST.
    var sb = new Sys.StringBuilder();

    for (p in parameters) {
    if (typeof(parameters[p]) == "String" || typeof(parameters[p]) == "string")
      sb.append(encode_utf8(parameters[p]));
      else
      sb.append(parameters[p]);
        sb.append("~");
    }
    var pp = sb.toString();
    var ppp = "p=" + pp.substr(0, pp.length - 1);
   
    request.set_body(ppp);
    
    request.get_headers()["Content-Length"] = ppp.length;
        
    request.get_headers()["X-BookStore-objectType"] = objectType;
    request.get_headers()["X-BookStore-identificator"] = identificator;
    request.get_headers()["X-BookStore-methodName"] = methodName;
        
    // Set the request handler.
    request.add_completed(function(e, x) { prepareResponse(e, onCompleted, onError, paramsToPass); });
     
       
    // Execute the request.
    request.invoke();

    return request;
}

prepareResponse = function(executor, onSuccess, onFailure, paramsToPass) {

    var response = null;
    try {
        response = executor.get_responseData();
    }
    catch (err) {
    
        if (executor.get_aborted())
            return;
            
        if (executor.get_timedOut()) {
            var req = executor.get_webRequest();
            onFailure({ "ErrorType": 555, "ErrorMessage": "TimeOut" }, paramsToPass);
            return;
        }

        onFailure({ "ErrorType": 1009, "ErrorMessage": err }, paramsToPass);
        return;
    }
    response = eval("(" + response + ")");
    if (response.ErrorType) {
        if (response.ErrorType == 4)
            BookStore.Dialog.Alert(response.ErrorMessage, function() { document.location.href = location.href; })
        else
            onFailure(response, paramsToPass);
        return;
    }

    onSuccess(response, paramsToPass);

}
    
    
    
function encode_utf8(str) {

     var Data = str;
     var utf8txt = "";

     // Data = Data.replace(/\r\n/g,"\n");

     for(var n=0; n<Data.length; n++)
     {
         var c=Data.charCodeAt(n);
     // all chars from 0-127 => 1byte
     if (c<128)
        if(c==43)
            utf8txt += "{[P]}";
        else
         utf8txt += String.fromCharCode(c);
     // all chars from 127 to 2047 => 2byte
     else if((c>127) && (c<2048)) {
         utf8txt += String.fromCharCode((c>>6)|192);
         utf8txt += String.fromCharCode((c&63)|128);
     }
     // all chars from 2048 to 66536 => 3byte
     else {
         utf8txt += String.fromCharCode((c>>12)|224);
         utf8txt += String.fromCharCode(((c>>6)&63)|128);
         utf8txt += String.fromCharCode((c&63)|128);}
     }

    return escape(utf8txt);

}

var preloader = null;
 
function  showGridPreloader() {
        if (!preloader)
            this._renderPreloader();
        preloader.style.width = gridContainer.offsetWidth + 'px';
        preloader.style.height = gridContainer.offsetHeight / 2 + 'px';
        preloader.style.paddingTop = gridContainer.offsetHeight / 2 + 'px';
        preloader.style.display = 'block';

    }

function  hideGridPreloader() {
        preloader.style.display = 'none';
    }

 function   _renderPreloader ()  {
        preloader = document.createElement('div');
        Sys.UI.DomElement.addCssClass(preloader, "preloaderBackground");
        var preloaderIcon = document.createElement('img');
        preloaderIcon.src = httpRoot + 'Admin/images/spinner.gif';
        preloader.appendChild(preloaderIcon);
        gridContainer.appendChild(preloader);

    }


