/**
 * Javascript Global Functions
 * 
 * @author Waltz.of.Pearls <maruolei@gmail.com, rollie@maxxdidit.com>
 * @version CVS or SVN: $Id$
 * @copyright Marketing MAXX Inc. <maxxdidit.com, hlmagazine.com>
 */

/*------------------------------------------------------------*\
 * fault tolerance for ie 6 browser
 * hide error message in ie 6's status bar
\*------------------------------------------------------------*/
//$(window).error(function() {
//    return true;
//});

/*------------------------------------------------------------*\
 * Encrypt email
\*------------------------------------------------------------*/
String.prototype.rrot13 = function() {
    var c = '', str = '', arr = [], len = 0;
    arr = this.split('');
    len = arr.length
    for (var i = 0; i < len; i++) {
        if (arr[i].match(/[a-zA-Z]/g)) {
            c = arr[i];
            c = String.fromCharCode((c<="Z"?90:122)>=(c=c.charCodeAt(0)+13)?c:c-26);
        } else {
            c = arr[i];
        }
        str += c;
    }   //end for
    return str;
}   //end function
/*------------------------------------------------------------*\
 * Alert and confirm popup dialog
\*------------------------------------------------------------*/
function _alert(sAlertMessage, hParams)
{
    var sAlertContent = '';
    sAlertMessage += '\n\n';
    hParams = hParams || {};
    sContainer = hParams.container || '#dialog';
    iAlertWidth = hParams.alertWidth || 390;
    iAlertHeight = hParams.alertHeight || 150;
    oDomFocus = hParams.domFocus || null;
    fAlertCallback = hParams.alertCallback || function() {};
    sAlertType = hParams.alertType || 'warning';
    sRedirectUrl = hParams.redirectUrl || null;
    sOkLabel = hParams.okLabel || 'Ok';
    sAlertContent = '<div style="text-align:left;padding:8px 15px 0 50px;margin-top:7px;'
                  + 'background: url(' + _sImgUrl + 'icon/icon_' + sAlertType + '.gif) no-repeat 10px 0px;">'
                  + sAlertMessage.replace(/\n/g, '<br />') + '</div>';
    $(sContainer)
        .dialog('open')
        .dialog({
            width: iAlertWidth,
            minWidth: iAlertWidth,
            minHeight: iAlertHeight,
            resizable: false,
            buttons: {'alertOk': function() {
                $(this).dialog('close').dialog('destory');
                if (jQuery.isFunction(fAlertCallback))
                    fAlertCallback();
                if (oDomFocus)
                    oDomFocus.focus();
                if (sRedirectUrl)
                    window.location.replace(sRedirectUrl);
            }},
            modal: false,
            overlay: {opacity: 0.25, background: 'black'}
        })
        .html(sAlertContent);
    $("button[type='button']").each(function(index, element) {
        if ('alertOk' == $(element).html())
            $(this).text(sOkLabel);
    });
}   //end function
function _confirm(sConfirmMessage, hParams)
{
    var sConfirmContent = '';
    sConfirmMessage += '\n\n';
    hParams = hParams || {};
    sContainer = hParams.container || '#dialog';
    iConfirmWidth = hParams.confirmWidth || 390;
    iConfirmHeight = hParams.confirmWidth || 150;
    oOnOkFocus = hParams.onOkFocus || null;
    oOnCancelFocus = hParams.onCancelFocus || null;
    sConfirmType = hParams.confirmType || 'warning';
    sOnOkUrl = hParams.onOkUrl || null;
    sOnCancelUrl = hParams.onCancelUrl || null;
    sOnOkEval = hParams.onOkEval || null;
    sOnCancelEval = hParams.onCancelEval || null;
    fOnOkCallback = hParams.onOkCallback || function() {};
    fOnCancelCallback = hParams.onCancelCallback || function() {};
    sOkLabel = hParams.okLabel || 'Ok';
    sCancelLabel = hParams.cancelLabel || 'Cancel';
    sConfirmContent = '<div style="text-align:left;padding:8px 15px 0 50px;'
                    + 'background: url(' + _sImgUrl + 'icon/icon_' + sConfirmType + '.gif) no-repeat 10px 0px;">'
                    + sConfirmMessage.replace(/\n/g, '<br />') + '</div>';
    $(sContainer)
        .dialog('open')
        .dialog({
            width: iConfirmWidth,
            minWidth: iConfirmWidth,
            minHeight: iConfirmHeight,
            resizable: false,
            buttons: {'confirmCancel': function() {
                $(this).dialog('close').dialog('destory');
                if (sOnCancelEval)
                    eval(sOnCancelEval);
                if (jQuery.isFunction(fOnCancelCallback))
                    fOnCancelCallback();
                if (oOnCancelFocus)
                    oOnCancelFocus.focus();
                if (sOnCancelUrl)
                    window.location.replace(sOnCancelUrl);
            }, 'confirmOk': function() {
                $(this).dialog('close').dialog('destory');
                if (hParams.onOkEval)
                    eval(sOnOkEval);
                if (jQuery.isFunction(fOnOkCallback))
                    fOnOkCallback();
                if (oOnOkFocus)
                    oOnOkFocus.focus();
                if (sOnOkUrl)
                    window.location.replace(sOnOkUrl);
            }},
            modal: false,
            overlay: {opacity: 0.25, background: 'black'}
        })
        .html(sConfirmContent);
    $("button[type='button']").each(function(index, element) {
        if ('confirmOk' == $(element).html())
            $(this).text(sOkLabel);
        else if ('confirmCancel' == jQuery(element).html())
            $(this).text(sCancelLabel);
    });
}   //end function
/*------------------------------------------------------------*\
 * Click on the image to change verification code
\*------------------------------------------------------------*/
var gsVerifyImage = '';
function changeVerificationCode(oImg)
{
    var iRandomNumber = Math.floor(Math.random() * 100000000);
    gsVerifyImage = !gsVerifyImage ? jQuery(oImg).attr('src') : gsVerifyImage;
    $(oImg).attr('src', gsVerifyImage + '?' + iRandomNumber);
}   //end function
/*------------------------------------------------------------*\
 * Functions for login & logout & pop up dialog window
\*------------------------------------------------------------*/
function dialogLoginForm()
{
    $('#dialog-login-form')
        .dialog('open')
        .dialog({
            width: 400,
            minWidth: 400,
            minHeight: 200,
            resizable: false,
            buttons: {
                'Cancel': function() {
                    $(this).dialog('close').dialog('destory');
                },   //function
                'Login': function() {
                    execLoginProc();
                }   //end function
            },
            close: function(event, ui) {
                dialogLoginFormInit();
            },
            modal: true,
            overlay: {opacity: 0.75, background: 'black'}
        })
        .find('form#form-login').show()
        .find('input#username').focus();

    return void(0);
}   //end function
function dialogLoginFormInit()
{
    var oForm = $('#form-login');
    oForm.find('#login-errmsg').hide();
    oForm.find(':text, :password').val('');
    changeVerificationCode($('#verification-image'));
}   //end function
function dieLoginError(oErrorObject, sErrorMessage)
{
    $('#form-login').show();
    $('#login-message').hide();
    $('#login-errmsg').show().html(sErrorMessage);
    oErrorObject.focus();
 
    return false;
}   //end function
function checkLoginVerificationCode(sCode)
{
    var sAjaxUrl = garGlobalUrls['user'];
    var sReturn = $.ajax({
        type: 'GET',
        url: sAjaxUrl,
        async: false,
        data: {
            action: 'check_login_vcode',
            vcode: sCode
        }
    }).responseText;
    if ('OKY' == sReturn.substr(0, 3)) {
        return true;    // pass the verification
    } else {
        return false;   // don't pass
    }   //end if
}   //end function
function doLogin(arParams)
{
    var sUsername = arParams['u'], sPassword = arParams['p'], sVerification = arParams['v'];
    var sAjaxUrl = garGlobalUrls['user'];
    var sReturn = $.ajax({
        type: 'GET',
        url: sAjaxUrl,
        async: false,
        data: {
            action: 'login',
            u: sUsername,
            p: sPassword,
            v: sVerification
        }
    }).responseText;
    if ('OKY' == sReturn.substr(0, 3)) {
        return true;    // pass
    } else {
        return sReturn.split(' ');   // don't pass
    }   //end if
}   //end function
function execLoginProc()
{
    var oForm = $('#form-login'), oDialog = $('#login-message');
    var oUsername = oForm.find(':text[name="username"]'),
        oPassword = oForm.find(':password[name="password"]'),
        oVerification = oForm.find(':text[name="verification"]');
    var sUsername = $.trim(oUsername.val()), sPassword = $.trim(oPassword.val()), sVerification = $.trim(oVerification.val()),
        arLoginParams, mRetval;
    oForm.hide();
    oDialog.show();
    if (!sUsername)
        return dieLoginError(oUsername, '<strong>Username</strong> cannot be left blank');
    if (!sPassword)
        return dieLoginError(oPassword, '<strong>Password</strong> cannot be left blank');
    if (!sVerification)
        return dieLoginError(oVerification, '<strong>Verification</strong> code cannot be left blank');
    else if (!sVerification.match(/[0-9]{4}/))
        return dieLoginError(oVerification, 'Please input a 4-digit <strong>verification</strong> code.');
    if (!checkLoginVerificationCode(sVerification)) {
        changeVerificationCode($('#verification-image'));
        return dieLoginError(oVerification, 'The <strong>numbers</strong> you entered didn&#39;t match the verification code. Please try again.');
    }   //end if
    arLoginParams = {u:sUsername, p:sPassword, v:sVerification};
    mRetval = doLogin(arLoginParams);
    if (true != mRetval) {
        changeVerificationCode($('#verification-image'));
        switch (parseInt(mRetval[1])) {
            case 101: return dieLoginError(oVerification, 'The <strong>numbers</strong> you entered didn&#39;t match the verification code. Please try again.'); break;
            case 102: return dieLoginError(oUsername, 'The <strong>username</strong> you entered didn&#39;t doesn&#39;t exist. Please try again.'); break;
            case 103: return dieLoginError(oPassword, 'The <strong>password</strong> you entered didn&#39;t validate. Please try again.'); break;
        }   //end switch
    }   //end if
    $('#dialog-login-form').dialog('close').dialog('destory');
    location.href = location.href;
}   //end function

