String.prototype.contains = function(it) { return this.indexOf(it) != -1; };

function openBrWindow(theURL,winName,features) {
  window.open(theURL,winName,features);
}
function buildWebmasterEmailAddress(link) {
    var output = 'mailto:';
    output += 'webmaster';
    output += '@';
    output += 'responsiblesports';
    output += '.';
    output += 'com';
    link.href = output;
}
var timeoutElement;
function defaultText(element, defaultText) {
    if (element.value == defaultText) {
        element.value = "http://";
        if (element.createTextRange) { // IE
            var range = element.createTextRange();
            range.move("textedit");
            range.select();
        }
        else if (element.setSelectionRange) { // FF
            timeoutElement = element;
            setTimeout("ffMoveCaret()", 50);
        }
    }
    else if (element.value == "" || element.value == "http://") {
        element.value = defaultText;
    }
}
function ffMoveCaret() {
    timeoutElement.setSelectionRange(timeoutElement.value.length, timeoutElement.value.length);
}

function bookmark(title,url){
    if (window.sidebar) // firefox
    window.sidebar.addPanel(title, url, "http:www.yourwebsiteurl.com");
    else if(window.opera && window.print){ // opera
    var elem = document.createElement('a');
    elem.setAttribute('href',url);
    elem.setAttribute('title',title);
    elem.setAttribute('rel','sidebar');
    elem.click();
    }
    else if(document.all)// ie
    window.external.AddFavorite(url, title);
}

Date.prototype.setISO8601 = function(dString) {

    var regexp = /(\d\d\d\d)(-)?(\d\d)(-)?(\d\d)(T)?(\d\d)(:)?(\d\d)(:)?(\d\d)(\.\d+)?(Z|([+-])(\d\d)(:)?(\d\d))/;

    if (dString.toString().match(new RegExp(regexp))) {
        var d = dString.match(new RegExp(regexp));
        var offset = 0;

        this.setUTCDate(1);
        this.setUTCFullYear(parseInt(d[1], 10));
        this.setUTCMonth(parseInt(d[3], 10) - 1);
        this.setUTCDate(parseInt(d[5], 10));
        this.setUTCHours(parseInt(d[7], 10));
        this.setUTCMinutes(parseInt(d[9], 10));
        this.setUTCSeconds(parseInt(d[11], 10));
        if (d[12])
            this.setUTCMilliseconds(parseFloat(d[12]) * 1000);
        else
            this.setUTCMilliseconds(0);
        if (d[13] != 'Z') {
            offset = (d[15] * 60) + parseInt(d[17], 10);
            offset *= ((d[14] == '-') ? -1 : 1);
            this.setTime(this.getTime() - offset * 60 * 1000);
        }
    }
    else {
        this.setTime(Date.parse(dString));
    }
    return this;
};

if ($.browser.msie && $.browser.version == "6.0") {
//expand panels
}
else {
    $(function() {
        $(".expando").each(function() {

            var ctx = this;

            if ($(".expando-target", ctx).is(":visible")) {
                $(".expando-toggle", ctx)
                .attr("src", "/common/images/panel_collapse.jpg");
            }
            else {
                $(".expando-toggle", ctx)
                .attr("src", "/common/images/panel_expand.jpg");
            }

            $(".expando-toggle", ctx).click(function() {

                if ($(".expando-target", ctx).is(":visible")) {
                    $(".expando-toggle", ctx)
                    .attr("src", "/common/images/panel_expand.jpg");
                }
                else {
                    $(".expando-toggle", ctx)
                    .attr("src", "/common/images/panel_collapse.jpg");
                }

                $(".expando-target", ctx)
                .slideToggle("normal");
            });
        });
    });
}

function trackEvent(category, action, label) {
    _gaq.push(['_trackEvent',category, action, label]);
}

function trackFacebookShareEvent(action, label) {
    trackEvent('Facebook Share', action, label)
}

