
var Y = YAHOO,
    Dom = Y.util.Dom,
    Event = Y.util.Event,
    Select = Y.util.Selector,
    Lang = Y.lang,
    Ajax = Y.util.Connect;


function Signin(container, form) {
    var container = Dom.get(container), form = Dom.get(form);
    
    var submitButton = Select.query('input[type=submit]', container, true);

    //initialize login form validation
    new MS.Validate(form, { 
        error : function (el, text) {
            var p = YAHOO.util.Dom.getElementsByClassName('info', 'em', el.parentNode)[0];
            if (p) {
                p.innerHTML = text;
                YAHOO.util.Dom.addClass(p, 'error');
            }
        },

        success : function (el) {
            var em = YAHOO.util.Dom.getElementsByClassName('info', 'em', el.parentNode)[0];
            if (em && Dom.hasClass(em, 'error')) {
                em.innerHTML = '';
                Dom.removeClass(em, 'error');
            }
        },
        
        beforeSubmit : function () {
            Dom.get('gbl_error_signin').innerHTML = "";
            Dom.setStyle('gbl_error_signin', 'border', 'none');

            Wait.show( 'Signing in, please wait...' );
        },

        submit : function (resp) {
            Wait.hide();

            if(!resp.success) {
                Dom.get('gbl_error_signin').innerHTML = resp.error;
                Dom.setStyle('gbl_error_signin', 'border', '1px solid #FF0000');
            } else {
                window.location.href = resp.follow;
            }
        },
        
        scope : Signin
    });
}


function Signup (container, form) {
    var container = Dom.get(container), form = Dom.get(form);
    
    var submitButton = Select.query('input[type=submit]', container, true);
    //initialize login form validation
    new MS.Validate(form, { 
        error : function (el, text) {
            var p = Dom.getElementsByClassName('info', 'em', el.parentNode)[0];
            el.focus();
            if (p) {
                p.innerHTML = text;
                YAHOO.util.Dom.addClass(p, 'error');                
            }
        },

        success : function (el) {
            var p = Dom.getElementsByClassName('info', 'em', el.parentNode)[0];
            //skip for captcha
            if (p && Dom.hasClass(p, 'error')) {
                p.innerHTML = '';
                YAHOO.util.Dom.removeClass(p, 'error');
            }
        },
        
        beforeSubmit : function (frm) {
            Wait.show( 'Signing up, please wait...' );
        },

        submit : function (resp) {
            Wait.hide();

            if( !resp.success ) {
                Dom.get('gbl_error_signup').innerHTML = resp.error;
                Dom.setStyle('gbl_error_signup', 'border', '1px solid #FF0000');
                //submitButton.value = 'Sign Up';
                //refresh captcha
                Signup.refreshCaptcha(); 
            }else {
                window.location.href = resp.follow;
            }
        },
        
        scope : Signup
    });
    
    //attach handler to captcha refresh
    Event.on('refresh_captcha', 'click', Signup.refreshCaptcha);
    Event.on('gbl_error_signup', 'click', Signup.inviteAgain);
}

Signup.inviteAgain = function (e) {
    var anchor = Event.getTarget(e);
    if (anchor.tagName.toLowerCase() !== 'a' && !Dom.hasClass(target, 'invite-again')) return;
    
    Event.stopEvent(e);
    var href = anchor.href;
    var callback = {
        customevents: {
            onStart : function () { anchor.innerHTML = 'Resending invite...'; },
            onSuccess : function (type, xhr) { 
                var r = eval('(' + xhr[0].responseText + ')'); 
                if (r.notice) alert(r.notice);
            },
            onFailure : function (type, xhr) { 
                if (xhr[0].status == 0 ) { alert('Unable to connect. Please check your internet connection.'); }
            },
            onComplete : function () { anchor.innerHTML = 'Click here'; }
        },
        scope : Signup
    };
    
    Ajax.asyncRequest('POST', href, callback);
}

Signup.refreshCaptcha = function (e) {
    try{ 
        Event.stopEvent(e); 
    }catch(e){}

    var em = Dom.get('captcha_loading');
    Dom.addClass(em, 'loading');

    var callback = {
        success : function (xhr) {
            //we had to hack the response to remove 'Prototype' dependency 
            // extract image src from the response            
            var match = xhr.responseText.match(/src=\\"([^"]*)\\"/);

            if (match && match[1]) {
                Select.query('#simple_captcha img', null, true).src = match[1];
            }

            Dom.removeClass(em, 'loading');
        }
    };

    Ajax.asyncRequest('GET', '/captcha/refresh_captcha', callback);
}

