var WishlistItem = {
  getShowItem: function(){
    var item = {};
    item.id = parseInt($('wishlist_item_id').innerHTML);
    item.user_id = parseInt($('user_id').innerHTML);
    item.name = $('name').innerHTML;
    item.description = $('item_description').innerHTML;
    return item;
  },
  editItem: function(){
    var item = WishlistItem.getShowItem();
    var editForm = $('itemEdit').update($('wishlist_item_edit_create_controls').innerHTML); 
    editForm.select('.newItem_Cancel')[0].href="javascript:WishlistItem.cancelEditItem();"
    editForm.select('.newItem_Done')[0].href="javascript:WishlistItem.updateItem();"
    var localImageForm = editForm.select('form')[0];
    var remoteImageForm = editForm.select('form')[1];
    localImageForm.select('a')[0].observe('click', function(event){localImageForm.hide();remoteImageForm.show();});
    remoteImageForm.select('a')[0].observe('click', function(event){remoteImageForm.hide();localImageForm.show();});
    editForm.select('.name')[0].value = item.name;
    var d = editForm.select('.description')[0]; 
    d.innerHTML = item.description;
    d.observe('keyup', function(){d.value = d.value.substring(0,500);});
    editForm.show();
    $('itemShow').hide();
  },
  cancelEditItem: function(){
    $('itemShow').show();
    $('itemEdit').hide();
  },
  updateItem: function(){
    var container = $('itemEdit');    
    var localImageForm = container.select('form')[0];  //local image form
    var remoteImageForm = container.select('form')[1];  //remote image form    
    var localImageForm = container.select('form')[0];  //image form
    var errorPlaceHolder = container.select('.wishlist_item_errors')[0];
    if((localImageForm.visible() && !ItemValidations.validateImageForm(localImageForm, errorPlaceHolder,'wishlistItem[image]')) ||
      (remoteImageForm.visible() && !ItemValidations.validateImageForm(remoteImageForm, errorPlaceHolder, 'wishlistItem[remote_image]')))
  		return;
    var params = WishlistItemsList.serializeItem(container) + '&in_show_page=true';
    //disable form buttons
    [container.select('.newItem_Done')[0],
     container.select('.newItem_Cancel')[0]].each(function(a){
       HTMLHelper.enableAnchor(a, false);
     });
    var updateUrl = WishlistItemsList.restfulItemUrl($('user_id').innerHTML, $('wishlist_item_id').innerHTML);
    ItemValidations.clearError(errorPlaceHolder);
    new Ajax.Request(updateUrl, {
        evalJS: true,
        method: 'put',
        parameters: params,
        onSuccess: function(){
          if(remoteImageForm.visible())
            WishlistItem.setRemotePic(remoteImageForm, updateUrl);
          else
            WishlistItemsList.uploadPic(localImageForm, updateUrl);
        },
        onComplete: function(){
          [container.select('.newItem_Done')[0],
           container.select('.newItem_Cancel')[0]].each(function(a){
             HTMLHelper.enableAnchor(a, true);
           });
        }
    });
  },
  deleteItem: function(){
  	if(confirm('Are you sure?')){
  		$('wishlist_item_delete').style.display = 'none';
  		new Ajax.Request(WishlistItemsList.restfulItemUrl($('user_id').innerHTML, $('wishlist_item_id').innerHTML), {
  		    method: 'delete',
  			  parameters: {redirect: true}
  		});
  	}	
  },
  setRemotePic: function(remotePicForm, url){
    if($F(remotePicForm["wishlistItem[remote_image]"]) != ""){
      remotePicForm.setAttribute("action", url);
      remotePicForm.submit();
    }
  },  
  fulfillWish: function(){
    WishlistItemsList.fulfillWish($('wishlist_item_id').innerHTML);
  }
}
var WishlistItemsList = {
  getShowItem: function(itemId){
    var container = $('wishlist_item_'+itemId+'_show');
    var item = {};
    item.name = container.select('.name')[0].innerHTML;
    item.description = container.select('.description')[0].innerHTML;
    return item;
  },
  newItem: function(userId){
    var newForm = $('new_wishlist_item').update($('wishlist_item_edit_create_controls').innerHTML);
    newForm.select('.newItem_Cancel')[0].observe('click', function(event){WishlistItemsList.cancelNewItem();});
    newForm.select('.newItem_Done')[0].observe('click', function(event){WishlistItemsList.createItem(userId);});
    var localImageForm = newForm.select('form')[0];
    var remoteImageForm = newForm.select('form')[1];  //local image form
    localImageForm.select('a')[0].observe('click', function(event){localImageForm.hide();remoteImageForm.show();});
    remoteImageForm.select('a')[0].observe('click', function(event){remoteImageForm.hide();localImageForm.show();});
    newForm.toggle();
  },
  cancelNewItem: function(){
    var newForm = $('new_wishlist_item');
    newForm.hide();
    newForm.update('');
  },
  createItem: function(userId){
    var container = $('new_wishlist_item');
    var localImageForm = container.select('form')[0];  //local image form
    var remoteImageForm = container.select('form')[1];  //remote image form
    var errorPlaceHolder = container.select('.wishlist_item_errors')[0];
    if((localImageForm.visible() && !ItemValidations.validateImageForm(localImageForm, errorPlaceHolder,'wishlistItem[image]')) ||
       (remoteImageForm.visible() && !ItemValidations.validateImageForm(remoteImageForm, errorPlaceHolder, 'wishlistItem[remote_image]')))
  		return;
    var params = WishlistItemsList.serializeItem(container);
    //disable form buttons
    [container.select('.newItem_Done')[0],
     container.select('.newItem_Cancel')[0]].each(function(a){
       HTMLHelper.enableAnchor(a, false);
     });
    ItemValidations.clearError(errorPlaceHolder);
    new Ajax.Request(WishlistItemsList.restfulItemUrl(userId,""), {
        evalJS: true,
        method: 'post',
        parameters: params,
        onSuccess: function(transport){
            var location = "" + transport.getHeader('Location');
            var newItemId = location.substring(location.lastIndexOf('/') + 1);
            var updateUrl = WishlistItemsList.restfulItemUrl(userId,newItemId);
            if(remoteImageForm.visible())
              WishlistItem.setRemotePic(remoteImageForm, updateUrl);
            else
              WishlistItemsList.uploadPic(localImageForm, updateUrl);
        },
        onComplete: function(){
          [container.select('.newItem_Done')[0],
           container.select('.newItem_Cancel')[0]].each(function(a){
             HTMLHelper.enableAnchor(a, true);
           });          
        }	
    });
  },
  editItem: function(userId, itemId){
    var item = WishlistItemsList.getShowItem(itemId);
    //init the edit form
    var editForm = $('wishlist_item_'+itemId+'_edit_controls').update($('wishlist_item_edit_create_controls').innerHTML);
    editForm.select('.newItem_Cancel')[0].href="javascript:WishlistItemsList.cancelEditItem("+itemId+");"
    editForm.select('.newItem_Done')[0].href="javascript:WishlistItemsList.updateItem("+userId+","+itemId+");"
    var localImageForm = editForm.select('form')[0];
    var remoteImageForm = editForm.select('form')[1];
    localImageForm.select('a')[0].observe('click', function(event){localImageForm.hide();remoteImageForm.show();});
    remoteImageForm.select('a')[0].observe('click', function(event){remoteImageForm.hide();localImageForm.show();});
    editForm.select('.name')[0].value = item.name;
    var d = editForm.select('.description')[0]; 
    d.innerHTML = item.description;
    d.observe('keyup', function(){d.value = d.value.substring(0,500);});
    $('wishlist_item_'+itemId+'_show').hide();
    $('wishlist_item_'+itemId+'_edit').show();
  },
  cancelEditItem: function(itemId){
    $('wishlist_item_'+itemId+'_edit').hide();
    $('wishlist_item_'+itemId+'_edit_controls').update('');
    $('wishlist_item_'+itemId+'_show').show();
  },
  updateItem: function(userId, itemId){
    var container = $('wishlist_item_'+itemId+'_edit');
    var localImageForm = container.select('form')[0];  //local image form
    var remoteImageForm = container.select('form')[1];  //remote image form
    var errorPlaceHolder = container.select('.wishlist_item_errors')[0];
    if((localImageForm.visible() && !ItemValidations.validateImageForm(localImageForm, errorPlaceHolder,'wishlistItem[image]')) ||
       (remoteImageForm.visible() && !ItemValidations.validateImageForm(remoteImageForm, errorPlaceHolder, 'wishlistItem[remote_image]')))
  		return;
    var params = WishlistItemsList.serializeItem(container);
    //disable form buttons
    [container.select('.newItem_Done')[0],
     container.select('.newItem_Cancel')[0]].each(function(a){
       HTMLHelper.enableAnchor(a, false);
     });
    var updateUrl = WishlistItemsList.restfulItemUrl(userId, itemId);
    ItemValidations.clearError(errorPlaceHolder);
    new Ajax.Request(updateUrl, {
        evalJS: true,
        method: 'put',
        parameters: params,
        onSuccess: function(){
          if(remoteImageForm.visible())
            WishlistItem.setRemotePic(remoteImageForm, updateUrl);
          else
            WishlistItemsList.uploadPic(localImageForm, updateUrl);
        },
        onComplete: function(){
          [container.select('.newItem_Done')[0],
           container.select('.newItem_Cancel')[0]].each(function(a){
             HTMLHelper.enableAnchor(a, true);
           });
        }
    });
  },
  deleteItem: function(userId, itemId){
    if(confirm('Are you sure?')){	
		$('wishlist_item_'+itemId+'_delete').disabled = true;
	    new Ajax.Request(WishlistItemsList.restfulItemUrl(userId, itemId), {
	        method: 'delete'
	    });
	  }
  },
  uploadPic: function(uploadForm, url){
    if ($F(uploadForm["wishlistItem[image]"]) != "") {
      uploadForm.setAttribute("action", url);
      uploadForm.submit();
    }
  },
  serializeItem: function(container){
    return [container.select('.name')[0],
            container.select('.description')[0]
           ].map(function(i){return i.serialize(true);}).join('&');
  },
  restfulItemUrl: function(userId, itemId){
    return "/users/" + userId + "/wishlist_items/" + itemId;
  },
  fulfillWish: function(itemId)
  {
  	$("wishlist_item_"+itemId+"_fulfill").style.display = "none";
  	$('fulfillment_collection_' + itemId).style.display = "block";
  },

  cancelFulfillment: function(itemId)
  {
  	$('fulfillment_collection_' + itemId).style.display = "none";
  	$("wishlist_item_"+itemId+"_fulfill").style.display = 'block';
  },
  addWishToMyCollections: function(currentUserId, wishOwnerId, wishId){
	  if(WishlistItemsList.current_user_collections){
      WishlistItemsList.showIOwnItForm(wishId, wishOwnerId, WishlistItemsList.current_user_collections);
      return;    
    }
    //get the collections of the current user
	  authenticAjaxRequest( '/users/' + currentUserId + "/collections.json", 
	  { method: 'get', 
	    onSuccess: function(transport){
				WishlistItemsList.current_user_collections = eval('(' + transport.responseText + ')');
        WishlistItemsList.showIOwnItForm(wishId, wishOwnerId, WishlistItemsList.current_user_collections);
		   }
	  });
  },
  showIOwnItForm: function(wishId, wishOwnerId, collections){
    result = TrimPath.processDOMTemplate('jst_i_own_it', {wishId : wishId,
						 wishOwnerId : wishOwnerId,
						 collections : collections});
		$('add_wish_to_collections_' + wishId).innerHTML = result;
		$('add_wish_to_collections_' + wishId).style.display = "block";    
  },
  cancelAddWishToMyCollections: function(itemId){
	  $('add_wish_to_collections_' + itemId).style.display = "none";
  },
  addWishToMyWishlist: function(userId, itemId){
	  authenticAjaxRequest("/users/" + userId + "/wishlist_items/" + itemId + "/copy_wishes", {methos: 'post'})
  }
}

