var monthNames;

$(function(){
    //12 month names
    monthNames = new Array("January", "February", "March",
        "April", "May", "June", "July", "August", "September",
        "October", "November", "December");

    //general AJAX setup
    $.ajaxSetup({
        cache: false,
        error: function(xhr, textStatus, error) {
            if(xhr.status==401) {
                window.location.replace(rootDir + "home/login/userAuth");
            } else {
        //jAlert("[" + xhr.status + "] " + textStatus + " " + error, "AJAX Error");
        }
        }
    });

    //general alerts setup
    $.alerts.okButton = "OK";
    $.alerts.cancelButton = "Batal";

    adjustElements();
});

/* GLOBAL UTILITIES */
//preload images
function preload() {
    $(arguments).each(function(i, image) {
        var imgObj = new Image();
        imgObj.src = imgDir + image;
    });
}

function lockEvent(e) {
    alert(e);
    e.stopPropagation();
}

function adjustElements() {
    adjustMessages();
    datePicker();
    numberInput();
    adjustTables();
    checkboxIE();
}

function findSWF(movieName) {
    if (navigator.appName.indexOf("Microsoft")!= -1) {
        return window[movieName];
    } else {
        return document[movieName];
    }
}

//information-message and error-message
function adjustMessages() {
    $(".information-message").each(function(){
        var invisible = $(this).hasClass("invisible");

        $(this)
        .addClass("infoLabel")
        .removeClass("information-message")
        .removeClass("invisible")
        .wrap("<div class='ui-widget infoPanel " + (invisible ? "invisible" : "") + "' style='font-size:1em'></div>")
        .wrap("<div class='ui-state-highlight ui-corner-all' style='padding:1px 1px'></div>")
        .parent()
        .prepend("<span class='ui-icon ui-icon-info' style='float:left; margin-right:3px'></span>");
    });
    

    $(".error-message").each(function(){
        var invisible = $(this).hasClass("invisible");
        
        $(this)
        .addClass("errorLabel")
        .removeClass("error-message")
        .removeClass("invisible")
        .wrap("<div class='ui-widget errorPanel " + (invisible ? "invisible" : "") + "' style='font-size:0.9em'></div>")
        .wrap("<div class='ui-state-error ui-corner-all' style='padding:1px 1px'></div>")
        .parent()
        .prepend("<span class='ui-icon ui-icon-alert' style='float:left; margin-right:3px'></span>");
    });
    
}

//datepicker
function datePicker() {
    $(".datePicker").each(function(){
        var elementID = $(this).attr("id");
        
        $(this)
        .datepicker({
            dateFormat: "dd-mm-yy",
            showAnim: "fadeIn",
            changeMonth: $(this).metadata().changeMonth,
            changeYear: $(this).metadata().changeYear,
            yearRange: $(this).metadata().yearRange
        })
        .wrap("<div style='position:relative'></div>")
        .after("<label for='" + elementID + "' style='position:absolute; top:2px; right:0px'><img src='" + imgDir + "calendar_button.gif'/></label>");
    });
}

//number only input
function numberInput() {
    $(".numberInput")
    .unbind("keydown")
    .keydown(function(event) {
        // If it is not a number
        if (event.keyCode < 48 || (event.keyCode > 57 && event.keyCode < 96) || event.keyCode > 105) {
            /*
             * 8: Delete
             * 9: Tab
             * 37: Left Key
             * 39: Right Key
             * 46: Backspace
             * 109: - (Negative and Negative Numpad)
             * 110: . (Dot Numpad)
             * 190: . (Dot)
             */
            if(event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 37 || event.keyCode == 39 || event.keyCode == 46) {
            } else if($(this).metadata().decimal == true && (event.keyCode == 110 || event.keyCode == 190)) {
            } else if($(this).metadata().negative == true && event.keyCode == 109) {
            } else if(event.ctrlKey || event.shiftKey || event.altKey) {
            } else {
                event.preventDefault();
            }
        }
    });
}

//client side sorting
function adjustTables() {
    $("table *").unbind("click");

    $("table.expandable tbody tr td").each(function(){
        if($(this).hasClass("action")) {
            return;
        }

        $(this)
        .css("cursor", "pointer")
        .click(function(){
            $(this).parents("tr").find(".extraInfo").toggle("slow");
        });
    });
    
    $("table.sortable").tablesorter({
        widgets: ['staticIndex']
    });

    $("table.pageable").each(function(){
        var size = $(this).metadata().size;
        if(typeof size == undefined) {
            size = 10;
        }

        $(this).tablesorterPager({
            size: size,
            container: $(this).nextAll(".pager"),
            positionFixed: false
        });
    });

    $("table.management *")
    .unbind("mouseenter")
    .unbind("mouseleave");

    $("table.hoverable tr")
    .bind("mouseover", function(){
        $(this).addClass("mouseOver");
    })
    .bind("mouseout", function(){
        $(this).removeClass("mouseOver");
    });
}

//hack for checkboxes in IE
function checkboxIE() {
    $("input[type='checkbox']")
    .unbind("click")
    .click(function(){
        if($.browser.msie) {
            $(this).trigger("change");
        }
    });
}

/* END OF GLOBAL UTILITIES */