// JavaScript Document

$(function () {
  var tabContainers = $('div.tabs > div');
  tabContainers.hide().filter(':first').show();
  $('div.tabs ul.tabNavigation a').click(function () {
    tabContainers.hide();
    tabContainers.filter(this.hash).show();
    $('div.tabs ul.tabNavigation a').removeClass('selected');
    $(this).addClass('selected');
    return false;
  }).filter(':first').click();
});

$(document).ready(function(){
    if ($('#tabs').length > 0) {
        $('#tabs').tabs();
    }
    tooltip.init();
    promo.init();
    racePrice.init();
    menu.init();
    utility.init();
});

var sponsors = {
    init: function(){
        jQuery('#sponsors').jcarousel({
            auto: 5,
            wrap: 'last'
        });
    }
}

var menu = {
    init: function(){
        $('#header ul.menu li ul').hide();
        $('#header ul.menu li').hover(
            function () {
                $(this).children('ul').show();
            },function(){
                $(this).children('ul').hide();
            });
    }
}


var utility = {
    init: function(){
        utility.showNewsletter();
        utility.faq();
    },

    popupGreybox: function(title, url){
        GB_showFullScreen(title, url);
    },

    stripNonNumeric: function(str){
        str += '';
        var rgx = /^\d|\.|-$/;
        var out = '';
        for(var i = 0; i < str.length; i++){
            if(rgx.test(str.charAt(i))){
                if(!((str.charAt(i) == '.' && out.indexOf( '.' ) != -1) ||
                    (str.charAt(i) == '-' && out.length != 0))){
                    out += str.charAt(i);
                }
            }
        }
        return out;
    },
    
    showNewsletter: function(){
        $('.newsletterPopup').click(function(){
            $('#overlay').remove();
            var width = $('body').width();
            $('#overlay').height($('body').get(0).scrollHeight + 'px');
            $('#overlay').remove();
            var tellAFriendWidth = $('#newsletter').width();
            var left = (width - tellAFriendWidth) / 2;
            $('#newsletter').css('left', left);
            $('#newsletter').show();

            var overlay = '<div id="overlay" class="ui-widget-overlay" style="z-index: 250;"/>'
            $('body').append(overlay);
            $('html,body').animate({
                scrollTop: 0
            }, 1000);


            return false;
        })

        $('#newsletter #closeNewsletter').click(function(){
            $('#newsletter').hide();
            $('#overlay').remove();
            return false;
        })
    },

    faq:  function(){
        $('#faq dd').hide();
        $('#faq dt').click(function(){
            $(this).next('dd').toggle();
        })
    },

    showClassifieds: function(){
        $('#classified .readMore').click(function(){
            var title = $('h2', $(this).parents('li')).text();
            var description = $('.description', $(this).parents('li')).html();
            var html = '<div id="classifiedPopup">' + description + '</div>';
            $('body').append(html);
            $('#classifiedPopup').dialog({
                width: 600,
                title: title,
                bgiframe: true,
                modal: true,

                closeOnEscape: true,
                overlay: {
                    backgroundColor: '#000000',
                    opacity: 0.5
                },
                close: function(){
                    $('#classifiedPopup').remove();
                }
            })
            $('#classifiedPopup').dialog('open');


            return false;
        })
    },

    resources: function(){
        $("#resources").accordion({
            autoHeight: false,
            collapsible: true,
            change: function(event, ui){
                var top = (ui.newHeader).position().top;
                $('html,body').animate({
                    scrollTop: top
                }, 2000);
            }
        });

        $('#chooseResource a').click(function(){
            utility.activateResource($(this).attr('href'));
            return false;
        })
    },

    activateResource: function(resource){
        $('a', resource).trigger('click');
    }
}

//var rotateBanner = {    
//    init: function(){
//        $('#banner').mouseover(function(){
//            $(this).css('z-index', 0);
//        })
//        $('#banner').mouseout(function(){
//            $(this).css('z-index', 1);
//        })
//
//        $('#banner').tabs({
//            fx: { 
//                opacity: 'toggle'
//            },
//            show: function(){
//                var selected = $('#banner').tabs('option', 'selected');
//                $('#banner li img').attr('src', '/webresources/images/bannerOff.png');
//                $('#banner li img:eq('+ selected +')').attr('src', '/webresources/images/bannerOn.png')
//            }
//
//        }).tabs('rotate', 5000);
//    
//    }
//}

var pageTasks = {
    sameShippingAddress: function(){
        $('#sameShippingAddress').click(function(){
            if ($(this).attr('checked')) {
                $('#ctl00_ContentPlaceHolder1_ccName').attr('value', $('#ctl00_ContentPlaceHolder1_firstName').attr('value') + ' ' + $('#ctl00_ContentPlaceHolder1_lastName').attr('value'));
                $('#ctl00_ContentPlaceHolder1_ccAddress').attr('value', $('#ctl00_ContentPlaceHolder1_address').attr('value'));
                $('#ctl00_ContentPlaceHolder1_ccCity').attr('value', $('#ctl00_ContentPlaceHolder1_city').attr('value'));
                $('#ctl00_ContentPlaceHolder1_ccStateList').val($('#ctl00_ContentPlaceHolder1_stateList').val());
                $('#ctl00_ContentPlaceHolder1_ccZipCode').attr('value', $('#ctl00_ContentPlaceHolder1_zipCode').attr('value'));
            }
            else {
                $('#ctl00_ContentPlaceHolder1_ccName').attr('value', '');
                $('#ctl00_ContentPlaceHolder1_ccAddress').attr('value', '');
                $('#ctl00_ContentPlaceHolder1_ccCity').attr('value', '');
                $('#ctl00_ContentPlaceHolder1_ccStateList').val(0);
                $('#ctl00_ContentPlaceHolder1_ccZipCode').attr('value', '');
            }
        })
    },
    
    sameShoppingShippingAddress: function(){
        $('#sameShoppingShippingAddress').click(function(){
            if ($(this).attr('checked')) {
                $('#ctl00_ContentPlaceHolder1_Name').attr('value', $('#ctl00_ContentPlaceHolder1_FirstName').attr('value') + ' ' + $('#ctl00_ContentPlaceHolder1_LastName').attr('value'));
                $('#ctl00_ContentPlaceHolder1_SAddress1').attr('value', $('#ctl00_ContentPlaceHolder1_Address1').attr('value'));
                $('#ctl00_ContentPlaceHolder1_SAddress2').attr('value', $('#ctl00_ContentPlaceHolder1_Address2').attr('value'));
                $('#ctl00_ContentPlaceHolder1_SCity').attr('value', $('#ctl00_ContentPlaceHolder1_City').attr('value'));
                $('#ctl00_ContentPlaceHolder1_SStatelist').val($('#ctl00_ContentPlaceHolder1_StateList').val());
                $('#ctl00_ContentPlaceHolder1_SZip').attr('value', $('#ctl00_ContentPlaceHolder1_PostalCode').attr('value'));
            }
            else {
                $('#ctl00_ContentPlaceHolder1_Name').attr('value', '');
                $('#ctl00_ContentPlaceHolder1_SAddress1').attr('value', '');
                $('#ctl00_ContentPlaceHolder1_SAddress2').attr('value', '');
                $('#ctl00_ContentPlaceHolder1_SStatelist').val(0);
                $('#ctl00_ContentPlaceHolder1_SCity').attr('value', '');
                $('#ctl00_ContentPlaceHolder1_SZip').attr('value', '');
            }
        })
    },
    
    deactivateSubmitButton: function(){
        $('.submit').click(function(){
            $('.submit').css('display', 'none');
            $('#loader').removeClass('hidden');
        })
    }
}

