//<![CDATA[
/**
 * Utworzenie przestrzeni nazw dla metod.
 */
var com = {cg: { }};

/**
 * Metody do przełączania list kategorii w galerii. Najpierw howana jest aktualnie rozwinięta, a nastepnie
 * rozwijana kliknięta.
 */
com.cg.toogleLists = function() {
    if( $("#"+this.id).hasClass('d_list_header4') ) {
        var id=this.id.substr(this.id.lastIndexOf('_')+1);
        $(".list_rowed").hide('fast').removeClass('list_rowed');
        $("#list"+id).show('fast').addClass('list_rowed');
        $(".d_list_header3").addClass("d_list_header4").removeClass("d_list_header3");
        $("#list_header_"+id).addClass("d_list_header3").removeClass("d_list_header4");
    }
}

/**
 * Przetwarza linki tworząc wywołania AJAX'owe. Działanie metody polega na tym, że najpierw wybierane są wsyzstkie
 * linki o klasie 'ajax', dodawana jest metoda do zdarzenia 'onClick', w której wywoływana jest metoda com.cg.ajax realizująca
 * wywołanie AJAX'owe. Wywoływany jest link z atrybutu 'href' elementu, a rezultat wywołania renderowany jest selektorze jQuery
 * definiowanym przez atrybut 'rel' tegoż linku.
 *
 * Przykład:
 * <a href="galeria-1-tytul.htm" class="a_link_white ajax" rel="#d_content">tytul</a>
 * dla tak zdefiniowanego elementu utworzone będzie wywołanie do podstrony: galeria-1-tytul.htm, a rezultat
 * będzie wstawiony w element o id = d_content.
 *
 * TODO: obsługa metody użytkownika wykonywanej po załadowaniu strony
 */
com.cg.loadLinks = function() {
    $("a.ajax").unbind('click').click(function(event) {
        var a = $(this);
        if (!a.attr('link'))
            a.attr('link', a.attr('href'));
        a.attr('href', '#');
        var options = { };
        options.dest = '#' + a.attr('rel');
        if (a.hasClass('ajax_dont_size')) {
            options.keepDestSize = false;
        }
        com.cg.ajax(a.attr('link'), options);
        return false;
    });
    $(":submit.ajax").unbind('click').click(function(event) {
        var form = $(event.target.form);
        com.cg.ajax(form.attr('action'), {
            dest: form.attr('target'),
            onload: com.cg.loadLinks,
            type: form.attr('method'),
            data: form.serialize(),
            keepDestSize: !form.hasClass('ajax_dont_size')
        });
        return false;
    });
}

/**
 * Metoda wykonywana podczas załadodwania strony. Dokonuje odpowiednich inicjalizacji elementów interaktywnych.
 */
com.cg.initPage = function() {
    var size=$("#d_bg").width();
	
    // main bg
    var shift=($("#img_bg").width()-size)/2;
    $("#d_bg").css("left",-shift);
    $("#d_bg").width(size+shift);

    // login box
    $("#d_login_box").css('left',(size/2)+180);
    $("#login_button").click(function() {
        if( $("#d_login_pane").css("display")=="none" )
            $("#d_login_pane").show('fast',function() {$("#input_login_usr").focus();});
        else $("#d_login_pane").hide('fast');
    });
    
    // main menu
    $("#d_mainmenu").css('left',(size/2)-110);
    $(".img_mnu").mouseover(function(){this.src=this.src.replace("1.png","2.png");});
    $(".img_mnu").mouseout(function(){this.src=this.src.replace("2.png","1.png");});
    
    // lists
    $(".d_list_header3").click(com.cg.toogleLists);
    $(".d_list_header4").click(com.cg.toogleLists);

    // ajax links
    com.cg.loadLinks();
}

/**
 * Wywołanie Ajaxowe metodą GET. Dostępne opcje dodatkowe:
 * - dest - selector jQuery określający element do którego ma zostać załadowana treść zwrócona przez wywołanie (strona)
 * - loaderDest - selector jQuery określający element w którym ma zostać zrenderowana animacja ładowania
 * - loader - true/false, określa czy ma zostać pokazana animacja ładowania
 * - onload - metoda do wykonania po pomyślnym załadowaniu strony
 * @param location  adres do wywołania
 * @param options   dodatkowe opcje wywołania
 */
