var TellAFriendDetails = {
 	
 	NAME : undefined,
 	EMAIL : undefined, 
 	FRIENDSNAME : undefined,
 	FRIENDSEMAIL : undefined,
 	IMAGE : undefined
 	
}

var Doodle = {
	
	DOODLE_PAD_URL : '/flash/image-editor/index.html',
	WIDTH : 770,
	HEIGHT :540,
  doodles : undefined,
  reserveLoopImagePath : undefined,
  
  
  tellAFriendDetails : function() {
  
  	this.name = document.myBoomerangForm.name.value;
  	var email = document.myBoomerangForm.email.value;
  	var friendsName = document.myBoomerangForm.friendsName.value;
  	var friendsEmail = document.myBoomerangForm.friendsEmail.value;
  	
  	alert( name + " " + email + " " + friendsName + " " + friendsEmail );
  	
  },


  newDoodle : function() {
		
	  var features;
	  	  
	  features = "width=" + this.WIDTH + ",height=" + this.HEIGHT;
	  features += ",left=" + ( ( screen.availWidth - this.WIDTH ) / 2);
	  features += ",top="  + ( ( screen.availHeight - this.HEIGHT ) / 2);	  	  
		features += 'toolbar=no, menubar=no, location=no, resizable=no, scrollbars=no';
				
		window.open( this.DOODLE_PAD_URL, 'makeyourown', features).focus(); 
		
	},

  removeDeletedDoodle : function( doodleFilename ) {

    this.useReserveLoopImageIfDeleted( doodleFilename );

    for( var i = doodles.length - 1; i >= 0; i-- ) {

      var doodle = this.doodles[i];

      if( doodle.filename == doodleFilename ) {
        this.doodles.splice(i, 1);
      }

    }

  },

  useReserveLoopImageIfDeleted : function( deletedDoodleFilename ) {

    if( CustomisationInterface.isDoodleLoopImage( deletedDoodleFilename ) ) {

      // The loop doodle has been deleted, use the reserve
      $('#leftloop').css( "background-image", "url("+this.reserveLoopImagePath+")" ).removeClass("doodle");

    }

  },

  deleteDoodles : function( deleteDoodleFilenames ) {

    for( var i = 0; i < deleteDoodleFilenames.length; i++ ) {

      this.removeDeletedDoodle( deleteDoodleFilenames[i] );

    }

    RemotedMyBoomerangService.deleteDoodles( deleteDoodleFilenames );

    MyBoomerangScroller.setNumDoodles( this.doodles.length );

    this.updateDoodleList();
    this.updateFunctionLinks();

  },

  openDeleteDoodleMenu : function() {

    MyBoomerangMenu.open("Delete doodles", "Delete Doodles", "checkbox",
                         function(values) {
                               Doodle.deleteDoodles(values);
                               MyBoomerangMenu.close(); });

    MyBoomerangMenu.clearOptions();
        
    for ( var i = 0; i < this.doodles.length; i++ ) {
      var image = this.doodles[ i ];
      MyBoomerangMenu.addOption( image.filename, image.label, false );
    }
  

  },
	
  openLoopDoodleMenu : function() {

    MyBoomerangMenu.open("Customise the site", "Set image to customise this site", "radio",
        function(values) {
          CustomisationInterface.setLoopDoodle( values[0] );
              MyBoomerangMenu.close();
                         });

    MyBoomerangMenu.clearOptions();

    for( var i = 0; i < this.doodles.length; i++ ) {

      var doodle = this.doodles[i];

      if( doodle.loopDoodle ) {
        MyBoomerangMenu.addOption( doodle.filename, doodle.label );
      }
    }

  },
  
  sendToFriend1 : function() {
  	
  	MyBoomerangMenu.open("Send to a Friend", "Continue", "radio",
    	function(values) {
      Doodle.sendToFriend2();
      TellAFriendDetails.IMAGE = values[0];
      });

    MyBoomerangMenu.clearOptions();

    for( var i = 0; i < this.doodles.length; i++ ) {
      var image = this.doodles[i];
      // Exclude loop doodles
      if( !image.loopDoodle ) {
        MyBoomerangMenu.addOption( image.filename, image.label );
      }
    }

  },
  
  sendToFriend2 : function() {
    MyBoomerangMenu.open("Send to a Friend", "Send", "", 
                         function(values) {
                           if( Doodle.validateSendToFriend2() ) { Doodle.sendToFriend3(); } 
                         } );
                         
    MyBoomerangMenu.clearOptions();
    
    var form = $( '#myBoomerangForm' );
    form.append( 'Your name <br /><input type="text" name="name" onblur="TellAFriendDetails.NAME = document.myBoomerangForm.name.value" /><br /><br />' + 
                 'Your email <br /><input type="text" name="email" onblur="isValidEmail(this.value); TellAFriendDetails.EMAIL = document.myBoomerangForm.email.value;"/><br /><br />' +
                 'Friends name <br /><input type="text" name="friendsName" onblur="TellAFriendDetails.FRIENDSNAME = document.myBoomerangForm.friendsName.value"/><br /><br />' +
                 'Friends email <br /><input type="text" name="friendsEmail" onblur="isValidEmail(this.value); TellAFriendDetails.FRIENDSEMAIL = document.myBoomerangForm.friendsEmail.value"/><br /><br />' );
                 
  },
  
  validateSendToFriend2 : function() {
    return myBoomerangCheckEmptyField();
  },
  
  sendToFriend3 : function() {
    MyBoomerangMenu.open("Send to a Friend", "Close", "",
                         function(values) { MyBoomerangMenu.close(); } );

    MyBoomerangMenu.clearText();

    var msg = $( '.mybommerangmenuviewport' );
    msg.append( 'Thanks<br /><br />Your email has been sent' );
    
    RemotedMyBoomerangService.tellAFriend( TellAFriendDetails.NAME, TellAFriendDetails.EMAIL, TellAFriendDetails.FRIENDSNAME, TellAFriendDetails.FRIENDSEMAIL, TellAFriendDetails.IMAGE );
   
	},

  updateDoodleList : function() {

    $('#doodleList').empty();

    for( var i = 0; i < this.doodles.length; i++ ) {

      var doodle = this.doodles[i];

      var image = '<img src="/myboomerang/download/image/'+
          doodle.thumbnailFilename+'" alt="'+doodle.label+'"/>';

      var linkOpener;

      if( doodle.loopDoodle ) {

        linkOpener = "<a href=\"#\" onclick=\"CustomisationInterface.setLoopDoodle('"+doodle.filename+"'); return false;\">";

      } else {

        linkOpener = '<a href="/myboomerang/download/image/'+doodle.filename+'" '+
          'onclick="return openWindow(this.href);">';
      }


      var linkCloser = '</a>';

      $('<li><div class="doodlethumbnail">'+linkOpener+image+linkCloser+'</a></div>'+
        '<div class="label">'+linkOpener+doodle.label+linkCloser+'</div>').appendTo('#doodleList');


    }

    $('<li><div class="doodlethumbnail"><a href="#" onclick="Doodle.newDoodle(); return false;">' +
      '<img src="/images/myboomerang/button_addnewdoodle.gif" alt="Add New Doodle"/></a></div>' +
      '<div class="label"><a href="#" onclick="Doodle.newDoodle();return false;">Add New Doodle</a></div></li>')
        .appendTo('#doodleList');

  },

  updateFunctionLinks : function() {

    this.updateDeleteDoodleLink();
    this.updateCustomiseSiteLink();
    this.updateSendToFriendLink();

  },

  updateDeleteDoodleLink : function() {

    var deleteDoodlesLink = $('#deleteDoodlesLink');

    if( this.doodles.length > 0 ) {
      deleteDoodlesLink.show();
    } else {
      deleteDoodlesLink.hide();
    }

  },

  updateCustomiseSiteLink : function() {

    var customiseSiteLink = $('#customiseSiteLink');

    if( this.customiseSiteAllowed() ) {
      customiseSiteLink.show();
    } else {
      customiseSiteLink.hide();
    }

  },

  updateSendToFriendLink : function() {

    var sendToFriendLink = $('#sendToFriendLink');

    if( this.sendToFriendAllowed() ) {
      sendToFriendLink.show();
    } else {
      sendToFriendLink.hide();
    }

  },

  customiseSiteAllowed : function() {

    allowCustomiseSite = false;

    for ( var i = 0; i < this.doodles.length; i++ ) {

      var image = this.doodles[ i ];

      if( image.loopDoodle ) {
        allowCustomiseSite = true;
        break;
      }

    }

    return allowCustomiseSite;

  },

  sendToFriendAllowed : function() {

    allowSendToFriend = false;

    for ( var i = 0; i < this.doodles.length; i++ ) {

      var image = this.doodles[ i ];

      if( !image.loopDoodle ) {
        allowSendToFriend = true;
        break;
      }

    } 

    return allowSendToFriend;

  },

  setDoodles : function( doodles ) {
    this.doodles = doodles;
  },

  setReserveLoopImagePath : function( reserveLoopImagePath ) {
    this.reserveLoopImagePath = reserveLoopImagePath;
  }

}

