/*******************************************************************
 * MyPlan JS functions
 *******************************************************************/

/**
 * Login/Register: called from radio buttons and as a response to code
 * execution.
 *
 * Displays the requested screen in the 'register container',
 * which is simply a DIV where registration-related stuff is displayed.
 *
 * The following screens are available
 * - new: shows a registration form
 * - existing: shows a login form
 * - activate: shows a form used for user activations
 * - loginfail: shows a login failed message
 *
 * This requires two lines set in header.tpl, p_url and p_pageurl.
 *
 * @param p_value One of new, existing, activate, loginfail
 */
function register_container_controller(p_value)
{
    if(p_value == "new") { 

        $('#rb_register').checked=true;
        var url = p_pageurl + '?step=register_ajax&function=registerForm';
    } else if(p_value == "existing") {

//        loc = String(document.location)
//        len = loc.length
//        if (loc.substring(len, len-20) == 'sponsorachild?step=1' || loc.substring(len, len-25) =='beapartofit/childrenfirst' || loc.substring(len, len-25) =='beapartofit/donate?step=1' || loc.substring(len, len-23) =='beapartofit/shop?step=3') {
//            document.register_form.rb_login.checked = false;
//            document.register_form.rb_register.checked = false;
//            document.register_form.submit();
//            return;
//        }

        $('#rb_login').checked=true;
        var url = p_pageurl + '?step=register_ajax&function=loginForm';
    } else if(p_value == "activate") {
        var url = p_pageurl + '?step=register_ajax&function=activateForm';
    } else if(p_value =="loginfail") {
        var url = p_pageurl + '?step=register_ajax&function=loginFormFail';
    }
    animation_display("Loading...");
    //var ajaxUpdater = new Ajax.Updater('register_container', url, {method: 'get', evalScripts: true });
    $.ajax({type: "GET", url: url,     complete: function(data){
        $('#register_container').html(data.responseText);
    }});

}


/**
 * Login/Register: runs on form submit for the RPP.
 *
 * For login/register, it detects form actions and ajax-submits
 * responses.  For all other pages, it performs a regular form submit.
 */
function register_container_processor()
{
    // Detect whether we are in the login/register/activate pages,
    // which are AJAX-powered
    var login, register, activate;
    if ($('#rb_login') && ($('#rb_register'))) {
        login = $('#rb_login').is(':checked');
        register = $('#rb_register').is(':checked');
    } else {
        login = false;
        register = false;
    }
    if ($('#activate').val()) {
        activate = $('#activate').val();
    } else {
        activate = false;
    }

    // Activating an existing user that has never logged in before - AJAX
    if (activate) {
        var email = $('#email').val();
        var oldHTML = animation_display("Loading your details...");
        //new Ajax.Updater('register_container', p_pageurl + '?step=register_ajax&function=activate&email=' + email, {method: 'get' ,
        //    evalScripts: true });
        //$('#register_container').load(p_pageurl + '?step=register_ajax&function=activate&email=' + email);
        $.ajax({type: "GET", url: p_pageurl + '?step=register_ajax&function=activate&email=' + email, 
            success: function(data){$('#register_container').html(data);}}
                
        );

    // Logging in an existing user - AJAX
    } else if (login) {
        var email = $('#email').val();
        var password = $('#password').val();
        animation_display("Loading your details...");
        login_validator(email, password);

    // Registering a new user - AJAX
    } else if (register) {

        var postVars = register_get_vars();
        //postVars += 'userType=new&';
        animation_display("Loading...");
        //new Ajax.Updater('register_container', p_pageurl + '?step=register_ajax&function=register', {method: 'post' ,
        //    postBody: postVars,
        //    evalScripts: true });
        //$('#register_container').load(p_pageurl + '?step=register_ajax&function=register', postVars);
        $.ajax({type: "POST", url: p_pageurl + '?step=register_ajax&function=register', data: postVars, dataType: 'html',
            success: function(data){

                // validation failure, show the form
                $('#register_container').html(data);

                if (match = /SSUUCCCCEESS/i.exec(data)) {
                    // all okay, redirect
                    if(match = /myplan/i.exec(location.href)){
                        window.location = p_url + "/myplan";
                    } else {
                        //select login option
                        //$('#rb_login').checked = true;

                        //submit form
                        $('#register_form').submit();
                        
                    }
                    
                }
                
                
                
            }
        }
                
        );

    // A non-AJAX form - submit normally.
    }  else {
        document.register_form.submit();
    }
}

