﻿(function ($) {
    var defaults = { returnUrl : window.location.href, error : '.login-error', validate : function () { return true; }, position:{left:'35%',top:'150px'}, box : '.login-box', loader : '.login-loader', cancel : '.login-cancel-login', submit :'.login-submit', url : '', zIndex : 101, appendTo : 'body' };
    $.fn.extend({
        login : function (params) {
            params = $.extend({}, defaults, params);
            var fadeToBlack = $('.fade-to-black');
            if (fadeToBlack.length == 0) {
                fadeToBlack = $('<div/>').css({
                    opacity : .3,
                    backgroundColor : '#000',
                    position : 'absolute',  
                    top:0,
                    left:0, 
                    zIndex : params.zIndex,
                    display:'none'
                }).width($(document).width()).height($(document).height() + 310).html('&nbsp;').addClass('fade-to-black').appendTo(params.appendTo);
            }

            $(window).resize(function () {
                $('.fade-to-black').width($(document).width()).height($(document).height());
            });
            
            var wrapper = $('.login-box-wrapper');
            if (wrapper.length == 0) {
                wrapper = $('<div/>').css(params.position).css({
                    position : 'absolute',
                    zIndex : params.zIndex + 100, 
                    display : 'none'
                }).addClass('login-box-wrapper').appendTo(params.appendTo);

                var tm = false;
                $(window).scroll(function () {
                    if (tm) clearTimeout(tm);
                    tm = setTimeout(function () {
                        wrapper.animate({ 'top' : (150 + $(window).scrollTop()) + 'px'}, 250);
                    }, 200);
                });
            }

            $(params.cancel).click(function () {
                $(params.error).html('');
                $('#KeepMeLogged').attr('checked', false);
                fadeToBlack.hide();
                wrapper.hide();
            });

            $(params.box + ' input').keyup(function (e) {
                if (e.keyCode == 13) {
                    tryLogin();
                }
            });
                
            var status = 0;
            var tryLogin = function () {
                if (status == 0 && params.validate()) {
                    $(params.error).html('');
                    $(params.loader).fadeIn('slow');
                    status = 1;

                    var data = {
                        username : $('#username').val(),
                        password : $('#password').val()
                    };
                    if ($('#KeepMeLogged').attr('checked')) {
                        data.KeepMeLogged = $('#KeepMeLogged').val();
                    }
                    $.ajax({
                      timeout : 20000,
                      error : function () {
                          status = 0;
                          $(params.loader).fadeOut(function () {
                            $(params.error).html('Service unavailable please try again later');
                          });
                      },
                      type : 'POST',
                      url: params.url,
                      dataType: 'json',
                      data: data,
                      success: function (json) {
                            status = 0;
                            $(params.loader).fadeOut(function () {
                                if (json.status) {
                                    switch (json.status) {
                                        case "success":
                                            window.location.href = params.returnUrl;
                                            break;

                                        case "error":
                                            $(params.error).html(json.message);
                                            break;
                                    }
                                }
                            });
                            
                        }
                    });
                }
            };

            
            $(params.submit).click(function () {
                tryLogin();
                return false;
            });

            $(this).click(function () {
                fadeToBlack.show();    
                wrapper.show();
                if (wrapper.children(params.box).length == 0) {
                    $(params.box).appendTo('.login-box-wrapper')
                }
                $(params.box).show();
                return false;
            });
        }
    });
})(jQuery);




