var topbarState = 0;

var divLogin = "div.login";
var formLogin = divLogin+" form.login";
var inputLogin = divLogin+" input[type=text], "+divLogin+" input[type=password]";
var loginValidation = "/login/validate";

var divRegistration = "div.registration";
var formRegistration = divRegistration+" form.registration";
var inputRegistration = divRegistration+" input[type=text], "+divRegistration+" input[type=password]";
var registrationValidation = "/registration/validate";

var error = 'Sorry, da ging was schief - bitte kontaktiere uns, wenn das öfters passieren sollte.';

$.fn.qtip.styles.topbarLeft = {
    width: 200,
    padding: 1,
    background: '#74b8d5',
    color: '#FFFFFF',
    textAlign: 'center',
    border: {
        width: 1,
        radius: 5,
        color: '#74b8d5'
    },
    tip: 'rightMiddle',
    name: 'dark'
}

$.fn.qtip.styles.topbarRight = {
    width: 200,
    padding: 1,
    background: '#74b8d5',
    color: '#FFFFFF',
    textAlign: 'center',
    border: {
        width: 1,
        radius: 5,
        color: '#74b8d5'
    },
    tip: 'leftMiddle',
    name: 'dark'
}

$(document).ready(function(){
    $("div.account").click(
        toggleTopbar
    );
    $("div.account a").attr('href','');
    initTopbar();
    //$.modal("<div><h1>SimpleModal</h1></div>");
    $(".buy_ticket").click(function(){
        extendTopbar();
        return false;
    });
});

function initTopbar()
{
    $(formLogin).submit(function ()
    {
        showLoadingSpinner();
        checkInput(inputLogin,loginValidation,function(success)
        {
            if(success)
            {
				//$("input[name=user]").attr('value','1');
                //$("input[name=user]").trigger('change');
				
				$('body').trigger('SublanUserLogin');
				loadContentTopbar(".topbar .topcontent",function()
				{
					hideLoadingSpinner();
				});
				
                /*login(formLogin, function(success)
                {
                    if(success)
                    {
                        $("input[name=user]").attr('value','1');
                        $("input[name=user]").trigger('change');
                        
                        loadContentTopbar(".topbar .topcontent",function()
                        {
                            hideLoadingSpinner();
                        });
                    }
                    else
                    {
                        hideLoadingSpinner();
                        markInput(".login input[name=password]","Das Passwort ist nicht richtig.",'topbarLeft');
                    }
                });*/
            }
            else
            {
                hideLoadingSpinner();
            }
        },'topbarLeft');
        return false;
    });
    $(inputLogin).change(function () {
        checkInput(this,loginValidation,null,'topbarLeft');
    });
    initReg();
}

function clearTopbar()
{
    resetInput("div.login input");
    resetInput("div.registration input");
}

function toggleTopbar()
{
    if(topbarState == 0)
    {
        extendTopbar();
    }
    else
    {
        reduceTopbar();
    }
    return false;
}

function extendTopbar()
{
    $(".topbar").stop();
    $(".topbar").animate({
        top: "0px"
    },'slow');
    topbarState = 1;
    $(".topbar #arrow_up").css('display','block');
    $(".topbar #arrow_down").css('display','none');
}

function reduceTopbar()
{
    clearTopbar();
    $(".topbar").stop();
    $(".topbar").animate({
        top: "-240px"
    },'slow');
    topbarState = 0;
    $(".topbar #arrow_up").css('display','none');
    $(".topbar #arrow_down").css('display','block');
}

function loadContentTopbar(topbar,callback)
{
    clearTopbar();
    $.ajax({
        type: 'POST',
        url: "/topbar/content",
        dataType: 'html',
        error: function(XMLHttpRequest, textStatus, errorThrow){
            alert(error+' (TB-LOAD)');
        },
        success: function(data) {
            $(topbar).empty();
            $(topbar).append(data);
            initTopbar();
            if(callback)
                callback();
        }
    });
}

function initReg()
{
    $(formRegistration).submit(function ()
    {
        showLoadingSpinner();
        checkInput(inputRegistration,registrationValidation,function(success)
        {
            if(success)
            {
                registration(formRegistration, function(success)
                {
                    if(success)
                    {
                        loadSuccessReg();
                        hideLoadingSpinner();
                    }
                    else
                    {
                        hideLoadingSpinner();
                        alert(error+' (REG2)');
                    }
                });
            }
            else
            {
                hideLoadingSpinner();
            }
        },'topbarRight');
        return false;
    });
    $(inputRegistration).change(function () {
        checkInput(this,registrationValidation,null,'topbarRight');
    });
    $(divRegistration+" a#back").click(function(){
        loadFormReg();
        return false;
    });
}
function loadSuccessReg()
{
    showLoadingSpinner();
    loadReg('suc',divRegistration,function(){hideLoadingSpinner();});
}
function loadFormReg()
{
    showLoadingSpinner();
    loadReg('form',divRegistration,function(){hideLoadingSpinner();});
}
function loadReg(action,reg,callback)
{
    $.ajax({
        type: 'POST',
        url: "/registration/"+action,
        dataType: 'html',
        error: function(XMLHttpRequest, textStatus, errorThrow){
            alert(error+' (REG-LOAD)');
        },
        success: function(data) {
            $(reg).empty();
            $(reg).append(data);
            initReg();
            if(callback)
                callback();
        }
    });
}

