var COOKIE_NAME = 'adultSwimShop';

function FindAndGetElementText(parent, selector) {
    var result = '';

    var element = parent.find(selector);
    if (element != null) {
        result = element.text();
    }

    return result;
}

function SelectableItemHover() {
    $('.SelectableItem').hover(
        function() {
            $(this).addClass('SelectableItemHover');
        },
        function() {
            $(this).removeClass('SelectableItemHover');
        }
    );
}

function MenuHover(tab, imgElement, hoverImage, normalImage) {
    $(tab).hover(
        function() {
            if (!$(imgElement).hasClass('SelectedMenu')) {
                $(this).addClass('SelectableItem');
                $(imgElement).attr('src', hoverImage);
            }
        },
        function() {
            if (!$(imgElement).hasClass('SelectedMenu')) {
                $(this).removeClass('SelectableItem');
                $(imgElement).attr('src', normalImage);
            }
        }
    );
}

function HideSubMenu(wrapper, contentWrapper, imgElement, regularImage) {
    $(imgElement).attr('src', regularImage);
    if(contentWrapper != null){
        $(contentWrapper).hide();
    }
    $(wrapper).hide();

    if ($(imgElement).hasClass('SelectedMenu')) {
        $(imgElement).removeClass('SelectedMenu');
    }
}

function ShowSubMenu(wrapper, contentWrapper, imgElement, selectedImage) {
    $(imgElement).attr('src', selectedImage);
    $(wrapper).fadeIn('slow');
    if (contentWrapper != null) {
        $(contentWrapper).fadeIn('slow');
    }
    $(imgElement).addClass('SelectedMenu');
}

function DeSelectNavMenu(imgElement, image) {
    $(imgElement).attr('src', image);
    if ($(imgElement).hasClass('SelectedMenu')) {
        $(imgElement).removeClass('SelectedMenu');
    }
}

function SelectNavMenu(imgElement, image) {
    $(imgElement).attr('src', image);
    $(imgElement).addClass('SelectedMenu');
}

function ReturnFirstNodeImage(rawXml, nodeName) {
    var firstNode = null;
    
    var sarissaDoc = (new DOMParser()).parseFromString(rawXml, "text/xml");
    var matches = $(sarissaDoc).find(nodeName);

    if (matches != null && matches.length > 0) {
        firstNode = matches[0];
    }

    return firstNode;
}

function SimpleAjax(url, callback, prefix) {
    AjaxWithParam(url, callback, "{ }", prefix);
}

function AjaxWithParam(url, callback, jsonData, prefix) {
    $.ajax({
        type: "POST",
        url: url,
        data: jsonData,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(msg) {
            HidePopup('#divProcessing');
            callback(msg.d);
        },
        error: function(xhr, msg) {
            HidePopup('#divProcessing');
            ShowError(xhr, prefix);
        }
    });
}

function ShowError(xhr, prefix) {
    var err = eval("(" + xhr.responseText + ")");
    $('#ulError').append('<li>' + prefix + ': ' + err.Message + '</li>');

    $('img.Loading').each(function(i) {
        $(this).attr('alt', 'error');
        $(this).attr('src', '/catalog/images/text/error4.jpg');
    });
    
    $('#divError').dialog('open');
}

function FetchEpisodes(showName, showId) {
    $('#EpisodeListWrapper').html('<img src="/catalog/images/loading.gif" alt="loading" />');
    $('#imgBuildItSteps').attr('src', '/catalog/images/text/steps_to_build_dvd_2.jpg');
    $('#spanShowName').text(showName);
    $('#hidSelectedShowId').val(showId);

    HideSubMenu('#ShowListWrapper', null, '#imgSelectYourShow', '/catalog/images/text/select_your_show.jpg');
    ShowSubMenu('#EpisodeListWrapper', null, '#imgSelectYourEpisodes', '/catalog/images/text/select_your_episodes_selected.jpg');

    var jsonData = JSON.stringify({ showId: showId });
    $.ajax({
        type: "POST",
        url: "/NovatorProxy.asmx/GetEpisodes",
        data: jsonData,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(msg) {
            PopulateEpisodeList(msg.d.Episodes);
            RenderSeasons(msg.d.Seasons);
        },
        error: function(xhr, msg) {
            ShowError(xhr, 'Get Episodes');
        }
    });
}

function FetchEpisodesBySeason(showId, season) {
    var jsonData = JSON.stringify({ showId: showId, season: season });
    
    $.ajax({
        type: "POST",
        url: "/NovatorProxy.asmx/GetEpisodesBySeason",
        data: jsonData,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(msg) {
            PopulateEpisodeListBySeason(msg.d.Episodes);
        },
        error: function(xhr, msg) {
            ShowError(xhr, 'Get Episodes by Season');
        }
    });
}

