function hideModal(dv){
    $(dv).fadeOut(100, function(){
       $('div#modalbg a').each(function(e){$(this).unbind('click')});
       $('div#modalbg').fadeOut(200);
    });
}
function showModal(dv, focus_to, title){
    $('div#modalbg p.head').html(title);
    $('div#modalbg').fadeIn(100, function(){
       $(dv).fadeIn();
       $(focus_to).focus();
    });
}
function showMessage(dv){
    $('div#modalbg').fadeIn(100, function(){
       $(dv).fadeIn();
    });
}
function roundCorner(dv){
    
    if($(dv).find('div.wbox').attr('class') == 'wbox')
        return;

    var c = $(dv).html();
    var w = $(dv).width();
    var h = $(dv).height();
    $(dv).html('<div class="wbox"><div class="tr"><div class="content"></div></div><div class="r"></div><div class="b"></div><div class="br"></div></div>');
    $(dv+' div.wbox').height(h);
    $(dv+' div.wbox').width(w);
    $(dv+' div.wbox div.tr').height(h-10);
    $(dv+' div.wbox div.tr').width(w-10);
    $(dv+' div.wbox div.tr div.content').height(h-20);
    $(dv+' div.wbox div.tr div.content').width(w-20);
    $(dv+' div.wbox div.tr div.content').html(c);
    $(dv+' div.wbox div.r').height(h-10);
    $(dv+' div.wbox div.b').width(w-10);
}

function modalMessage(id, focus_to, message, title){
    $('div#modalbg p.head').css('background','transparent url(/statics/images/hz.png) 0 -128px repeat-x') ;
    if(id != '')
        $('div#modalbg p.head').html($(id).html());
    else
        $('div#modalbg p.head').html(message);

    $(focus_to).focus();
    setTimeout(function(){
        $('div#modalbg p.head').css('background','transparent url(/statics/images/hz.png) 0 -149px repeat-x');
        $('div#modalbg p.head').html(title);
    }, 4000);
}

function checkpass(password){
   for(i=0;i<password.length;i++)
       if(password.charCodeAt(i) < 32 || password.charCodeAt(i) > 126)
           return false;
   return true;
}

function loginClick(data){
  $.getScript('/statics/js/crypt/rsa.js', function(){
    $('div#modalbg').html(data);
    $('a#forgotpass').live("click", forgotPassword);
    $('input#reset_button').live('click', resetPassword);

    $('div#loginbox').keyup(function(e){
        if(e.keyCode == 27)
            loginCancel();
    })
    showModal('div#loginbox', 'input[id=username]', $('p#title_login').html());
    roundCorner('div#loginbox');
    $('div#loginbox b#indicator').hide();
    $('span#username').show();
    $('span#password').show();
    $('a#forgotpass').show();
    $('span#email').hide();
    $('i#reset_hint').hide();
    $('input#login_button').show();
    $('input#cancel_button').show();
    $('input#reset_button').hide();
    $('input#cancel_button').click(loginCancel);
    $('input#login_button').click(loginLogin);
  }, true);
}

function loginLogin(){
   username = $('input[id=username]').val();
   password = $('input[id=password]').val();
   if(username != '' && password != ''){
       var illegalusername = /^\w+$/;
       if(!illegalusername.test(username))
           modalMessage('#errillegalusername', 'input[id=username]', '', $('p#title_login').html());
       else if(!checkpass(password))
          modalMessage('#errillegalpassword', 'input[id=password]', '', $('p#title_login').html());
       else{
           $('div#loginbox b#indicator').fadeIn('slow');
           $.post('/login', {username: encryptedString(key, username), password: encryptedString(key, password)}, function(data){
            $('div#loginbox b#indicator').fadeOut('slow');
            if(data != '')
               modalMessage('', 'input[id=username]', data, $('p#title_login').html());
            else{
               hideModal('div#loginbox');
               location.reload();
            }});
       }
   }
}

function loginCancel(){
    hideModal('div#loginbox');
}

function forgotPassword(){
            $('div#modalbg p.head').html($('p#title_reset').html());
            $('span#password').fadeOut('slow',function(){
                $('span#email').fadeIn('slow');
                $('a#forgotpass').css('display', 'none');
                $('input#login_button').fadeOut('slow', function(){
                    $('input#reset_button').fadeIn('slow');
                })
                $('i#reset_hint').show();
                $('input[id=username]').focus();
            });
}