var WishListItemComments = {
  newCommentJSTId: 'newCommentJST',
  newCommentJST: null,
  restfulItemUrl: function(userId, itemId){
    return '/users/'+userId+'/wishlist_items/'+itemId;
  },
  addComment: function(userId, itemId){
    //TODO handle the case if no comments are visible initially
    var newComment = $('itemAddCommentText'); 
    if(newComment.value.gsub(/\s/,'').length == 0){
      alert("You can't add an empty comment !");      
    }
    else{
      authenticAjaxRequest(WishListItemComments.restfulItemUrl(userId,itemId) + "/comments",
        {method:'post', parameters: {comment_text: newComment.value}, onSuccess: function(transport){
          var comment = eval('('+transport.responseText+')');
          if (WishListItemComments.newCommentJST == null) {
            WishListItemComments.newCommentJST = TrimPath.parseDOMTemplate(WishListItemComments.newCommentJSTId);
          }
          comment.ownerShipClass = comment.is_owner ? 'ownerComment' : ''
          comment.item_id = itemId;
          comment.item_user_id = userId;
          var c = WishListItemComments.newCommentJST.process(comment);
          var csContainer = $('itemComments');
          csContainer.show(); //in case it was hidden when the comment being added now is the first comment
          csContainer.insert(c);
          newComment.value = '';
          Effect.SlideDown('comment_'+comment.id);
        }});
    }  
  },
  deleteComment: function(userId, itemId, commentId){
    if(confirm('Are you sure you want to delete this comment?')){
      authenticAjaxRequest(WishListItemComments.restfulItemUrl(userId,itemId) + "/comments/" + commentId,
      {method:'delete', 
       onSuccess: function(transport){
         Effect.Fade('comment_'+commentId, {afterFinish: function(){$('comment_' + commentId).remove();}});
       }
       });
    }  
  }
}

function copyCurrentValuesToEditControl(editControls, itemDataControls) {

	editControls[1].firstDescendant().value = itemDataControls[0].innerHTML;//name
	editControls[2].firstDescendant().value = itemDataControls[1].innerHTML; //description
	
}

function showAmazonWishlistForm()
{
	$('p_amazon_email_form').style.display = 'block';
}

function cancelAmazonWishlist()
{
	$('p_amazon_email_form').style.display = 'none';
}

function importAmazonWishlist(userId)
{
	email = $('input_amazon_email').value;
	new Ajax.Request("/users/" + userId + "/wishlist_amazon_imports", 
					{ method: 'post',
					parameters: { 'amazon_email': email } });
}