com.cg.ajax = function(location, options) {
    var img = false;

    var dest = $(options.dest);
    if (options.keepDestSize == undefined || options.keepDestSize) {
        var w = dest.width();
        var h = dest.height();

        var str_w = dest.get(0).style.width;
        var old_w = isNaN(str_w.substr(str_w.length - 2)) && str_w != 'auto' ? dest.css('width') : 'auto';
        var str_h = dest.get(0).style.height;
        var old_h = isNaN(str_h.substr(str_h.length - 2)) && str_h != 'auto' ? dest.css('height') : 'auto';
        dest.css('width', w + 'px');
        dest.css('height', h + 'px');
    }

    if (!options.dontHide)
        $(options.dest).fadeOut('fast');
    if (options.loader == undefined || options.loader) {
        var loaderDest = $(options.loaderDest ? options.loaderDest : options.dest);
        img = jQuery('<img>', {
            src: options.loaderImage ? options.loaderImage : '/images/loader.gif'
        });
        img.addClass('img_loader');
        
        var offset = loaderDest.offset();
        var p = loaderDest;
        while (p) {
            try {
                if (p.css('position') == 'absolute') {
                    var tmp = p.offset();
                    offset.left -= tmp.left;
                    offset.top -= tmp.top;
                    break;
                }
                p = p.parent();
            } catch (err) {
                break ;
            }
        }
        img.css('left', Math.round(offset.left + (loaderDest.width() - img.width()) / 2) + 'px');
        img.css('top', Math.round(offset.top + (loaderDest.height() - img.height()) / 3) + 'px');

        loaderDest.fadeIn('fast');
        loaderDest.html(img);
    }

    var callType = options.type ? options.type.toUpperCase() : 'GET';
    $.ajax({
        url: location,
        type: callType,
        data: options.data ? options.data : null,
        success: function(data) {
            var dest = $(options.dest);
            if (options.keepDestSize == undefined || options.keepDestSize) {
                dest.css('height', old_h);
                dest.css('width', old_w);
            }

            dest.html(data);
            if (options.onload) options.onload();
            if (options.show == undefined || options.show == true)
                dest.fadeIn('fast');
            com.cg.loadLinks();
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
			$(options.dest).html(XMLHttpRequest.responseText);
            $(options.dest).fadeIn('fast');
		}
    });
}

/**
 * Metoda do wyświetlania warstwy z powiększonym zdjęciem.
 * @param link adres do strony z powiększonym zdjęciem która ma być wyświetlona
 */
com.cg.enlargePicture = function(link) {
    com.cg.galleryLock = true;
    $('#picture_layer').fadeIn('fast');
    if ($('#picture_layer_content').is(':visible'))
        $('#picture_layer_content').fadeOut(50);

    var img = jQuery('<img>', {
        src: 'images/loader.gif'
    });
    img.addClass('img_loader');
    img.css('top', '250px');
    img.css('left', Math.round(($(document).width() + img.width()) / 2) + 'px');
    $('#picture_layer').html(img);

    com.cg.ajax(link, {
        dest: '#picture_layer_content',
        loader: false,
        show: false,
        keepDestSize: false,
        onload: function() {
            var show = function() {
                img.remove();
                var width = $('#enlarged_picture').width() + 10;
                $('.d_gallery_picture').width(width);
                $('.d_gallery_picture').css('left', Math.round(($(document.body).width() - width) / 2) + 'px');
                $('#picture_layer_content').fadeIn('fast');
                com.cg.loadLinks();
                $('.picture_navigation').attr('href', '#');
                com.cg.galleryLock = false;

                var h1 = $('.d_gallery_picture').height() + 20;
                var h2 = $(document).height();
                $('#picture_layer').height(h1 > h2 ? h1 : h2);
            };
            if ($('#enlarged_picture').length == 1) {
                $('#enlarged_picture').load(show);
            } else {
                show();
            }
        }
    });
    return false;
}

com.cg.switchRanking = function(id) {
    $('.d_ranking_selected').removeClass('d_ranking_selected');
    $(id).addClass('d_ranking_selected');
}

/**
 * Zamyka warstwę z powiększonym zdjęciem.
 */
com.cg.closePicture = function() {
    $('#picture_layer').fadeOut('fast');
    $('#picture_layer_content').fadeOut('fast');
}

com.cg.rankHover = function(element) {
    var id = typeof element == 'string' ? element : $(element).attr('id');
    var n = id.substring(id.lastIndexOf('_') + 1);
    id = id.substring(0, id.lastIndexOf('_') + 1);

    var i = 1;
    for (; i <= n; ++i)
        $('#' + id + i).attr('src', 'images/ico-star1.png');
    for (; i <= 5; ++i)
        $('#' + id + i).attr('src', 'images/ico-star3.png');

    $('#user_rate').html(n);
}

com.cg.checkRegisterForm = function(msg) {
    if (!$('#rulesAgreement').is(':checked')) {
        alert(msg);
        return false;
    } else {
        return true;
    }
}

/**
 * Załadowanie metody inicjującej stronę.
 */
$(document).bind('ready', com.cg.initPage);

// nawigacja klawiszami w galleri
$(document).keyup(function(event) {
    if (!com.cg.galleryLock) {
        if (event.keyCode == 37) { // left cursor
            $('#prevPicture').click();
        } else if (event.keyCode == 39) { // right cursor
            $('#nextPicture').click();
        }
    }
    if (event.keyCode == 27) {
        com.cg.closePicture();
    }
});
//]]>
