﻿/// <reference path="jquery.escape.js" />

var filter;
var loggedin = false;
var debug = false;
var disclaimerbox;
var errormessagebox;
var swfu;

$(document).ready(function () {

    var oneYearFromNow = new Date();
    oneYearFromNow.setDate(oneYearFromNow.getDate() + 365);

    $.cookies.setOptions({
        domain: '.soundtriggers.com',
        path: '/',
        expiresAt: oneYearFromNow
    });

    filter = $.cookies.get('filter');

    if (filter === undefined || filter === null) {
        filter = {
            _searchbox: '',
            _sortBy: 'Score',
            _languages: [],
            _starred: false,
            _popularSounds: true,
            _starCollection: []
        };
    }

    if (typeof setUserAsLoggedIn == 'function') {
        setUserAsLoggedIn();
    }


    // Text search
    if (filter._searchbox != '') {
        $('#searchbox').val(filter._searchbox);
    }

    // Sorting
    if (filter._sortBy == 'Score') {
        toggleFilterButton('score', true);
    }

    if (filter._sortBy == 'Latest') {
        toggleFilterButton('latest', true);
    }

    // Filter types
    if (filter._starred) {
        toggleFilterButton('star', true);
        toggleFilterButton('star_public', true);
    }

    if (filter._popularSounds) {
        toggleFilterButton('top', true);
    }

    // Languages
    if ($.inArray('None', filter._languages) != -1) {
        toggleFilterButton('lang_none', true);
    }

    if ($.inArray('English', filter._languages) != -1) {
        toggleFilterButton('lang_english', true);
    }

    if ($.inArray('Swedish', filter._languages) != -1) {
        toggleFilterButton('lang_swedish', true);
    }

    if ($.inArray('Spanish', filter._languages) != -1) {
        toggleFilterButton('lang_spanish', true);
    }

    if ($.inArray('Other', filter._languages) != -1) {
        toggleFilterButton('lang_other', true);
    }

    $('.btn_bar_score').click(function () {
        filter._sortBy = 'Score';
        $(this).attr('selected', true);
        toggleFilterButton('latest', false);
        executeFilter();
    });

    $('.btn_bar_latest').click(function () {
        filter._sortBy = 'Latest';
        $(this).attr('selected', true);
        toggleFilterButton('score', false);
        executeFilter();
    });

    $('#filterbar div[class^="btn_bar_lang"]').click(function () {
        if ($(this).attr('selected') == 'true') {
            $(this).removeAttr('selected');
        }
        else {
            $(this).attr('selected', true);
        }

        var languages = $('#filterbar div[class^="btn_bar_lang"][selected]').map(function () { return $(this).attr('value'); });
        filter._languages = languages.get();
        executeFilter();
    });

    $('#filterbar .filterbutton').click(function () {
        if ($(this).attr('selected') == 'true') {
            $(this).removeAttr('selected');
        }
        else {
            $(this).attr('selected', true);
        }

        var starTypes = $('#filterbar .filterbutton[selected]').map(function () { return $(this).attr('value'); });

        filter._popularSounds = false;
        filter._starred = false;

        starTypes.each(function (index, el) {
            switch (el) {
                case 'PopularSounds':
                    filter._popularSounds = true;
                    break;
                case 'Starred':
                    filter._starred = true;
                    break;
            }
        });
        executeFilter();
    });

    $('.btn_bar_x').click(function () {
        filter._searchbox = '';
        $('#searchbox').val('');
        executeFilter();
    });

    $('.btn_star, .btn_star_public').live('click', function () {
        toggle($(this));
        var id = $(this).parents('div[id]').attr('id');
        var on = isSelected($(this));
        if (loggedin) {
            PageMethods.ToggleSoundTriggerForPrivatePage(id, on, success, error);
        }
        else {
            if (on) {
                filter._starCollection.push(Number(id));
                $(this).css({ backgroundPosition: '0 -32px' });
            }
            else {
                filter._starCollection.pop(Number(id));
                $(this).css({ backgroundPosition: '' });
            }
            saveFilterCookie();
        }
    });

    $('.btn_star_public_own').live('click', function () {
        if (confirm('Are you sure  you want to delete this sound?')) {
            var id = $(this).parents('div[id]').attr('id');
            PageMethods.DeleteSound(id, success, error);
        }
        else {
            return false;
        }
    });

    // Splash
    if ($.browser.msie && $.browser.version < 7) {
        $('.onlynewbrowsers').hide();
        $('.onlyoldbrowsers').show();
        $('body').supersleight({ shim: '/Assets/Images/transparent.gif' });
    }
    else {
        if (location.href.indexOf('www.soundtriggers.com') != -1) {
            var beenSplashed = readCookie('beenSplashed');
            if (!beenSplashed) {
                $('#bgfade').show();
                $('.splash').show();
            }
        }
    }

    $('.uploadbutton').hover(function () {
        $(this).addClass('uploadbutton_over');
    }, function () {
        $(this).removeClass('uploadbutton_over');
    });

    $('.btn_confirm').hover(function () {
        $(this).addClass('confirmbutton_over');
    }, function () {
        $(this).removeClass('confirmbutton_over');
    });

    $('.iphonebutton').hover(function () {
        $(this).addClass('iphonebutton_over');
    }, function () {
        $(this).removeClass('iphonebutton_over');
    });

    $('.btnx, .btnx_splash').hover(function () {
        $(this).addClass('btnx-over');
    }, function () {
        $(this).removeClass('btnx-over');
    });

    disclaimerbox = $('#disclaimerbox');
    errormessagebox = $('#errormessagebox');

    executeFilter();


});