function ShowListEdit_Click() {
    $('#ShowNameWrapper').fadeOut('fast');
    $('#SeasonsWrapper').fadeOut('fast');
    $('#imgBuildItSteps').attr('src', '/catalog/images/text/steps_to_build_dvd_1.jpg');
    HideSubMenu('#EpisodeListWrapper', null, '#imgSelectYourEpisodes', '/catalog/images/text/select_your_episodes.jpg');
    ShowSubMenu('#ShowListWrapper', null, '#imgSelectYourShow', '/catalog/images/text/select_your_show_selected.jpg');
}

function EditEpisodes_Click() {
    $('#tabs').tabs('select', 0);
    ShowListEdit_Click();
}

function PopulateShowList(rawXml) {
    $('td.ShowItem').live('click', function(e) {
        var showId = FindAndGetElementText($(this), 'span.showId');
        var showName = FindAndGetElementText($(this), 'span.showName');
        FetchEpisodes(showName, showId);
    });

    $('#ShowListWrapper').getTransform('catalog/Transforms/ShowList.xsl', rawXml);
    SelectableItemHover();
    MenuHover('#ShowListCaption', '#imgSelectYourShow', '/catalog/images/text/select_your_show_highlighted.jpg', '/catalog/images/text/select_your_show.jpg');
    $('#ShowListCaption').click(ShowListEdit_Click);
    $('#imgEditEpisodes').click(EditEpisodes_Click);
}

function PopulateEpisodeListBySeason(rawXml) {
    $('#EpisodeListWrapper').empty();
    $('#EpisodeListWrapper').getTransform('catalog/Transforms/EpisodeList.xsl', rawXml);
    SelectableItemHover();
}

function PopulateEpisodeList(rawXml) {
    $('#EpisodeListWrapper').getTransform('catalog/Transforms/EpisodeList.xsl', rawXml);
    $('#ShowNameWrapper').fadeIn('fast');
    $('#SeasonsWrapper').fadeIn('fast');
    $('#SelectedEpisodesWrapper').fadeIn('slow');
    SelectableItemHover();
}

function RenderSeasons(rawXml) {
    $('#spanSeasonsList').empty();
    $('#spanSeasonsList').getTransform('catalog/Transforms/SeasonsList.xsl', rawXml);

    var x = $('a.shSeason')[0];
    $(x).addClass('shHighlight');

    $('a.shSeason').live('click', function(e) {
        e.preventDefault();
        var showId = $('#hidSelectedShowId').val();
        var seasonId = FindAndGetElementText($(this), 'span.shSeasonId');

        $('a.shSeason').each(function(i) {
            $(this).removeClass('shHighlight');
        });
        $(this).addClass('shHighlight');

        FetchEpisodesBySeason(showId, seasonId);
    });
}

function ConfigureNav() {
    MenuHover('#liTabBuild', '#imgTabBuild', '/catalog/images/text/build_it_highlighted.jpg', '/catalog/images/text/build_it.jpg');
    MenuHover('#liTabDesign', '#imgTabDesign', '/catalog/images/text/design_it_highlighted.jpg', '/catalog/images/text/design_it.jpg');
    MenuHover('#liTabReview', '#imgTabReview', '/catalog/images/text/review_it_highlighted.jpg', '/catalog/images/text/review_it.jpg');
    MenuHover('#liTabBuy', '#imgTabBuy', '/catalog/images/text/buy_it_highlighted.jpg', '/catalog/images/text/buy_it.jpg');

    MenuHover('#CaseDesignsCaption', '#imgCaseDesignsCaption', '/catalog/images/text/design_your_case_highlighted.jpg', '/catalog/images/text/design_your_case.jpg');
    MenuHover('#DiscDesignsCaption', '#imgDiscDesignsCaption', '/catalog/images/text/design_your_disc_highlighted.jpg', '/catalog/images/text/design_your_disc.jpg');
    MenuHover('#MenuDesignsCaption', '#imgMenuDesignsCaption', '/catalog/images/text/design_your_menu_highlighted.jpg', '/catalog/images/text/design_your_menu.jpg');

    $('#CaseDesignsCaption').click(CaseDesigns_Click);
    $('#DiscDesignsCaption').click(DiscDesigns_Click);
    $('#MenuDesignsCaption').click(MenuDesigns_Click);

    $('#imgEditCaseDesign').click(EditCaseDesign_Click);
    $('#imgEditDiscDesign').click(EditDiscDesigns_Click);
    $('#imgEditMenu').click(EditMenuDesigns_Click);

    $('#imgBackToAdultSwim').click(function() {
        $('#divLeaving').dialog('open');
    });

    $('#imgLeave').click(function() {
        window.location = "http://www.adultswimshop.com";
    });

    $('#imgReload').click(function() {
        window.location = "/index.html";
    });
    
    $('#imgSaveForLater').click(SaveForLater_Click);
    $('#imgMyDVDs').click(GetSavedDVDs_Click);

    $('#imgContactUs').click(function() {
        window.open("http://www.adultswimshop.com/contactus.xml");
        return false;
    });

    $('#imgHelp').click(function() {
        window.open("http://www.wbecommerce.com/shops/swimmodhelp.html", null, "height=500,width=415,status=yes,toolbar=no,menubar=no,location=no");
        return false;
    });

    $('img.navBuyIt').click(BuyIt_Click);
    $('#imgDesignPrevious').click(DesignPrevious_Click);
    $('#imgDesignNext').click(DesignNext_Click);
    $('img.navDesign').click(DesignIt_Click);
    $('img.navReview').click(ReviewIt_Click);
}