var tooltip = {
    init: function(){
        $('.popup').click(function(){
            var id = $(this).attr('rel');
            $('#' + id).dialog({
                width: 450,
                title: $(this).attr('title'),
                bgiframe: true,
                modal: true,
                closeOnEscape: true,
                overlay: {
                    backgroundColor: '#000000',
                    opacity: 0.5
                }
            });
            $('#' + id).dialog('open');
        })
    }
}


var eventGallery = {
    init: function(){
        $('#carousel a').click(function(){
            var src = $(this).attr('href');
            //alert(src);
            var alt = $('img', this).attr('alt');
            eventGallery.loadImage(src, alt);
            return false;
        })
        $('#carousel a:eq(0)').trigger('click');
    },
    
    loadImage: function(thumbPath, alt){
        $('#preview #largeImage').hide('explode', 1000, function(){
            $(this).remove();
            $('#loader').css('display', 'block');
        });

       
        var mediumPath = thumbPath.replace(/thumb/, 'medium')
        var img = new Image();
        $(img).load(function(){
            $(this).hide();
            $(this).attr('id', 'largeImage');
            //$(this).show('drop', {direction: 'down'}, 100, function(){
            $(this).fadeIn('slow', function(){
            
                $('#preview #loader').after(img);
                var imageWidth = $(this).width();
                var left = (700 - imageWidth) / 2;
                $('#preview p:first').text(alt);
                //$('#preview p').fadeIn('fast');
                $('.count').text(eventGallery.currentMarker + 1 + ' of ' + eventGallery.totalImages);
                //$('#preview img:eq(1)').css('margin-left', left);
                $('#loader').css('display', 'none');
                $('#desc').text(alt);
            })
        }).attr('src', mediumPath);
    }
}


var account = {
    statusMessage: '',
    
    init: function(){
        account.getSideBar();
        account.getUpcomingEvents();
        account.updateMessage();
    },


    login: function(){
        $.ajax({
            type: "POST",
            url: "/services/userinfo.asmx/SignIn",
            data: "{'userName':'" + $('#loginUserName').attr('value') + "', 'password':'" + $('#loginPassword').attr('value') + "'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(result){
                account.populateUserInfo(result);
            },
            error: function(xhr, status, error){
                var err = eval("(" + xhr.responseText + ")");
                alert(err.Message)
            }
        });
    },

    populateUserInfo: function(userInfo){
        if(userInfo != null)     {
            loginUtility.getStatus();
            $('#signup').dialog('close');

            $('.firstName').attr('value', userInfo.FirstName);
            $('.lastName').attr('value', userInfo.LastName);
            $('.address').attr('value', userInfo.Address);
            $('.city').attr('value', userInfo.City);
            $('.stateList').val(userInfo.State);
            $('.zipcode').attr('value', userInfo.ZipCode);
            $('.phoneNumber').attr('value', userInfo.PhoneNumber);
            $('.genderList').val(userInfo.Gender);
            $('.dobMonthList').val(userInfo.DOBMonth);
            $('.dobDayList').val(userInfo.DOBDay);
            $('.dobYearList').val(userInfo.DOBYear);
            $('.email').attr('value', userInfo.Email);
            $('.emergencyContactName').attr('value', userInfo.EmergencyName);
            $('.emergencyContactEmail').attr('value', userInfo.EmergencyEmail);
            $('.emergencyContactPhone').attr('value', userInfo.EmergencyPhone);
            $('.divisionList').val(userInfo.DefaultDivision);
            $('.defaultDivision').attr('value', userInfo.DefaultDivision);
            $('.classList').val(userInfo.DefaultClass);
            $('.defaultClass').attr('value', userInfo.DefaultClass);
            $('.licenseNumber').attr('value', userInfo.MemberNumber);

            $('#loginInfo').css('display', 'none');
            validation.checkEventType();
        }
        else{
            $('#signup .error').html('<li>There is an issue with your username and password.  Please try again</li>').show();
        }
    },
    
    updateMessage: function(){
        if (account.statusMessage != '') {
            $('#statusMessage').css('display', '');
            $('#statusMessage').html(account.statusMessage);
        }
    },
    
    getSideBar: function(){
        $.ajax({
            type: "POST",
            url: "/services/userinfo.asmx/GetSideBar",
            data: "{}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(result){
                account.populateSideBar(result);
            },
            error: function(xhr, status, error){
                var err = eval("(" + xhr.responseText + ")");
                alert(err.Message)
            }
        });
    },
    
    populateSideBar: function(userInfo){
        $('#myLogin').html(userInfo.Email);
        $('#myNumber').html(userInfo.MemberNumber);
        $('#myExpDate').html(userInfo.MemberExpDate);
        $('#myDivision').html(userInfo.DefaultDivision);
        $('#myClass').html(userInfo.DefaultClass);
    },
    
    getUpcomingEvents: function(){
        $.ajax({
            type: "POST",
            url: "/services/userinfo.asmx/GetUpcomingEvents",
            data: "{'pageNumber':'1','pageSize':'5'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(result){
                account.populateEvents(result);
            },
            error: function(xhr, status, error){
                var err = eval("(" + xhr.responseText + ")");
                alert(err.Message)
            }
        });
    },
    
    populateEvents: function(userEvents){
        if (userEvents.length == 0) {
            $('.display').css('display', 'none');
            $('#noEvents').css('display', '');
        }
        else {
            $('.display').css('display', '');
            $('#noEvents').css('display', 'none');
            $('.display tbody tr').remove();
            for (var i = 0; i < userEvents.length; i++) {
                var html = '';
                var href = '<a href="/races/' + userEvents[i].SeasonName + '/' + userEvents[i].Slug + '.aspx" title="' + userEvents[i].Name + '">' + userEvents[i].Name + '</a>';
                var reg = '';
                
                if (userEvents[i].IsRegistered) {
                    reg = 'Registered';
                }
                else {
                    reg = '<a href="/races/' + userEvents[i].SeasonName + '/' + userEvents[i].Slug + '/Register.aspx" title="Register for' + userEvents[i].Name + '">Register</a>';
                }
                
                html += (i % 2 == 0 ? '<tr class="alt">' : '<tr>');
                html += '<td>' + href + '</td>';
                html += '<td>' + userEvents[i].EventDate + '</td>';
                html += '<td>' + userEvents[i].Location + '</td>';
                html += '<td>' + reg + '</td>';
                html += '</tr>';
                
                $('.display tbody').append(html);
            }
        }
    },

    forgot: function(){
        account.submitEmail();
        $('.forgot').click(function(){
            $('#forgot').dialog({
                title: 'Retrieve your password',
                bgiframe: true,
                modal: true,
                closeOnEscape: true,
                overlay: {
                    backgroundColor: '#000000',
                    opacity: 0.5
                }
            });
            $('#forgot').dialog('open');
            return false;
        })       
    },

    submitEmail: function(){
        $('#submitForgot').click(function(){
            $.ajax({
                type: "POST",
                url: "/services/userinfo.asmx/SendPassword",
                data: "{'email':'" + $('#email').attr('value') + "'}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function(result){
                    if(result){
                        $('#forgot').dialog('close');
                        $('#email').attr('value', '');
                        $('#details h1').after('<ul class="information"><li>You password has been sent to the email account you entered.</li></ul>')
                    }
                    else{
                        $('#forgot .form').before('<ul><li>The email you entered was not found in our system.</li></ul>');
                    }
                },
                error: function(xhr, status, error){
                    var err = eval("(" + xhr.responseText + ")");
                    alert(err.Message)
                }
            });
            return false;
        })
    },

    requirePassword: function(){
        var required = $('.RegisterOnSite').attr('checked');

        if (required)
        {
            $('.password').attr('class', 'medium required');
        } else {
            $('.password').attr('class', 'medium');
        }
    }
}