function trackSubscriptionEvent(action, label) {
    trackEvent('Subscription', action, label)
}


function isblank(val) {
    if (val == null || val == "") {
        return true;
    }
    else {
        return false;
    }
}
function handleFocus(f) {
 if (f.value == f.defaultValue) {
 f.value = "";
 }
}

function handleBlur(f) {
 if (f.value == "" || f.value == null || isblank(f.value)) {
 f.value = f.defaultValue;
 }
}

function hide(elementID) {
    $("#" + elementID).hide();
}


function getQuerystring(key, default_)
{
  if (default_==null) default_="";
  key = key.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regex = new RegExp("[\\?&]"+key+"=([^&#]*)");
  var qs = regex.exec(window.location.href);
  if(qs == null)
    return default_;
  else
    return qs[1];
}
function fireDefaultButton(event, target) {
 if (event.keyCode == 13) {

     var src = event.srcElement || event.target;

     if (!src || (src.tagName.toLowerCase() != "textarea")) {

     var defaultButton = target;

         if (defaultButton && typeof(defaultButton.click) != "undefined") {
            defaultButton.click();
            event.cancelBubble = true;
         if (event.stopPropagation) event.stopPropagation();

            return false;
         }
     }
 }
 return true;
}

//validation functions
function showErrorAlert(errors, callback)
{
    if (errors.length > 0)
    {
        var alertMessage = '';
        var errorindex = 0;
        for (errorindex = 0; errorindex < errors.length; errorindex++)
        {
            var error = errors[errorindex];
            alertMessage = (alertMessage + error + '\n');
        }
        alert(alertMessage);
    }
    if (callback != null && typeof callback == 'function')
    {
        callback();
    }
}

function validatePhoneNumber(value, name, errors){
    //var phoneNumberPattern = /^\(?(\d{3})\)?[- ]?(\d{3})[- ]?(\d{4})$/;
    var phoneNumberPattern = /^(\d{3})\)?-(\d{3})-(\d{4})$/;
    if (!phoneNumberPattern.test(value))
    {
        errors.push(name + " must be in this format: 123-456-7890.");
    }
}

function validateZipCode(value, name, errors){
    var zipCodePattern = /^(\d{5})$/;
    if (!zipCodePattern.test(value))
    {
        errors.push(name + " must be five numbers.");
    }
}

function validateWebUrl(value, name, errors)
{
// var urlPattern = /^(((ht|f)tp(s?):\/\/)|(www\.[^ \[\]\(\)\n\r\t]+)|(([012]?[0-9]{1,2}\.){3}[012]?[0-9]{1,2})\/)([^ \[\]\(\),;&quot;'&lt;&gt;\n\r\t]+)([^\. \[\]\(\),;&quot;'&lt;&gt;\n\r\t])|(([012]?[0-9]{1,2}\.){3}[012]?[0-9]{1,2})$/;
    //var urlPattern = /^((http(s?):\/\/)|(www\.[^ \[\]\(\)\n\r\t]+)|(([012]?[0-9]{1,2}\.){3}[012]?[0-9]{1,2})\/)([^ \[\]\(\),;&quot;'&lt;&gt;\n\r\t]+)([^\. \[\]\(\),;&quot;'&lt;&gt;\n\r\t])|(([012]?[0-9]{1,2}\.){3}[012]?[0-9]{1,2})$/;
    var urlPattern = /^http(s?):\/\/[A-Za-z0-9-_\.]+\.{1}[A-Za-z0-9]+\/?$/;
    if (!urlPattern.test(value))
    {
        errors.push(name + " must be in this format: http://www.YourOrganizationWebsite.com");
    }
}

function validateRequiredField(value, name, errors)
{
    if ($.string(value).blank())
    {
        errors.push(name + " is a required field.");
    }
}
function validateRequiredSelection(value, name, errors)
{
    if (!value || $.string(value).blank())
    {
        errors.push(name + " is a required selection.");
    }
}

