/*
fm_setting - functionality specific to the FMC setting section

Created by John Hunter on 2009-03-18.
*/

// Fix to stop HTML mode displaying while Flash loads
if (window.swfobject && swfobject.hasFlashPlayerVersion('9.0.115')) {
    if (shouldDisplayFlash() === true) {
        document.writeln('<style type="text/css">#altContent { display: none; }</style>');
    }
}

if (!$.browser.mozilla) {
    document.writeln('<link href="/css/fm_setting_scrollbars.css" type="text/css" rel="stylesheet" />');
}

$(document).ready(function() {

    $('.jsShow').css('display', 'inline');

    $('#popup.staf span.validation.secondError').css('top', 'auto');

    $('#flashMovieOverlay').css({
        'opacity': '0.96',
        '-ms-filter:': '"progid:DXImageTransform.Microsoft.Alpha(Opacity=96)"',
        'filter': 'alpha(opacity=96)'
    });


    $('#settings').mouseover(function() {
        onMouseOverFlash();
    }).mouseout(function() {
        onMouseOutFlash();
    });

    $('#settings .buttons input, #popup .buttons input, #inner .buttons a').hover(
		function() {
		    $(this).css('background-image', 'url(/images/fm_setting/form_btn_on.gif)').css('color', '#FFF');
		},
		function() {
		    $(this).css('background-image', 'url(/images/fm_setting/form_btn_off.gif)').css('color', '#333');
		}
	).click(function() {
	    $(this).blur();
	});

    $('#settings a').click(function() {
        $(this).blur();
    });

    if (typeof flashObj == 'object') {
        // Set-up flash/html toggle link
        if (window.swfobject && swfobject.hasFlashPlayerVersion('9.0.115')) {
            if (flashObj.setToggleLink && flashObj.setToggleLink == true) {
                var subnavList = $('#sub-nav ul:first');
                subnavList.prepend('<li><a class="first" id="flash-link" href="."></a></li>');
                flashObj.setToggleLink = false;
                var flashLink = $('#flash-link');
                initMenu(flashLink.parent());
            }

            if (flashLink) {
                var viewMode = shouldDisplayFlash();
                if (flashObj.localisedStrings === undefined) {
                    flashObj.localisedStrings = { flashText: 'View Flash version', htmlText: 'View HTML version' }; // Fallback toggle text
                }
                flashLink.text(flashObj.localisedStrings[(viewMode ? 'htmlText' : 'flashText')]);
                flashLink.click(function(e) {
                    e.preventDefault();
                    shouldDisplayFlash(!viewMode);
                    window.location = this.href;
                });
            }
            // TODO: Copy functions from base.js in template folder
            if (shouldDisplayFlash()) {
                var flashvars = {
                    xml_loc: flashObj.xmlPath,
                    locale: flashObj.locale,
                    assetsXMLURL: flashObj.assetsXMLURL,
                    styleSheetURL: flashObj.styleSheetURL,
                    copyServiceURL: flashObj.copyServiceURL,
                    productsServiceURL: flashObj.productsServiceURL,
                    jewellerLocatorURL: flashObj.jewellerLocatorURL,
                    deeplink: flashObj.deeplink,
                    personalMessage: flashObj.personalMessage,
                    htmlVersionURL: flashObj.htmlVersionURL,
                    personalMessageSender: flashObj.personalMessageSender
                };
                var params = {
                    menu: "false",
                    scale: "noScale",
                    allowscriptaccess: "always",
                    wmode: "opaque"
                };
                var attributes = {
                    id: "main_flash",
                    name: "main_flash"
                };
                swfobject.embedSWF(flashObj.swfPath, flashObj.elemId, "100%", "385", "9.0.115", "/swf/expressInstall.swf", flashvars, params, attributes);
            }
        }
    }

    personalMessage.init();

    var popupCloseBtn = $('#popup.exclUpdates .closePopup, .closePopup');
    popupCloseBtn.click(function(e) {
        e.preventDefault();
        window.opener.onNewsletterFormSuccess();
        window.close();
    });

    var stafCloseBtn = $('#popup.staf .closePopup');
    stafCloseBtn.click(function(e) {
        e.preventDefault();
        window.opener.onSendToAFriendFormSuccess();
        window.close();
    });

    var hearAboutUs = $('#hearAboutUsList_ddlHearAboutUsV2');
    setOtherFieldDisplay(hearAboutUs, true);
    hearAboutUs.change(function() { setOtherFieldDisplay(hearAboutUs, false); });

    function setOtherFieldDisplay(elem, dontRefresh) {
        var selectedOpt = elem.find('option:selected');
        var specifyOtherLabel = $('#specifyOther');

        if (!dontRefresh) selectedOpt.val();
        if (selectedOpt.val() == 'other') {
            var field = specifyOtherLabel.css('visibility', 'visible').find('input').focus();
            if (!dontRefresh) field.val('');
        }
        else {
            specifyOtherLabel.css('visibility', 'hidden');
        }
    }
});