var raceList = {
    currentPage: 1,
    lastPage: 1,
    column: 'Gender',
    direction: 'Asc',
    raceDate: '',
    
    init: function(){
        raceList.getRacerCount();
        raceList.tellAFriend();
    },
    
    getRacerCount: function(){
        $.ajax({
            type: "POST",
            url: "/services/raceinfo.asmx/GetRacerCount",
            data: "{'raceKey':'" + raceList.key + "'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(result){
                $('#totalEntrants').text(result);
                raceList.populateRacerCount(result);
            },
            error: function(xhr, status, error){
                var err = eval("(" + xhr.responseText + ")");
                alert(err.Message)
            }
        });
    },
    
    populateRacerCount: function(count){
        var currentDate = new Date();
                
        if (count >= 25) {
            raceList.getRacers(raceList.currentPage);
        }
        else {
            $('#entry_tab .pager').css('display', 'none');
            $('#entry_tab .display').css('display', 'none');
            $('#entry_tab').append('<p>Race list is coming soon.</p>');
            $('#paging').css('display', 'none');
        }
        if(raceList.maxEntrants != 0 && currentDate < raceList.raceDate){
            var nearFull = 0.8 * raceList.maxEntrants;
            if(count >= nearFull){
                $('#nearlyFull').removeClass('hidden');
            }
        }        
    },
    
    pageRacers: function(elem, pageNumber){
        if (!$(elem).hasClass('disabled')) {
            raceList.getRacers(pageNumber)
        }
    },
    
    viewAllRacers: function(){
        if ($('#paging').hasClass('all')) {
            $('#paging').removeClass('all').addClass('page');
            $.ajax({
                type: "POST",
                url: "/services/raceinfo.asmx/GetAllRacers",
                data: "{'raceKey':'" + raceList.key + "', 'sortColumn':'" + raceList.column + "', 'sortDirection':'" + raceList.direction + "'}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function(result){
                    raceList.populateRacers(result);
                    $('.pager').css('visibility', 'hidden');
                    
                },
                error: function(xhr, status, error){
                    var err = eval("(" + xhr.responseText + ")");
                    alert(err.Message)
                }
            });
            
        }
        else {
            $('#paging').removeClass('page').addClass('all');
            raceList.getRacers(1);
            $('.pager').css('visibility', 'visible');
        } 
    },
    
    getRacers: function(pageNumber){
        raceList.currentPage = pageNumber;
        $.ajax({
            type: "POST",
            url: "/services/raceinfo.asmx/GetRacers",
            data: "{'raceKey':'" + raceList.key + "', 'pageSize':'5', 'pageNumber':'" + pageNumber + "', 'sortColumn':'" + raceList.column + "', 'sortDirection':'" + raceList.direction + "'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(result){
                raceList.populateRacers(result);
            },
            error: function(xhr, status, error){
                var err = eval("(" + xhr.responseText + ")");
                alert(err.Message)
            }
        });
        
        $.ajax({
            type: "POST",
            url: "/services/raceinfo.asmx/GetRacerPageCount",
            data: "{'raceKey':'" + raceList.key + "', 'pageSize':'5'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(result){
                raceList.populateCount(result)
            },
            error: function(xhr, status, error){
                var err = eval("(" + xhr.responseText + ")");
                alert(err.Message)
            }
        });
    },
    
    populateRacers: function(items){
        $('.display tbody tr').remove();
        
        if (items.length > 0) {
            var html = '';
            
            for (var i = 0; i < items.length; i++) {
                if (i % 2 == 0) {
                    html += '<tr>';
                }
                else {
                    html += '<tr class="alt">';
                }
                
                html += '<td>' + items[i].FullName + '</td>';
                html += '<td>' + items[i].ClassName + '</td>';
                html += '<td>' + items[i].Gender + '</td>';
                html += '<td>' + items[i].Age + '</td>';
                html += '</tr>';
            }
            
            $('.display tbody').append(html);
        }
    },
    
    populateCount: function(result){
        $('#pageList option').remove();
        for (var i = 1; i <= result; i++) {
            var html = '<option value="' + i + '">' + i + '</option>';
            $('#pageList').append(html);
        }
        $('#pageList').val(raceList.currentPage);
        
        raceList.lastPage = result;
        if (raceList.currentPage == 1) {
            $('#firstPage').attr('class', 'disabled');
            $('#prevPage').attr('class', 'disabled');
        }
        else {
            $('#firstPage').attr('class', '');
            $('#prevPage').attr('class', '');
        }
        
        if (raceList.currentPage == raceList.lastPage) {
            $('#lastPage').attr('class', 'disabled');
            $('#nextPage').attr('class', 'disabled');
        }
        else {
            $('#lastPage').attr('class', '');
            $('#nextPage').attr('class', '');
        }
    },
    
    sortProducts: function(name){
        raceList.column = name;
        if (raceList.direction == 'Desc') {
            raceList.direction = 'Asc';
        }
        else {
            raceList.direction = 'Desc';
        }
        
        raceList.getRacers(raceList.currentPage);
    },

    tellAFriend: function(){
        $('#tellAFriendPopup').click(function(){
            $('#overlay').remove();
            var width = $('body').width();
            $('#overlay').height($('body').get(0).scrollHeight + 'px');
            $('#overlay').remove();
            var tellAFriendWidth = $('#tellAFriend').width();
            var left = (width - tellAFriendWidth) / 2;
            $('#tellAFriend').css('left', left);
            $('#tellAFriend').show();

            var overlay = '<div id="overlay" class="ui-widget-overlay" style="z-index: 250;"/>'
            $('body').append(overlay);
            $('html,body').animate({
                scrollTop: 0
            }, 1000);


            return false;
        })

        $('#tellAFriend #closeFriend').click(function(){
            $('#tellAFriend').hide();
            $('#overlay').remove();
            return false;
        })
    }
}

