$(document).ready(function() {
    
    // bind click event to  ajaxtargets
    $('*[data-ajaxtarget]').click( function(e) {
        var ajaxtarget = $(this).attr('data-ajaxtarget');
        ajaxcall(ajaxtarget, e.pageY);
    });
    
});

var deg = 1;
function rotate() {
    var elem = $('.load_image');
    elem.removeClass('load_' + deg);
    deg++;
    if (deg == 9) {
        deg = 1;
    }
    elem.addClass('load_' + deg);
}

var icon_height = 27;
function showLoad(jqxhr) {
    $('.header').before('<div class="load_container" style="top: ' + $(window).scrollTop() + 'px;" ><div class="load_image load_1"></div><div class="close_load"></div></div>');
    $('.load_container').ready( function() {
        $('.load_container').bind("touchmove", touch, false);
    });
    $('.load_image').ready( function() {
        timer = setInterval(rotate, 500);
    });
    $('.close_load').click( function() {
        jqxhr.abort();
        hideLoad();
    });
}

function touch(jEvent) {
    jEvent.originalEvent.preventDefault();
}

function hideLoad() {
    
    // init gallery
    if ($('.swipe_gal').length) {
        $('.swipe_gal').swipe( function (node) {
            galNext(node);
        }, function (node) {
            galPrev(node);
        });
    }
    if ($('.tab_gal_next').length) {
        $('.tab_gal_next').tap( function (node) {
            galPrev($('.gal_image'));
        });
    }
    if ($('.tab_gal_prev').length) {
        $('.tab_gal_prev').tap( function (node) {
            galNext($('.gal_image'));
        });
    }
    
    clearInterval(timer);
    $('.load_container').remove();
    $('.close_load').remove();
}


/**
 * 
 */
function ajaxcall(ajaxtarget,pos) {
    
    if (isUndefined(ajaxtarget)) {
        return;
    }
    
    var formData = {};
    ajaxtarget = ajaxtarget.substring(ajaxtarget.indexOf('/'));
    
    var jqxhr = $.get(
      ajaxtarget,
      formData,
      "html"
    );
    
    showLoad(jqxhr);
    
    jqxhr.success( function(data) {
        
        var elems = $(data).children();
        $(data).each(function () {
            
            var id = this.id;
            $('#' + id).replaceWith(this);
            
        });
        
        ajaxloaded(pos);
        
    });
    
    jqxhr.error( function() {
        console.log('Request aborted or did produce error.');
    });
    
    jqxhr.complete( function() {

    });
    
}

var ajaxtarget;
function ajaxloaded(pos) {

    try {

        $('.ps_loaded', document).imagesLoaded( function() {
            
            $('.header').before('<div class="lock_container" style="height:' + $(document).height() +'px;"></div>');
            $('.popupselector').css('top', ($('.top').offset().top + $('.top').height() - $('.popupselector').height() - 60) + 'px');
            show($('.popupselector'));
    
            var roundabout = new Gallery({
                id: 'roundabout',
                type: 'roundabout',
                leftClass: 'scrollLeft',
                rightClass: 'scrollRight',
                offset: 100,
            });
            
            var items = $('#roundabout > ul').children().filter( function() {
                var ajaxtarget = $(this).attr('data-ajaxtarget');
                return !isUndefined(ajaxtarget);
            });
            
            $.each(items, function(i, item) {
                
                $(item).unbind('click');
                $(item).bind('click', function (e) {
                    
                    var action = $(this).attr('data-action');
                    ajaxtarget = $(this).attr('data-ajaxtarget');
                    
                    roundabout.select(action, 'data-action', 'select_rim', 'unselect_rim');
                    
//                    var imagelist = $('#imagelist').children();
//                    $.each(imagelist, function(i, image) {
//                        hide(image);
//                    });
//                    var image = $('#img_' + action);
//                    show(image);
                    
                    var descriptionlist = $('#descriptionlist').children();
                    $.each(descriptionlist, function(i, desc) {
                        hide(desc);
                    });
                    
                    var desc = $('#desc_' + action);
                    show(desc);
                    
                });
                
            });
            
            hideLoad();
            
            $('.popup_close').unbind('click');
            $('.popup_close').click( function(e) {
                $('.lock_container').remove();
                hide('.popupselector');
                ajaxcall(ajaxtarget, e.pageY);
            });
            
        });
        
        $('.gal_loaded', document).imagesLoaded( function() {
            hideLoad();
        });
        
        // bind click event to ajaxtargets
        $('*[data-ajaxtarget]').unbind('click');
        $('*[data-ajaxtarget]').click( function(e) {
            var ajaxtarget = $(this).attr('data-ajaxtarget');
            ajaxcall(ajaxtarget, e.pageY);
        });
    
    } catch(err) {
        console.log('An error occurd: ' + err);
        hideLoad();
    }
    
}

function show(elem) {
    $(elem).removeClass('none');
}

function hide(elem) {
    $(elem).addClass('none');
}

/*
 * returns true if object is undefined, otherwise false
 */
function isUndefined(obj) {
    return typeof(obj) == 'undefined';
}

/*
 * converts an object to an array containing the object,
 * if the object itself is not an array
 */
function asArray(obj) {
    return $.isArray(obj) ? obj : $.makeArray(obj);
}

