﻿/// <reference path="jquery-1.4.2-vsdoc.js" />
var loading =
    '<div class="loading">' +
    '   <img src="/images/ajax-loader.gif" alt="Pričekajte trenutak" />' +
    '   <p>Pričekajte trenutak...</p>' +
    '</div>';
var last_data = 0;

$(function () {
    transformForms();
    enableEntryForm();
    enableFiltering();

    // Zabrani autocomplete u Chromeu jer boja polja žutom ružnom bojom
    if ($.browser.webkit) {
        $('input#login_username, input#login_password').attr('autocomplete', 'off');
    }
});

/**
* Transformacija formi
*/
function transformForms() {
    // jqTransform
    $('form#entry, form#login, form#apply, form#user_form, form#password_form, form#filter, form#filterDate').jqTransform();

    // Firefox krivo prikazuje tekst u poljima
    if ($.browser.mozilla) {
        $('input.jqTransformInput').css('padding', 0);
    }
}

/**
* Filtriranje flote i izvještaja
*/
function enableFiltering() {
    var filter_page = $('form#filter').attr('filter');
    var selector = 'div#' + filter_page;
    var input = 'input#' + filter_page + '_filter';

    // Inicijalno filtriranje
    if ($(input).length > 0) { // stranica s izvještajima
        // Provjeri ima li URL što za filter
        var url = location.href;
        var filter = url.split('#')[1];

        if (filter == undefined) {
            filter = '';
        }

        $(input).val(filter);

        filterAJAX(filter, filter_page, selector);
    }

    // Reset filtra
    $('button#clear_filter').live('click', function () {
        $(input).val('');
        filterAJAX('', filter_page, selector);

        return false;
    });

    // Filtriranje izvještaja
    $(input).keyup(function (e) {
        if (e.keyCode == '37' || e.keyCode == '39')
            return false;

        var $input = $(this);
        var filter = $input.val();

        filterAJAX(filter, filter_page, selector);
    });
}

/**
* AJAX za filter
*/
function filterAJAX(filter, url, element) {
    var timestamp = new Date().getTime();
    //.after(loading).hide();
    $(element).attr('class', timestamp);
    showSpinner('form div.rowElem:first');

    $.ajax({
        type: 'get',
        url: '/h/' + url + '/' + filter,
        success: function (data) {
            if ($(element).hasClass(timestamp)) {
                if (hashCode(data) != last_data) {
                    $(element).html(data);
                    last_data = hashCode(data);
                }
            }
            hideSpinner('form div.rowElem:first');
        },
        error: function () {
            alert('Ni dobro. :)'); // to-do
            hideSpinner('form div.rowElem:first');
        }
    });
}

function enableEntryForm() {
    // Ponašanje forme za prijavu
    $('form#entry').submit(function (e) {
        var $form = $('form#entry');
        var code = $form.find('input#code').val();
        var is_complaint = $form.find('input[name="is_complaint"]:checked').val();
        var vehicle_index = $form.find('ul li a.selected').attr('index');
        var vehicle = $form.find('select option:eq(' + vehicle_index + ')').val();
        var location = $form.find('input#location').val();
        var comment = $form.find('textarea#comment').val();
        var success =
            '<p class="success">Vaša prijava je uspješno zaprimljena, hvala!</p>';
        var is_error = false;
        var error_reasons = '';
        var form_data = $('form#entry').serialize();

        // Provjeri greške
        if (code == '' || code == 'npr. A01 ili ZG123AB') {
            error_reasons += '<p>Morate upisati šifru vozila ili njegovu registraciju</p>';
            is_error = true;
        }

        if (location == '' || location == 'npr. Zagreb - raskrižje Vukovarske i Savske') {
            error_reasons += '<p>Morate upisati mjesto događaja.</p>';
            is_error = true;
        }

        if (comment == '') {
            error_reasons += '<p>Morate upisati komentar.</p>';
            is_error = true;
        }

        // Ako je greška, zaustavi obradu
        if (is_error) {
            $('div#form_error').html(error_reasons);
            return false;
        }

        if ($form.find('div#check_code').hasClass('error'))
            return false;

        // Nije greška, obradi formu    
        $('div#form_error').html('');
        $form.hide();
        $form.after(loading);

        // AJAX
        $.ajax({
            type: 'POST',
            url: '/handlers/submitentry.ashx',
            data: form_data,
            success: function (data) {
                if (data == '1') {
                    $form.after(success);
                    $('div.loading').remove();
                    $form.remove();
                }
                else if (data == '0') {
                    $('div.loading').remove();
                    $form.show();
                    $('div#form_error').html('<p>Došlo je do pogreške pri predavanju prijave, pokušajte ponovno.</p>');
                }
            },
            error: function () {
                $('div.loading').remove();
                $form.show();
                $('div#form_error').html('<p>Došlo je do pogreške pri predavanju prijave, pokušajte ponovno.</p>');
            }
        });

        return false;
    });

    // Provjera koda u formi prijave
    $('form#entry input#code').keyup(function (e) {
        var $input = $(this);
        var value = $input.val();

        if (value.length >= 3) {
            $.ajax({
                type: 'POST',
                url: '/handlers/checkcode.ashx',
                data: { q: value },
                success: function (data) {
                    if (data == '1') {
                        $('div#check_code').addClass('success').removeClass('error').show();
                    }
                    else if (data == '0') {
                        $('div#check_code').addClass('error').removeClass('success').show();
                    }
                },
                error: function () { }
            });
        } else {
            $('div#check_code').hide();
        }

        return false;
    }).click(function () {
        var $input = $(this);

        if ($input.val() == 'npr. A01 ili ZG123AB') {
            $input.val('');
        }
    });

    // Reset inicijalne vrijednosti forme
    $('form#entry input#location').click(function () {
        var $input = $(this);

        if ($input.val() == 'npr. Zagreb - raskrižje Vukovarske i Savske') {
            $input.val('');
        }
    });
}

function hashCode(string) {
    var hash = 0;
    if (string.length == 0) return hash;
    for (i = 0; i < string.length; i++) {
        char = string.charCodeAt(i);
        hash = 31 * hash + char;
        hash = hash & hash; // Convert to 32bit integer
    }
    return hash;
}

function showSpinner(element) {
    $(element).css('background', '#fff url(/images/ajax-loader.gif) no-repeat 360px center');
}

function hideSpinner(element) {
    $(element).css('background', 'none');
}
