var FavoriteController = Class.create();
Object.extend( FavoriteController.prototype, {

  initialize: function(){
    this.cookie = new FavoriteCookie();
    this.view = new FavoriteView();
  },
  
  remove: function( room_id ){
    this.cookie.remove( room_id );
    this.view.remove( room_id );
  },

  add: function( room_id ){
    if( this.cookie.has( room_id ) ){
      return;
    }
    this.cookie.add( room_id );
    this.view.add( room_id );
  },

  inquiry: function(){
    var url  = "/bman3/inquiry/?" + this.get_ids_query_string();
    window.open( url, 'inquiry', 'scrollbars=yes,WIDTH=700,HEIGHT=650,resizable=yes');return false;
  },
  
  hikaku: function(){
    var url  = "/bman3/search/hikaku?" + this.get_ids_query_string();
    window.open( url, 'inquiry', 'scrollbars=yes,WIDTH=700,HEIGHT=650,resizable=yes');return false;
  },
  
  get_ids_query_string: function(){
    var ids = this.cookie.room_ids;
    return Array.map( ids, function( id ){
      return "id[]=" + id;
    }).join("&");
  }
  
});

var FavoriteCookie = Class.create();
Object.extend(FavoriteCookie.prototype, {
  initialize: function(){
    this.load_room_ids();
  },
  
  has: function( room_id ){
    return( this.room_ids.indexOf( room_id ) >= 0 );
  },

  load_room_ids: function(){
    var cookies = document.cookie.split(";");
    this.room_ids = new Array();
    var me = this;
    cookies.each( function( cookie ){
      ary = cookie.split("=");
      name = ary[0].strip();
      value = ary[1];
      if( name == "room_id" ){
	    me.room_ids = value.strip().split("_");
      }
    });
  },
  
  save_room_ids: function(){
    document.cookie = "room_id="+ this.room_ids.join("_") + ";path=/;"; 
  },

  add: function( room_id ){
    if( this.has( room_id ) ){
      return;
    }
    this.room_ids.push( room_id );
    this.save_room_ids();
  },
  
  remove: function( room_id ){
    var i = this.room_ids.indexOf( room_id );
    this.room_ids.splice(i, 1);
    this.save_room_ids();
  }
  
});

var FavoriteView = Class.create();
Object.extend(FavoriteView.prototype,{
  initialize: function(){
    this.favorite_box = $("favoriteBox");
  },
  
  remove: function( room_id ){
    var favorite = $( "favorite_" + room_id );
    this.favorite_box.removeChild( favorite );
  },
  
  add: function( room_id ){
    this.fetch_html( room_id );

  },
  
  appendHtml: function( html, room_id ){
    var new_favorite = document.createElement("li");
    new_favorite.setAttribute( "id", "favorite_" + room_id );
    new_favorite.innerHTML = html;
    this.favorite_box.appendChild( new_favorite );
  },
  
  fetch_html: function( room_id ){
    new Ajax.Updater(
		     "favorite",
		     "/bman3/ajax/favorite/" + room_id,
		     {
		       method: "get",
		       onSuccess: function( request ){
			     favoriteController.view.appendHtml( request.responseText, room_id );
                 if( $("noFavorite") ){
                     $("noFavorite").style.display = "none";
                 }
                 if( $("favoriteButtons") ){
                     $("favoriteButtons").style.display = "block";
                 }
		       }
		     });
  }
  
});