function play(id, filename, soundname) {

    var sound = soundManager.getSoundById(id);

    if (sound) {
        if (sound.playState) {
            log('sound.playState: ' + sound.playState);
        }
        if (sound.position) {
            log('sound.position: ' + sound.position);
        }
    }

    var isTop5 = $('#' + id).hasClass('top5');
    if (!sound) {
        log('play, first time');
        setElementSelected($('#' + id + ' .btn'), true);
        if (isTop5) {
            $('#' + id + ' .btn').css({ backgroundPosition: '0 -258px' });
        }
        else {
            $('#' + id + ' .btn').css({ backgroundPosition: '0 -142px' });
        }
        soundManager.createSound({
            id: id,
            url: '/SoundFiles/' + filename,
            onplay: function () {
                if (isTop5) {
                    $('#' + id + ' .active').css({ height: '0%' });
                }
                else {
                    $('#' + id + ' .active').css({ width: '0%' });
                }
            },
            whileplaying: function () {
                $('#' + id + ' .active').show();
                var progressInPercent = (this.position / this.duration) * 100;
                if (progressInPercent > 100) { progressInPercent = 100; }
                if (isTop5) {
                    $('#' + id + ' .active').css({ height: progressInPercent + '%' });
                    //                    log(progressInPercent + '%');sound.playState
                }
                else {
                    $('#' + id + ' .active').css({ width: progressInPercent + '%' });
                }
            },
            onfinish: function () {
                log('onfinish');
                setElementSelected($('#' + id + ' .btn'), false);
                $('#' + id + ' .btn').removeAttr('style');
                if (!($.browser.msie)) {
                    $('#' + id + ' .active').fadeOut();
                }
                else {
                    $('#' + id + ' .active').hide();
                }
            },
            onstop: function () {
                log('onstop');
                setElementSelected($('#' + id + ' .btn'), false);
                $('#' + id + ' .btn').removeAttr('style');
                if (!($.browser.msie)) {
                    $('#' + id + ' .active').fadeOut();
                }
                else {
                    $('#' + id + ' .active').hide();
                }
            }
        });
        soundManager.play(id);
    }
    // 0 = stopped, 1 = playing/buffering
    else if (sound && sound.playState === 0) {
        log('play again');
        setElementSelected($('#' + id + ' .btn'), true);
        if (isTop5) {
            $('#' + id + ' .btn').css({ backgroundPosition: '0 -258px' });
        }
        else {
            $('#' + id + ' .btn').css({ backgroundPosition: '0 -142px' });
        }
        sound.play();
    }
    else {
        log('stop!');
        sound.stop();
    }
    pageTracker._trackPageview('/Sounds/' + soundname);
    PageMethods.RegisterClick(id, success, error);
}

function showUploadBox() {  
    disclaimerbox.show();
    errormessagebox.hide();
    $('#uploadbox').toggle();
    $('#iphonebox').hide();
    $('.btn_confirm').show();
    $('.progressbar').hide();
    $('.fileinfo').text(' ');
    $('#soundname').val('');
    $('.swfupload').show();
}

function clickYourSoundsButton()
{
    PageMethods.Click_YourSounds(success, error);
}