var loginUtility = {
    init: function(){
        loginUtility.getStatus();
        loginUtility.getCart();

    },
    
    getCart: function(){
        $.ajax({
            type: "POST",
            url: "/services/userinfo.asmx/GetCart",
            data: "{}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(result){
                loginUtility.populateCart(result);
            },
            error: function(xhr, status, error){
                var err = eval("(" + xhr.responseText + ")");
                alert(err.Message)
            }
        });
    },
    
    populateCart: function(cart){
        if (cart != 0) {
            $('#cart').append($('<li class="last"><a href="/cart/">Cart: ' + cart + ' item(s)</a></li>'));
        }
    },
    
    getStatus: function(){
        $.ajax({
            type: "POST",
            url: "/services/userinfo.asmx/GetLoginStatus",
            data: "{}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(result){
                loginUtility.populateLogin(result);
            },
            error: function(xhr, status, error){
                var err = eval("(" + xhr.responseText + ")");
                alert(err.Message)
            }
        });
    },
    
    populateLogin: function(firstName){
        //$('#utility li').remove();
        
        if (firstName.length != 0) {
            $('#utility').prepend($('<li class=name></li>').text('Welcome ' + firstName));
            //$('#utility').append($('<li></li>').html('<a href="/account">My Account</a>'));
            $('#utility').append($('<li></li>').html('<a href="/signout.aspx">Logout</a>'));
        }
        
        //just check for the free stuff
        
        if(validation.checkEvent == true){
            validation.checkEventType();
        }
    }
}