/**
 * Private: Called by register_container_processor for registrations
 * @return string
 */
function register_get_vars()
{

    //var formSubmit = $('register_form').elements;
    var postVars ='';

    //var formSubmit = $('#register_form:input');

    postVars = $('#register_form').serialize();

    return postVars;

}

/**
 * Private: called by register_container_processor.
 * It makes an AJAX call to validate a person's login credentials,
 * and calls login_validator_callback() on complete.
 * @param email
 * @param password
 * @param oldHTML
 * @return
 */
function login_validator(email, password, oldHTML)
{

    //params to send
    var pars = 'email=' + email + '&password=' + password;

    //Url to post AJAX requet to
    var url = p_pageurl + '?step=register_ajax&function=login';

    /*
    var userLogin = new Ajax.Request(
        url,
        {
            method: 'post',
            parameters: pars,
            evalScripts: true,
            onComplete: login_validator_callback
        });
    */
    $.ajax({url: url, type: "POST", data: pars, complete: login_validator_callback});


}


/**
 * Private: callback function for AJAX login call.
 * It parses the response.
 *
 * @param transport
 * @return
 */
function login_validator_callback(transport)
{
    //alert(transport.responseText);
    //On OK from ajax call
    if(match = /OK/i.exec(transport.responseText)) {
    //alert(205);    
        //if in myplan.. forward to default page
        if(match = /myplan/i.exec(location.href)){
            // alert(208);  
            window.location = p_url + '/myplan';
        } else {
                  //alert(211);  
            register_container_controller('existing');
        }

    } else {
          //alert(216);  
        //reload login form
        register_container_controller('loginfail');
    }
      // alert(220);  
}


/**
 * Displays the loading animation in the register container
 *
 * @param p_heading The message to display to the user
 * @return string The old html that used to be in the container
 */
function animation_display(p_heading)
{

    
    //var register_container = $('#register_container');
    var register_container = document.getElementById('register_container');
     //global
    var oldHTML = register_container.innerHTML;

        //set to loading state
    register_container.innerHTML = '<div align="center"> <strong>'+ p_heading +'</strong> <br />'+
        '<img src="' + p_url + '/freestyler/modules/custom/images/common/indicator.gif" alt="Loading" title="Loading" />' +
        '</div>';

    return oldHTML;

}


/**
 * Register: Displays a textbox if a user selects 'other' from the list of states.
 *
 * @param p_select
 * @return true
 */
function stateSelect(p_select)
{
    if(p_select.value =="OTHER"){
        //Element.show('myplan_register_stateother_validation');
        $('myplan_register_stateother_validation').show();
        return true;
    }
    //Element.hide('myplan_register_stateother_validation');
    $('myplan_register_stateother_validation').hide();
    return true;
}

function setXHTMLSupport(p_data)
{

    if(!getCookie("hasXHTMLSupport")){
        if(hasXMLHTTP()){
            var url        = p_data;
            var pars    = "testXHTTPSupport=1";
            $.ajax({url: url, data: pars, success: ajaxResponse});

            /*
            var myAjax = new Ajax.Request(
                url,
                {
                    method: 'get',
                    parameters: pars,
                    onComplete: ajaxResponse
                });
            */
        }
    }
}

function ajaxResponse()
{
    setCookie("hasXHTMLSupport", 1, '', '/');
}


/**
 * Used in Register template: displays optional fields based
 * on user type.
 *
 * @param p_form
 * @param p_element
 * @param p_field
 * @return
 */