var Favourites = {

  allShows : undefined,
  allGames : undefined,

  faveShowIds : undefined,
  faveGameIds : undefined,

  
  isFavouriteShow : function( showId ) {

    for( var j = 0; j < this.faveShowIds.length; j++ ) {

      var faveShowId = this.faveShowIds[j];

      if( faveShowId == showId ) {
        return true;
      }

    }

    return false;

  },

  isFavouriteGame : function( gameId ) {

    for( var j = 0; j < this.faveGameIds.length; j++ ) {

      var faveGameId = this.faveGameIds[j];

      if( faveGameId == gameId ) {
        return true;
      }

    }

    return false;

  },

  updateFaveShows : function( newFaveShowIds ) {

    this.faveShowIds = newFaveShowIds;

    RemotedMyBoomerangService.setFavouriteShows( newFaveShowIds );

    MyBoomerangScroller.setNumFaveShows( newFaveShowIds.length );

    this.updateFaveShowsList();
    this.updateShowOptions();
    
    MyBoomerangMenu.close(); 

  },

  updateFaveGames : function( newFaveGameIds ) {

    this.faveGameIds = newFaveGameIds;

    RemotedMyBoomerangService.setFavouriteGames( newFaveGameIds );

    MyBoomerangScroller.setNumFaveGames( newFaveGameIds.length );

    this.updateFaveGamesList();
    this.updateGameOptions();

    MyBoomerangMenu.close(); 
  },

  updateShowOptions : function() {

    MyBoomerangMenu.clearOptions();

    for( var i = 0; i < this.allShows.length; i++ ) {

      var show = this.allShows[i];

      var checked = this.isFavouriteShow( show.itemId );

      MyBoomerangMenu.addOption( show.itemId, show.title, checked );
    }

  },

  updateGameOptions : function() {

    MyBoomerangMenu.clearOptions();

    for( var i = 0; i < this.allGames.length; i++ ) {

      var game = this.allGames[i];

      var checked = this.isFavouriteGame( game.itemId );

      MyBoomerangMenu.addOption( game.itemId, game.title, checked );
    }

  },

  updateFaveShowsList : function() {

    $('#faveShowList').empty();

    for( var i = 0; i < this.allShows.length; i++ ) {

      var show = this.allShows[i];

      if( this.isFavouriteShow( show.itemId ) ) {

        $('<li><a href="/shows/'+show.showGroupId+'/'+show.itemId+'/index.html" ' +
          'title="'+show.title+'"><img src="'+show.imagePath+'" ' +
          'alt="'+show.altText+'"/></a></li>').appendTo('#faveShowList');

      }

    }

    $('<li><a href="#" onclick="Favourites.openFaveShowsMenu(); return false;">' +
      '<img src="/images/myboomerang/button_addshow.gif" alt="Add Favourite Shows"/>' +
      '</a></li>').appendTo('#faveShowList');

  },

  updateFaveGamesList : function() {

    $('#faveGameList').empty();

    for( var i = 0; i < this.allGames.length; i++ ) {

      var game = this.allGames[i];

      if( this.isFavouriteGame( game.itemId ) ) {

        $('<li><a href="/games/'+game.showGroupId+'/'+game.itemId+'/index.html" ' +
          'title="'+game.title+'"><img src="'+game.imagePath+'" ' +
          'alt="'+game.altText+'"/></a></li>').appendTo('#faveGameList');

      }

    }

    $('<li><a href="#" onclick="Favourites.openFaveGamesMenu(); return false;">' +
      '<img src="/images/myboomerang/button_addgame.gif" alt="Add Favourite Games"/>' +
      '</a></li>').appendTo('#faveGameList');

  },

  openFaveShowsMenu : function() {

    MyBoomerangMenu.open("Edit Favourite Shows", "Set Favourites", "checkbox",
        FunctionUtil.scopedPointer( this, "updateFaveShows") );

    this.updateShowOptions();
    
    

  },

  openFaveGamesMenu : function() {

    MyBoomerangMenu.open("Edit Favourite Games", "Set Favourites", "checkbox",
                         FunctionUtil.scopedPointer( this, "updateFaveGames"));

    this.updateGameOptions();

  },

  setAllShows : function( allShows ) {
    this.allShows = allShows;
  },

  setAllGames : function( allGames ) {
    this.allGames = allGames;
  },

  setFaveShowIds : function( faveShowIds ) {
    this.faveShowIds = faveShowIds;
  },

  setFaveGameIds : function( faveGameIds ) {
    this.faveGameIds = faveGameIds;
  }
	
}