function showLoginBox() {
    $('#loginbox').toggle();
    $('#iphonebox').hide();
    $('.errormessagebox').hide();
}

function showRegisterBox() {
    $('#loginbox').hide();
    $('#registerbox').toggle();
}

function showiPhoneBox() {
    $('#iphonebox').toggle();
    $('#loginbox').hide();
    $('#registerbox').hide();
}

function validateInput(fileonly) {

    var soundname = $('#soundname').val();
    
    if (swfu.getStats().files_queued != 1) {
        disclaimerbox.hide();
        errormessagebox.show();
        errormessagebox.find('#errormessage').text('You did not select a file.');
        return false;
    }

    if (!fileonly) {
        if (soundname == '') {
            disclaimerbox.hide();
            errormessagebox.show();
            errormessagebox.find('#errormessage').text('You did not specify a name for your sound.');
            return false;
        }
    }

    disclaimerbox.show();
    errormessagebox.hide();
    return true;

}

function closeSplash() {
    soundManager.createSound({
        id: 'Rimshot',
        url: '/SoundFiles/e8223180-8e46-4fc3-959b-73c836f0b10e.mp3'
    });
    soundManager.play('Rimshot');
    $('#bgfade').hide();
    $('#splash').hide();
    createCookie('beenSplashed', true, 1000);
}

function closeSendBox() {
    $('#sendbox').hide();
}

function uploadStart(file) {

    var disclaimerbox = $('#disclaimerbox');
    var errormessagebox = $('#errormessagebox');

    disclaimerbox.show();
    errormessagebox.hide();
    $('.btn_confirm').hide();

    var soundname = $('#soundname').val();
    var language = $('#languages').val();
    var userid = $('#userid').val();
    this.setUploadURL('/Upload.aspx?' + 'soundname=' + soundname + '&language=' + language + '&userid=' + userid );
}

function fileDialogStartHandler() {
    swfu.cancelUpload();
}

function fileQeuedHandler(file) {
    $('.fileinfo').text('File selected: ' + file.name + ' (' + Math.floor(file.size / 1000) + 'kb)');
    $('.fileinfo').removeClass('error');
    validateInput(true);
}

function progressHandler(file, bytesComplete, totalBytes) {
    var progressBar = $('#progressbar');
    var progressInPercent = (bytesComplete / totalBytes) * 100;
    if (progressInPercent > 100) { progressInPercent = 100; }
    progressBar.css({ width: progressInPercent + '%' });
}

function fileQueErrorHandler(file, code, message) {
    if (code == SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT) { message += ' Max 400kb.'; }
    if (code == SWFUpload.QUEUE_ERROR.INVALID_FILETYPE) { message += ' Only MP3 files.'; }
    $('.fileinfo').text(message);
    $('.fileinfo').addClass('error');
}

function uploadErrorHandler(file, code, message) {
    if (message == 12345) {
        disclaimerbox.hide();
        errormessagebox.show();
        errormessagebox.find('#errormessage').text('The file does not seem to have MP3 headers, are you sure this is a correct MP3 file ?');
    }
    if (message == 123) {
        disclaimerbox.hide();
        errormessagebox.show();
        errormessagebox.find('#errormessage').text('No sound name!');
    }
    $('.btn_confirm').show();
    $('.progressbar').hide();
}

function uploadSuccess(file) {
    var progressBar = $('#progressBar');
    progressBar.css({ width: '100%' });

    setTimeout(function () {
        $('.swfupload').hide();
        $('#uploadbox').fadeOut(1000, function () {

            var language = $('#languages').val();
            if (filter._languages.length > 0 && $.inArray(language, filter._languages) == -1) {
                $('.btn_bar_lang_' + language.toLowerCase()).click();
            }
            else {
                executeFilter();
            }
        });
    }, 1000);
}

function swfuploadLoadFailedHandler(code, message) {
    alert(message);
}

function confirmUpload() {
    if (validateInput()) {
        $('.btn_confirm').hide();
        $('.progressbar').show();
        swfu.startUpload();
    }
}

function confirmRegistration() {
    var username = $('#reg_username').val();
    var password = $('#reg_password').val();
    var email = $('#reg_email').val();
    PageMethods.RegisterNewUser(username, password, email, success, error);
}

function confirmLogin() {
    var username = $('#login_username').val();
    var password = $('#login_password').val();
    PageMethods.Login(username, password, success, error);
}