var validation = {
    init: function() {
        $('.required').blur(function() {
            validation.nonempty($(this));
        })
        
        $('.email').blur(function() {
            validation.email($(this));
        })
        
        $('.zipcode').blur(function() {
            validation.zipcode($(this));
        })
        
        $('.selection').blur(function() {
            validation.selection($(this));
        })

        $('.creditCard').blur(function() {
            validation.creditCard($(this));
        })

        $('.issue').live('focus', function(){
            $(this).select();
        })

        var numIssues = validation.submit_form();
        if (numIssues > 0) {
            return false;
        }
        else {
            return true;
        }
    },

    email: function(elem) {
        var re = /^(([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5}){1,25})+([;.](([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5}){1,25})+)*$/;
        var result = re.exec($(elem).attr('value'));
        if (result == null) {
            validation.clear(elem);
            $(elem).addClass('issue')
            $(elem).attr('rel', 'issue');
            $(elem).val('Need valid email');
        //$(elem).after('<span class="message">You need to include a valid email</span>')

        }
        else {
            if ($('#utility li.name').length == 0) {
                $.ajax({
                    type: "POST",
                    url: "/services/userinfo.asmx/CheckEmail",
                    data: "{'email':'" + $(elem).attr('value') + "'}",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function(result){
                        if(result){
                            $(elem).attr('rel', 'issue');
                            $(elem).val('Already a member');
                            $(elem).after('<span class="message">This email has already been registered as a member</span>')
                        }
                        else{
                            validation.clear(elem);
                        }
                    },
                    error: function(xhr, status, error){
                        var err = eval("(" + xhr.responseText + ")");
                        alert(err.Message)
                    }
                })
            }
            
        }

    },

    zipcode: function(elem) {
        var re = /^\d{5}(-\d{4})?$/;
        var result = re.exec($(elem).attr('value'));
        if (result == null && $(elem).is(':enabled')) {
            validation.clear(elem);
            $(elem).addClass('issue')
            $(elem).attr('rel', 'issue');
            $(elem).val('Need valid zip code');
        //$(elem).after('<span class="message">You need to include a valid zipcode</span>')
        }
        else {
            validation.clear(elem);
        }
    },

    nonempty: function(elem) {
        if (($(elem).attr('value') == '' || $(elem).attr('value') == 'Cannot be empty') && $(elem).is(':enabled')) {
            validation.clear(elem);
            $(elem).addClass('issue');
            $(elem).attr('rel', 'issue');
            //$(elem).after('<span class="message">This field cannot be empty</span>');
            $(elem).val('Cannot be empty');
        }
        else {
            validation.clear(elem);
        }
    },

    selection: function(elem) {
        if ($(elem).val() == 0 && $(elem).is(':enabled')) {
            validation.clear(elem);
            $(elem).addClass('issue');
        //$(elem).after('<span class="message">You need to make a selection.</span>')
        }
        else {
            validation.clear(elem);
        }
    },

    terms: function(elem) {
        if ($('input', elem).attr('checked') == true) {
            $('input', elem).attr('checked', 'checked');
            validation.clear(elem);
        }
        else {
            $('input', elem).attr('checked', '');
            validation.clear(elem);
            $(elem).addClass('issue')
            $(elem).parent('label').after('<span class="message">You need to agree to the waiver before continuing.</span>')
        }
    },

    creditCard: function(elem) {
        var ccNumb = $(elem).attr('value');
        var valid = "0123456789" // Valid digits in a credit card number
        var len = ccNumb.length; // The length of the submitted cc number
        var iCCN = parseInt(ccNumb); // integer of ccNumb
        var sCCN = ccNumb.toString(); // string of ccNumb
        sCCN = sCCN.replace(/^s+|s+$/g, ''); // strip spaces
        var iTotal = 0; // integer total set at zero
        var bNum = true; // by default assume it is a number
        var bResult = false; // by default assume it is NOT a valid cc
        var temp; // temp variable for parsing string
        var calc; // used for calculation of each digit
        for (var j = 0; j < len; j++) {
            temp = "" + sCCN.substring(j, j + 1);
            if (valid.indexOf(temp) == "-1") {
                bNum = false;
            }
        }
        if (!bNum) {
            bResult = false;
        }
        if ((len == 0) && (bResult)) {
            bResult = false;
        }
        else {
            if (len >= 15) {
                for (var i = len; i > 0; i--) { // LOOP throught the digits of the card
                    calc = parseInt(iCCN) % 10; // right most digit
                    calc = parseInt(calc); // assure it is an integer
                    iTotal += calc; // running total of the card number as we loop - Do Nothing to first digit
                    i--; // decrement the count - move to the next digit in the card
                    iCCN = iCCN / 10; // subtracts right most digit from ccNumb
                    calc = parseInt(iCCN) % 10; // NEXT right most digit
                    calc = calc * 2; // multiply the digit by two
                    switch (calc) {
                        case 10:
                            calc = 1;
                            break; //5*2=10 & 1+0 = 1
                        case 12:
                            calc = 3;
                            break; //6*2=12 & 1+2 = 3
                        case 14:
                            calc = 5;
                            break; //7*2=14 & 1+4 = 5
                        case 16:
                            calc = 7;
                            break; //8*2=16 & 1+6 = 7
                        case 18:
                            calc = 9;
                            break; //9*2=18 & 1+8 = 9
                        default:
                            calc = calc; //4*2= 8 &   8 = 8  -same for all lower numbers
                    }
                    iCCN = iCCN / 10;
                    iTotal += calc;
                }
                if ((iTotal % 10) == 0) {
                    bResult = true;
                }
                else {
                    bResult = false;
                }
            }
        }
        if (!bResult && $(elem).is(':enabled')) {
            validation.clear(elem);
            $(elem).addClass('issue');
            $(elem).val('Need a valid credit card')
        //$(elem).after('<span class="message">You need to use a valid credit card.</span>')
        }
        else {
            validation.clear(elem);
        }
    },

    checkCreditCardExpiration: function(){
        var date = new Date();
        var month = date.getMonth() + 1;
        var year = date.getFullYear();

        var expYear = $('.expYear').val();
        var expMonth = $('.expMonth').val();
       
        if (expYear < year) {
            $('.expYear').addClass('issue');
            $('.expYear').attr('rel', 'issue');
            $('.expYear').after('<span class="message">You need to use a valid credit card.</span>');
        }
        else if(expYear == year){
            if(expMonth < month){
                $('.expMonth').addClass('issue');
                $('.expMonth').attr('rel', 'issue');
                $('.expMonth').after('<span class="message">You need to use a valid credit card.</span>');
            }
        }
        else{
            validation.clear('.expYear');
            validation.clear('.expMonth');
        }

    },

    clear: function(elem) {
        $(elem).removeClass('issue');
        $(elem).next('.message').remove();
        $(elem).parent('label').next('.message').remove();
    },

    submit_form: function() {
        $('.form input, .form textarea, .form select').trigger('blur');
        validation.checkCreditCardExpiration();

        validation.terms($('.terms'));

        validation.checkEventType();

        var issues = $('.form .issue').length;
        if (issues != 0) {
            $('.form .issue:eq(0)').focus();
            return issues;
        }
        else {
            return 0;
        }
    },

    checkEventType: function() {
        if ($('#utility li.name').length > 0) {
            $('#loginInfo').hide();
            if($('.buyMisc input').length > 0){
                if($('.buyMisc input').attr('checked')){
                    if ($('#registrationFee').text().toLowerCase() == 'free') {
                        $('#formRaceFee .required, #formRaceFee .email, #formRaceFee .zipcode, #formRaceFee .creditCard, #formRaceFee .selection').removeAttr('disabled');
                        $('#formRaceFee .required, #formRaceFee .email, #formRaceFee .zipcode, #formRaceFee .creditCard, #formRaceFee .selection').removeClass('disabled');
                    }
                }
                else{
                    if ($('#registrationFee').text().toLowerCase() == 'free') {
                        $('#formRaceFee .required, #formRaceFee .email, #formRaceFee .zipcode, #formRaceFee .creditCard, #formRaceFee .selection').attr('disabled', 'disabled');
                        $('#formRaceFee .required, #formRaceFee .email, #formRaceFee .zipcode, #formRaceFee .creditCard, #formRaceFee .selection').addClass('disabled');
                    }                
                }
            }
            else{
                if ($('#registrationFee').text().toLowerCase() == 'free') {
                    $('#formRaceFee .required, #formRaceFee .email, #formRaceFee .zipcode, #formRaceFee .creditCard, #formRaceFee .selection').attr('disabled', 'disabled');
                    $('#formRaceFee .required, #formRaceFee .email, #formRaceFee .zipcode, #formRaceFee .creditCard, #formRaceFee .selection').addClass('disabled');
                }
            }
        }
    }
}

