/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

$(function() {
    jPlayerInit();
    applyAugmentations();

    buildBoxes(parent);

    $('#funline').click(function() {
        $(this).css('color', '#ffff00');
        animateFunLine();
    });
    
    $('a.ajax-data').click(function() {
        hideAjax();
        showLoadingOverlay();
        $('#ajax').load($(this).attr('href'), {mode: 'ajax'}, ajaxCallback);
        return false;
    });

    $('ul#childpos').sortable().disableSelection();
    $('a#savepositions').show().click(function() {
        var href = $(this).attr('href')+'&'+$('ul#childpos').sortable('serialize');
        $(this).attr('href', href);
        return true;
    });
    
    $('#optionbar').hide();



    $('.menu > div').hover(function() {
        $('.submenu').hide();
        $('.submenu', this).fadeIn();
    }, function() {
        $('.submenu').hide();
    });

    highlightCode($('#content-container'));

    var navieffect = '';
    $('#navi a.ui-icon-triangle-1-se').click(function() {
        if($(this).hasClass('ui-icon-triangle-1-e')) {
            $($(this).attr('href')).show(navieffect);
        } else {
            $($(this).attr('href')).hide(navieffect);
        }
        $(this).toggleClass('ui-icon-triangle-1-e').toggleClass('ui-icon-triangle-1-se');
    });
    $('#navi .navi-closed').click();
    navieffect = 'blind';

    $('.ajax-enabled').hide();
});

function highlightCode(parent) {
    $('pre', parent).each(function() {
        //$(this).load('index.php?controller=tool&action=highlight', {mode: 'ajax', code: $(this).text()});
        var elem = this;
        $('code', this).each(function() {
            $(elem).load('index.php?controller=tool&action=highlight', {mode: 'ajax', code: $(this).text(), codelang: $(elem).attr('class')});
        });
    });
}

function applyAugmentations(parent) {
    $('.js-enabled', parent).show();
    $('.js-disabled', parent).hide();
    
    $('table.tablesorter').each(function() {
        $('th.tablesorter', this).css('cursor', 'pointer');
        $('th.tablesorter', this).hover(function() {
            $(this).css('text-decoration', 'underline');
        }, function() {
            $(this).css('text-decoration', 'none');
        })
        $(this).tablesorter(); 
    });

    $('input.button, input:button, input:submit', parent).button().css('padding', '.1em .4em');
    $('a.button', parent).hover(function() {
        $(this).addClass('ui-state-hover');
    }, function() {
        $(this).removeClass('ui-state-hover');
    }).mousedown(function() {
        $(this).addClass('ui-state-active');
    }).mouseup(function() {
        $(this).removeClass('ui-state-active');
    }).mouseout(function() {
        $(this).removeClass('ui-state-active');
    }).focus(function() {
        $(this).addClass('ui-state-focus');
    }).blur(function() {
        $(this).removeClass('ui-state-focus');
    });
    $('fieldset, legend', parent).addClass('ui-corner-all');

    $('form', parent).submit(function() {
        var valid = true;
        $('div.required', this).each(function() {
            var div = this;
            $('input[type=text], input[type=password], textarea', this).each(function() {
                if(!$(this).val()) {
                    valid = false;
                    $(div).switchClass('hideborder', 'ui-state-error');
                }
            });
        });
        return valid;
    });

    $('.hoverable', parent).hover(function() {
        $(this).addClass('ui-state-hover');
    }, function() {
        $(this).removeClass('ui-state-hover');
        $(this).removeClass('ui-state-active');
    }).focus(function() {
        $(this).addClass('ui-state-active');
    }).blur(function() {
        $(this).removeClass('ui-state-active');
        $(this).removeClass('ui-state-hover');
    });

    $('*[title]', parent).qtip({
        style: {
            name: 'dark',
            tip: true,
            border: {
                width: 2,
                radius: 4
            }
        }, position: {
            corner: {
                target: 'topMiddle',
                tooltip: 'bottomLeft'
            }
        }
    });

    $('.no-javascript', parent).hide();

    $('.slider', parent).each(function() {
        var input = $('input[type=text]', this);
        var label = $('.sliderdesc', this);
        var legend = $($('input[name=desc]', this).val());
        input.hide();
        $('.sliderelement', this).slider({
            min: $('input[name=min]', this).val(),
            max: $('input[name=max]', this).val(),
            value: $('input[name=value]', this).val(),
            slide: function(event, ui) {
                input.val(ui.value);
                label.text($('input[name='+ui.value+']', legend).val());
            }
        });
        label.text($('input[name='+$('input[name=value]', this).val()+']', legend).val());
    });

    $('.autocomplete', parent).each(function() {
        var href = $('input[name=href]', this).val();
        $('input[type=text]', this).autocomplete({source: href});
    });

    $('.datetimepicker', parent).each(function() {
        $('.smarty', this).hide();
        $('.jquery', this).show();
        $('input[type=hidden]', this).val('');
        $('input[type=text]', this).datetimepicker({changeMonth: true,
                                                     changeYear: true});
    });
    $('.datepicker', parent).each(function() {
        $('.smarty', this).hide();
        $('.jquery', this).show();
        $('input[type=hidden]', this).val('');
        $('input[type=text]', this).datepicker({changeMonth: true,
                                                 changeYear: true});
    });

    $('textarea.markup + div.notice', parent).text('markItUp! Universal MarkUp Engine v1.1.10');
    $('textarea.markup', parent).markItUp(mySettingsWP);

    $('#markitup', parent).tabs({
        show: function(event, ui) {
            $('#markitup-preview', parent).html(getSpinner()).load('index.php?controller=tool&action=parse', {
                mode: 'ajax',
                content: $('#markitup-editor textarea', parent).val(),
                fx: {opacity: 'slow'}},
            function() {
                highlightCode($('#markitup-preview', parent));
            })
        }
    });
    $('#markitup-editor textarea', parent).markItUp(mySettings);
    
}

