jQuery.noConflict();

jQuery(document).ready(function(){
	
	//to get add/removeClass work
  setTimeout(function() {
      setHoverStylesForEvent(jQuery(".event"))
      setupButtonForEvent(jQuery(".event"))
			setupButtonForFolderEvent(jQuery(".folder_event"))
    }, 1)
  
	jQuery("#cart_error_message").hide(0)
	
  jQuery("#cart_error_message").click(function() {
    displayCartErrorBox(false)
  })

  jQuery("#message").click(function() {
    jQuery("#message").hide(400)
  })
  
  jQuery(document).ajaxError(function(event, req, settings, thrownError){
    displayError(req.responseText || req.statusText || thrownError || "Ett oväntat fel inträffade")
  });
 	
  
  //global, do not var !
  metabox_query = undefined;

/*
	jQuery(".clickable").click(
		function() {
		  var metabox = jQuery("#metabox");

			metabox.hide();

      metabox.css("left", jQuery(this).offset().left - 275)
      metabox.css("top", jQuery(this).offset().top)


      var evt = jQuery(this)

      if(metabox_query != undefined){
        metabox_query.abort()
        metabox_query = undefined
      }

      metabox_query = jQuery.ajax({
        url: "/pekpc/grid/meta_box/"+evt.attr("paperID"),
				cache: false,
        success: function(newBox) {
            metabox.html(newBox)
						metabox.fadeIn()
        }
      })
		})
		jQuery("#metabox").click(
			function() {
				jQuery("#metabox").fadeOut()
			}
		)
	*/
		
		var originalTop = jQuery("#rightcolumn").offset().top
		jQuery( window ).scroll( function () {
			var docuScroll = jQuery( document ).scrollTop()
			var diff = docuScroll - originalTop + 10
			
			if (jQuery(window).height() < jQuery("#rightcolumn").height() && docuScroll < parseInt(jQuery("#rightcolumn").css("top"))) {
				if(diff > 0) {
					jQuery("#rightcolumn").css("top", diff+"px")
				} else {
					jQuery("#rightcolumn").css("top", 0)
				}
			}
			else if (jQuery(window).height() < jQuery("#rightcolumn").height() && docuScroll > (jQuery("#rightcolumn").height() - jQuery(window).height())) {
				
				diff = diff - (jQuery("#rightcolumn").height() - jQuery(window).height() + 30)
				if(diff > 0) {
					jQuery("#rightcolumn").css("top", diff+"px")
				} else {
					jQuery("#rightcolumn").css("top", 0)
				}
			}
			else if (jQuery(window).height() >= jQuery("#rightcolumn").height()) {
				if(diff > 0) {
					jQuery("#rightcolumn").css("top", diff+"px")
				} else {
					jQuery("#rightcolumn").css("top", 0)
				}
			}
			

		})
	
});


////////////////////////////////// Cart handling //////////////////////////////////

// Week slider
function addPaper_post(paperID) {
  var evt = jQuery(".event#paper_"+paperID)
  evt.addClass("added")
  setHoverStylesForEvent(evt)
  setupButtonForEvent(evt)
  
  addCartRow(paperID)
}

function removePaper_post(paperID) {
  var evt = jQuery(".event#paper_"+paperID)
  evt.removeClass("added")
  setHoverStylesForEvent(evt)
  setupButtonForEvent(evt)

  removeCartRow(paperID)
}

function addFolder_post(folderID) {
  var evt = jQuery(".folder_event#folder_"+folderID)
  evt.addClass("added")
  //setHoverStylesForEvent(evt)
  setupButtonForFolderEvent(evt)
  
  addFolderCartRow(folderID)
}

function removeFolder_post(folderID) {
  var evt = jQuery(".folder_event#folder_"+folderID)
  evt.removeClass("added")
  //setHoverStylesForEvent(evt)
  setupButtonForFolderEvent(evt)

  removeFolderCartRow(folderID)
}