var raceMetadata = {
    defaultDivision: 0,
    defaultClass: 0,

    init: function() {
        raceMetadata.defaultDivision = $('#ctl00_ContentPlaceHolder1_defaultDivision').attr('value');
        raceMetadata.defaultClass = $('#ctl00_ContentPlaceHolder1_defaultClass').attr('value');
        raceMetadata.setupEvents();
        raceMetadata.getDivisions();
        raceMetadata.buyMisc();
        
        //hackish way to set the first element that is not the select to be preselected for event registration
        setTimeout(function() {
            if (raceMetadata.selectFirst === true) {
                var secondOption = $('.divisionList option:eq(1)').attr('value');
                if (typeof (secondOption) !== 'undefined') {
                    $('.divisionList').val(secondOption);
                    $('.divisionList').trigger('change');
                }
            }

        }, 1000)

        if ($('#utility li.name').length > 0) {
            $('#loginInfo').hide();
        }

        if($('#ctl00_ContentPlaceHolder1_miscFee').length > 0){
            var miscFee = $('#ctl00_ContentPlaceHolder1_miscFee').attr('value');
            if(miscFee == '$0.00'){
                $('#misc').hide();
            }
        }
        
    },


    buyMisc: function(){
        $('.buyMisc input').click(function(){
            if($(this).attr('checked')){
                if ($('#registrationFee').text().toLowerCase() == 'free') {
                    $('#formRaceFee .required, #formRaceFee .email, #formRaceFee .zipcode, #formRaceFee .creditCard, #formRaceFee .selection').removeAttr('disabled');
                    $('#formRaceFee .required, #formRaceFee .email, #formRaceFee .zipcode, #formRaceFee .creditCard, #formRaceFee .selection').removeClass('disabled');
                }
            }
            else{
                if ($('#registrationFee').text().toLowerCase() == 'free') {
                    $('#formRaceFee .required, #formRaceFee .email, #formRaceFee .zipcode, #formRaceFee .creditCard, #formRaceFee .selection').attr('disabled', 'disabled');
                    $('#formRaceFee .required, #formRaceFee .email, #formRaceFee .zipcode, #formRaceFee .creditCard, #formRaceFee .selection').addClass('disabled');
                }
            }
        })
    },

    getDivisions: function() {

        if (raceMetadata.raceKey != undefined) {
            $.ajax({
                type: "POST",
                url: "/services/divisions.asmx/GetDivisionsByRace",
                data: "{'raceKey':'" + raceMetadata.raceKey + "'}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function(result) {
                    if (result.length > 0) {
                        raceMetadata.populateDivisions(result);
                    }
                    else {
                        $.ajax({
                            type: "POST",
                            url: "/services/divisions.asmx/GetDivisions",
                            data: "{}",
                            contentType: "application/json; charset=utf-8",
                            dataType: "json",
                            success: function(result) {
                                raceMetadata.populateDivisions(result);
                            },
                            error: function(xhr, status, error) {
                                var err = eval("(" + xhr.responseText + ")");
                                alert(err.Message)
                            }
                        });
                    }
                },
                error: function(xhr, status, error) {
                    var err = eval("(" + xhr.responseText + ")");
                    alert(err.Message)
                }
            });
        }
        else {
            $.ajax({
                type: "POST",
                url: "/services/divisions.asmx/GetDivisions",
                data: "{}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function(result) {
                    raceMetadata.populateDivisions(result);
                },
                error: function(xhr, status, error) {
                    var err = eval("(" + xhr.responseText + ")");
                    alert(err.Message)
                }
            });
        }
    },


    populateDivisions: function(divisions) {
        $('.divisionList').append($('<option value="0">Select...</option>'));
        for (var i = 0; i < divisions.length; i++) {
            $('.divisionList').append($('<option></option>').val(divisions[i].Key).html(divisions[i].Name));
        }
        $('.divisionList').val(raceMetadata.defaultDivision);
        raceMetadata.getClasses();
    },

    getClasses: function() {
        var division = $('.divisionList').val();
        $.ajax({
            type: "POST",
            url: "/services/divisions.asmx/GetClasses",
            data: "{'divisionKey':'" + division + "'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(result) {
                raceMetadata.populateClasses(result);

            },

            error: function(xhr, status, error) {
                var err = eval("(" + xhr.responseText + ")");
                alert(err.Message)
            }
        });
    },

    populateClasses: function(classes) {
        $('.classList option').remove();
        $('.classList').append($('<option value="0">Select...</option>'));
        for (var i = 0; i < classes.length; i++) {
            $('.classList').append($('<option></option>').val(classes[i].Key).html(classes[i].Name));
        }
        $('.classList').val(raceMetadata.defaultClass);
    },

    setupEvents: function() {
        $('.divisionList').change(function() {
            raceMetadata.getClasses();
        })
    },

    setStatus: function() {
        $('#ctl00_ContentPlaceHolder1_defaultClass').attr('value', $('.classList').val());
        $('#ctl00_ContentPlaceHolder1_defaultDivision').attr('value', $('.divisionList').val());
    }
}

var promo ={
    init: function(){
        $('.promoCode').blur(function(){
            var code = $(this).attr('value');
            if(code.length > 0){
                $.ajax({
                    type: "POST",
                    url: "/services/raceinfo.asmx/GetDiscount",
                    data: "{'promoCode':'" + code + "'}",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function(result){

                        if(result > 0){
                            var memberFee = utility.stripNonNumeric($('#registrationFee').text());
                            var nonMemberFee = utility.stripNonNumeric($('#nonMemberRegistrationFee').text());
                            var memberFee = promo.memberFee;
                            var nonMemberFee = promo.nonMemberFee;
                            var newMemberFee = memberFee - (result * memberFee);
                            var newNonMemberFee = nonMemberFee - (result * nonMemberFee);
                            if(newMemberFee == 0){
                                $('#registrationFee').text('FREE');
                            }
                            else{
                                $('#registrationFee').text('$' + newMemberFee.toFixed(2));
                            }
                            if(newNonMemberFee == 0){
                                $('#nonMemberRegistrationFee').text('FREE');
                            }
                            else{
                                $('#nonMemberRegistrationFee').text('$' + newNonMemberFee.toFixed(2));
                            }
                            $('#promoMessage').remove();
                            $('.promoCode').after('<span id="promoMessage">Your promo code has been applied.</span>')
                        }
                        else{
                            $('#promoMessage').remove();
                            $('.promoCode').after('<span id="promoMessage">You have used an invalid promo code.</span>')
                        }
                    },

                    error: function(xhr, status, error){
                        var err = eval("(" + xhr.responseText + ")");
                        alert(err.Message)
                    }
                });
            }
        })
    }
}

var racePrice = {
    init: function(){
        $('.racePrice').change(function(){
            var id = $(this).attr('value');
          
            if(id.length > 0){
                $.ajax({
                    type: "POST",
                    url: "/services/raceinfo.asmx/GetPricing",
                    data: "{'Key':'" + id + "'}",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function(result){
                        racePrice.populatePrice(result);  
                    },

                    error: function(xhr, status, error){
                        var err = eval("(" + xhr.responseText + ")");
                        alert(err.Message)
                    }
                });
            }
        })
    },
    
    populatePrice: function(price) {
        $('#registrationFee').text(price.MemberPrice);
        $('#nonMemberRegistrationFee').text(price.NonMemberPrice);
        promo.memberFee = utility.stripNonNumeric($('#registrationFee').text());
        promo.nonMemberFee = utility.stripNonNumeric($('#nonMemberRegistrationFee').text());
 
    }
}

