/**
 * @requires {JQuery}
 *
 * 
 * Provides ajax related services using jQuery framework
 * @constructor
 */
Cobalt.Core.JQueryAjaxService = function(specificVersion)
{
    if (!jQuery && !specificVersion) { throw new Error("JQueryAjaxService requires jQuery library to be loaded"); }

    this.domQuery = !specificVersion ? Cobalt.Core.JQueryFactory.getLatest() :
        Cobalt.Core.JQueryFactory.getSpecificVersion(specificVersion.major, specificVersion.minor, specificVersion.build);
};

/**
 * executes post, get, put, delete requests
 * example:
 *   var ajax = createAjaxService();
 *   var options = {
 *           requestType:"get",
 *           requestUrl: _AjaxServiceTestData.reliableUrl,
 *           requestData: "any data",
 *           dataType: "json",
 *           success: function(response){_AjaxServiceTestData.successData = response},
 *           failure: function(response){_AjaxServiceTestData.failureData = response}
 *       };
 *   ajax.request(options);
 * 
 * @param {Object} options
 */
Cobalt.Core.JQueryAjaxService.prototype.request = function(options)
{
    // ie doesn't handle xml dataType correctly, it needs to see it as "text" and
    // we need to manually load the string into a XMLdocument
    if (options.dataType.toLowerCase() === "xml" && this.domQuery.browser.msie)
    {
        options.dataType = "text";
        var oldHandler = options.success;
        options.success = function(response)
        {
            var xmlDoc;
            if (typeof response === "string")
            {
                xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
                xmlDoc.async = false;
                xmlDoc.loadXML(response);
            }
            else
            {
                xmlDoc = response;
            }

            oldHandler(xmlDoc);
        };
    }
    
    var text = this.domQuery.ajax({
        async : options.isAsync,
        type: options.requestType,
        url : options.requestUrl,
        data : options.requestData,
        dataType: options.dataType,
        success: options.success,
        error: options.failure,
        cache: options.cache,
        complete: options.complete
    });
};
