var RFM = RFM || {};
jQuery(function () {
    RFM.gw.initialize();
});

RFM.gw = (function ($) {
    var that = {};
    var twitterFeed = 'http://twitter.com/statuses/user_timeline/85595641.rss',
        maxTwitterItems = 2;
    var lastUsernameCheck = null;

    that.initialize = function() {
        addUnloadAlertIfPlaying();
        setupTwitterSidebar();
        autoFillScreenNameOnRegister();
        setupPrintLink();
        setupAudioPlayer();
        setupPopupPlayer();
        setupUsernameCheck();
        setupShare();

        // change return URL based on if their submitting a story or prayer
        $('#r-prayer, #r-story').change(function() {
            if (this.id.match('/prayer/')) {
                $('input[name=return_url]').val('share-prayer');
            }
            else {
                $('input[name=return_url]').val('share-prayer/stories');
            }
        });

        $('#member_form').submit(function() {
            var error = false;
            $(this).find('input[type=text], input[type=password]').each(function(i, e) {
                if ($(e).val() == '' && $('#accept_terms').length > 0) {
                    error = 'All fields are required.';
                }
            });
            if ($('#txt-new-pass').val() != $('#txt-conf-new-pass').val()) {
                error = 'Passwords must match.';
            }

            if ($('#accept_terms').length > 0 && !$('#accept_terms:checked').length) {
                error = 'You must agree to the Terms of Service.'
            }

            if (error) {
                alert(error);
                return false;
            }
        });
    };

    that.isUsernameAvailable = function() {
        if ($('#txt-email').val() == '') { return; }
        $('.un-loading').show();
        $('.username_available, .username_unavailable').hide();
        var now = new Date().getTime();
        // only allow searches every 6 seconds
        if (lastUsernameCheck && lastUsernameCheck + 6000 > now) {
            setTimeout("RFM.gw.isUsernameAvailable()", 6000 - (now - lastUsernameCheck));
            return;
        }
        lastUsernameCheck = now;
        $('#search_username').val($('#txt-email').val());
        $('#search_username_form').ajaxSubmit({
            success: function(responseText) {
                var usernames = responseText.split('|delimiter|');
                var found = false;
                for (var i = 0; i < usernames.length; i++) {
                    if (usernames[i].toLowerCase() == $('#search_username').val().toLowerCase()) {
                        found = true;
                    }
                }
                $('.un-loading').hide();
                $('.username_text').html($('#search_username').val());
                if (found) {
                    $('.username_unavailable').show();
                }
                else {
                    $('.username_available').show();
                }
            }
        });
    };

    that.isScreenNameAvailable = function() {
        var screenname = $('#txt-screenname').val();
        if (screenname == '') { return; }
        $.ajax({
            type: 'GET',
            url:  '/members/search-screen-name/' + escape(screenname),
            dataType: 'text',

            beforeSend : function () {
                $('.screen_name_available, .screen_name_unavailable').hide();
                $('.sn-loading').show();
            },

            success : function (msg) {
                $('.screen_name_text').html(screenname);
                if (msg.match(/^true/)) {
                    $('.screen_name_available').hide();
                    $('.screen_name_unavailable').show();
                }
                else {
                    $('.screen_name_unavailable').hide();
                    $('.screen_name_available').show();
                }
            },

            complete: function () {
                $('.sn-loading').hide();
            }
        });
    };

    function setupUsernameCheck() {
        if ($('#search_username_form').length == 0) { return; }
        $('#txt-email').change(function() {
            that.isUsernameAvailable();
        });
    };

    function setupShare() {
      $('a.subscribe').click(function () {
        $.post("/inc/interaction_request", {
            js: "1", ctype: "subscribe"
        } );
        return true;
      });
      $('a.download').click(function () {
        $.post("/inc/interaction_request", {
            js: "1", ctype: "download"
        } );
        return true;
      });
      $('a.retweet').click(function () {
        $.post("/inc/interaction_request", {
            js: "1", ctype: "retweet"
        } );
        return true;
      });
    }

    function autoFillScreenNameOnRegister() {
        if ($('#txt-screenname').length == 0) { return; }
        // on first or last name update auto-generate screen name
        $('#txt-lname, #txt-fname').bind('change.autofill', function() {
            var sn = $('#txt-fname').val() + ' ' + $('#txt-lname').val();
            sn = sn.replace(/^\s+|\s+$/g,"");
            $('#txt-screenname').val(sn);
            that.isScreenNameAvailable();
        });

        // on manual screen name change, remove auto-fill and check avail
        $('#txt-screenname').change(function() {
            $('#txt-lname, #txt-fname').unbind('change.autofill');
            that.isScreenNameAvailable();
        });
    };

    function setupPrintLink() {
        $('a.print-page').click(function() {
            window.print();
            return false;
        });
    };

    that.isPlaying = function() {
        var isPlaying = false
        $('.swf-player').each(function() {
            if (this.getConfig && (
                    this.getConfig().state == 'PLAYING' ||
                    this.getConfig().state == 'BUFFERING')) {
                isPlaying = true;
            }
        });
        return isPlaying;
    };

    function addUnloadAlertIfPlaying() {
        if ($('.swf-player').length > 0) {
            window.onbeforeunload = function () {
                if (RFM.gw.isPlaying()) {
                    return"Your player will be stopped if you leave this page.";
                }
            };
        }
    };

    function setupPopupPlayer() {
        $('a.popup-player').click(function() {
            var newwindow = window.open(this.href,'',
                'resizable=1,toolbar=0,location=0,status=0,menubar=0,scrollbars=1,width=500,height=350');
            newwindow.focus();
            return false;
        });
    };

    function setupTwitterSidebar() {
        if (!$('#twitterSidebar').length > 0) { return; }
        google.load("feeds", "1", {"nocss" : true, "callback" : function() {
            var feed = new google.feeds.Feed(twitterFeed);
            feed.load(function(result) {
                var minEntries = Math.min(result.feed.entries.length, maxTwitterItems);
                for (i=0; i < minEntries; i++) {
                    var content = result.feed.entries[i].content;
                    content = content.replace(/^GroundworkRadio: /, '');
                    $('#twitterSidebarContent' + i).html(content).autolink().twitterautolink();
                }
                if (minEntries > 0) {
                    $('#twitterSidebar').show();
                }
            });
        }});
    };

    function setupAudioPlayer() {
        $('a.panel-player').each(function(i) {
            var $this = $(this);
            var width = $(this).width();
            width = (width < 200) ? '200' : '' + width;
            $this.replaceWith("<div class='panel-player' id='panel-player-" + i + "'></div>");
            var so = new SWFObject('/js/player.swf', 'swf-player-'+i, width, '19', '9');
            so.addParam('allowfullscreen','true');
            so.addParam('allowscriptaccess','always');
            so.addParam('wmode','opaque');
            so.addParam('class','swf-player');
            if (location.href.indexOf('popup_player') !== -1) {
                so.addVariable('autostart', 'true');
            }
            so.addVariable('id', 'swf-player-'+i);
            //so.addVariable('duration','3123');
            so.addVariable('file',$this.attr('href'));
            so.addVariable('backcolor','5d502d');
            so.addVariable('frontcolor','FFFFFF');
            so.addVariable('plugins','gapro-1');
						so.addVariable('gapro.accountid','UA-948741-20');
						so.addVariable('gapro.trackstarts','true');
						so.addVariable('gapro.trackpercentage','true');
						so.addVariable('gapro.tracktime','true');
            so.write('panel-player-' + i);
        });
    };

    return that;
}(jQuery));


/* jQuery plugins */
jQuery.fn.twitterautolink = function () {
    return this.each( function(){
        // username
        var re = /([\.|\,|\:|\¡|\¿|\>|\{|\(]?)@{1}(\w*)([\.|\,|\:|\!|\?|\>|\}|\)]?)\s/ig;
        $(this).html( $(this).html().replace(re, '$1<a href=\"http://twitter.com/$2\" class=\"tweet-username\">@$2</a>$3 ') );

        // hash tag
        var re = /([\.|\,|\:|\¡|\¿|\>|\{|\(]?)#{1}(\w*)([\.|\,|\:|\!|\?|\>|\}|\)]?)\s/ig;
        $(this).html( $(this).html().replace(re, '$1<a href=\"http://search.twitter.com/search?q=%23$2\" class=\"tweet-hashtag\">#$2</a>$3 ') );
    });
}

/* taken from http://kawika.org/jquery/js/jquery.autolink.js */
jQuery.fn.autolink = function () {
    return this.each( function(){
        var re = /((http|https|ftp):\/\/[\w?=&.\/-;#~%-]+(?![\w\s?&.\/;#~%"=-]*>))/g;
        $(this).html( $(this).html().replace(re, '<a href="$1">$1</a> ') );
    });
}