// view html action for flash movie
function doViewHtmlVersion() {
    shouldDisplayFlash(false);
    window.location = window.location;
}

var recipientDetail = {
    emailAddress: ''
};

var personalMessage = function() {
    var that = {};
    var msgTextarea,
		loadingIndicator,
		sendUrl = '/Util/FMSetting/PersonalMessageHandler.ashx'; // set this to be the ajax handler

    that.init = function() {
        //console.log('init');

        var textareaVal = 'You are my...';
        if (typeof textAreaObj == 'object') {
            textareaVal = textAreaObj.initValue;
        }

        msgTextarea = $('#personalMessageForm1 textarea');
        msgTextarea.val('\n\n' + textareaVal);
        msgTextarea.focus(function() {
            if ($(this).val() == '\n\n' + textareaVal) $(this).val('');
        }).blur(function() {
            if ($(this).val() == '') $(this).val('\n\n' + textareaVal);
        });

        var pmPreviewRecipientEmailSpan = $('#popup #pmRecipientEmailAddress');
        if (pmPreviewRecipientEmailSpan.length > 0) {
            var thisEmailAddress;
            if (window.opener.recipientDetail.emailAddress != '') {
                thisEmailAddress = window.opener.recipientDetail.emailAddress;
            }
            else {
                thisEmailAddress = getUrlParam('email');
            }
            pmPreviewRecipientEmailSpan.text(thisEmailAddress);
        }

        loadingIndicator = $('#loading-indicator');
        loadingIndicator.css({
            'opacity': '0.7',
            '-ms-filter:': '"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"',
            'filter': 'alpha(opacity=70)'
        });

        var cancelLink = $('.cancelMsgLink');
        cancelLink.click(function(e) {
            e.preventDefault();
            personalMessage.showPanel('personalMessageSuccess');
        });

        /*
        The message form will consist of 3 panels - message, personal details, thanks. These will be hidden / shown in order. 
        .net validation controls will be used - triggered from the 'continue'/'submit' buttons on each panel.
        */
    };

    function showPanel(panelName) {
        //console.log('showPanel ', panelName);

        switch (panelName) {
            case 'personalMessageForm1':
                // hide current and display named panel
                $('#flashMovieOverlay').fadeIn(250, function() {
                    $('#personalMessageOverlay').fadeIn(250);
                });

                $('#' + panelName).fadeIn(250);
                var nextBtn = $('#' + panelName + ' .buttons input');
                nextBtn.click(function(e) {
                    e.preventDefault();
                    var validationSpans = $('#' + panelName).find('span.validation');
                    var t = setTimeout(function() {
                        var validNum = validationSpans.length;
                        var i = 0;
                        validationSpans.each(function() {
                            if ($(this).css('display') == 'none') {
                                i++;
                            }
                        });

                        //console.log('Num validated: '+i);
                        //console.log('Num required for validation: '+validNum);

                        if (i === validNum) {
                            $('#' + panelName).fadeOut(250, function() {
                                showPanel('personalMessageForm2');
                            });
                        }
                    }, 1000);
                });

                break;
            case 'personalMessageForm2':
                ReloadCaptcha();
                $('#' + panelName).fadeIn(250);

                recipientDetail.emailAddress = $('#personalMessageForm1 .pmRecipientEmail').val();

                var sendBtn = $('#' + panelName + ' .buttons input');
                sendBtn.click(function(e) {
                    e.preventDefault();
                    var validationSpans = $('#' + panelName).find('span.validation');
                    var t = setTimeout(function() {
                        var validNum = validationSpans.length;
                        var i = 0;
                        validationSpans.each(function() {
                            if ($(this).css('display') == 'none') {
                                i++;
                            }
                        });

                        //console.log('Num validated: '+i);
                        //console.log('Num required for validation: '+validNum);

                        if (i === validNum) {
                            // Post form 1 + 2 values via ajax
                            sendMessage($('#aspnetForm'));
                        }
                    }, 1000);
                });

                break;
            case 'personalMessageThankYou':
                $('#' + panelName).fadeIn(250);

                var thankyouRecipientEmailSpan = $('#personalMessageThankYou #pmRecipientEmailAddress');
                if (thankyouRecipientEmailSpan.length > 0) {
                    thankyouRecipientEmailSpan.text(recipientDetail.emailAddress);
                }

                var closeBtn = $('#' + panelName + ' .buttons input');
                closeBtn.click(function(e) {
                    e.preventDefault();
                    showPanel('personalMessageSuccess');
                });

                break;
            case 'personalMessageSuccess':
                $('#personalMessageThankYou').fadeOut(0, function() {
                    $('#personalMessageOverlay').fadeOut(250, function() {
                        $('#flashMovieOverlay').fadeOut(250, function() {
                            onPersonalMessageFormSuccess();
                        });
                    });
                    $('#personalMessageForm1, #personalMessageForm2').css('display', 'none');
                });
                break;
        }
    }

    function sendMessage(form) {
        //console.log('sendMessage');
        loadingIndicator.fadeIn(250);
        $.ajax({
            type: 'POST',
            url: sendUrl,
            data: form.serialize(),
            success: handleSuccess,
            error: handleError
        });
    }

    function handleSuccess(res) {
        loadingIndicator.fadeOut(250);
        //console.log('ajax success: ', res);

        if (res == "status=failure") {
            $('#personalMessageForm2').fadeOut(250, function() {
                showPanel('personalMessageForm2');
                var validator = $(".captchaWrapper label span")[0];
                if (validator) {
                    $("#" + validator.id).show();
                }
                ReloadCaptcha();
            });
        }
        else {
            $('#personalMessageForm2').fadeOut(250, function() {
                showPanel('personalMessageThankYou');
            });
        }
    }

    function handleError(req, textStatus, errorThrown) {
        loadingIndicator.fadeOut(250);
        if (window.console && console.log) {
            console.log('http error ', (textStatus || errorThrown));
        }
    }

    function ReloadCaptcha() {
        var image = $('#LBD_CaptchaImage img')[0];
        if (LBD_ReloadImage && image) {
            LBD_ReloadImage(image.id);
        }
    }
    that.showPanel = showPanel;
    return that;
} ();

