/**
 * Usage:
 * ajaxRequest(URL, PARAMS);
 *
 * Example:
 * ajaxRequest('http//url.com/', {'method'    : 'POST/GET', // default is GET
 *                                'data'      : 'var1=value1&var2=value2',
 *                                'container' : $('#container_element'),
 *                                'loading'   : $('#loading_element'),
 *                                'effect'    : 'fade/slide/none'}); // default is none
 */
var ajaxRequest = function(url, params) {
    $.ajaxSetup({url : url});

    if (params['loading']) {
        params['loading'].css('display', '');
        params['loading'].ajaxComplete(function(request, settings) { params['loading'].hide(); });
    }   

    if (params['method'] == "POST") {
        $.ajaxSetup({type : "POST"});
    } else {
        $.ajaxSetup({type : "GET"});
    }    

    if (params['data']) {
        $.ajaxSetup({data : params['data']});
    }
    
    if (params['container']) {
        if (params['effect'] == 'slide') {
            $.ajaxSetup({success : function(response) { params['container'].html(response).slideDown('slow'); }});
        } else if (params['effect'] == 'fade') {
            $.ajaxSetup({success : function(response) { params['container'].html(response).fadeIn('1000'); }});
        } else {
            $.ajaxSetup({success : function(response) { params['container'].html(response).show(); }});
        }
     }

    $.ajax({});
}

/**
 * Usage:
 * ajaxFormSubmit(URL, FORM, PARAMS);
 *
 * Example:
 * ajaxRequest($('#form_element'), 'http//url.com/', {'method'    : 'POST/GET', // default is POST
 *                                                    'container' : $('#container_element'),
 *                                                    'loading'   : $('#loading_element'),
 *                                                    'effect'    : 'fade/slide/none'}); // default is none
 */
var ajaxFormSubmit = function(form, url, params) {
    params['data'] = form.formSerialize();
    if (!params['method']) {
        params['method'] = 'POST';
    }
    ajaxRequest(url, params);
}

/**
 * Paginator
 */
var Paginator = {
    jumpToPage: function(pages) {
        var page = prompt("Enter a number between 1 and " + pages + " to jump to that page", "");
        if (page != undefined) {
            page = parseInt(page, 10)
            if (!isNaN(page) && page > 0 && page <= pages) {
                window.location.href = "?page=" + page;
            }
        }
    }
};

/**
 * Input focus highlight init
 */
$(function() {
    initializeFocus();    
});

function initializeFocus() {
    fields = $('.highlight :input');
    for (i=0; i<fields.length; i++) {
        if (fields[i].type == 'radio' || fields[i].type == 'checkbox' || fields[i].type == 'file') {
            fields[i].onclick = function(){ $(this.parentNode).addClass("focused"); };
            fields[i].onfocus = function(){ $(this.parentNode).addClass("focused"); };
            fields[i].onblur = function(){ $(this.parentNode).removeClass("focused"); };
        } else {
            fields[i].onfocus = function(){ $(this.parentNode).addClass("focused"); };
            fields[i].onblur = function(){ $(this.parentNode).removeClass("focused"); };
        }
    }
}