function showLoadingOverlay() {
    hideAjax();
    $('#overlay').fadeIn();
    $('#loadspinner').fadeIn();
}

function ajaxCallback() {
    $('#ajax .ajax-disabled').hide();
    showAjax();
    applyAugmentations($('#ajax'));
    $('#ajax .ajax-enabled').show();
}

var ajaxHidden = true;
function showAjax() {
    if(ajaxHidden) {
        $('#overlay').fadeIn();
        $('#ajax').show();
        $('#loadspinner').hide();
        ajaxHidden = false;
    }
}

function hideAjax() {
    if(!ajaxHidden) {
        $('#overlay').fadeOut();
        $('#ajax').hide();
        $('#loadspinner').hide();
        ajaxHidden = true;
    }
}

function getSpinner() {
    return '<img class="spinner" src="img/spinner.gif" alt="Loading..." style="margin:auto; border:0;" />'
}

function buildBoxes(parent) {
    $('.box', parent).each(function() {
        var content = $('.box-content', this);
        var animation = false;
        $('.box-title', this).click(function() {
            if(!animation) {
                $(this).toggleClass('ui-corner-bottom');
                $('span', this).toggleClass('ui-icon-plusthick').toggleClass('ui-icon-minusthick');
                animation= true;
                content.toggle('blind', 400, function() {
                    animation = false;
                });
            }
        });
    });
    $('.box.closed .box-content').hide();
    $('.box.closed .box-title span.ui-icon-minusthick').toggleClass('ui-icon-plusthick').toggleClass('ui-icon-minusthick');
    $('.box.closed .box-title').toggleClass('ui-corner-bottom');
}

function loadPage(offset) {
    var action = $('#pagebar input[name=action]').val();
    var pages = new Number($('#pagebar input[name=pages]').val());
    var page = new Number($('#page').text());
    var order = $('#pagebar input[name=order]').val();
    var href = $('#pagebar input[name=href]').val();
    if(page+offset <= pages && page+offset > 0) {
        $('#nextpage').hide();
        $('#nonextpage').show();
        $('#prevpage').hide();
        $('#noprevpage').show();
        $.get(href, {mode: 'ajax', action: action, page: page+offset, order: order}, function(data) {
            $('#modelpage').fadeOut(250, function() {
                $('#modelpage').html(data).fadeIn(250);
                $('#page').text(page = page+offset);
                if(page < pages) {
                    $('#nextpage').show();
                    $('#nonextpage').hide();
                }
                if(page > 1) {
                    $('#prevpage').show();
                    $('#noprevpage').hide();
                }
            });
        });
    }
    return false;
}

function jPlayerInit() {
    $('#jplayer').show();
    $('#jplayer-player').jPlayer({
        ready: function() {
            $('#jplayer-progress').progressbar();
            //$('#jplayer-buffered').progressbar();
            this.element.jPlayer("setFile", $('.jplayer-file').val());
        }
    }).jPlayer("onProgressChange", function(loadPercent, playedPercentRelative, playedPercentAbsolute, playedTime, totalTime) {
        $('#jplayer-progress').progressbar("value", playedPercentRelative);
        //$('#jplayer-buffered').progressbar("value", loadPercent);
        $('#jplayer-playedtime').text(msToTimeString(playedTime));
        $('#jplayer-totaltime').text(msToTimeString(totalTime));
    });
}

var playing = false;
function jPlayerPlay() {
    if(playing) {
        $('#jplayer-player').jPlayer('pause');
        $('#jplayer-play span:first').addClass('ui-icon-play').removeClass('ui-icon-pause');
    } else {
        $('#jplayer-player').jPlayer('play');
        $('#jplayer-play span:first').removeClass('ui-icon-play').addClass('ui-icon-pause');
    }
    playing = !playing;
}

function jPlayerStop() {
    $('#jplayer-player').jPlayer('stop');
    $('#jplayer-play span:first').addClass('ui-icon-play').removeClass('ui-icon-pause');
    playing = false;
}

function msToTimeString(ms) {
    var sec = parseInt(ms/1000);
    var result = sec % 60;
    result = (result < 10 ? "0" : "")+result;
    var min = parseInt(sec/60);
    return (min % 60) + ":" + result + ":" + parseInt((ms%1000) / 100);
}

var funLineState = 0;
function animateFunLine() {
    $('#funline').animate({fontSize: funLineState == 0 ? '130%' : '120%'}, 250, function() {
        funLineState = (funLineState+1)%2;
        animateFunLine();
    });
}
