tkAjax = [];

tkAjax.handleClick = function (anchor, e, ajaxOptions) {
    /// <param name="anchor" type="Object" domElement="true">
    /// </param>
    /// <param name="evt" type="Sys.UI.DomEvent">
    /// </param>
    /// <param name="ajaxOptions" type="Sys.Mvc.AjaxOptions">
    /// </param>
    
    tkAjax.aSyncRequest(anchor.href, 'post', '', anchor, ajaxOptions);
    
    
    return false;
}

tkAjax.handleFormSubmit = function (form, e, ajaxOptions) {
    /// <param name="anchor" type="Object" domElement="true">
    /// </param>
    /// <param name="evt" type="Sys.UI.DomEvent">
    /// </param>
    /// <param name="ajaxOptions" type="Sys.Mvc.AjaxOptions">
    /// </param>
    
    var dataString = '';
    
    var dataCount = 0;
    
    for(var i=0;i<form.elements.length;i++) {
        
        if(dataCount > 0) dataString += '&';
        
        switch(form.elements[i].type) {
            case 'radio' : {
                if(form.elements[i].checked) {
                    dataString += $(form.elements[i]).attr("name") + '=' + $(form.elements[i]).attr("value");
                    dataCount++;
                }
                break;
            }
            case 'checkbox' : {
                if(form.elements[i].checked) {
                    dataString += $(form.elements[i]).attr("name") + '=' + $(form.elements[i]).attr("value");
                    dataCount++;
                }
                break;
            }
            default : {
                dataString += $(form.elements[i]).attr("name") + '=' + $(form.elements[i]).attr("value");        
                dataCount++;
                break;
            }
        }
        
        
    }
    
    tkAjax.aSyncRequest(form.action, 'post', dataString, form, ajaxOptions);
    return false;
}
tkAjax.defaultOnBeforeSend = function(request) {
    request.setRequestHeader("X-Requested-With", "XMLHttpRequest");
}

tkAjax.aSyncRequest = function(url, verb, data, triggerElement, ajaxOptions) {
    /// <param name="url" type="String">
    /// </param>
    /// <param name="verb" type="String">
    /// </param>
    /// <param name="body" type="String">
    /// </param>
    /// <param name="triggerElement" type="Object" domElement="true">
    /// </param>
    /// <param name="ajaxOptions" type="Sys.Mvc.AjaxOptions">
    /// </param>
    
    //alert('doing async request to ' + url + verb + data + triggerElement + ajaxOptions);


    if(ajaxOptions && ajaxOptions.loadingElement) $(ajaxOptions.loadingElement).show();
    if(ajaxOptions && ajaxOptions.begin) ajaxOptions.begin();    
    
    if(data.length > 0) {
        data += '&X-Requested-With=XMLHttpRequest';
    } else {
        data = 'X-Requested-With=XMLHttpRequest';
    }    
    
    var fBefore = function(request) {
        tkAjax.defaultOnBeforeSend(request);  //BELANGRIJK
    };
    
    var fSuccess = function(request) {
        if(ajaxOptions && ajaxOptions.loadingElement) fHideLoading(ajaxOptions.loadingElement);
    };
    
    var fHideLoading = function(selector) {
        $(selector).hide();
    }
    
    if(ajaxOptions) {
        if(ajaxOptions.beforeSend) {
            fBefore = function(request) {
                tkAjax.defaultOnBeforeSend(request); //BELANGRIJK
                ajaxOptions.beforeSend(request);
            };
        }
        
        if(ajaxOptions.updateTargetId) {
            if(ajaxOptions.success) {
                fSuccess = function(request) {
                    ajaxOptions.success(request);
                    $('#'+ajaxOptions.updateTargetId).html(request);
                    if(ajaxOptions.loadingElement) fHideLoading(ajaxOptions.loadingElement);
                };    
            } else {
                fSuccess = function(request) {
                    $('#'+ajaxOptions.updateTargetId).html(request);
                    if(ajaxOptions.loadingElement) fHideLoading(ajaxOptions.loadingElement);
                };
            }
        } else if(ajaxOptions.success) {
            fSuccess = function(request) {
                ajaxOptions.success(request);
                if(ajaxOptions.loadingElement) fHideLoading(ajaxOptions.loadingElement);
            };
        }
    }

    
    var options = {
        url : url,
        type : verb,
        beforeSend : fBefore,
        data : data,
        success : fSuccess
        
    };
    
    $.ajax(options);
}