function registrationSponsorType(p_form, p_element, p_field)
{
    switch(p_element) {
        //individual
        case "IV":
            //Element.hide(p_form + '_shared_sponsor');
            $('#' + p_form + '_shared_sponsor').hide();
            //Element.hide(p_form + '_organisation');
            $('#' + p_form + '_organisation').hide();
            $('#' + p_field + 'title2').value = "";
            $('#' + p_field + 'first_name2').value = "";
            $('#' + p_field + 'surname2').value = "";
            $('#' + p_field + 'orgtitle').value = "";
            $('#' + p_field + 'orgname').value = "";

        break;
        //shared
        case "SH":
            //Element.show(p_form + '_shared_sponsor');
            $('#' + p_form + '_shared_sponsor').show();
            //Element.hide(p_form + '_organisation');
            $('#' + p_form + '_organisation').hide();
            $('#' + p_field + 'orgtitle').value = "";
            $('#' + p_field + 'orgname').value = "";
        break;
        //company/organisation
        case "CP":
            //Element.hide(p_form + '_shared_sponsor');
            $('#' + p_form + '_shared_sponsor').hide();
            //Element.show(p_form + '_organisation');
            $('#' + p_form + '_organisation').show();
            $('#' + p_field + 'title2').value = "";
            $('#' + p_field + 'first_name2').value = "";
            $('#' + p_field + 'surname2').value = "";
        break;

        default:

        break;
    }

}

/**
 * Used in Register template: if prior donation flag is set,
 * display the processing delay warning message.
 *
 * @param p_form
 * @param p_element
 * @param p_field
 * @return
 */
function registrationPridon(p_form, p_element, p_field)
{
    switch(p_element) {
        //yes
        case "on":
            //Element.addClassName('myplan_register_pridon_validation', 'myplan_register_message');
            $('myplan_register_pridon_validation').addClass('myplan_register_message');
            //Element.show(p_form + '_yes');
            $('#' + p_form + '_yes').show();
        break;
        //no
        case "off":
            //Element.removeClassName('myplan_register_pridon_validation', 'myplan_register_message');
            $('myplan_register_pridon_validation').removeClass('myplan_register_message');
            //Element.hide(p_form + '_yes');
            $('#' + p_form + '_yes').hide();
        break;

        default:
            //Element.removeClassName('myplan_register_pridon_validation', 'myplan_register_message');
            $('myplan_register_pridon_validation').removeClass('myplan_register_message');
            //Element.hide(p_form + '_yes');
            $('#' + p_form + '_yes').hide();
        break;
    }

}


function myPlanLoginToggle()
{
        //Element.toggle('myplan_login_recover_part1_div');
    $('myplan_login_recover_part1_div').toggle();
        if($('#loginButton')){
            //Element.toggle('loginButton');
            $('#loginButton').toggle();
            //Element.toggle('recoverButton');
            $('#recoverButton').toggle();
        }
}


function myPlanFormSubmit(p_siteURL, form)
{
    //global site url for images etc...
    SITEURL = p_siteURL;

    try{
        if($('#userType1').checked)    {
            try {
                if ( $('#myplan_login_username').val() ){
                        loadUserPlanSysData(p_siteURL, $('#myplan_login_username').val(), $('#myplan_login_password').val());
                    } else {
                        if(match = /myplan/i.exec(location.href)){
                            window.location.reload();
                        } else {
                            form.submit();
                        }
                    }

                }
                catch (e){
                    if(match = /myplan/i.exec(location.href)){
                        window.location.reload();
                    } else {
                        form.submit();
                    }
                }

        }  else {
            form.submit();
        }
    }
    catch(e){
        form.submit();
    }


}

function loadUserPlanSysData(p_url, p_username, p_password)
{
    //return if user does not have xmlhttp support
    if(!hasXMLHTTP()) {
        document.myplan.submit();
        return;
    }

    //login div
    var loginDiv = $('myplanLogin');

    //global
    oldHTML = loginDiv.innerHTML;

    //set to loading state
    loginDiv.innerHTML = '<div align="center"> <strong>Loading your details...</strong> <br />'+
                             '<img src="' + p_url + '/freestyler/modules/custom/images/common/indicator.gif" alt="Loading" title="Loading" />' +
                         '</div>';

    var url = p_url + '/myplan/login?step=ajaxUserLoad';
    var pars = 'userType=existingUser&myplan_login_username=' + p_username + '&myplan_login_password=' + p_password;

    logUserIn(pars, url);

}


