function ifEnter(fn) { return function(e) { if (e.keyCode == 13) { fn(); } }; } function initLoginForm() { var nick = "#nickInput", nickFiller = "username" var pass = "#passwordInput", passLabel = "#passwordInputLabel", passFiller = "password" var submit = "#signin-submit" // username input logic: // set filler text for the login form only if empty if ($(nick).val() == "") $(nick).val(nickFiller); // erase the form text when clicked only if it is filler text, otherwise select it $(nick).focus(function(){ if($(nick).val() == nickFiller) $(nick).val("") else $(nick).select() }) // restore filler text on blur if field is empty $(nick).blur(function(){ if($(nick).val() == "") $(nick).val(nickFiller); }) // password input logic: var showPassHideLabel = function(){ $(passLabel).addClass("invisible") $(pass).removeClass("invisible") $(pass).focus() } var hidePassShowLabel = function(){ $(passLabel).val(passFiller) $(pass).addClass("invisible") $(passLabel).removeClass("invisible") } // only show password label if input is empty if ($(pass).val() == "") hidePassShowLabel() $(passLabel).click(showPassHideLabel) $(passLabel).focus(showPassHideLabel) $(pass).blur(function(){ if($(pass).val() == "") hidePassShowLabel() }) $(nick).keypress(ifEnter(login)); $(pass).keypress(ifEnter(login)); $(submit).click(login); initBigHand(submit) } function initExpandableLoginForm() { initLoginForm() $(".signin").click( function(e){ e.preventDefault(); $("fieldset#signin_menu").toggle(); $(".signin").toggleClass("menu-open"); $("#nickInput").select() }); $("fieldset#signin_menu").mouseup( function(){ return false }); $(document).mouseup(function(e) { if ($(e.target).parent("a.signin").length == 0) { $(".signin").removeClass("menu-open"); $("fieldset#signin_menu").hide(); } }); } function initBigHand(id){ var cursorId = "#cursor-big" var cursor = $(cursorId)[0] // jquery's reported element sizes are not exactly the same as the browser's 'mouseover' target sizes // so we'll allow a few pixels extra var fudgeFactor = 2 $(id).addClass("no-cursor") // i have to do this weirdly bc putting the cursor image where the mouse cursor is causes problems with mouse events: // * it stops mousemove events on the image below the mouse cursor // * it fucks up mouseover/out and even mouseenter/leave events, as well as click // so i am doing this: // on mousing over the image: // make cursor visible // find image co-ords // bind a global mousemove func // bind cursor click event // unbind mouseover // mousemove func: // move image to mouse co-ords // if mouse co-ords are outside the image co-ords: // make cursor invisible // unbind mousemove func // unbind cursor click event var mousemove = function(e){ var y = e.pageY, x = e.pageX, coords = initBigHand.coords cursor.style.top = y + "px" cursor.style.left = x - 32 + "px" // 32: (4 pixels * 8 pixels per big pixel) to line up pointy finger with cursor if (y < coords.top || y > coords.bottom || x < coords.left || x > coords.right) { $(cursorId).addClass('invisible') $(cursorId).css({"top": 0, "left": 0 }) $(cursorId).unbind('click', cursorClick) $('body').unbind('mousemove', mousemove) $(id).mouseover(imageMouseOver) } } var cursorClick = function(){ $(id).click() } var imageMouseOver = function(){ //console.log("moused over...") initBigHand.coords = { "left": $(id).offset().left - fudgeFactor, "top": $(id).offset().top - fudgeFactor, "right": $(id).offset().left + $(id).width() + fudgeFactor, "bottom": $(id).offset().top + $(id).height() + fudgeFactor } $('body').mousemove(mousemove) $(cursorId).click(cursorClick) $(cursorId).removeClass('invisible') $(id).unbind('mouseover', imageMouseOver) } $(id).mouseover(imageMouseOver) } function login() { var nick = $('#nickInput').val(); var password = $('#passwordInput').val(); var rememberme = $('#remembermeInput').attr('checked') ? 'yes' : ''; var hash = hex_sha1(nick + '$' + password + '$dumpfm'); var onSuccess = function(json) { location.href = location.href; if (typeof pageTracker !== 'undefined') { pageTracker._setCustomVar(1, "logged-in", nick); } }; var onError = function(resp, textStatus, errorThrown) { alert("Error logging in!"); }; $.ajax({ type: 'GET', timeout: 5000, url: '/login', data: {'nick': nick, ts: '', 'hash': hash, 'rememberme': rememberme}, cache: false, dataType: 'json', success: onSuccess, error: onError }); }; function MM_swapImgRestore() { //v3.0 var i,x,a=document.MM_sr; for(i=0;a&&i0&&parent.frames.length) { d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);} if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i