function dialogLoading(sMessage, bCloseIt)
{
    if (bCloseIt) {
        $('#dialog-loading').dialog('close').dialog('destory');
        return void(0);
    }   //end if
    $('#dialog-loading')
        .dialog('open')
        .dialog({
            width: 400,
            minWidth: 400,
            minHeight: 200,
            resizable: false,
            modal: true,
            overlay: {opacity: 0.75, background: 'black'}
        })
        .find('#loading-message').show()
        .html('&nbsp;<img src="' + _sImgUrl + 'loading.gif" alt="Loading..." />&nbsp;<br /><span>' + sMessage + '</span>');
    $('div.ui-dialog-titlebar').hide();

    return void(0);
}   //end function
function execLogoutProc()
{
    dialogLoading('Logging out...');
    var sAjaxUrl = garGlobalUrls['user'];
    var sReturn = $.ajax({
        type: 'GET',
        url: sAjaxUrl,
        async: false,
        data: {action: 'logout'}
    }).responseText;
    if ('OKY' == sReturn.substr(0, 3))
        ; // pass
    $('#dialog-logout').dialog('close').dialog('destory');
    location.href = location.href;

    return void(0);
}   //end function

function dieSubmitError(sFormSelector, oErrorObject, sErrorMessage)
{
    $('.form-error-message').show().html(sErrorMessage);
    oErrorObject.focus();
    showFormSubmittingStatus(sFormSelector, false);

    return false;
}   //end function
function showFormSubmittingStatus(sFormSelector, bIsLoading)
{
    if (bIsLoading) {
        $(sFormSelector + ' :submit')
            .attr('disabled', 'true')
            .val('Submitting...')
            .css({
                color: '#999',
                border: '1px solid #999'
            });
    } else {
        $(sFormSelector + ' :submit')
            .removeAttr('disabled')
            .val('Submit')
            .css({
                color: '#011931',
                border: '1px solid #91adc5'
            });
    }   //end if
}   //end function
/*------------------------------------------------------------*\
 * Questions
\*------------------------------------------------------------*/
function formNewsletterSubmitting(sFormSelector, bIsSubmitting)
{
    if (bIsSubmitting) {
        $(sFormSelector + " .last > img").show();
        $(sFormSelector + " input, textarea, button").attr("disabled", "disabled");
    } else {
        $(sFormSelector + " .last > img").hide();
        $(sFormSelector + " input, textarea, button").removeAttr("disabled");
    }   //end if
}   //end function
function dieFormNewsletterError(sFormSelector, oErrorObject, sErrorMessage)
{
    $(sFormSelector + " .form-error-message").show().html(sErrorMessage);
    formQuestionSubmitting(sFormSelector, false);
    oErrorObject.focus();

    return false;
}   //end function






