/**
 * signup - handle signup related functionality 
 * 
 * @author: Chanel Munezero <chanel.munezero@escapemg.com>
 */
(function(){
    if(!window.gs) {
        return;
    }
    
    var signup = window.gs.signup = {
        // default options/settings
        lbObj: null,

        empty: null
    };
    
    signup.init = function() {
        signup.lbObj = $('#lb_alt_cont').children().remove();
        debug('show box? ',(gs.isReturning && !gs.takenTour));
        debug('isreturning: ',gs.isReturning, 'taken tour: ', gs.takenTour);
        if(!location.search.match('walkthrough')) {
            debug('not walkthrough');
            //if(!gs.isReturning && !gs.takenTour) {
            if(!gs.takenTour || (location.search && location.search=='?signup')) {
                signup.showBox();
            }
            debug('change module: ', gs.isReturning);
            /* never show login module unless user initiated
            if(gs.isReturning) {
                signup.changeModule('login');
            }
            */
        }
        // initialize form handlers, moved to showBox
        signup.initSignupForms();
        signup.initLoginForm();
        signup.initForgotForm();
    };

    signup.initSignupForms = function() {
        // get each form in signup process
        $('#lb_alt .wrapper form').each(function() {
            if(this.name == 'login') { debug('login form ajax', this); return; }
            var form = this;
            var preFormSubmit = function(data, form, options) {
                $('.error', form).hide().html('');
                $('button.submit',form).attr('disabled','disabled');
            };
            var postFormSubmit = function(json) {
                debug('after meta form submit', json);
                $('button.submit',form).attr('disabled','disabled');
                if(json.bSuccess) {
                    if(json.userInfo) {
                        var userForm = $('#'+$('input.next',form).val()).find('form').get(0);
                        debug('userifno form: '+$('input.next',form).val(), userForm);
                        userForm.fname.value = json.userInfo.fname;
                        userForm.lname.value = json.userInfo.lname;
                        userForm.email.value = json.userInfo.email;
                        userForm.country.value = json.userInfo.country;
                        $('.countryName',userForm).change();
                        //$('#signupCountrySelect').change();
                        //$('#signupCountryName').text(json.userInfo.country);
                    }
                    debug('post form, slidenext: '+$('input.next',form).val(), form);
                    if($(form).attr('name')=='lb_userinfo') {
                        debug('postForm: is userinfo signup form, context: '+$('input.context',form).val());
                        if($('input.context',form).val()=='decision') {
                            // context is decision, so go to account instead
                            debug('postform: context is decision, go to account');
                            gs.signup.slideNext('lb_alt_signup_accountinfo');
                        } else {
                            gs.signup.slideNext($('input.next',form).val());
                        }
                    } else if($(form).attr('name')=='lb_complete') {
                        // go to the next url provided by dan
                        location.href = json.nextUrl + ' ';
                    } else {
                        // other forms just go to next
                        gs.signup.slideNext($('input.next',form).val());
                    }
                } else {
                    debug('error: '+json.error, form);
                    $('.error', form).show().html(json.error);
                    $('#lb_alt_signup_complete button.back').show();
                    $('#lb_alt_label_complete button.back').show();
                }
            };
            var options = {
                beforeSubmit: preFormSubmit,
                success: postFormSubmit,
                dataType: 'json'
            }
            $(form).ajaxForm(options);
        });
    }
 
    signup.initLoginForm = function() {
        // get each form in signup process
        $('#lb_alt .login.wrapper form').each(function() {
            var form = this;
            var preFormSubmit = function(data, form, options) {
                // only submit the form
                //debug('signup form submit', form);
                $('.error', form).hide().html('');
                $('button.submit',form).attr('disabled','disabled');
            };
            var postFormSubmit = function(json) {
                debug('after meta form submit', json);
                $('button.submit',form).attr('disabled','disabled');
                if(json.bSuccess) {
                    location.hash = "";
                    location.href = location.href + ' ';
                    //gs.signup.slideNext($('input.next',form).val());
                } else {
                    debug('error, balls');
                    $('.error', form).show().html(json.error);
                }
            };
            var options = {
                beforeSubmit: preFormSubmit,
                success: postFormSubmit,
                dataType: 'json'
            }
            debug('login ajax forms');
            $(form).ajaxForm(options);
        });
    }
    
    signup.initForgotForm = function() {
        // get each form in signup process
        $('#lb_alt .forgot.wrapper form').each(function() {
            var form = this;
            var preFormSubmit = function(data, form, options) {
                // only submit the form
                //debug('signup form submit', form);
                $('.error', form).hide().html('');
                $('button.submit',form).attr('disabled','disabled');
            };
            var postFormSubmit = function(json) {
                debug('after meta form submit', json);
                $('button.submit',form).attr('disabled','disabled');
                if(json.bSuccess) {
                    gs.signup.slideNext($('input.next',form).val());
                } else {
                    debug('error, balls');
                    $('.error', form).show().html(json.error);
                }
            };
            var options = {
                beforeSubmit: preFormSubmit,
                success: postFormSubmit,
                dataType: 'json'
            }
            debug('login ajax forms');
            $(form).ajaxForm(options);
        });
    }
    
    signup.showBox = function() {
        //$('#lb_alt').show();
        var options = {};
        var lb = signup.lbObj.clone(true);
        lb.attr('id','lb_alt');
        var divinfo = {
            contents: lb,
            newid: 'signupModal'
        };
        gs.lbFactory.newModalBox(options, divinfo, true);
                // initialize form handlers, moved to showBox
                signup.initSignupForms();
                //signup.initLoginForm();
    }
    signup.hideBox = function() {
        //$('#lb_alt').hide();
        gs.lbFactory.disposeModalBox($('#signupModal'));
    }
    
    signup.changeModule = function(module)
    {
        if(!module) { debug('invalid module', module); return; }
        $('#lb_alt div.wrapper.'+module).show().siblings('.wrapper').hide();
        $('#lb_alt div.wrapper.'+module).find('input:first').focus();
        return false;
    }

    signup.takeTour = function() {
        signup.hideBox();
        // initiate tour/walkthrough
        gs.walkthrough.init(true);
    }

    // slide right to left
    signup.slideNext = function(newID) {
        if(!newID) { return; }
        var inobj = $('#'+newID);
        //inobj.find('input:first').focus();
        if(!inobj.length) {
            throw "signup.slideNext invalid id "+newID;
            return;
        }
        var outobj = inobj.parent().children('div:visible').not('#'+newID);
        debug('slidenext: is userinfo', newID);
        if(newID=='lb_alt_signup_userinfo') {
            debug('slidenext: yes userinfo, check what it used to be');
            switch(outobj.attr('id')) {
                case 'lb_alt_signup_login':
                    debug('slidenext: was login, set context', inobj.find('input.context'));
                    inobj.find('input.context').val('login');
                    break;
                case 'lb_alt_signup_logindecision':
                    debug('slidenext: was logindecision, set context', inobj.find('input.context'));
                    inobj.find('input.context').val('decision');
                    break;
            }
        }
        if(newID=='lb_alt_signup_complete' || newID=='lb_alt_label_complete') {
            // if going to complete, auto submit the form
            //$('#lb_alt_signup_complete form').submit();
            $('#lb_alt_signup_complete button.back').hide();
            $('#lb_alt_label_complete button.back').hide();
        } else {
            // make sure complete back button is seen
            $('#lb_alt_signup_complete button.back').show();
            $('#lb_alt_label_complete button.back').show();
        }
        var outwidth = outobj.width();
        debug('inobj, outobj', inobj.get(), outobj.get());
        inobj.css('left', outwidth+'px').show();
        outobj.animate({left:-outwidth+'px'}, 'slow', function() {
            outobj.hide();//.css('left',0);
        });
        inobj.animate({left:'0px'}, 'slow');
    }
    // slide left to right
    signup.slideBack = function(newID) {
        if(!newID) { return; }
        var inobj = $('#'+newID);
        if(!inobj.length) {
            throw "signup.slideBack invalid id "+newID;
            return;
        }
        var outobj = inobj.parent().children('div:visible').not('#'+newID);
        debug('slideBack: see if login decision');
        if(newID=='lb_alt_signup_logindecision') {
            debug('slideBack: yes logindecision, now was it userinfo');
            if(outobj.attr('id')=='lb_alt_userinfo') {
                debug('slideBack: yes userinfo, now was it login context');
                if(outobj.find('input.context').val('context')=='login') {
                    debug('slideBack: yes login context, now go to login instead');
                    return signup.slideBack('lb_alt_signup_login');
                }
                /*
                switch(outobj.find('input.context').val('context')) {
                    case 'login':
                        return signup.slideBack('lb_alt_signup_login');
                        break;
                    case 'decision':
                        //return signup.slideBack('lb_alt_signup_logindecision');
                        break;
                }
                */
            }
        }
        var outwidth = outobj.width();
        debug('inobj, outobj', inobj.get(), outobj.get());
        inobj.css('left', -outwidth+'px').show();
        outobj.animate({left:outwidth+'px'}, 'slow', function() {
            outobj.hide();//.css('left',0);
        });
        inobj.animate({left:'0px'}, 'slow');
    }

    signup.toggleCheckbox = function(obj) {
        $(obj).toggleClass('checked');
        var checkbox = $(obj).siblings('input').get(0);
        checkbox.checked = (checkbox.checked) ? false : true;
        debug(checkbox, checkbox.checked);
        return false;
    }
    
    signup.countrySelectChange = function(select) {
        $(select).siblings('.countryName').text(select.options[select.selectedIndex].innerHTML);
    }
    
})();

