jQuery.noConflict();

jQuery(document).ready(function(){
  
  
  //setHoverStylesForEvent(jQuery(".event"))
  //setupButtonForEvent(jQuery(".event"))
  
  //to get add/removeClass work
  setTimeout(function() {
      setHoverStylesForEvent(jQuery(".event"))
      setupButtonForEvent(jQuery(".event"))
    }, 1)
  
  jQuery("#message").click(function() {
    displayErrorBox(false)
  })
  
  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(".event").click(
		function() {
		  var metabox = jQuery("#metabox");

			metabox.hide();

      metabox.css("left", jQuery(this).offset().left)
      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: "/download/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 + 20
			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)
}



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

     if(jQuery(".line_item").length == 0) { // removed last item in list
         jQuery("#sidecart").fadeOut("slow", function() {
           if(jQuery("#calendar").length > 0) // We're in /list
            jQuery("#howto").fadeIn("slow")
           else // We're in /checkout or any other page; go to /list
            location.href="/download/"
         })
     }
  })
}

function cartUpdateEvenOddClasses() {
  if(jQuery(".line_item").length == 0)
    return;
  
  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"))
  })
  
}

function emptyCart() {
  if(confirm("Vill du verkligen ta bort alla tidningar du valt och börja om från början?")){
    if(jQuery.browser.msie)
      clear_cart_the_ie_way();
    else
      jQuery(".line_item .delete_button > a").click()
  }
} 

function clear_cart_the_ie_way () {
  rows = jQuery(".cart_contents > div");
  rows.each(function() {
    paperID = this.id.substring(19);
    jQuery.ajax({
      url: "/download/remove_from_cart/"+paperID,
      async:false,
      success: function(newPrice) {
        jQuery("#cartbox").html(newCartbox)
        removePaper_post(paperID);
        updateCartPrice(newPrice);
      }
    })
  });
}

function updateCartPrice(newPrice) {
  jQuery(".cart_sum").html("Summa: "+newPrice+":-")
}

////////////////////////////////// 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: "/download/"+ (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");
    }
  })
  
}
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 paperID = this.id.substring(6)
    var button = evt.children(".date").children("a")
    var button_img = button.find("img");
    button.unbind("click")
		
    button.click(function () {
      button_img.attr('src', "/images/download/button_loading.gif");
			addRemovePaper(paperID, !isAdded)
      return false;
    })
    button_img.attr('src', "/images/download/"+ (isAdded ? "minus" : "plus") + ".png");
  })
}

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

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

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


////////////////////////////////// Week sliders //////////////////////////////////


jQuery(document).ready(function(){

  jQuery(".back").each(function() {
    
    jQuery(this).mousedown(function(){
      var wk = jQuery(this).parent().find(".week")[0]; jQuery(wk).stop()
      var distance = -elLeft(wk)
      jQuery(this).parent().find(".week").animate({left: "20"}, {duration: (distance/300.0)*1000, easing:"linear"});
    });
    jQuery(this).mouseup(function() {
      var wk = jQuery(this).parent().find(".week")[0]
      jQuery(wk).stop()
      var left = elLeft(wk)
      var to = (left > -50) ? 0 : left + 50;
      jQuery(wk).animate({left: to+"px"}, {duration:600, easing:(left>0)?"easeOutElastic":"easeOutQuad"})
      
    });
  })
  
  jQuery(".scroll").each(function() {
    jQuery(this).mousedown(function(){
      var wk = jQuery(this).parent().find(".week")[0]; jQuery(wk).stop()
      var distance = 377+elLeft(wk)

      jQuery(this).parent().find(".week").animate({left: "-397px"}, {duration: (distance/300.0)*1000, easing:"linear"}); 
    });
    jQuery(this).mouseup(function(){
      var wk = jQuery(this).parent().find(".week")[0]
      jQuery(wk).stop()
      var left = elLeft(wk)
      var to = (left < (-377+50)) ? -377 : left - 50;
      jQuery(wk).animate({left: to+"px"}, {duration:600, easing:(left<-377)?"easeOutElastic":"easeOutQuad"})

    })
  })  
});



//////////////////////////////////////////////////////////////////////////////
////////////////////////////////// Checkout //////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
var PollingTime = 5*1000; // ATTN: Longer time on production server, please

jQuery(document).ready(function(){
  if( jQuery("#payment").length == 0)
    return
  
  jQuery("div.instructions > div").hide()
  openCheckoutPane("sms")
  
  setTimeout(pollPaymentStatus, PollingTime) 
})

function openCheckoutPane(pane) {
  jQuery("div.instructions > div").fadeOut("slow")
  
  jQuery("div.instructions").animate({
    height: jQuery(".instructions_"+pane).height()+"px"
  });
  jQuery(".instructions_"+pane).fadeIn()
  jQuery(".payment-box > .tabs li").removeClass("selected")
  jQuery("#button_"+pane).addClass("selected")
}

var amountPaidLastIChecked = 0;

function pollPaymentStatus() {
  jQuery.ajax({
    url: "/download/hasPaidAmount",
    success: function(amounts) {
      var paidAmount = parseInt(amounts.split("\n")[0])
      var totalAmount = parseInt(amounts.split("\n")[1])
      
      if(paidAmount == amountPaidLastIChecked) {
        setTimeout(pollPaymentStatus, PollingTime)
        return
      }
      
      amountPaidLastIChecked = paidAmount

      jQuery(".instructions_sms").load("/download/instructions/sms", {}, function(response, status, xhr) {
        jQuery("div.instructions").animate({
          height: jQuery(".instructions_"+"sms").height()+"px"
        }, "normal", "linear",
        function() {
          jQuery("div.instructions").fadeOut("fast", function() {
            jQuery("div.instructions").fadeIn("fast", function() {
              jQuery("div.instructions").fadeOut("fast", function() {
                jQuery("div.instructions").fadeIn("fast")
              })
            })
          })
        })
      })
      
      jQuery(".order-status").load("/download/order_status")
      
      if(paidAmount != totalAmount) {
        setTimeout(pollPaymentStatus, PollingTime) 
        return
      }
      
      setTimeout(function() {
        document.location = "/download/view_order/" + amounts.split("\n")[2]
      }, 2000)
    },
    error: function(req, errorMessage) {
      jQuery("#message").html(req.responseText || req.statusText)
      displayErrorBox(true)
      
      setTimeout(pollPaymentStatus, PollingTime)
    }
  })
}