function BuildIt_Click() {
    $('#tabs').tabs('select', 0);
}

function DesignIt_Click() {
    $('#tabs').tabs('select', 1);
}

function ReviewIt_Click() {
    $('#tabs').tabs('select', 2);
}

function BuyIt_Click() {
    if ($('.SortableParent').size() < 1) {
        $('#divNoEpisodes').dialog('open');
    }
    else {
        $('#divBuyItPopup').dialog('open');
    }
}

function DesignPrevious_Click() {
    if ($('#imgCaseDesignsCaption').hasClass('SelectedMenu')) {
        BuildIt_Click();
    }
    else if ($('#imgDiscDesignsCaption').hasClass('SelectedMenu')) {
        CaseDesigns_Click();
    }
    else if ($('#imgMenuDesignsCaption').hasClass('SelectedMenu')) {
        DiscDesigns_Click();
    }
}

function DesignNext_Click() {
    if ($('#imgCaseDesignsCaption').hasClass('SelectedMenu')) {
        DiscDesigns_Click();
    }
    else if ($('#imgDiscDesignsCaption').hasClass('SelectedMenu')) {
        MenuDesigns_Click();
    }
    else if ($('#imgMenuDesignsCaption').hasClass('SelectedMenu')) {
        ReviewIt_Click();
    }
}

function EditCaseDesign_Click() {
    DesignIt_Click();
    CaseDesigns_Click();
}
function CaseDesigns_Click() {
    $('#imgDesignStep').attr('src', '/catalog/images/text/steps_design_your_case_full_1.jpg');

    HideSubMenu('#DiscDesignsWrapper', '#DiscDesignsContentWrapper', '#imgDiscDesignsCaption', '/catalog/images/text/design_your_disc.jpg');
    HideSubMenu('#MenuDesignsWrapper', '#MenuDesignsContentWrapper', '#imgMenuDesignsCaption', '/catalog/images/text/design_your_menu.jpg');
    ShowSubMenu('#CaseDesignsWrapper', '#CaseDesignsContentWrapper', '#imgCaseDesignsCaption', '/catalog/images/text/design_your_case_selected.jpg');
}

function EditDiscDesigns_Click() {
    $('#tabs').tabs('select', 1);
    DiscDesigns_Click();
}

function DiscDesigns_Click() {
    $('#imgDesignStep').attr('src', '/catalog/images/text/steps_design_your_case_full_2.jpg');

    if ($('#txtDiscTitle').val() == '' && $('#txtCaseTitle').val() != '') {
        $('#txtDiscTitle').val($('#txtCaseTitle').val());
    }

    HideSubMenu('#CaseDesignsWrapper', '#CaseDesignsContentWrapper', '#imgCaseDesignsCaption', '/catalog/images/text/design_your_case.jpg');
    HideSubMenu('#MenuDesignsWrapper', '#MenuDesignsContentWrapper', '#imgMenuDesignsCaption', '/catalog/images/text/design_your_menu.jpg');
    ShowSubMenu('#DiscDesignsWrapper', '#DiscDesignsContentWrapper', '#imgDiscDesignsCaption', '/catalog/images/text/design_your_disc_selected.jpg');
}

function EditMenuDesigns_Click() {
    $('#tabs').tabs('select', 1);
    MenuDesigns_Click();
}

function MenuDesigns_Click() {
    $('#imgDesignStep').attr('src', '/catalog/images/text/steps_design_your_case_full_3.jpg');

    if ($('#txtMenuTitle').val() == '' && $('#txtCaseTitle').val() != '') {
        $('#txtMenuTitle').val($('#txtCaseTitle').val());
    }

    HideSubMenu('#CaseDesignsWrapper', '#CaseDesignsContentWrapper', '#imgCaseDesignsCaption', '/catalog/images/text/design_your_case.jpg');
    HideSubMenu('#DiscDesignsWrapper', '#DiscDesignsContentWrapper', '#imgDiscDesignsCaption', '/catalog/images/text/design_your_disc.jpg');
    ShowSubMenu('#MenuDesignsWrapper', '#MenuDesignsContentWrapper', '#imgMenuDesignsCaption', '/catalog/images/text/design_your_menu_selected.jpg');
}

function PopulateCaseDesigns(rawXml) {
    $('#CaseDesignsWrapper').getTransform('catalog/Transforms/CaseDesigns.xsl', rawXml);

    var firstNode = ReturnFirstNodeImage(rawXml, 'Case');
    if (firstNode != null) {
        var id = $(firstNode).find('modart')
        var largeImage = $(firstNode).find('modimg_f');
        SelectCase(id != null ? id.text() : '', (largeImage != null ? largeImage.text() : ''));
    }
    
    $('#hidCaseDesignsLoaded').val('true');
}