var Tags = {
    tagContainer: '#tags',
    hiddenTags: '#ctl00_ContentPlaceHolder1_Tags',
    listOfTags: '#listOfTags',
    selectedTags: '#selectedTags',

    init: function(){
        Tags.getAllTags();
        Tags.getCategoryTags();
        Tags.saveCategoryTags();
        Tags.deleteCategoryTag();
    },

    getAllTags: function(){
        $.ajax({
            type: "POST",
            url: "/services/categories.asmx/GetTags",
            data: "{}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(result) {
                if(result > 0){
                    var allTags = [];
                    for(var i=0; i<result.length; i++){
                        allTags.push(result[i].Tag);
                    }

                    $(Tags.selectedTags).autocomplete(allTags, {
                        width: 170,
                        maxItemsToShow: 4,
                        highlight: false,
                        multiple: true,
                        multipleSeparator: " ",
                        scroll: true,
                        scrollHeight: 150
                    });
                }
            },
            error: function(xhr, status, error) {
                var err = eval("(" + xhr.responseText + ")");
                alert(err.Message)
            }
        });
    },

    
    getCategoryTags: function(){
        var list = $(Tags.hiddenTags).val();
        if(list.length > 0){
            list = list.split(';');
            var lis = '';
            for(var i=0; i<list.length; i++){
                lis = lis + Tags.buildTag(list[i]);
            }
            $(Tags.listOfTags).append(lis);
        }
    },

    saveCategoryTags: function(){
        $(Tags.selectedTag).keypress(function(event){
            if(event.keyCode == 13){
                var newTag = $.trim($(Tags.selectedTags).val());
                $(Tags.listOfTags).append(Tags.buildTag(newTag));
                $(Tags.selectedTags).val('');
                Tags.updateHiddenTags();
                return false;
            }
        })
    },

    updateHiddenTags: function(){
        $(Tags.hiddenTags).val('');
        $('li', Tags.listOfTags).each(function(){
            $(Tags.hiddenTags).val($(Tags.hiddenTags).val() + $(this).text() + ';');
        })
    },

    deleteCategoryTag: function(){
        $(Tags.listOfTags).click(function(event){
            var target = $(event.target);
            if($(target).attr('nodeName').toLowerCase() == 'img'){
                var parent = $(target).parents('li');
                if(parent.length > 0){
                    $(parent).remove();
                    Tags.updateHiddenTags();
                }
            }
            return false;
        })
    },

    buildTag: function(title){
        return '<li>'+ title + '<a href="#" class="delete"><img src="/webresources/images/icons/close.gif" alt="" /></a></li>';
    }
}