function validateEmailAddress(email, emailName, errors)
{
    if ($.string(email).blank())
    {
        errors.push(emailName + " is a required field.");
    }
    else if (!this.isValidEmailAddress(email))
    {
        errors.push(emailName + " must be a valid email address.");
    }
}

function isValidEmailAddress(emailAddress) {
    var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);
    return pattern.test(emailAddress);
}

var creditOrgModalManager = {
    openModal:function ()
    {
        $('#participant-credit-org-modal').dialog({
            title: 'Credit Organization',
            modal: true,
            draggable: false,
            resizable: false,
            autoOpen: false,
            width: 742,
            minHeight:400,
            close: creditOrgModalManager.modalClosedCallback
        });
        $('#participant-credit-org-modal').dialog('open');
    },
    closeModal:function() {
        $('#participant-credit-org-modal').dialog('close');
    },
    modalClosedCallback:function() {
        if (creditOrgModalManager.creditedSportsOrg != null)
        {
            $('#participant-active-not-credited-view').fadeOut(function() {
                $('#participant-active-credited-view').show();
                $('#credited-org-name').html(creditOrgModalManager.creditedSportsOrg.OrganizationName);
                $('#credited-org-certifications').html(creditOrgModalManager.creditedSportsOrg.Certifications);
            });
        }
    },
    orgSelected: function(orgID)
    {
        creditOrgManager.creditOrg(orgID, creditOrgModalManager.creditOrgComplete, creditOrgModalManager.creditOrgFailed);
    },
    creditOrgComplete:function(results) {
        if (results.Succeeded)
        {
            creditOrgModalManager.creditedSportsOrg = results.SportsOrganization;
            creditOrgModalManager.closeModal();
        }
        else
        {
            creditOrgModalManager.sessionExpired();
        }
    },
    creditOrgFailed:function(exception, userContext, methodName) {
        alert('There was an error crediting the organization: ' + exception.get_message());
    },
    sessionExpired: function() {
        alert('It appears your session has expired.');
        location.reload(true);
    },
    creditedSportsOrg:null
};