function PopulateDiscDesigns(rawXml) {
    $('#DiscDesignsWrapper').getTransform('catalog/Transforms/DiscDesigns.xsl', rawXml);

    var firstNode = ReturnFirstNodeImage(rawXml, 'DVD');
    if (firstNode != null) {
        var id = $(firstNode).find('modart')
        var largeImage = $(firstNode).find('modimg_l');
        var mediumImage = $(firstNode).find('modimg_f');
        SelectDisc(id != null ? id.text() : '', (largeImage != null ? largeImage.text() : ''), (mediumImage != null ? mediumImage.text() : ''));
    }

    $('#hidDiscDesignsLoaded').val('true');
}

function PopulateMenuDesigns(rawXml) {
    $('#MenuDesignsWrapper').getTransform('catalog/Transforms/MenuDesigns.xsl', rawXml);

    var firstNode = ReturnFirstNodeImage(rawXml, 'Menu');
    if (firstNode != null) {
        var id = $(firstNode).find('modart')
        var largeImage = $(firstNode).find('modimg_l');
        var mediumImage = $(firstNode).find('modimg_f');
        SelectMenu(id != null ? id.text() : '', (largeImage != null ? largeImage.text() : ''), (mediumImage != null ? mediumImage.text() : ''));
    }
    
    $('#hidMenuDesignsLoaded').val('true');
}

function SelectCase(id, image) {
    $('#hidSelectedCaseId').val(id);
    $('#imgSelectedCaseDesign').attr('src', image);
    $('#imgSelectedCaseReview').attr('src', image);
}

function SelectDisc(id, largeImage, mediumImage) {
    $('#hidSelectedDiscId').val(id);
    $('#imgSelectedDiscDesign').attr('src', largeImage);
    $('#imgSelectedDiscReview').attr('src', mediumImage);
}

function SelectMenu(id, largeImage, mediumImage) {
    $('#hidSelectedMenuId').val(id);
    $('#imgSelectedMenuDesign').attr('src', largeImage);
    $('#imgSelectedMenuReview').attr('src', mediumImage);
}

function ReorderRows(tbody) {
    if (tbody != null) {
        var position = 1;
        $(tbody).children('tr.SortableParent').each(function() {
            $('td.epSort', $(this)).text(position);
            $(this).removeClass('Row AlternatingRow').addClass(position % 2 ? 'Row' : 'AlternatingRow');
            position += 1;
        });
    }
}

function QueueRow(targetTBody, episodeId, episodeName, episodeClip, showName, duration, episodeSeason) {
    $('#divPending').empty();
    var count = $(targetTBody).children().length + 1;
    $('#divPending').append('<tr class="SortableParent ' + (count % 2 == 1 ? 'Row' : 'AlternatingRow') + '"><td class="epSort">' + count.toString() + '</td><td><span class="epId Hidden">' + episodeId + '</span><span class="epTitle">' + episodeName + '</span><span class="epClip Hidden">' + episodeClip + '</span><span class="epSeason Hidden">' + episodeSeason + '</span></td><td><span class="epShowName">' + showName + '</span></td><td><span class="epDuration">' + duration + '</span></td><td><img src="/catalog/images/redx.gif" class="epRemove" alt="Remove" /></td><td><div style="height:12px;"><img src="/catalog/images/up_arrow.gif" class="MoveUp" alt="Move Up" /></div><div><img src="/catalog/images/down_arrow.gif" class="MoveDown" alt="Move Down" /></div></td></tr>');
}

function AddPendingRow() {
    var pendingRow = $('#divPending').html();
    $('#divPending').empty();
    $('#tbEpisodes').append(pendingRow);
    $('img.navBuyIt').fadeIn('slow');
}

function AddRow(targetTBody, episodeId, episodeName, episodeClip, showName, duration, episodeSeason) {
    var count = $(targetTBody).children().length + 1;
    $(targetTBody).append('<tr class="SortableParent ' + (count % 2 == 1 ? 'Row' : 'AlternatingRow') + '"><td class="epSort">' + count.toString() + '</td><td><span class="epId Hidden">' + episodeId + '</span><span class="epTitle">' + episodeName + '</span><span class="epClip Hidden">' + episodeClip + '</span><span class="epSeason Hidden">' + episodeSeason + '</td><td><span class="epShowName">' + showName + '</span></td><td><span class="epDuration">' + duration + '</span></td><td><img src="/catalog/images/redx.gif" class="epRemove" alt="Remove" /></td><td><div style="height:12px;"><img src="/catalog/images/up_arrow.gif" class="MoveUp" alt="Move Up" /></div><div><img src="/catalog/images/down_arrow.gif" class="MoveDown" alt="Move Down" /></div></td></tr>');
    $('img.navBuyIt').fadeIn('slow');
}