// Cart
function addCartRow(paperID) {
  jQuery("#howto").fadeOut(300, function() {
    jQuery("#shopping_cart").fadeIn(300, function() {
      
      jQuery.ajax({
        url: "/pekpc/grid/line_item_row/"+paperID,
        success: function(newLineItem) {
          jQuery(".cart_contents").append(newLineItem)
          cartUpdateEvenOddClasses()
          jQuery(".line_item:last").hide().slideDown(300)
        }
      })
      
      
    })
  })
}
function removeCartRow(paperID) {
	jQuery("#cart_row_for_paper_"+paperID).slideUp(300, function() {
		jQuery("#cart_row_for_paper_"+paperID).remove()
    cartUpdateEvenOddClasses()

    if(jQuery(".line_item").length == 0) { // removed last item in list
    	jQuery("#shopping_cart").fadeOut(300)
    }
    if(jQuery(".monthly_subscription_line_item").length == 0) {
     jQuery("#subscriptions_cart").hide()
    }
    if(jQuery(".bought_product_line_item").length == 0) {
     jQuery("#paid_for_cart").hide()
    }
  })
}

function addFolderCartRow(folderID) {
  jQuery("#howto").fadeOut(300, function() {
    jQuery("#shopping_cart").fadeIn(300, function() {
      
      jQuery.ajax({
        url: "/pekpc/grid/folder_row/"+folderID,
        success: function(newLineItem) {
          jQuery(".cart_contents").append(newLineItem)
          cartUpdateEvenOddClasses()
          jQuery(".line_item:last").hide().slideDown(300)
        }
      })
      
      
    })
  })
}
function removeFolderCartRow(folderID) {
   jQuery("#cart_row_for_folder_"+folderID).slideUp(300, function() {
     jQuery("#cart_row_for_folder_"+folderID).remove()
     cartUpdateEvenOddClasses()

		if(jQuery(".line_item").length == 0) { // removed last item in list
    	jQuery("#shopping_cart").fadeOut(300)
    }
    if(jQuery(".monthly_subscription_line_item").length == 0) {
     jQuery("#subscriptions_cart").hide()
    }
    if(jQuery(".bought_product_line_item").length == 0) {
     jQuery("#paid_for_cart").hide()
    }
		
  })
}

function cartUpdateEvenOddClasses() {
  if(jQuery(".line_item").length == 0 && jQuery(".subscription_line_item").length == 0)
    return;
  
	if (jQuery(".line_item").length > 0) {
		var firstClass = jQuery(".line_item:first").attr("class").split(" ")[1]

	  jQuery(".line_item").each(function(i, line_item) {
	    jQuery(line_item).removeClass("odd").removeClass("even")
	    jQuery(line_item).addClass((i % 2 == 0)?(firstClass=="even"?"even":"odd"):(firstClass=="even"?"odd":"even"))
	  })
	}

	if (jQuery(".subscription_line_item").length > 0) {
		var subFirstClass = jQuery(".subscription_line_item:first").attr("class").split(" ")[1]

	  jQuery(".subscription_line_item").each(function(i, line_item) {
	    jQuery(line_item).removeClass("odd").removeClass("even")
	    jQuery(line_item).addClass((i % 2 == 0)?(subFirstClass=="even"?"even":"odd"):(subFirstClass=="even"?"odd":"even"))
	  })
	}

  
}

function emptyCart() {
  if(confirm("Vill du verkligen ta bort alla tidningar du valt och börja om från början?")){
	
			jQuery.ajax({
		    url: "/pekpc/grid/empty_cart",
		    success: function() {
		      jQuery("#shopping_cart .line_item").each(function() {
									
						if (jQuery(this).hasClass("folder_row")) {
							var folderID = this.id.substring(20);
							removeFolder_post(folderID);
							showPaperAddButtons(folderID);
						}
						else if (jQuery(this).hasClass("paper_row")) {
							var paperID = this.id.substring(19);
							removePaper_post(paperID);
						}
						
				  })
		      updateCartPrice(0.0);
		    }
		  })
  }
} 

function removeAllSubscriptions() {
  if(confirm("Vill du verkligen ta bort alla dina prenumerationer?")){
	
			jQuery.ajax({
		    url: "/pekpc/grid/unsubscribe_all",
		    success: function(newSum) {
		      jQuery("#subscriptions_cart .subscription_line_item").each(function() {
									
						if (jQuery(this).hasClass("folder_row")) {
							var folderID = this.id.substring(20);
							var evt = jQuery(".folder_event#folder_"+folderID)
						  evt.removeClass("folder_is_active")
							removeFolder_post(folderID);
							showPaperAddButtons(folderID);
						}
						else if (jQuery(this).hasClass("paper_row")) {
							var paperID = this.id.substring(19);
							var evt = jQuery(".event#paper_"+paperID)
						  evt.removeClass("paper_is_active")
							removePaper_post(paperID);
						}
						
				  })
		      updateSubscriptionCartPrice(newSum);
		    },
		    error: function(theErrorMsg) {
					displayError(theErrorMsg);
		    }
		  })
  }
}