var membershipModalManager = {
    openEditFanInfoModal:function ()
    {
        $('#edit-fan-info-iframe').attr('src', '/common/aspx/membership-modals/update-webmember-info.aspx');
        $('#edit-fan-info-modal').dialog({
            title: 'Update Your Fan &amp; Subscription Information',
            modal: true,
            draggable: false,
            resizable: false,
            autoOpen: false,
            width: 480,
            close: membershipModalManager.editFanModalClosedCallback
        });
        $('#edit-fan-info-modal').dialog('open');
    },
    closeEditFanInfoModal:function()
    {
        $('#edit-fan-info-modal').dialog('close');
    },
    editFanModalClosedCallback:function() {
        membershipModalManager.refreshWhenWebMemberGotten = false;
        membershipModalManager.getCurrentWebMember();
    },
    openSignUpModal:function()
    {
        $('#fan-sign-up-iframe').attr('src', '/common/aspx/membership-modals/fan-sign-up.aspx?src=global-signup');
        $('#fan-sign-up-modal').dialog({
            title: 'Sign Up',
            modal: true,
            draggable: false,
            resizable: false,
            autoOpen: false,
            width: 480,
            close: membershipModalManager.signUpModalClosedCallback
        });
        $('#fan-sign-up-modal').dialog('open');

    },
    closeSignUpModal:function()
    {
        $('#fan-sign-up-modal').dialog('close');
    },
    signUpModalClosedCallback:function()
    {
        membershipModalManager.getCurrentWebMember();
    },
    getCurrentWebMember:function() {
        membershipManager.getCurrentWebMemberCompleted = membershipModalManager.getCurrentWebMemberComplete;
        membershipManager.getCurrentWebMemberFailed = membershipModalManager.getCurrentWebMemberFailed;
        membershipManager.getCurrentWebMember();
    },
    openSignInModal:function()
    {
        $('#fan-sign-in-iframe').attr('src', '/common/aspx/membership-modals/fan-sign-in.aspx');
        $('#fan-sign-in-modal').dialog({
            title: 'Returning Fans',
            modal: true,
            draggable: false,
            resizable: false,
            autoOpen: false,
            width: 376,
            close: membershipModalManager.signUpModalClosedCallback
        });
        $('#fan-sign-in-modal').dialog('open');
    },
    closeSignInModal:function()
    {
        $('#fan-sign-in-modal').dialog('close');
    },
    getCurrentWebMemberComplete:function() {
        if (membershipManager.currentWebMember != null)
        {
            //if we're on a certain page need to refresh the browser
            membershipModalManager.refreshIfRequired();
            //otherwise, always need to dispay the signed in header since it's glboal
            membershipModalManager.displaySignedInHeader(membershipManager.currentWebMember);
            //then if we have any other callbacks registered, execute them
            if (membershipModalManager.getCurrentWebMemberCompleted && membershipModalManager.getCurrentWebMemberCompleted.length > 0)
            {
                $.each(membershipModalManager.getCurrentWebMemberCompleted, function(index, callback) {
                    if (typeof(callback) == 'function')
                    {
                        callback(membershipManager.currentWebMember);
                    }
                });
            }
        }
    },
    getCurrentWebMemberCompleted:[],
    refreshIfRequired:function() {
        if (membershipModalManager.refreshWhenWebMemberGotten)
        {
            $.each(membershipModalManager.refreshRequiredUrlList, function(index, url) {
                if (window.location.href.contains(url))
                {
                    location.reload(true);
                }
            });
        }
    },
    refreshWhenWebMemberGotten:true,
    refreshRequiredUrlList:[
        '/my_fan_page/default.aspx',
        '/responsible_sport_parenting/responsible_sport_parenting_quiz/default.aspx',
        '/responsible_coaching/responsible_coaching_quiz/default.aspx',
        '/community_grants/administrator_process.aspx'
    ],
    getCurrentWebMemberFailed:function(exception, userContext, methodName) {
        alert('There was an error retrieving your fan information: ' + exception.get_message());
    },
    displaySignedInHeader:function(webMember) {
        $('div.header-guest-elements').fadeOut(250, function() {
            $('#header-fan-name').html(webMember.FirstName + ' ' + webMember.LastName);
            if (!webMember.IsActive)
            {
                $('span.header-update-fan-info').hide();
            }
            $('div.header-fan-elements').show();
        });
    }
}

var membershipManager = {
    getCurrentWebMember:function()
    {
        ResponsibleSports.Services.Membership.getCurrentWebMember(membershipManager.getCurrentWebMemberComplete, membershipManager.getCurrentWebMemberFailed);
    },
    getCurrentWebMemberComplete:function(webMember) {
        membershipManager.currentWebMember = webMember;
        if (membershipManager.getCurrentWebMemberCompleted) { membershipManager.getCurrentWebMemberCompleted(); }
    },
    getCurrentWebMemberFailed:function(exception, userContext, methodName) {
        if (membershipManager.getCurrentWebMemberFailed) { membershipManager.getCurrentWebMemberFailed(exception, userContext, methodName); }
    },
    getCurrentWebMemberCompleted : null,
    getCurrentWebMemberFailed : null,
    currentWebMember: null
}

var creditOrgManager = {
    creditOrg:function(orgID, completedCallback, failedCallback) {
        creditOrgManager.creditOrgCompleted = completedCallback;
        creditOrgManager.creditOrgFailed = failedCallback;
        ResponsibleSports.Services.Membership.creditOrganizationForCurrentWebMember(orgID, creditOrgManager.creditOrgCompleted, creditOrgManager.creditOrgFailed);
    },
    creditOrgCompleted: null,
    creditOrgFailed: null
}