function getUrlParam(name, tmpURL) {
    var regexS = "[\\?&]" + name + "=([^&#]*)";
    var regex = new RegExp(regexS);
    tmpURL = (tmpURL) ? tmpURL : window.location.href;
    var results = regex.exec(tmpURL);
    if (results == null) return false;
    else return results[1];
}

//----------------------------------------------------------------------
//
//  Flash JavaScript API
//
//----------------------------------------------------------------------

// FLASH OBJECT
// Returns the embedded flash object.
function getFlashObject() {
    return document.getElementById("main_flash");
}
// Passes MouseOver events to Flash.
function onMouseOverFlash() {
    try { getFlashObject().onMouseOverFlash(); } catch (e) { };
}
// Passes MouseOut events to Flash.
function onMouseOutFlash() {
    try { getFlashObject().onMouseOutFlash(); } catch (e) { };
}

// NEWSLETTER
// Called by flash to open the Newsletter form.
function openNewsletterForm() {
    var win = window.open(popupUrls.exclUpdates, 'exclUpdatesWin', 'height=622,width=760,resizable');
    if (window.focus) win.focus();
}
// Call to flash when form is sucessfully submitted.
function onNewsletterFormSuccess() {
    try { getFlashObject().onNewsletterFormSuccess(); } catch (e) { };
}

// PERSONAL MESSAGE
// Called by flash to open the Personal Message form.
function openPersonalMessageForm() {
    personalMessage.showPanel('personalMessageForm1');
    $('#settings .form textarea').val('').focus().blur();
    $('#settings .form label input').val('');
    $('#settings .form label select').find('option:first').attr('selected', 'selected');
    $('#settings .form label.checkbox input:checked').attr('checked', '');
    $('#settings .form span.validation').css('display', 'none');
}
// Call to flash when form is sucessfully submitted.
function onPersonalMessageFormSuccess() {
    try { getFlashObject().onPersonalMessageFormSuccess(); } catch (e) { };
}

// SEND TO A FRIEND
// Called by flash to open the Send To A Friend form.
function openSendToAFriendForm() {
    var win = window.open(popupUrls.staf, 'stafWin', 'height=560,width=760,resizable');
    if (window.focus) win.focus();
}
// Call to flash when form is sucessfully submitted.
function onSendToAFriendFormSuccess() {
    try { getFlashObject().onSendToAFriendFormSuccess(); } catch (e) { };
}

//----------------------------------------------------------------------

function chkEmail(source, args) {
    var CommaSep = $("#tbReceiverEmailAddress").val();
    if (CommaSep.indexOf(",") > -1) {
        var wordArray = CommaSep.split(',');
        var isValid = true;
        $.each(wordArray, function() {
            isValid = isValid && ValidateEmail(this);
        });
        if (wordArray.Length > 5) {
            var multitxt = $("#multifld").val(); ;
            $("#MultipleEmailValidator").text(multitxt);
            args.IsValid = false;
            return;
        }
    }
    else {
        isValid = ValidateEmail(CommaSep)
    }
    if (!isValid) {
        var invalidtxt = $("#invalidfld").val();
        $("#MultipleEmailValidator").text(invalidtxt);
        args.IsValid = false;
        return;
    } else {
        $("#MultipleEmailValidator").text("");
        args.IsValid = true;
        return;
    }
}

function ValidateEmail(email) {
    var regexp = /^[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z][ \t]*?$/
    return (email.indexOf(".") > 2) && (email.indexOf("@") > 0) && (regexp.test(email)) && (email.indexOf(".") < parseInt(email.length) - 2);
}