function clear_cart_the_ie_way () {
  rows = jQuery(".cart_contents > div");
  rows.each(function() {
    folderID = this.id.substring(20);
    jQuery.ajax({
      url: "/pekpc/grid/remove_folder_from_cart/"+folderID,
      async:false,
      success: function(newPrice) {
        jQuery("#cartbox").html(newCartbox)
        removeFolder_post(folderID);
        updateCartPrice(newPrice);
      }
    })
  });
}

function updateCartPrice(newPrice) {
	
	jQuery.ajax({
    url: "/pekpc/grid/current_user_pays_by_sms",
    async:false,
    success: function(weekly) {

			if (weekly == "true") {
				jQuery(".cart_sum").html("Summa: "+(newPrice)+" kr/veckan")
			}
			else {
				jQuery(".cart_sum").html("Summa: "+(newPrice)+" kr/veckan")
			}
    }
  })

  
}

function updateSubscriptionCartPrice(newPrice) {

	jQuery.ajax({
    url: "/pekpc/grid/current_user_pays_by_sms",
    async:false,
    success: function(weekly) {

			if (weekly == "true") {
				jQuery(".subscription_cart_sum").html("Summa: "+(newPrice/4)+" kr/veckan")
			}
			else {
				jQuery(".subscription_cart_sum").html("Summa: "+newPrice/4+" kr/veckan")
			}
    }
  })
}
////////////////////////////////// Utility & display //////////////////////////////////


function setHoverStylesForEvent(evt) {
  evt.hover(function(){
    jQuery(this).addClass("event_hover")
  }, function(){
    jQuery(this).removeClass("event_hover")
    jQuery(this).removeClass("event_hover_added")
  })
  evt.filter(".added").hover(function(){
    jQuery(this).addClass("event_hover_added")
  }, function(){
    jQuery(this).removeClass("event_hover_added")
  })
  evt.trigger("mouseout")
}




function addRemovePaper(paperID, shouldAdd) {
	jQuery.ajax({
    url: "/pekpc/grid/"+ (shouldAdd? "add_to_cart" : "remove_from_cart") + "/" + paperID,
    success: function(newSum) {
      shouldAdd ? addPaper_post(paperID) : removePaper_post(paperID);
      updateCartPrice(newSum);
      //button_img.attr('src', "/images/download/"+ (shouldAdd ? "delete_matte" : "add") + ".gif");
    },
    error: function(theErrorMsg) {
      var evt = jQuery(".event#paper_"+paperID);
			setupButtonForEvent(evt);
			displayError(theErrorMsg);
    }
  })
  
}

function hidePaperAddButtons(folderID) {
			
		jQuery("#event_folder_"+folderID+" .date").hide();
		
}

function showPaperAddButtons(folderID) {
	
	jQuery("#event_folder_"+folderID+" .date").show();
	
}

function removePapersFromCart(folderID) {
	
	var papersToRemove = new Array();
	
	var rows = jQuery(".line_item");
  rows.each(function() {
		if (jQuery(this).hasClass("paper_row")) {
			var paperID = this.id.substring("cart_row_for_paper_".length);
			var paper = jQuery("#event_folder_"+folderID+" #paper_"+paperID);
			
			if (paper.size() > 0) {
				//removePaper(paperID);
				papersToRemove.push(paperID);
			}
			
		}
	})
	
	
	jQuery.ajax({
    url: "/pekpc/grid/remove_papers_from_cart/"+ folderID,
    success: function(newSum) {
	
			for (var paperToRemove in papersToRemove) {
				removePaper_post(parseInt(papersToRemove[paperToRemove]));
			}
			
			updateCartPrice(newSum);
			
    },
    error: function(theErrorMsg) {
			displayError(theErrorMsg);
    }
  })

}

