$(document).ready(function(){

    $('#sbRoot').ajaxEpSearch({'colorRow': true});
	$('#sbRoot').ajaxEpRetry({'colorRow': true});
    
    $('#sbRoot').ajaxEpSubtitlesSearch();
	
    $('#seasonJump').change(function() {
        var id = $(this).val();
        if (id && id != 'jump') {
            $('html,body').animate({scrollTop: $(id).offset().top},'slow');
            location.hash = id;
        }
        $(this).val('jump');
    });

    $("#prevShow").click(function(){
        $('#pickShow option:selected').prev('option').attr('selected', 'selected');
        $("#pickShow").change();
    });

    $("#nextShow").click(function(){
        $('#pickShow option:selected').next('option').attr('selected', 'selected');
        $("#pickShow").change();
    });

    $('#changeStatus').click(function(){
        var sbRoot = $('#sbRoot').val()
        var epArr = new Array()

        $('.epCheck').each(function() {
      
            if (this.checked == true) {
                epArr.push($(this).attr('id'))
            }

        });  

        if (epArr.length == 0)
            return false

        url = sbRoot+'/home/setStatus?show='+$('#showID').attr('value')+'&eps='+epArr.join('|')+'&status='+$('#statusSelect').attr('value')
        window.location.href = url

    });

    $('.seasonCheck').click(function(){
        var seasCheck = this;
        var seasNo = $(seasCheck).attr('id');

        $('.epCheck:visible').each(function(){
            var epParts = $(this).attr('id').split('x')

            if (epParts[0] == seasNo) {
                this.checked = seasCheck.checked
            }
        });
    });

    var lastCheck = null;
    $('.epCheck').click(function(event) {

      if(!lastCheck || !event.shiftKey) {
        lastCheck = this;
        return;
      }

      var check = this;
      var found = 0;

      $('.epCheck').each(function() {
        switch (found) {
          case 2: return false;
          case 1: this.checked = lastCheck.checked;
        }

        if (this == check || this == lastCheck)
          found++;
      });

      lastClick = this;
    });

    // selects all visible episode checkboxes.
    $('.seriesCheck').click(function(){
        $('.epCheck:visible').each(function(){
                this.checked = true
        });
        $('.seasonCheck:visible').each(function(){
                this.checked = true
        })
    });

    // clears all visible episode checkboxes and the season selectors
    $('.clearAll').click(function(){
        $('.epCheck:visible').each(function(){
                this.checked = false
        });
        $('.seasonCheck:visible').each(function(){
                this.checked = false
        });
    });

    // handle the show selection dropbox
    $('#pickShow').change(function(){
        var sbRoot = $('#sbRoot').val()
        var val = $(this).attr('value')
        if (val == 0)
            return
        url = sbRoot+'/home/displayShow?show='+val
        window.location.href = url
    });

    // show/hide different types of rows when the checkboxes are changed
    $("#checkboxControls input").change(function(e){
        var whichClass = $(this).attr('id')
        $(this).showHideRows(whichClass)

        $('tr.'+whichClass).each(function(i){
            $(this).toggle();
        });
    }); 

    // initially show/hide all the rows according to the checkboxes
    $("#checkboxControls input").each(function(e){
        var status = this.checked;
        $("tr."+$(this).attr('id')).each(function(e){
            if (status) {
                $(this).show();
            } else {
                $(this).hide();
            }
        });
    });
    
    $.fn.showHideRows = function(whichClass){

        var status = $('#checkboxControls > input, #'+whichClass).prop('checked')
        $("tr."+whichClass).each(function(e){
            if (status) {
                $(this).show();
            } else {
                $(this).hide();
            }
        });

        // hide season headers with no episodes under them
        $('tr.seasonheader').each(function(){
            var numRows = 0
            var seasonNo = $(this).attr('id')
            $('tr.'+seasonNo+' :visible').each(function(){
                numRows++
            })
            if (numRows == 0) {
                $(this).hide()
                $('#'+seasonNo+'-cols').hide()
            } else {
                $(this).show()
                $('#'+seasonNo+'-cols').show()
            }

         });
    }

    function setEpisodeSceneNumbering(forSeason, forEpisode, sceneSeason, sceneEpisode) {
    	var sbRoot = $('#sbRoot').val();
    	var showId = $('#showID').val();
    	
    	if (sceneSeason === '') sceneSeason = null;
    	if (sceneEpisode === '') sceneEpisode = null;
    	
    	$.getJSON(sbRoot + '/home/setEpisodeSceneNumbering', 
			{ 
    			'show': showId,
    			'forSeason': forSeason, 
    			'forEpisode': forEpisode, 
    			'sceneSeason': sceneSeason, 
    			'sceneEpisode': sceneEpisode
			}, 
	    	function(data) {
				//	Set the values we get back 
				if (data.sceneSeason === null || data.sceneEpisode === null)
				{
					$('#sceneSeasonXEpisode_' + showId + '_' + forSeason +'_' + forEpisode).val('');
				}
				else
				{
					$('#sceneSeasonXEpisode_' + showId + '_' + forSeason +'_' + forEpisode).val(data.sceneSeason + 'x' + data.sceneEpisode);
				}
	            if (!data.success) 
	            {
	            	if (data.errorMessage) {
	            		alert(data.errorMessage);
	            	} else {
	            		alert('Update failed.');
	            	}
	            }
	        }
    	);
    }
    
    $('.sceneSeasonXEpisode').change(function() {
    	//	Strip non-numeric characters
    	$(this).val($(this).val().replace(/[^0-9xX]*/g,''));
    	var forSeason = $(this).attr('data-for-season');
    	var forEpisode = $(this).attr('data-for-episode');
    	var showId = $('#showID').val();
    	
    	//var sceneEpisode = $('#sceneEpisode_' + showId + '_' + forSeason +'_' + forEpisode).val();
    	var m = $(this).val().match(/^(\d+)x(\d+)$/i);
    	var sceneSeason = null, sceneEpisode = null;
    	if (m)
    	{
    		sceneSeason = m[1];
    		sceneEpisode = m[2];
    	}
    	setEpisodeSceneNumbering(forSeason, forEpisode, sceneSeason, sceneEpisode);
    });
});