var MyBoomerangMenu = {

  submitCallback : null,
  type : "",
  
  getMenu : function() {
    return $("#myboomerangmenu")
  },

  open : function(title, submit, type, submitCallback, close ) {
    
    this.setTile(title);
    this.setSubmit(submit);
    
    this.submitCallback = submitCallback;
    
    this.type = type;

    this.getMenu().fadeIn("slow");
    
  },

  close : function() {
    this.getMenu().fadeOut("slow", function() {
      MyBoomerangMenu.setTile("");
      MyBoomerangMenu.setSubmit("")
      MyBoomerangMenu.clearOptions();
      MyBoomerangScroller.resetScroll();
    });
       
  },

  submit : function() {
    this.submitCallback(this.getSelected());
  },

  setTile : function(title) {
    $("#myboomerangmenu > h1").text( title );
  },

  setSubmit : function(submit) {
    $("a.menuright").text( submit );
    
  },


  addOption : function( optionId, optionLabel, checked  ) {

    var list = $(".mybommerangmenuviewport ul");

    var checkedParam = '';

    if( checked ) {
      var checkedString = 'checked="checked"';
    }

    list.append('<li><label><input name="'+optionId+'" type="'+this.type+'" '+checkedString+' value="'+optionId+'" />' +optionLabel+'</label></li>');

  },

  clearOptions : function() {
   var emptyForm = '<form method="post" name="myBoomerangForm" id="myBoomerangForm">'
                  + '<ul class="options">'
                  + '</ul>'
                  + '</form>';

    $(".mybommerangmenuviewport").html(emptyForm);

  },

  clearText : function() {
  
    var text = $( ".mybommerangmenuviewport" );
    text.empty();
    
  },

  getSelected : function() {

    var values = new Array();
    
     $(".mybommerangmenuviewport input:checked").each(function() {
       values.push($(this).val());
     });

    return values;
  }

}


