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  = "/room_inquiry/?" + this.get_ids_query_string();
    window.open( url, 'inquiry', 'scrollbars=yes,WIDTH=700,HEIGHT=650,resizable=yes');return false;
  },
  
  hikaku: function(){
    var url  = "/room/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;

    var q = "";
    var i;
    for( i = 0; i < ids.length; i++ ){
      if( i > 0 ){
        q += "&";
      }
      q += "id[]=";
      q += ids[i];
    }
    return q;
  }
  
});

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 = $("ClipList");
  },
  
  remove: function( room_id ){
    var favorite = $( "favorite_" + room_id );
    this.favorite_box.removeChild( favorite );
    if( this.countFavorites() == 0 ){
      this.createNouseDiv();
    }
  },
  
  add: function( room_id ){
    this.fetch_html( room_id );
  },
  
  countFavorites: function(){
    var children = this.favorite_box.childNodes;
    var i;
    var count = 0;
    for( i = 0; i < children.length; i++ ){
      if( children[i].id && ("" + children[i].id).indexOf("favorite_") == 0 ){
        count += 1;
      }
    }
    return count;
  },

  appendHtml: function( html, room_id ){
    var new_favorite = document.createElement("li");
    new_favorite.setAttribute( "id", "favorite_" + room_id );
    this.favorite_box.appendChild( new_favorite );
    var isMSIE = /*@cc_on!@*/false;
    if( isMSIE ){
      new_favorite.outerHTML = html;
    }else{
      new_favorite.innerHTML = html;
    }
  },

  createNouseDiv: function(){
    var parent_div = $("LClip");
    var ul = $("ClipList");
    if( ! (parent_div && ul ) ){
      return;
    }
    document.getElementById("clip_ikkatu_button").innerHTML = '<img src="/img/leftcolumn/clip/but_ikkatu_x.gif" alt="一括お問合せ" />';
    document.getElementById("clip_hikaku_button").innerHTML = '<img src="/img/leftcolumn/clip/but_hikaku_x.gif" alt="物件比較" />';
    
    var nouse = document.createElement("div")
    nouse.id = "NoUse";
    nouse.className = "NoUse";
    nouse.innerHTML = '			  <p class="Top">'+
      '				物件が登録されていません。'+
      '			  </p>'+
      '			  <p class="Clip">'+
      "				<a onclick=\"window.open('/popup/pop_help_clip.html', 'help_clip', 'scrollbars=yes,WIDTH=720,HEIGHT=650,resizable=yes,menubar=no,toolbar=no');return false;\" href=\"/popup/pop_help_clip.html\" onkeypress=\"\">"+
      '				  <img src="/img/leftcolumn/clip/help.gif" alt="「クリップ」とは？" />'+
      '				</a><br />'+
      '				クリップの便利な使い方をご紹介！'+
      '			  </p>';
    
    parent_div.replaceChild( nouse, ul );
    this.favorite_box = null;
  },
  
  removeNouseDiv: function(){
    var parent_div = $("LClip");
    var nouse = $("NoUse");
    if( !( parent_div && parent_div.firstChild && nouse ) ){
      return;
    }

    document.getElementById("clip_ikkatu_button").innerHTML = '<a href="javascript:void(0);" onclick="favoriteController.inquiry(); return false;" onkeypress=""><img src="/img/leftcolumn/clip/but_ikkatu.gif" alt="一括お問合せ" /></a>';
    document.getElementById("clip_hikaku_button").innerHTML = '<a href="javascript:void(0);" onclick="favoriteController.hikaku();return false;" onkeypress=""><img src="/img/leftcolumn/clip/but_hikaku.gif" alt="物件比較" /></a>';
    
    var ul = document.createElement("ul");
    ul.id = "ClipList";
    parent_div.replaceChild( ul, nouse);
    this.favorite_box = ul;
  },

  fetch_html: function( room_id ){
    new Ajax.Updater(
		     "hiddenFavorite",
		     "/ajax/favorite/" + room_id,
		     {
		       method: "get",
		       onSuccess: function( request ){
                 favoriteController.view.removeNouseDiv();
			     favoriteController.view.appendHtml( request.responseText, room_id );
                 if( $("noFavorite") ){
                     $("noFavorite").style.display = "none";
                 }
                 if( $("favoriteButtons") ){
                     $("favoriteButtons").style.display = "block";
                 }
		       }
		     });
  }
  
});