/**
 * Javascript Rendering amd Executing Codes
 * 
 * @author Waltz.of.Pearls <maruolei@gmail.com, rollie@maxxdidit.com>
 * @version CVS or SVN: $Id$
 * @copyright Marketing MAXX Inc. <maxxdidit.com, hlmagazine.com>
 */

jQuery(function() {
    var bIsMSIE = $.browser.msie;
    var flashvars = {};
    var params = {};
    var attributes = { wmode: 'transparent' };
   	if (0 < $('#block-main-swf').length) {
	        swfobject.embedSWF('http://myaccountant.ca/gui/img/flash/myaccountant-main.swf', 'block-main-swf', '647', '427', '9.0.1', flashvars, params, attributes);
	    }   //end if

    if (0 < $("#navigation").length) {
        var oTopLevelNavItems = $("#navigation > .nav-main > ul > li"), sNavBtnHovered = "";
        oTopLevelNavItems.hover(function() {
            oTopLevelNavItems.each(function() {
                $(this).find("> ul").hide();
                $(this).find("> a").css({
                    "background-image": "none",
                    color: "#fcfcfc"
                });
            });
            $(this).find("> a").css({
                "background": "url(" + _sImgUrl + "top-nav-bg-on.png) no-repeat",
                color: "#022543"
            });
        }, function() {});
        $("#navigation > .nav-main > ul > li:has(ul)").hover(function() {
            $(this).find("> ul").show();
            $(this).find("> ul > li:has(ul)").hover(function() {
                var oMenu = $(this).find('> ul');
                if (oMenu.is(':animated')) {
                    oMenu.stop(true, true).slideDown('normal');
                } else {
                    oMenu.slideDown('normal');
                }   //end if
            }, function() {
                var oMenu = $(this).find('> ul');
                if (oMenu.is(':animated')) {
                    oMenu.stop(true, true).slideUp('fast');
                } else {
                    oMenu.slideUp('fast');
                }   //end if
            });
        }, function() {});
        switch (garGlobalVars["m"]) {
            case "": sNavBtnHovered = "home"; break;
            default: sNavBtnHovered = garGlobalVars["m"]; break;
        }   //end switch
        $("#nbtn-" + sNavBtnHovered + " > a").css({
            "background": "url(" + _sImgUrl + "top-nav-bg-on.png) no-repeat",
            color: "#022543"
        });
        $("#nbtn-" + sNavBtnHovered + " > ul").show();
    }   //end if
    /*------------------------------------------------------------*\
     * <a rel="external"> == <a target="_blank">
    \*------------------------------------------------------------*/
    $('a').each(function(){
        if ('external' == $(this).attr('rel')) {
            $(this).attr('target', '_blank');
        }   //end if
    });
    /*------------------------------------------------------------*\
     * Encrypt email
    \*------------------------------------------------------------*/
    var oEncryptedEmailContainer = $('.encrypted-email-container');
    if (0 < oEncryptedEmailContainer.length) {
        oEncryptedEmailContainer.find('a').each(function() {
            $(this)
                .text($(this).text().rrot13())
                .attr('href', $(this).attr('href').rrot13());
        });
    }   //end if
    /*------------------------------------------------------------*\
     * Login pop up dialog
    \*------------------------------------------------------------*/
    if (0 < $('form#form-login').length) {
        $("form#form-login input").keyup(function(event) {
            if (13 == event.keyCode)
                $("form#form-login").submit();
        });
        $('form#form-login').submit(function() {
            execLoginProc();
            return false;
        });
    }   //end if
    /*------------------------------------------------------------*\
     * Login for admin
    \*------------------------------------------------------------*/
    if (0 < $('form#admin-login-form').length) {
        $('#admin-login-message > div').hide();
        $('#admin-login-form :text[name="username"]').focus();
        $('#admin-login-form').submit(function(){
            var oUsername = $('#admin-login-form :text[name="username"]');
            var oPassword = $('#admin-login-form :password[name="password"]');
            var oVerification = $('#admin-login-form :text[name="verification"]');
            var sUsername = $.trim(oUsername.val()), sPassword = $.trim(oPassword.val()), sVerification = $.trim(oVerification.val());
            var arLoginParams, mRetval;
            if (!sUsername) {
                return dieLoginError(oUsername, '<strong>Username</strong> cannot be left blank');
            }   //end if
            if (!sPassword) {
                return dieLoginError(oPassword, '<strong>Password</strong> cannot be left blank');
            }   //end if
            if (!sVerification) {
                return dieLoginError(oVerification, '<strong>Verification</strong> code cannot be left blank');
            } else if (!sVerification.match(/[0-9]{4,4}/)) {
                return dieLoginError(oVerification, 'Please input a 4-digit <strong>verification</strong> code.');
            }   //end if
            showLoadingStatus(true);
            if (!checkLoginVerificationCode(sVerification)) {
                changeVerificationCode($('#verification-image'));
                showLoadingStatus(false);
                return dieLoginError(oVerification, 'The <strong>numbers</strong> you entered didn&#39;t match the verification code. Please try again.');
            }   //end if
            arLoginParams = {u:sUsername, p:sPassword, v:sVerification};
            mRetval = doLogin(arLoginParams);
            if (true != mRetval) {
                changeVerificationCode($('#verification-image'));
                showLoadingStatus(false);
                switch (parseInt(mRetval[1])) {
                    case 101: return dieLoginError(oVerification, 'The <strong>numbers</strong> you entered didn&#39;t match the verification code. Please try again.'); break;
                    case 102: return dieLoginError(oUsername, 'The <strong>username</strong> you entered didn&#39;t doesn&#39;t exist. Please try again.'); break;
                    case 103: return dieLoginError(oPassword, 'The <strong>password</strong> you entered didn&#39;t validate. Please try again.'); break;
                }   //end switch
            }   //end if
            return true;
        });
    }   //end if
    /*------------------------------------------------------------*\
     * Testimonials Slide Show
    \*------------------------------------------------------------*/
    if (0 < $("#block-testimonials").length) {
        $("#testimonial-digests").cycle({
            pause: 1,
            timeout: 10000
        });
        $("#testimonial-digests > div.testimonial").hover(function() {
            $("#testimonial-box").html($(this).html()).fadeIn();
            $("#testimonial-box").hover(function() {}, function() {
                $("#testimonial-box").html("").fadeOut();
            })
        }, function() {});
    }   //end if
    if (0 < $("form#form-enewsletter").length) {
        $("form#form-enewsletter").submit(function() {
            $(this).attr("target", "_blank");
            return true;
        });
    }   //end if
});