function resetPassword(){
   username = $('input[id=username]').val();
   email = $('input[id=email]').val();
   if(username != '' && email != ''){
       var illegalusername = /^\w+$/;
       var illegalemail = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
       if(!illegalusername.test(username))
           modalMessage('#errillegalusername', 'input[id=username]', '', $('p#title_reset').html());
       else if(!illegalemail.test(email))
          modalMessage('#errillegalemail', 'input[id=email]', '', $('p#title_reset').html());
       else{
           $('div#loginbox b#indicator').fadeIn('slow');
           $.post('/reset', {username: encryptedString(key, username), email: encryptedString(key, email)}, function(data){
            $('div#loginbox b#indicator').fadeOut('slow');
            if(data != '')
               modalMessage('', 'input[id=username]', data, $('p#title_reset').html());
            else{
               $('div#loginbox').hide();
               showMessage('div#messagebox');
               roundCorner('div#messagebox');
               setTimeout(function(){
                   hideModal('div#messagebox');
               }, 10000);
            }
        });
       }
   }
}

function signupCancel(){
    hideModal('div#signupbox');
}

function signupAccount(){
   username = $('input[id=username]').val();
   email = $('input[id=email]').val();
   captcha = $('input[id=captcha]').val();
   password1 = $('input[id=password1]').val();
   password2 = $('input[id=password2]').val();

   if(username =='' || email =='' || captcha =='' || password1=='' || password2 =='')
       modalMessage('#erronenull', 'input[id=username]', '', $('p#title_signup').html());
   else if(password1 != password2)
       modalMessage('#errpasswordsequal', 'input[id=password1]', '', $('p#title_signup').html());
   else {
       var illegalusername = /^\w+$/;
       var illegalemail = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
       if(!illegalusername.test(username))
           modalMessage('#errillegalusername', 'input[id=username]', '', $('p#title_signup').html());
       else if(!illegalemail.test(email))
           modalMessage('#errillegalemail', 'input[id=email]', '', $('p#title_signup').html());
       else if(!checkpass(password1))
          modalMessage('#errillegalpassword', 'input[id=password1]', '', $('p#title_signup').html());
       else{
           $('div#signupbox b#indicator').fadeIn('slow');
           $.post('/signup', {username: encryptedString(key, username), email: encryptedString(key, email), password: encryptedString(key, password1), captcha: encryptedString(key, captcha)}, function(data){
            $('div#signupbox b#indicator').fadeOut('slow');
            if(data != '')
               modalMessage('', 'input[id=username]', data, $('p#title_signup').html());
            else{
               $('div#signupbox').hide();
               showMessage('div#messagebox');
               roundCorner('div#messagebox');
               setTimeout(function(){
                   hideModal('div#messagebox');
                   location.reload();
               }, 7000);
            }
        });
       }
   }
}

function signupClick(data){
  $.getScript('/statics/js/crypt/rsa.js', function(){
    $('div#modalbg').html(data);
    $('input#signup_button').live('click', signupAccount);
    $('input#cancel_button').live('click', signupCancel);
    $('a#captcha_refresh').live('click', function(){
        $('div#signupbox b#indicator').show();
        $.post('/refreshcaptcha', function(data){
            $('span#captcha img').attr('src', '/captcha/'+data);
        });
        $('div#signupbox b#indicator').hide();
    });

    $('div#signupbox').keyup(function(e){
        if(e.keyCode == 27)
            signupCancel();
    })
    showModal('div#signupbox', 'input[id=username]', $('p#title_signup').html());
    roundCorner('div#signupbox');
    $('div#signupbox b#indicator').hide();
    $('span#username').show();
    $('span#email').show();
    $('span#password1').show();
    $('span#password2').show();
    $('input#signup_button').show();
    $('input#cancel_button').show();
  }, true);
}

$(document).ready(function(){
    // login, sign up
    $.getScript = function(url, callback, cache){ $.ajax({ type: "GET", url: url, success: callback, dataType: "script", cache: true }); };
    $('a#login').live("click", function(e){
        e.preventDefault();
        $.post('/getform', {form: 'login'}, loginClick);
    });

    $('a#signup').live("click", function(e){
        e.preventDefault();
        $.post('/getform', {form: 'signup'}, signupClick);
    });
    // slider
    if($.find('div.slider') !=''){
        $.getScript('/statics/js/slider.js');
    }
    // blog comment
    if($.find('div#post_comments a.button') !=''){
        $.getScript('/statics/js/blog_comment.js');
    }
    // table of contents
    if($.find('div#toc') !=''){
        $.getScript('/statics/js/toc.js');
    }

    // sf menu
    $('ul.sf-menu').superfish();
});