function PrepForVideo(link) {
    var td = $(link).parents('td.AddableParent');
    if (td != null) {
        var videoUrl = FindAndGetElementText(td, 'span.epVideo');
        var episodeName = FindAndGetElementText(td, 'span.epTitle');
        var episodeDesc = FindAndGetElementText(td, 'span.epDescription');
        PlayVideo(videoUrl, episodeName, episodeDesc);
    }
}

function HidePopup(elementName) {
    $(elementName).dialog('close');
}

function PlayVideo(videoUrl, episodeName, episodeDesc) {
    $('#popTitle').text(episodeName);
    $('#popDescription').text(episodeDesc);

    flowplayer("player", { src: '/catalog/flash/flowplayer-3.1.5.swf' }, {
        clip: { url: videoUrl },
        plugins: {
        controls: {
                fullscreen:false
            }
        }
    });

    $('#divVideoPopup').dialog('open');
}

function GetSelectedEpisodes() {
    $('#divDesignSelectedEpisodes').empty();
    $('#divReviewSelectedEpisodes').empty();
    
    $('.SortableParent').each(function(i) {
        var episodeName = FindAndGetElementText($(this), 'span.epTitle');
        $('#divDesignSelectedEpisodes').append(episodeName + '<br />');
        $('#divReviewSelectedEpisodes').append(episodeName + '<br />');
    });
}

function UpdateTimeLeft() {
    var allDurations = new Array();
    $('.SortableParent').each(function(i) {
        var duration = FindAndGetElementText($(this), 'span.epDuration');
        allDurations.push(duration);
    });

    var jsonData = JSON.stringify({ times: allDurations });
    $.ajax({
        type: "POST",
        url: "/NovatorProxy.asmx/ValidateTimeRemaining",
        data: jsonData,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(msg) {
            $('#divPie').attr("style", "background-position:" + msg.d.BackgroundPosition + "px 0;");
            $('#spanTimeLeft').text(msg.d.TimeLeft);
        },
        error: function(xhr, msg) {
            ShowError(xhr, 'Update time left');
        }
    });
}

function ValidateTimeLeft(episodeId, episodeName, episodeClip, showName, duration, episodeSeason) {
    var pendingRow = QueueRow('#tbEpisodes', episodeId, episodeName, episodeClip, showName, duration, episodeSeason)

    var allDurations = new Array();
    $('.SortableParent').each(function(i) {
        var duration = FindAndGetElementText($(this), 'span.epDuration');
        allDurations.push(duration);
    });
    
    var jsonData = JSON.stringify({ times: allDurations });
    $.ajax({
        type: "POST",
        url: "/NovatorProxy.asmx/ValidateTimeRemaining",
        data: jsonData,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(msg) {
        if (msg.d.WasAdded) {
                $('#divPie').attr("style", "background-position:" + msg.d.BackgroundPosition +"px 0;");
                $('#spanTimeLeft').text(msg.d.TimeLeft);
                AddPendingRow();
            }
            else {
                $('#divDVDFull').dialog('open');
            }
            $('#divPending').empty();
        },
        error: function(xhr, msg) {
            ShowError(xhr, 'Validate time');
        }
    });
}

function RemoveDependents(episodeId, episodeSeason) {
    var episode;

    if (episodeSeason.lastIndexOf("sf") != (episodeSeason.length - 2)) {
        var dependents = new Array();

        $('.SortableParent').each(function(i) {
            var ei = FindAndGetElementText($(this), 'span.epId');
            if (ei == episodeId) {
                episode = $(this);
            }
            else {
                var es = FindAndGetElementText($(this), 'span.epSeason');

                var index = es.lastIndexOf("sf");
                if (index === (es.length - 2)) {
                    var sfshow = es.substring(0, index);
                    if (IsSameShow(sfshow, episodeSeason)) {
                        dependents.push($(this));
                    }
                }
            }
        });

        if (dependents.length > 0) {
            var tbody;
            
            for (i = 0; i < dependents.length; i++) {
                var tr = $(dependents[i]);
                tbody = tr.parents('tbody');
                    tr.remove();
            }
        }

        $(episode).remove();
        UpdateTimeLeft();
        ReorderRows(tbody);
    }
}

function PerformRemoveExtrasCheck(tr) {
    var episodeSeason = FindAndGetElementText(tr, 'span.epSeason');
    
    if (episodeSeason.lastIndexOf("sf") != (episodeSeason.length - 2)) {
        var showName;
        var hasDependents = false;

        $('.SortableParent').each(function(i) {
            var es = FindAndGetElementText($(this), 'span.epSeason');

            var index = es.lastIndexOf("sf");
            if (index === (es.length - 2)) {
                var sfshow = es.substring(0, index);
                if (IsSameShow(sfshow, episodeSeason)) {
                    showName = sfshow;
                    hasDependents = true;
                }
            }
        });

        if (hasDependents) {
            var regular = 0;

            $('.SortableParent').each(function(i) {
                var es = FindAndGetElementText($(this), 'span.epSeason');
                if (IsSameShow(showName, es)) {
                    regular++;
                }
            });

            if (regular < 2) {
                var episodeId = FindAndGetElementText(tr, 'span.epId');
                $('#hidRemoveDependentsId').val(episodeId);
                $('#hidRemoveDependentsSeason').val(episodeSeason);
                $('#divCantRemove').dialog('open');
                return false;
            }
        }
    }

    $('#hidRemoveDependentsId').val('');
    $('#hidRemoveDependentsSeason').val('');
    return true;
}