window.onload = function () {
    swfu = new SWFUpload({
        // Backend Settings
        upload_url: "/Upload.aspx",
        //		        post_params: {
        //		            "ASPSESSID": "<%=Session.SessionID %>"
        //		        },

        // File Upload Settings
        file_size_limit: "400 kb",
        file_types: "*.mp3",
        file_types_description: "MP3 Sound Files",
        file_upload_limit: 0,    // Zero means unlimited

        // Event Handler Settings - these functions as defined in Handlers.js
        //  The handlers are not part of SWFUpload but are part of my website and control how
        //  my website reacts to the SWFUpload events.
        swfupload_load_failed_handler: swfuploadLoadFailedHandler,
        file_queue_error_handler: fileQueErrorHandler,
        file_dialog_start_handler: fileDialogStartHandler,
//        file_dialog_complete_handler: fileDialogComplete,
        file_queued_handler: fileQeuedHandler,
        upload_progress_handler: progressHandler,
        upload_error_handler: uploadErrorHandler,
        upload_success_handler: uploadSuccess,
        upload_complete_handler: null,
        upload_start_handler: uploadStart,

        // Button settings
        button_image_url: "Assets/Images/XPButtonNoText_160x22.png",
        button_placeholder_id: "spanButtonPlaceholder",
        button_width: 80,
        button_height: 22,
        button_text: '<span class="button">Browse...</span>',
        button_text_style: '.button { font-family: Verdana, serif; font-size: 13px; } .buttonSmall { font-size: 10pt; }',
        button_text_top_padding: 1,
        button_text_left_padding: 5,
        button_action: SWFUpload.BUTTON_ACTION.SELECT_FILE,

        // Flash Settings
        flash_url: "Assets/SWFUpload/swfupload.swf", // Relative to this file
        flash9_url: "Assets/SWFUpload/swfupload_FP9.swf", // Relative to this file

        custom_settings: {
            upload_target: "divFileProgressContainer"
        },

        // Debug Settings
        debug: false
    });
};

function filterBySearchBox(val) {
    filter._searchbox = val;
    executeFilter(true);
}


var executeFilterTimeout;

function executeFilter(useTimeout) {

    saveFilterCookie();

    clearTimeout(executeFilterTimeout);
    if (useTimeout === true) {
        executeFilterTimeout = setTimeout(function () {
            fadeAndExecuteFilter();
        }, 500);
    }
    else {
        fadeAndExecuteFilter();
    }
}

var loadingTimer;
function fadeAndExecuteFilter()
{
    $('#soundtriggers').fadeOut();
    loadingTimer = setTimeout(function () { $('#loadingbox').fadeIn(); }, 1000);
    setTimeout(function () {
        $.jqotetag('#');
        PageMethods.TopFive(filter, function (res) {
            if (res != null || res != undefined) {
                $('#topFiveHtml').html($('#top5').jqote(res));
                log(res);
                PageMethods.TheRest(filter, function (res) {
                    if (res != null || res != undefined) {
                        $('#theRestHtml').html($('#therest').jqote(res));
                        $('#theRestHtml').show();
                    }
                    else {
                        $('#theRestHtml').hide();
                    }
                    success(null, true);
                });
            } else {
                log('no hits!');
                $('.footer').fadeOut();
                $('#nohits').fadeIn();
                clearTimeout(loadingTimer);
                $('#loadingbox').fadeOut();
            }
        });
    }, 300);
}

function saveFilterCookie() {
    $.cookies.set('filter', filter);
}

function log(msg) {
    if (window.console && window.console.log && debug === true) {
        console.log(msg);
    }
}

function success(res, noTaco) {
    $('#loadingbox').fadeOut();
    $('#nohits').fadeOut();
    clearTimeout(loadingTimer);
    $('#soundtriggers').fadeIn();
    $('.footer').fadeIn();

    if (noTaco) { return false; }
    $.taconite(res);

}

function error(res) {
    log(res);
}

function toggleFilterButton(id, mode) {

    if (mode === true) {
        $('.btn_bar_' + id).attr('selected', true);
    }
    else {
        $('.btn_bar_' + id).removeAttr('selected');
    }
}

function shortName(fullName) {
    if (fullName !== undefined) {
        return fullName.length > 17 ? fullName.substring(0, 17) + '..' : fullName;
    }
    return "";
}

function backToMyPage() {
    PageMethods.BackToMyPage(success, error);
}

function logout() { 
    PageMethods.LogOut(success, error);
}