/* JQuery scroller for doodles and faves */

var MyBoomerangScroller = {

  WIDTH_DOODLE : 110,
  WIDTH_SHOW : 117,
  WIDTH_GAME : 175,

  numDoodles : 0,
  numFaveShows : 0,
  numFaveGames : 0,

  init : function( numDoodles, numFaveShows, numFaveGames ) {

    this.numDoodles = numDoodles;
    this.numFaveShows = numFaveShows;
    this.numFaveGames = numFaveGames;

    $(document).ready( this.setUpScrollEvents );

  },

  setNumDoodles : function( numDoodles ) {
    this.numDoodles = numDoodles;
  },

  setNumFaveShows : function( numFaveShows ) {
    this.numFaveShows = numFaveShows;
  },

  setNumFaveGames : function( numFaveGames ) {
    this.numFaveGames = numFaveGames;
  },

  scroll : function( scrollObject, amount, maxLeft, minLeft ) {

    var leftString = scrollObject.css('left');

    if( leftString == 'auto' ) leftString = '0';

    left = parseInt(leftString);

    if( ( minLeft == undefined || amount > 0 || left > minLeft ) && 
        ( maxLeft == undefined || amount < 0 || left < maxLeft ) &&
        ( left % amount == 0 ) ) {

      /* We have checked we haven't reached the beginning or the end */
      /* and that we're not in the middle of another scroll */

      scrollObject.animate({left: left + amount}, 'fast');
    }

  },
  
  resetScroll : function() {
  	$('#faveShowList').css("left", 0);
  	$('#faveGameList').css("left", 0);
  	$('#doodleList').css("left", 0);
  },

  setUpScrollEvents : function() {

    /* Doodles */

    $('#doodlebackward').click( function(event) {

      MyBoomerangScroller.scroll( $('#doodleList'), MyBoomerangScroller.WIDTH_DOODLE, 0, undefined );
      event.preventDefault();

    } );

    $('#doodleforward').click( function(event) {

      var maxScrollAmount = MyBoomerangScroller.numDoodles * MyBoomerangScroller.WIDTH_DOODLE;
      MyBoomerangScroller.scroll( $('#doodleList'), -MyBoomerangScroller.WIDTH_DOODLE, undefined, 0-maxScrollAmount );
      event.preventDefault();

    } );

    /* Shows */

    $('#showbackward').click( function(event) {

      MyBoomerangScroller.scroll( $('#faveShowList'), MyBoomerangScroller.WIDTH_SHOW, 0, undefined );
      event.preventDefault();

    } );

    $('#showforward').click( function(event) {

      var maxScrollAmount = MyBoomerangScroller.numFaveShows * MyBoomerangScroller.WIDTH_SHOW;
      MyBoomerangScroller.scroll( $('#faveShowList'), -MyBoomerangScroller.WIDTH_SHOW, undefined, 0-maxScrollAmount );
      event.preventDefault();

    } );

    /* Games */

    $('#gamebackward').click( function(event) {

      MyBoomerangScroller.scroll( $('#faveGameList'), MyBoomerangScroller.WIDTH_GAME, 0, undefined );
      event.preventDefault();

    } );

    $('#gameforward').click( function(event) {

      var maxScrollAmount = MyBoomerangScroller.numFaveGames * MyBoomerangScroller.WIDTH_GAME;
      MyBoomerangScroller.scroll( $('#faveGameList'), -MyBoomerangScroller.WIDTH_GAME, undefined, 0-maxScrollAmount );
      event.preventDefault();

    } );

  }

}