function IsSameShow(showName, es) {
    return (es.length > 1 && es.lastIndexOf("sf") != (es.length - 2) && es.indexOf(showName) > -1);
}

function PerformAddExtrasCheck(episodeSeason) {
    var index = episodeSeason.lastIndexOf("sf");
    
    if (index === (episodeSeason.length - 2)) {
        if ($('.SortableParent').size() < 1) {
            $('#divChooseEpisodeFirst').dialog('open');
            return false;
        }
        else {
            var sfshow = episodeSeason.substring(0, index);
            var same = false;
            
            var added = $('.SortableParent');
            for (i = 0; i < added.length; i++) {
                var es = FindAndGetElementText($(added[i]), 'span.epSeason');
                same = IsSameShow(sfshow, es);

                if (same) {
                    break;
                }
            }

            if (!same) {
                $('#divChooseEpisodeFirst').dialog('open');
                return false;
            }
        }
    }

    return true;
}

function ConfigureEpisodes() {
    $('img.epAdd').live('click', function(e) {
        var td = $(this).parents('td.AddableParent');
        if (td != null) {
            var episodeId = FindAndGetElementText(td, 'span.epId');
            var episodeName = FindAndGetElementText(td, 'span.epTitle');
            var episodeClip = FindAndGetElementText(td, 'span.epClip');
            var showName = $('#spanShowName').text();
            var minutes = FindAndGetElementText(td, 'span.epMinutes');
            var seconds = FindAndGetElementText(td, 'span.epSeconds');
            var duration = '' + minutes + ':' + seconds;
            var episodeSeason = FindAndGetElementText(td, 'span.epSeason');

            if (PerformAddExtrasCheck(episodeSeason)) {
                ValidateTimeLeft(episodeId, episodeName, episodeClip, showName, duration, episodeSeason);
            }
        }
    });

    $('img.epRemove').live('click', function(e) {
        var tr = $(this).parents('tr.SortableParent');
        if (tr != null) {
            if (PerformRemoveExtrasCheck(tr)) {
                var tbody = tr.parents('tbody');
                
                tr.fadeTo('fast', 0.1, function() {
                    tr.remove();
                    UpdateTimeLeft();
                    ReorderRows(tbody);
                });
            }
        }
    });

    $('img.MoveUp').live('click', function(e) {
        var tr = $(this).parents('tr.SortableParent');
        if(tr != null && tr.prev().length) {
            tr.fadeTo('medium', 0.1, function() {
                tr.insertBefore(tr.prev()).fadeTo('fast', 1);
                ReorderRows(tr.parents('tbody'));
            });
        }
    });
    
    $('img.MoveDown').live('click', function(e) {
        var tr = $(this).parents('tr.SortableParent');
        if(tr != null && tr.next().length) {
            tr.fadeTo('medium', 0.1, function() {
                tr.insertAfter(tr.next()).fadeTo('fast', 1);
                ReorderRows(tr.parents('tbody'));
            });
        }
    });

    $('div.EpisodeImageWrapper img.SelectableImage').live('click', function(e) {
        PrepForVideo($(this));
    });

    $('a.epPlay').live('click', function(e) {
        e.preventDefault();
        PrepForVideo($(this));
    });

    $('img.epPlay').live('click', function(e) {
        PrepForVideo($(this));
    });
}

function WriteCookie(guid) {
    var ids;
    
    var today = new Date();
    var expires = new Date(today.getTime() + (365 * 24 * 60 * 60 * 1000));

    var c = $.cookies.get(COOKIE_NAME);
    var isUpdate = false;
    if (c == null) {
        ids = new Array();
    }
    else {
        ids = c;
        for(i = 0; i < ids.length; i++) {
            if (ids[i].name === $('#txtTitle').val()) {
                isUpdate = true;
                ids[i].id = guid;
                break;
            }
        }
    }

    if(!isUpdate) {
        ids.push({ id: guid, name: $('#txtTitle').val() });
    }
    $.cookies.set(COOKIE_NAME, ids, { expiresAt: expires });
}

function SaveForLater_Click() {
    if ($('.SortableParent').size() < 1) {
        $('#divNoEpisodes').dialog('open');
    }
    else {
        $('#divSaveForLater').dialog('open');
    }
}