function logUserIn(p_pars, p_url)
{
    /*
    var userLoadAjax = new Ajax.Request(
                            p_url,
                            {
                                method: 'post',
                                parameters: p_pars,
                                onComplete: onUserLoad
                            });
    */

    $.ajax({url: p_url, type: "POST", data: p_pars, complete: onUserLoad});
}



/**
 * Login: a callback function which runs after the ajax login call to detect failed/successful logins.
 * @param originalRequest
 * @return
 */
function onUserLoad(originalRequest)
{
    var postLoginHTML =
        '<div align="center"> <strong>Your details have been successfully loaded.</strong> <br />'+
        '</div>' +
        '<div id="loggedin">' +
         '<fieldset>' +
         '<div id="submitBotton">' +
         '<input type="hidden" name="userType"  value="loggedin">' +
         '<input type="hidden" name="orderSubmit" value="1" />' +
         '<input type="hidden" name="detailSubmit" value="1" />' +
         '<input type="submit" name="detailSubmit" value="Continue" class="button" >' +
         '</div>' +
         '</fieldset>' +
         '</div>';

    if(match = /failed/i.exec(originalRequest)){
        // Login failed.
        $('#myplanLogin').html(oldHTML);
        alert("Could not authenticate you.");
        //Element.show('submitButton');
        $('#submitButton').show();

    } else if( match = /success/i.exec(originalRequest)) {
        // Login succeeded
        if(match = /myplan/i.exec(location.href)){
            //reload page if in myplan scope
            window.location = SITEURL + '/myplan';
        } else {
            $('#myplanLogin').html(postLoginHTML);
        }

    } else {
        // Login broke
        $('#myplanLogin').html(oldHTML);
        alert("Could not authenticate you.");
        //Element.show('submitButton');
        $('#submitButton').show();
    }
}



/*****************************************************************
 * Utility functions
 *****************************************************************/


/**
 * Returns true if the browser supports XMLHTTP (AJAX), false othewise.
 * @return boolean
 */
function hasXMLHTTP()
{
    var testVar;
    try {
        if (window.XMLHttpRequest){ // if Mozilla, Safari etc
            return true;
        }
    } catch (e){}

    if (window.ActiveXObject) { // if IE
        try {
            testVar =  new ActiveXObject("Msxml2.XMLHTTP");
            return true;
        } catch (e) {}

        try{
            testVar = new ActiveXObject("Microsoft.XMLHTTP");
            return true;
        } catch (e){}
    }
    return false;
}

/**
 * Returns the value of a cookie specified by name.
 * @param name
 * @return mixed
 * http://www.webreference.com/js/column8/functions.html
 */
function getCookie(name)
{
    var dc = document.cookie;
    var prefix = name + "=";
    var begin = dc.indexOf("; " + prefix);
    if (begin == -1) {
        begin = dc.indexOf(prefix);
        if (begin != 0) return null;
    } else {
        begin += 2;
    }

    var end = document.cookie.indexOf(";", begin);
    if (end == -1) end = dc.length;
    return unescape(dc.substring(begin + prefix.length, end));
}


/**
 * Sets a cookie
 * @param name
 * @param value
 * @param expires
 * @param path
 * @param domain
 * @param secure
 * @return
 */
function setCookie(name, value, expires, path, domain, secure)
{
    var curCookie = name + "=" + escape(value) +
        ((expires) ? "; expires=" + expires.toGMTString() : "") +
        ((path) ? "; path=" + path : "") +
        ((domain) ? "; domain=" + domain : "") +
        ((secure) ? "; secure" : "");
    document.cookie = curCookie;
}


/**
 * Disable right mouse click Script
 * http://www.dynamicdrive.com
 */

var message="Function Disabled!";

function clickIE4()
{
    if (event.button==2){
        return false;
    }
}

function clickNS4(e)
{
    if (document.layers||document.getElementById&&!document.all) {
        if (e.which==2||e.which==3) {
            return false;
        }
    }
}

if (document.layers) {
    document.captureEvents(Event.MOUSEDOWN);
    document.onmousedown=clickNS4;
} else if (document.all&&!document.getElementById) {
    document.onmousedown=clickIE4;
}

document.oncontextmenu=new Function("return false")