var Subcategories = {
    hiddenCategories: '#ctl00_ContentPlaceHolder1_ProductTags',
    
    init: function(){
        var initialSubs = [];
        if($(Subcategories.hiddenCategories).val().length > 0){
            initialSubs = $(Subcategories.hiddenCategories).val().split(';');
        }

        var val = $('#ctl00_ContentPlaceHolder1_Categorylist option:selected').attr('value');
               
        Subcategories.getSubsByCategory(val, initialSubs);
        $('.Categorylist').change(function(){
            var category = $(this).val();
            Subcategories.getSubsByCategory(category);
        })
        
        Subcategories.saveSubcategories();
    },

    getSubsByCategory: function(category, initialSubs){
        $.ajax({
            type: "POST",
            url: "/services/categories.asmx/GetTagsByCategoryKey",
            data: "{'categoryKey': " + category + "}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(result) {
                if(result.length > 0){
                    Subcategories.createSubcategories(result, initialSubs);
                }
            },
            error: function(xhr, status, error) {
                var err = eval("(" + xhr.responseText + ")");
                alert(err.Message)
            }
        });
    },


    createSubcategories: function(subcategories, initialSubs){
        var html = '';
        for(var i=0; i<subcategories.length; i++){
            var className = subcategories[i].Tag.replace(/'/, '-');
            className = className.replace(/ /, '-');
            html += '<li><input type="checkbox" class="' + className + '" value="' + subcategories[i].Tag + '" /> ' + subcategories[i].Tag + '</li>';
        }
        $('#subcategory').html('').append(html);

        if(initialSubs && initialSubs.length > 0){
            for(var i=0; i<initialSubs.length; i++){
                var className = initialSubs[i].replace(/'/, '-');
                className = className.replace(/ /, '-');
                $('.' + className, '#subcategory').attr('checked', 'checked');
            }
        }
    },

    saveSubcategories: function(){
        $('input:checkbox', '#subcategory').live('click', function(){
            Subcategories.updateHiddenCategories();
        })
    },

    updateHiddenCategories: function(){
        $(Subcategories.hiddenCategories).val('')
        $('input:checkbox', '#subcategory').each(function(){
            if($(this).attr('checked')){
                $(Subcategories.hiddenCategories).val($(Subcategories.hiddenCategories).val() + $(this).val() + ';');
            }
        })
    }

}

var ProductOptions = {
    hiddenOptions: '#ctl00_ContentPlaceHolder1_SizeTags',
    
    init: function(){
        var showSizeBool = $('#ctl00_ContentPlaceHolder1_ShowSize').val();
        if(showSizeBool){
            var initialOpts = [];
            if($(ProductOptions.hiddenOptions).val().length > 0){
                initialOpts = $(ProductOptions.hiddenOptions).val().split(';');
            }

            $('#showSize').show();

            var val = $('#ctl00_ContentPlaceHolder1_SizeTypeList option:selected').attr('value');
            ProductOptions.chooseOptions(val, initialOpts);

            $('.SizeTypeList').change(function(){
                var opt = $(this).val();
                ProductOptions.chooseOptions(opt);
            });
            ProductOptions.saveOptions();
        }
    },

    chooseOptions: function(opt, initialOpts){
        $('.opt').hide();
        $('#option_' + opt).show();

        if(initialOpts && initialOpts.length > 0){
            for(var i=0; i<initialOpts.length; i++){
                $('input:checkbox[value="' + initialOpts[i] +'"]').attr('checked', 'checked');
            }
        }
    },

    saveOptions: function(){
        $('input:checkbox').live('click', function(){
            ProductOptions.updateHiddenOptions();
        })
    },

    updateHiddenOptions: function(){
        var div = $('.opt:visible').attr('id');
        $(ProductOptions.hiddenOptions).val('')
        $('input:checkbox', '#' + div).each(function(){
            if($(this).attr('checked')){
                $(ProductOptions.hiddenOptions).val($(ProductOptions.hiddenOptions).val() + $(this).val() + ';');
            }
        })
    }
}


var Products = {
    catSlug: '',
    tagSlug: '',
    brandSlug: '',
    pageNumber: 1,
    pageSize: 9,
    pagerContainer: '.pager',
    query: '',
    
    init: function(){
        Products.getAllProducts();
        Products.page();
        Products.getSubCategories();
        Products.defaultEnter();
    },
    
    searchProducts: function(){
        var q = $('#term').val();
//        var url = location.pathname;

        if(q != '')
        {
            window.location = '/shop/index.aspx?q=' + q;
//            if(url.indexOf('/shop/index.aspx') != -1 || url == '/shop/')
//            {
//                Products.query = q;
//                Products.getAllProducts();
//            } else {
//                window.location = '/shop/index.aspx?q=' + q;
//            }
        }
    },

    getAllProducts: function(){
        if(Products.query != '')
        {
            $.ajax({
                type: "POST",
                url: "/services/products.asmx/SearchProducts",
                data: "{'term':'" + Products.query + "', 'pageSize': " + Products.pageSize + ", 'pageNumber': " + Products.pageNumber + ", 'sortColumn': 'Name', 'sortDirection': 'Asc'}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function(result) {
                    if(result.Results.length > 0){
                        Products.buildProducts(result.Results);
                        Products.checkPagingStatus(result.TotalPageCount);
                    }
                },
                error: function(xhr, status, error) {
                    var err = eval("(" + xhr.responseText + ")");
                    alert(err.Message)
                }
            });
        } else {
            $.ajax({
                type: "POST",
                url: "/services/products.asmx/GetProducts",
                data: "{'brandSlug':'" + Products.brandSlug + "', 'categorySlug':'" + Products.catSlug + "', 'tagSlug': '" + Products.tagSlug + "', 'pageSize': " + Products.pageSize + ", 'pageNumber': " + Products.pageNumber + ", 'sortColumn': 'Name', 'sortDirection': 'Asc'}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function(result) {
                    if(result.Results.length > 0){
                        Products.buildProducts(result.Results);
                        Products.checkPagingStatus(result.TotalPageCount);
                    }
                },
                error: function(xhr, status, error) {
                    var err = eval("(" + xhr.responseText + ")");
                    alert(err.Message)
                }
            });
        }
    },

    buildProducts: function(products){
        $('#shop li').remove();
        var html = '';
        for(var i=0; i<products.length; i++){
            html += '<li>';
            html += '<a href="' + products[i].URL +'">';
            html += '<div class="thumbnail"><img src="' + products[i].ThumbPath + '" alt="' + products[i].Name + '" /></div>';
            html += '</a>';
            html += '<h2><a href="' + products[i].URL +'">' + products[i].Name + '</a></h2>';
            html += '<span id="price">' + products[i].Price + '</span>';
            html += '</li>';
        }

        $('#shop').append(html);
    },
    
    checkPagingStatus: function(pages){
        if(pages <= 1){
          $('#shopNext', Products.pagerContainer).addClass('disabled');
        }
        else{
          $('#shopNext', Products.pagerContainer).removeClass('disabled');
          $('#shopPrevious', Products.pagerContainer).removeClass('disabled');
        }
        
        if(pages == Products.pageNumber){
          $('#shopNext', Products.pagerContainer).addClass('disabled');
        }
        if(Products.pageNumber == 1){
          $('#shopPrevious', Products.pagerContainer).addClass('disabled');
        }
      },
    
      page: function(){
        $('#shopNext', Products.pagerContainer).click(function(){
          if(!$(this).hasClass('disabled')){
            Products.pageNumber++;
            Products.getAllProducts();
          }
          return false;
        });
        $('#shopPrevious', Products.pagerContainer).click(function(){
          if(!$(this).hasClass('disabled')){
            Products.pageNumber--;
            Products.getAllProducts();
          }
          return false;
        });
      },
    
    getSubCategories: function(){
        $.ajax({
            type: "POST",
            url: "/services/categories.asmx/GetTagsByCategorySlug",
            data: "{'categorySlug':'" + Products.catSlug + "'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(result) {
                if(result.length > 0){
                    Products.buildSubCategories(Products.catSlug, result);
                }
            },
            error: function(xhr, status, error) {
                var err = eval("(" + xhr.responseText + ")");
                alert(err.Message)
            }
        });
    },
    
    buildSubCategories: function(catSlug, subCategories){
        //$('.list li > ul').remove();
        var html = '<ul>';
        
        for(var i=0; i<subCategories.length; i++){
            html += '<li>';
            html += '<a href="/shop/' + catSlug + '/' + subCategories[i].Slug + '/1.aspx">' + subCategories[i].Tag + '</a>';
            html += '</li>';
        }
        
        html += "</ul>";

        $('.list li#' + catSlug + '').append(html);
    },
    
    defaultEnter: function() {
        $('.search').keypress(function(event) {
            if (event.which == 13) {
               Products.searchProducts();
               return false;
            }
        });
    }
}

var specialProducts = {    
    init: function(){
        specialProducts.getSpecials();
    },
    

    getSpecials: function(){
        $.ajax({
            type: "POST",
            url: "/services/products.asmx/GetSpecials",
            data: "{}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(result) {
                specialProducts.buildProducts(result);
            },
            error: function(xhr, status, error) {
                var err = eval("(" + xhr.responseText + ")");
                alert(err.Message)
            }
        });
    },

//    buildProducts: function(products){
//        if (products.length > 0)
//        {
//            $('.featured li').remove();
//            var html = '';
//            for(var i=0; i<products.length; i++){
//                html += '<li id="' + i + '">';
//                html += '<img src="' + products[i].ThumbPath + '" alt="' + products[i].Name + '" style="width: auto; height: 80px; margin: 0 0 15px 0;"/>';
//                html += '<h3><a href="' + products[i].URL +'">' + products[i].Name + '</h3>';
//                //html += products[i].Description + '</p>';
//                html += '</li>';
//            }
//
//            $('.featured').append(html);
//            
//            // bind paging here
//        } else {
//            $('#featured').hide();
//            $('#featuredNone').show();
//        }
//    }

    buildProducts: function(products){
        if (products.length > 0)
        {
            $('.featured li').remove();
            var html = '';
            for(var i=0; i<products.length; i++){
                html += '<li id="' + i + '">';
                html += '<img src="' + products[i].ThumbPath + '" alt="' + products[i].Name + '" style="width: auto; height: 80px; margin: 0 0 15px 0;"/>';
                html += '<h3><a href="' + products[i].URL +'">' + products[i].Name + '</h3>';
                //html += products[i].Description + '</p>';
                html += '</li>';
            }

            $('.featured').append(html);
            
            // bind paging here
        } else {
            $('#featured').hide();
            $('#featuredNone').show();
        }
    }
}

function cancelGB_Window(){
    window.parent.window.parent.location.reload();
}


function closeGB_Window(){
    window.parent.window.parent.GB_hide();
}