function GetAllData() {
    var episodes = new Array();

    $('.SortableParent').each(function(i) {
        var episodeId = FindAndGetElementText($(this), 'span.epId');
        var episodeName = FindAndGetElementText($(this), 'span.epTitle');
        var episodeClip = FindAndGetElementText($(this), 'span.epClip');
        var showName = FindAndGetElementText($(this), 'span.epShowName');
        var duration = FindAndGetElementText($(this), 'span.epDuration');
        var episodeSeason = FindAndGetElementText($(this), 'span.epSeason');

        episodes.push({ Id: episodeId, Name: episodeName, Clip: episodeClip, ShowName: showName, Duration: duration, Season: episodeSeason });
    });

    var jsonData = JSON.stringify(
        {
            info:
            {
                Id: 1,
                Title: $('#txtTitle').val(),
                Case:
                {
                    Id: $('#hidSelectedCaseId').val(),
                    Title: $('#txtCaseTitle').val(),
                    Description: $('#txtCaseDescription').val()
                },
                Disc:
                {
                    Id: $('#hidSelectedDiscId').val(),
                    Title: $('#txtDiscTitle').val(),
                    Description: $('#txtDiscDescription').val()
                },
                Menu:
                {
                    Id: $('#hidSelectedMenuId').val(),
                    Title: $('#txtMenuTitle').val()
                },
                Episodes: episodes
            }
        }
    );

    return jsonData;
}

function PerformSave_Click() {
    var jsonData = GetAllData();
    HidePopup('#divSaveForLater');
    $('#divProcessing').dialog('open');
    AjaxWithParam("/NovatorProxy.asmx/SaveDisc",
        function(guid) {
            WriteCookie(guid);
        },
        jsonData,
        'Perform Save'
    );
}

function LoadSavedDVD_Click() {
    var selected = $('input[name=DVDId]:checked');
    if (selected != null && selected.val() != null) {
        var jsonData = JSON.stringify({ id: selected.val() });
        HidePopup('#divMyDVDs');
        $('#divProcessing').dialog('open');
        AjaxWithParam("/NovatorProxy.asmx/GetSavedDisc", Populate, jsonData, 'Load Saved DVD');
    }
}

function Populate(info) {
    $('#txtTitle').val(info.Title);

    SelectCase(info.Case.Id, info.Case.MediumImageUrl);
    $('#txtCaseTitle').val(info.Case.Title);
    $('#txtCaseDescription').val(info.Case.Description);

    SelectDisc(info.Disc.Id, info.Disc.LargeImageUrl, info.Disc.MediumImageUrl);
    $('#txtDiscTitle').val(info.Disc.Title);
    $('#txtDiscDescription').val(info.Disc.Description);

    SelectMenu(info.Menu.Id, info.Menu.LargeImageUrl, info.Menu.MediumImageUrl);
    $('#txtMenuTitle').val(info.Menu.Title);

    $('#tbEpisodes').empty();
    $.each(info.Episodes, function(i) {
        AddRow('#tbEpisodes', info.Episodes[i].Id, info.Episodes[i].Name, info.Episodes[i].Clip, info.Episodes[i].ShowName, info.Episodes[i].Duration, info.Episodes[i].Season);
    });
    UpdateTimeLeft();

    $('#SelectedEpisodesWrapper').fadeIn('slow');
}

function GetSavedDVDs_Click() {
    var c = $.cookies.get(COOKIE_NAME);
    if (c != null) {
        $('#tbMyDVDs').empty();
        
        $.each(c, function(i, value) {
            $('#tbMyDVDs').append('<tr class="AlternatingRow"><td width="25px"><input name="DVDId" type="radio" class="SavedDVD" value="' + value.id + '" /></td><td align="left"><span class="DVDName">' + value.name + '</span></td></tr>');
        });
    }

    $('#divMyDVDs').dialog('open');
}

function ConfigureTextValidators() {
    $('textarea[maxlength]').keypress(function(e) {
        var max = parseInt($(this).attr('maxlength'));

        var ob = e || event;
        var keyCode = ob.keyCode;
        var hasSelection = document.selection ? document.selection.createRange().text.length > 0 : $(this).selectionStart != $(this).selectionEnd;

        return !($(this).val().length >= max && (keyCode > 50 || keyCode == 32 || keyCode == 0 || keyCode == 13) && !ob.ctrlKey && !ob.altKey && !hasSelection);
    });

    $('textarea[maxlength]').keyup(function() {
        var max = parseInt($(this).attr('maxlength'));
        if ($(this).val().length > max) {
            $(this).val($(this).val().substr(0, max));
        }
    });
}

function HideAllPopups() {
    HidePopup('#divVideoPopup');
    HidePopup('#divBuyItPopup');
    HidePopup('#divMyDVDs');
    HidePopup('#divSaveForLater');
    HidePopup('#divDVDFull');
    HidePopup('#divChooseEpisodeFirst');
    HidePopup('#divCantRemove');
    HidePopup('#divError');
    HidePopup('#divNoEpisodes');
    HidePopup('#divLeaving');
    HidePopup('#divProcessing');
    if (flowplayer()) {
        flowplayer().stop();
    }
    $('#ulError').empty();
}