/**
 * walkthrough - handle walkthrough related functionality 
 * 
 * @author: Chanel Munezero <chanel.munezero@escapemg.com>
 */
(function(){
    if(!window.gs) {
        return;
    }
    
    var walk = window.gs.walkthrough = {
        // default options/settings
        takenTour: null,
        lastWalk: null,
        
        empty: null
    };
    
    walk.init = function(force) {
        gs.takenTour = gs.takenTour || false;
        if(walk.takenTour != gs.takenTour) {
            // initialize whether use has taken walkthrough this session
            walk.takenTour = gs.takenTour;
        }
        force = force || false;
        // initiate stuff here
        debug('found ?walkthrough', location.search.match('walkthrough'));
        if(force || location.search.match('walkthrough')) {
            var id = $('div.walkthrough:first').attr('id');
            debug('start walkthrough, id:'+id);
            if(id) {
                id = id.replace('walkthrough-','');
                walk.goto(id);
                walk.setTakenTour(true);
            }
        } else {
            // not force to start walkthrough, show message instead
            if(gs.takenTourPage) {
                if(gs.takenTourPage.match(/\?/)) {
                    //location.href = gs.takenTourPage + '&walkthrough';
                } else {
                    //location.href = gs.takenTourPage + '?walkthrough';
                }
                $('#takenTourMessage').show();
            } else {
                // no page, don't show message
                $('#takenTourMessage').hide();
            }
        }
    }

    walk.setTakenTour = function(hasTakenTour) {
        hasTakenTour = hasTakenTour || false;
        var takenTour = (hasTakenTour) ? 1 : 0;
        $.postJSON('/signup/takenTour.json', {takenTour:takenTour}, function(json) {
            if(json.bSuccess) {
                gs.takenTour = true;
                gs.walkthrough.takenTour = true;
            }
        });
    }

    walk.close = function(obj) {
        $(obj).parents('.walkthrough').hide();
        return false;
    }

    walk.goto = function(id, type) {
        id = id || '';
        type = type || '';
        if(type=='url') { return true; }
        
        // hide last walkthrough box
        if(walk.lastWalk) { $(walk.lastWalk).hide(); }
        
        // get new walkthrough box, show it and scroll to it
        var newWalk = $('#walkthrough-'+id);
        walk.lastWalk = newWalk;
        var topOffset = -50;
        if(id=='advertise') { topOffset = -285; }
        debug(newWalk.get());
        $(newWalk).show();
        $.scrollTo(newWalk, 'medium', {offset:{top:topOffset}});
        
        return false;
    }

})();

