/**
 Austereo Custom Functionality
 CHANGELOG:
 20080926 - Born, broken out from todayNetwork custom JS.
 20081001 - Updating rotator to update every 3 seconds.
 20081002 - Moved more todayNetwork specific JS to fd.todayNetwork.custom.js.
 20081210 - Moved showControlPanelHeight to fd.todaynetwork.custom.js to allow for scrolling in the music widget (applicable only to Today brands).
 20081215 - Added an anchor tag check on the rotator thumbnail (to resolve which feature div is "active")
 **/


if(window['FD']) {
    FD.Austereo = function(fdOptions) {
        /**
         * Default options for a <code>FD.ChallengeSecurity</code>.
         *
         * @private
         */
        var defaultOptions = {
            contentRegoCheckerEmailCheckPath: "/action/membershipEmailCheck",
            contentRegoCheckerRedirctPath: "/membership/forgottenDetails",
            featureLoopDelay: 3000
        };
        /**
         * The final, merged version of the toggle text definition.
         * <p/>
         * This toggle text definition is the result of extending the <code>defaultOptions</code> object with our custom
         * parameters passed in via <code>fdOptions</code>.
         *
         * @private
         */
        var options = $.extend(true, defaultOptions, fdOptions);

        var loopingbool = false;

        var _featureLoopPos = 0;

        var refreshIntervalId = 0;


        /**
         *
         * @constructor
         * @private
         */
        (function() {
            // Init feature loop (if any)
            _initFeatureLoop();
            _initControlTabs();
            _initAutoInputs();
            _initValidateForm();
            _initRegistrationForm();
        })();

        /* FEATURE LOOP */
        function _initFeatureLoop() {
            var featureParentDiv = $('#featurehighlights'), subHighlights = $('#sub_highlights');
            if(featureParentDiv.length && subHighlights.length) {
                _featureLoopPos = 0;
                // Add mouse events to stop/start feature looper
                featureParentDiv.mouseenter(_stopFeatureLoop);
                // Add mouse over events to little icons change to hovered position
                var listHeadings = featureParentDiv.find("div.heading")
                //listHeadings.mouseenter(_jumpLoopPos);
                subHighlights.html(listHeadings);
                listHeadings.each(function(idx, divheading) {
                    var header = $(divheading);
                    header.mouseenter(_jumpLoopPos);
                    if (idx == (_featureLoopPos)) {
                        header.addClass("active");
                    }
                });
                _startFeatureLoop();
            }
        }

        function _startFeatureLoop() {
            loopingbool = true;
            refreshIntervalId = setInterval(_loopFeature, options.featureLoopDelay);
        }

        function _stopFeatureLoop() {
            loopingbool = false;
            clearInterval(refreshIntervalId);
        }

        function _loopFeature() {
            if (loopingbool){
                var features = getFeatureHighlights();
                if(features) {
                    var pos = ((_featureLoopPos + 1) == features.length) ? 0 : _featureLoopPos + 1;
                    _setLoopPos(features, pos);
                }
            }
        }

        function _setLoopPos(features, pos) {
            if(features) {
                if(features && features.eq(pos)) {
                    features.removeClass("active");
                    features.eq(pos).addClass("active");
                    var headings = getFeatureHeadings();
                    headings.removeClass("active");
                    headings.eq(pos).addClass("active");
                    _featureLoopPos = pos;
                }
            }
        }

        function _jumpLoopPos() {
            var target = $(this);

            if(this.tagName.toLowerCase() == "img") {
                target = target.parent();
            }
            if(this.tagName.toLowerCase() == "a") {
                target = target.parent();
            }

            // Get the hovered pos
            var tag = this.tagName;

            var headings = getFeatureHeadings();
            var features = getFeatureHighlights();
            for(var pos = 0; pos < headings.length; pos++) {
                var heading = headings.get(pos);
                if(heading == this) {
                    _setLoopPos(features, pos);
                    return true;
                }
            }

        }

        function getFeatureHighlights() {
            return $("#highlights .highlight");
        }

        function getFeatureHeadings() {
            return $("#sub_highlights .heading");
        }
        /* END FEATURE LOOP */

        /* CONTROL TABS */
        function _initControlTabs() {
            var cps = $('.cPanel');
            if(cps.length) {
                cps.each(function(idx, tcp) {
                    var cp = $(tcp);
                    var tabs = cp.find("ul.controltabs");
                    if(tabs.length) {
                        tabs.each(function(jdx, ttab) {
                            var tab = $(ttab);
                            tab.bind("click", swapTab);
                        });
                    }
                });
            }
        }

        function swapTab(event) {
            event.preventDefault();

            var target = $(this);

            if(this.tagName.toLowerCase() != "a") {
                target = target.find("a");
            }

            // Switch tabs:
            var cp = target.parent();
            var tabAnchors = cp.find("ul.controltabs a");
            tabAnchors.each(function(idx, ttabAnchor) {
                var tabAnchor = $(ttabAnchor);
                var tabAnchorParent = tabAnchor.parent();
                tabAnchorParent.removeClass("selected");
                if(tabAnchor.get(0) == this) {
                    tabAnchorParent.addClass("selected");
                }
            });

            // Get the class of the tab to show
            if(target.length) {
                var href = target.attr("href");
                var tabClass = href.substr(href.lastIndexOf("#") + 1);
                var tabDivs = cp.find("div.controltab");
                // Remove selected class from all divs
                tabDivs.each(function(idx, ttabDiv) {
                    var tabDiv = $(ttabDiv);
                    tabDiv.removeClass("selected");
                    if(tabDiv.hasClass(tabClass)) {
                        tabDiv.addClass("selected");
                    }
                });
            }

        }

        /* AUTO INPUTS */
        function _initAutoInputs() {
            var inputs = $("form.autoInput input");
            if (inputs.length) {
                inputs.each(function(idx, tinput) {
                    var input = $(tinput);
                    // Get inputs of type text from the form
                    if(input.attr('type') == "text") {
                        if(input.val() != "") {
                            input.addClass("userInput");
                        }

                        //uber bind with param
                        //input.bind('focus', {msg: message}, function(event) {
                        //    alert(event.data.msg);
                        //});
                        input.bind('focus', function() {
                            var target = $(this);
                            if(target.attr('type') == "text" && target.val() == target.attr('defaultValue')) {
                                target.val("");
                                target.addClass("userInput");
                            }
                        });
                        input.bind('blur', function() {
                            var target = $(this);
                            if(target.attr('type') == "text" && f.val() == "") {
                                target.val(target.attr('defaultValue'));
                                target.removeClass("userInput");
                            }
                        });
                    }
                });
            }
        }

        /* Validate forms
         ------------------------------------------------------------------------------------------- */
        function _initValidateForm() {
            var aForms = $("form.validateMe");
            aForms.each(function(idx, tform) {
                var form = $(tform);
                var aButtonLinks = form.find('a.button');

                aButtonLinks.bind('click', triggerFormSubmit);  // set the onclick handler for the button link
            });
        }

        function validateRequired(oElement) {
            if (oElement.length && oElement.val()) {
                toggleErrorMessage(oElement, '');
                return true;
            }
            toggleErrorMessage(oElement, 'This input is required.');
            return false;
        }

        function validateMinLength(oElement, iLength) {
            if ( oElement && (oElement.val().length >= iLength) ) {
                toggleErrorMessage(oElement, '');
                return true;
            }
            toggleErrorMessage(oElement, 'The minimum length required is '+iLength+' characters.');
            return false;
        }

        function toggleErrorMessage(oElement, sMessage) {
            var oMessageLI = oElement.parent().prev();
            var aMessageSpan = oMessageLI.find("span");

            if (sMessage) {
                aMessageSpan.html(sMessage);
                oMessageLI.removeClass("hidden");
            } else {
                oMessageLI.addClass("hidden");
            }
        }

        function validateForm(oForm) {
            var aFormElements = oForm.find("input");
            var formValRes = true;

            aFormElements.each(function(idx, tinput){
                var input = $(tinput);
                if ( input.hasClass("validate") ) {
                    var elementValRes = true;
                    var aClasses = input.attr('class').split(' ');

                    for ( j=0; j<aClasses.length; j++ ) {
                        switch (aClasses[j]) {
                            case 'required':
                                if (!validateRequired(input)) elementValRes = false;
                                break;
                            case 'minLength3':
                                if (!validateMinLength(input, 3)) elementValRes = false;
                                break;
                            case 'minLength6':
                                if (!validateMinLength(input, 6)) elementValRes = false;
                                break;
                        }// switch
                        // Break out of loop on first error, leaving first error message on screen:
                        if ( elementValRes == false ) {
                            break;
                        }
                    }// for
                    if ( elementValRes == false ) formValRes= false;
                }// if
            });

            if ( formValRes == true ) {
                oForm.submit(); // submit form
            }
        }
        function triggerFormSubmit(oLink) {
            var parent = oLink.parent();
            while ( (parent.get(0).tagName != "form") && (parent.get(0).tagName != "body") ) {
                parent = parent.parent();
            }
            validateForm(parent);
        }


        /* Registration form
         ------------------------------------------------------------------------------------------- */
        function _initRegistrationForm() {
            var aForms = $("form.frmMemberProfile");
            var oSelect = $('#country');
            aForms.each(function(idx, tform){
                var form = $(tform);
                var aListElement = form.find('li');
                aListElement.each(function(idx,tli){
                    var li = $(tli);
                    if ( li.hasClass("country") ) {
                        oSelect.bind('change', toggleStatePostcode);
                    }
                });
                var logoutTest = $('#logoutbutton');
                if(logoutTest) {}
                else {
                    var aListElement = form.find('input');
                    aListElement.each(function(idx,tli){
                        var li = $(tli);
                        if ( li.attr('id') == "email") {
                            li.bind('change', emailChanged);
                        }
                    });

                }
            });
            if (oSelect.length) toggleStatePostcode(oSelect); // Show state/postcode if 'Australia' is selected
        }

        /* Makes a request to check email address */
        function emailChanged(event) {
            event.preventDefault();
            var target = $(this);
            var emailvalue = target.val();
            if(emailvalue) {
                var params = "?email=" + emailvalue;
                var tabUrl = options.contentRegoCheckerEmailCheckPath + params;
                $.ajax({
                    type: "GET",
                    dataType: "text",
                    //success: handleEmailChangedResponse,
                    statusCode: {200:handleEmailChangedResponse},
                    timeout: 1500,
                    url: tabUrl
                });
            }
        }

        /*          Note: Element.getElementById cannot be used to retrieve elements from the response as the elements we're
         looking for aren't actually in the document. */
        function handleEmailChangedResponse(response) {
            if (response && response == "true") {
                var aForms = $("form.frmMemberProfile");
                aForms.each(function(idx, tform){
                    var form = $(tform);
                    var aListElement = form.find('input');
                    var tabUrl = options.contentRegoCheckerRedirctPath;
                    var separ = "?";
                    aListElement.each(function(idx, tlist) {
                        var list = $(tlist);
                        if ( tlist.id == "email" && tlist.value != "") {
                            tabUrl = tabUrl + separ + "email=" + tlist.value;
                            separ = "&";
                        }
                        if ( tlist.name == "newsletterId" && tlist.value != "") {
                            tabUrl = tabUrl + separ + "newsletterId=" + tlist.value;
                            separ = "&";
                        }
                        if ( tlist.name == "function" && tlist.value != "") {
                            tabUrl = tabUrl + separ + "function=" + tlist.value;
                            separ = "&";
                        }
                        if ( tlist.name == "action" && tlist.value != "") {
                            tabUrl = tabUrl + separ + "action=" + tlist.value;
                            separ = "&";
                        }
                    });
                    window.open(tabUrl,'details','width=350,height=192,resizable,noscroll');
                });
            }
        }
        
        function toggleStatePostcode(oListElement) {
            var ele = oListElement;
            if (this && ele.type && ele.type == "change") {
                ele = $(this);
            }
            var oUl = ele.parent().parent();
            var aListElement = oUl.find('li');
            aListElement.each(function(idx, tlist) {
                var list = $(tlist);
                if ( (list.hasClass("state")) || (list.hasClass("postcode")) ) {
                    if (ele.val() == 'AU' ) { // .attr("selectedIndex")
                        list.removeClass("hidden");
                    } else {
                        list.addClass("hidden");
                    }
                }
            });
        }
    }


    /* Profile form
     ------------------------------------------------------------------------------------------- */
    function enableSave() {
        var newSpan = document.createElement("span");
        var newText = document.createElement('a');
        newText.setAttribute('class', 'button smallButton top');
        newText.setAttribute('className', 'button smallButton top');
        newText.setAttribute('href', 'javascript:document.profile.submit();');
        newText.setAttribute('onclick', 'document.profile.submit();');
        var theLinkText = document.createTextNode('Save Profile');
        newText.appendChild(theLinkText);
        var newSpanElem = document.createElement("span");
        newText.appendChild(newSpanElem);
        newSpan.appendChild(newText);

        var para = document.getElementById("saveBtn");
        var spanElm = document.getElementById("saveBtnSpan");
        var replaced = para.replaceChild(newSpan, spanElm);

        var newSpan1 = document.createElement("span");
        var newText1 = document.createElement('a');
        newText1.setAttribute('class', 'button smallButton');
        newText1.setAttribute('className', 'button smallButton');
        newText1.setAttribute('href', 'javascript:document.profile.submit();');
        newText1.setAttribute('onclick', 'document.profile.submit();');
        var theLinkText1 = document.createTextNode('Save Profile');
        newText1.appendChild(theLinkText1);
        var newSpanElem1 = document.createElement("span");
        newText1.appendChild(newSpanElem1);
        newSpan1.appendChild(newText1);

        var para1 = document.getElementById("saveBtn1");
        var spanElm1 = document.getElementById("saveBtnSpan1");
        var replaced1 = para1.replaceChild(newSpan1, spanElm1);
    }




    $(function() {
        var austereo = new FD.Austereo();
    });


    $(function() {
        var twitShareElement, i, element, fbShareAnchor = $('.sendthis .facebook-share-button'), fbIframe, match, url;

        // twitter
        twitShareElement = $('<script>')
                .attr({
            'type': 'text/javascript',
            'src': 'http://platform.twitter.com/widgets.js'
        })
        .appendTo(document.body);

        //facebook
        fbShareAnchor.each(function(i, element) {
            var href = $(this).attr('href');
            match = /sharer.php\?u=(.+?)\&t=/.exec(href);
            if(match) {
                url = match[1];
                fbIframe = $('<fb:like></fb:like>')
                        .attr({
                    href: url,
                    send: true,
                    layout: 'button_count',
                    width: '150',
                    show_faces: 'false',
                    font: 'trebuchet ms'
                })
                .attr('send', 'true').insertAfter(element);
                $(this).remove();
            }
        });
    });
}