function ConfigurePopups() {
    var dialogDefaults = {
        autoOpen: false,
        modal: true,
        resizable: false,
        draggable: false,
        dialogClass: "popup",
        width: 445
    };

    $('#divVideoPopup').dialog(dialogDefaults);
    $('#divBuyItPopup').dialog(dialogDefaults);
    $('#divMyDVDs').dialog(dialogDefaults);
    $('#divSaveForLater').dialog(dialogDefaults);
    $('#divDVDFull').dialog(dialogDefaults);
    $('#divChooseEpisodeFirst').dialog(dialogDefaults);
    $('#divCantRemove').dialog(dialogDefaults);
    $('#divError').dialog(dialogDefaults);
    $('#divNoEpisodes').dialog(dialogDefaults);
    $('#divLeaving').dialog(dialogDefaults);
    $('#divProcessing').dialog(dialogDefaults);

    $('a.Close').click(HideAllPopups);
    $('img.Close').click(HideAllPopups);

    $('#imgPerformSave').click(PerformSave_Click);
    $('#imgEditDVD').click(LoadSavedDVD_Click);
    $('#imgBuySavedDisc').click(BuySavedDisc_Click);
    $('#imgRemoveDependents').click();

    $('#imgRemoveDependents').click(function() {
        var episodeId = $('#hidRemoveDependentsId').val();
        var episodeSeason = $('#hidRemoveDependentsSeason').val();
        RemoveDependents(episodeId, episodeSeason);
        HideAllPopups();
    });
}

function PropagateDesignValues() {
    $('#divReviewCaseTitle').text($('#txtCaseTitle').val());
    $('#divReviewCaseDesc').text($('#txtCaseDescription').val());
    $('#divReviewDiscTitle').text($('#txtDiscTitle').val());
    $('#divReviewDiscDesc').text($('#txtDiscDescription').val());
    $('#divReviewMenuTitle').text($('#txtMenuTitle').val());
}

function BuyIt() {
    var jsonData = GetAllData();
    HidePopup('#divBuyItPopup');
    $('#divProcessing').dialog('open');
    AjaxWithParam("/NovatorProxy.asmx/SaveDisc",
        function(projectId) {
            $('#project_id').val(projectId);

            var prod = $('#txtCaseTitle').val();
            if (prod != "") {
                $('#product_name').val(prod);
            }

            $('#frmBuy').submit();
        },
        jsonData,
        'Purchasing');
}

function BuySavedDisc_Click() {
    var selected = $('input[name=DVDId]:checked');
    if (selected != null && selected.val() != null) {
        $('#project_id').val(selected.val());
        var prod = FindAndGetElementText($('#tbMyDVDs'), 'span.DVDName');
        if (prod != "") {
            $('#product_name').val(prod)
        }
        $('#frmBuy').submit();
    }
}

function Purchase(projectId) {
    $('#project_id').val(projectId);

    var prod = $('#txtCaseTitle').val();
    if (prod != "") {
        $('#product_name').val(prod);
    }

    $('#frmBuy').submit();
}

function upperCase() {
    var sTxt = event.srcElement.value;
    event.srcElement.value = sTxt.toUpperCase()
}

$(document).ready(function() {
    $('#tabs').tabs({
        select: function(event, ui) {
            DeSelectNavMenu('#imgTabBuild', '/catalog/images/text/build_it.jpg');
            DeSelectNavMenu('#imgTabDesign', '/catalog/images/text/design_it.jpg');
            DeSelectNavMenu('#imgTabReview', '/catalog/images/text/review_it.jpg');
            DeSelectNavMenu('#imgTabBuy', '/catalog/images/text/buy_it.jpg');

            if (ui.panel.id == 'tabBuild') {
                SelectNavMenu('#imgTabBuild', '/catalog/images/text/build_it_selected.jpg');
            }
            else if (ui.panel.id == 'tabDesign') {
                GetSelectedEpisodes();
                SelectNavMenu('#imgTabDesign', '/catalog/images/text/design_it_selected.jpg');
            }
            else if (ui.panel.id == 'tabReview') {
                GetSelectedEpisodes();
                PropagateDesignValues();
                SelectNavMenu('#imgTabReview', '/catalog/images/text/review_it_selected.jpg');
            }
            else if (ui.panel.id == 'tabBuy') {
                BuyIt_Click();
                return false;
            }
        }
    });

    ConfigureNav();
    ConfigureEpisodes();
    ConfigurePopups();
    SimpleAjax("/NovatorProxy.asmx/GetAllShows", PopulateShowList, 'Get Shows');
    SimpleAjax("/NovatorProxy.asmx/GetCaseDesigns", PopulateCaseDesigns, 'Get Case Designs');
    SimpleAjax("/NovatorProxy.asmx/GetDiscDesigns", PopulateDiscDesigns, 'Get Disc Designs');
    SimpleAjax("/NovatorProxy.asmx/GetMenuDesigns", PopulateMenuDesigns, 'Get Menu Designs');
    ConfigureTextValidators();

    $('.bestupper').bestupper(); 

    $('#imgContinueWithPurchase').click(BuyIt);
});