function addRemoveFolder(folderID, shouldAdd) {
	jQuery.ajax({
    url: "/pekpc/grid/"+ (shouldAdd? "add_folder_to_cart" : "remove_folder_from_cart") + "/" + folderID,
    success: function(newSum) {
      shouldAdd ? addFolder_post(folderID) : removeFolder_post(folderID);
      updateCartPrice(newSum);
			shouldAdd ? hidePaperAddButtons(folderID) : showPaperAddButtons(folderID);
			if (shouldAdd) {
				removePapersFromCart(folderID);
			}
      //button_img.attr('src', "/images/download/"+ (shouldAdd ? "delete_matte" : "add") + ".gif");
    },
    error: function(theErrorMsg) {
      var evt = jQuery(".folder_event#folder_"+folderID);
			setupButtonForFolderEvent(evt);
			displayError(theErrorMsg);
    }
  })
  
}

function removeSubscriptionForFolder(folderID) {
	
	if(confirm("Vill du verkligen ta bort prenumerationen?")){
		
		jQuery.ajax({
	    url: "/pekpc/grid/unsubscribe_folder/" + folderID,
	    success: function(newSum) {
				var evt = jQuery(".folder_event#folder_"+folderID)
			  evt.removeClass("folder_is_active")
	      removeFolder_post(folderID);
	      updateSubscriptionCartPrice(newSum);
				showPaperAddButtons(folderID);
	    },
	    error: function(theErrorMsg) {
				displayError(theErrorMsg);
	    }
	  })

	}
}

function removeSubscriptionForPaper(productID) {
	
	if(confirm("Vill du verkligen ta bort prenumerationen?")){
		
		jQuery.ajax({
	    url: "/pekpc/grid/unsubscribe_product/" + productID,
	    success: function(newSum) {
				var evt = jQuery(".event#paper_"+productID)
			  evt.removeClass("paper_is_active")
	      removePaper_post(productID);
	      updateSubscriptionCartPrice(newSum);
	    },
	    error: function(theErrorMsg) {
				displayError(theErrorMsg);
	    }
	  })

	}
}



function addPaper(paperID) {
	addRemovePaper(paperID, true)
}
function removePaper(paperID) {
	addRemovePaper(paperID, false)	
}

function setupButtonForEvent(evts) {
  evts.each(function(idx) {
    var evt = jQuery(this)
    var isAdded = evt.hasClass("added")
    var isActive = evt.hasClass("paper_is_active")
    var paperID = this.id.substring(6)
    var button = evt.children(".date").children("a")
    var button_img = button.find("img");
    button.unbind("click")
		
		if (!isActive) {
			button.click(function () {
	      button_img.attr('src', "/images/download/button_loading.gif");
				addRemovePaper(paperID, !isAdded)
	      return false;
	    })
		}
		else {
			button.click(function () {
	      //button_img.attr('src', "/images/download/button_loading.gif");
				removeSubscriptionForPaper(paperID)
	      return false;
	    })
		}


    button_img.attr('src', "/images/pekpc/"+ ((isAdded || isActive) ? "minus" : "plus") + ".png");
  })
}

function setupButtonForFolderEvent(evts) {
  evts.each(function(idx) {
    var evt = jQuery(this)
    var isAdded = evt.hasClass("added")
		var isActive = evt.hasClass("folder_is_active")
    var folderID = this.id.substring(7)
    var button_img = evt.find("img");
    button_img.unbind("click")
		
		if (!isActive) {
			button_img.click(function () {
	      button_img.attr('src', "/images/download/button_loading.gif");
				button_img.css('margin-top', '16px');
				addRemoveFolder(folderID, !isAdded)
	      return false;
	    })
		}
		
		else {
			button_img.click(function () {
	      //button_img.attr('src', "/images/download/button_loading.gif");
				//button_img.css('margin-top', '16px');
				removeSubscriptionForFolder(folderID)
	      return false;
	    })
		}

    button_img.attr('src', "/images/pekpc/"+ ((isAdded || isActive) ? "stop_subscription" : "start_subscription") + ".png");
		button_img.css('margin-top', '11px');
  })
}

function elLeft(el) {
  if(!el.style.left) return 0;
  return parseFloat(/(-?\d*.?\d+)px/.exec(el.style.left)[1])
}

function displayError(message) {
    jQuery("#cart_error_message").html(message)
    displayCartErrorBox(true);
}

function displayCartErrorBox(yesNo) {
  if(yesNo == true)
    jQuery("#cart_error_message").show(400)
  else
    jQuery("#cart_error_message").hide(400)
}