var spinnerCount = 0;
function showLoadingSpinner()
{
    spinnerCount++;
    if(spinnerCount == 1)
        $(".topbar .spinner").css('display','block');
}
function hideLoadingSpinner()
{
    spinnerCount--;
    if(spinnerCount == 0)
        $(".topbar .spinner").css('display','none');
}


function checkInput(input,url,callback,markerStyle)
{
    var data = $(input).serializeArray();

    $.ajax({
        type: 'POST',
        url: url,
        data: (data),
        dataType: 'json',
        error: function(XMLHttpRequest, textStatus, errorThrow){
            alert(error+' (VAL)');
        },
        success: function(data){
            var inputNames = '';
            var inputMessage = new Array();
            $.each(data.messages, function(name,msgPool){
                inputNames += name;
                for(var i = 0; i < 20-name.length;i++)
                {
                    inputNames += ' ';
                }
                $.each(msgPool, function(i,msg){
                    inputMessage.push(msg);
                    return false;
                });
            });
            $(input).each(function(i,input) {
                var index = inputNames.indexOf($(input).attr('name'))/20;
                if(index >= 0)
                {
                    markInput(input,inputMessage[index],markerStyle);
                }
                else
                    unmarkInput(input);
            });
            if(callback)
                callback(data.success);
        }
    });
}

function markInput(input, message, markerStyle)
{
    if($(input).data('qtip'))
    {
        $(input).qtip("api").updateContent(message);
    }
    else
    {
        $(input).qtip({
            position: {
                //type: 'relative',
                container: $('.topbar'),
                corner: {
                    target: (markerStyle == 'topbarLeft' ? 'leftMiddle' : 'rightMiddle'),
                    tooltip: (markerStyle == 'topbarLeft' ? 'rightMiddle' : 'leftMiddle')
                },
                adjust: {
                    x: (markerStyle == 'topbarLeft' ? -10 : +10)
                    //scroll: false,
                    //resize: false,
                    //mouse: false,
                    //screen: false
                }
            },
            style: markerStyle,
//            style: {
//                width: 200,
//                padding: 1,
//                background: '#74b8d5',
//                color: '#FFFFFF',
//                textAlign: 'center',
//                border: {
//                    width: 1,
//                    radius: 5,
//                    color: '#74b8d5'
//                },
//                tip: 'rightMiddle',
//                name: 'dark'
//            },
            content: message,
            show: {
                effect: {
                    type: 'fade',
                    length: 400
                },
                ready: true
            },
            hide: false
        });
    }
}

function unmarkInput(input)
{
    if($(input).data('qtip'))
    {
        var api = $(input).qtip("api");
        api.hide();
        api.destroy();
        $(input).removeData('qtip');
    }
}

function resetInput(input)
{
    $(input).each(function(i,input) {
        unmarkInput(input);
        //$(input).val('');
    });
}

function login(input,callback)
{
    var data = $(input).serializeArray();

    $.ajax({
        type: 'POST',
        url: "/login/auth",
        data: (data),
        dataType: 'json',
        error: function(XMLHttpRequest, textStatus, errorThrow){
            alert(error+' (LOG)');
        },
        success: function(data){
            if(callback)
                callback(data.success);
        }
    });
}

function registration(input,callback)
{
    var data = $(input).serializeArray();

    $.ajax({
        type: 'POST',
        url: "/registration/reg",
        data: (data),
        dataType: 'json',
        error: function(XMLHttpRequest, textStatus, errorThrow){
            alert(error+' (REG1)');
        },
        success: function(data){
            if(callback)
                callback(data.success);
        }
    });
}

$(document).ready(function(){
	$('body').userDataStore('/user/identity');
});

(function($) {
    $.fn.userDataStore = function(url){
        var userDataStore = $(this);
        var error = 'Sorry, da ging was schief - bitte kontaktiere uns, wenn das öfters passieren sollte.';

        function _initialize() {
			_loadUserData();
            _assignLoginEvent();
        }
		
		function _loadUserData() {
			$.ajax({
				type: 'POST',
				url: url,
				dataType: 'json',
				error: function(XMLHttpRequest, textStatus, errorThrow){
					//alert(error+' (USER-LOAD)');
				},
				success: function(data) {
					userDataStore.data('userDataLoaded',true);
					userDataStore.data('user',data.user);
					userDataStore.trigger('SublanUserDataChanged');
				}
			});
		}
		
		function _assignLoginEvent() {
			$('body').bind('SublanUserLogin', function(){
				_loadUserData();
			});
		}

        return this.each(_initialize);
    };
})(jQuery);
