// Address Events Declaration

window.Core = window.Core || {};
window.nsp = Core.namespace = function(name) {
    var parts = name.split('.'), i, value, tail = window;
    for(i = 0, value = parts[i]; i < parts.length; value = parts[++i]) if(tail[value]) tail = tail[value]; else tail = tail[value] = {};
    return tail;
}; // nsp - alias for namespace
nsp('Core.events.global');
$(function() { $(Core.namespace('Core.events.global')).triggerHandler('ready'); });

// Cart Events Declaration
Core.event.addToCartBegin = function (sender, data) {}; 
Core.event.addToCartEnd = function (sender,id,html,incartButtonText, movetoCart, addedText) {};
Core.event.deleteFromCartBegin = function (sender, data) {};
Core.event.deleteFromCartEnd = function (sender, productId,totalValues) {};
Core.event.refreshCartItemsBegin = function (sender, data) {};
Core.event.refreshCartItemsEnd = function (sender, data) {};

// Preorder Events Declaration
Core.event.addToPreorderBegin = function (sender, data) {};
Core.event.addToPreorderEnd = function (button, id, html, inpreorderButtonText, movetoPreorder, addedText) {};
Core.event.deleteFromPreorderBegin = function (sender, data) { };
Core.event.deleteFromPreorderEnd = function (sender, productId, totalValues) {};
Core.event.refreshPreorderItemsBegin = function (sender, data) {};
Core.event.refreshPreorderItemsEnd = function (sender, data) {};

// Address Events Declaration
Core.event.addressCreateBegin = function (sender, data) {}; 
Core.event.addressCreateSuccess = function (sender, data) {};
Core.event.addressCreateFail = function (sender, data) {};
Core.event.addressSaveBegin = function (sender, data) {}; 
Core.event.addressSaveSuccess = function (sender, data) {};
Core.event.addressSaveFail = function (sender, data) {};
Core.event.addressDeleteBegin = function (sender, data) {}; 
Core.event.addressDeleteEnd = function (sender, data) {};

// Checkout Events Declaration
Core.event.updateTransportBegin = function (sender, data) {}; 
Core.event.updateTransportEnd = function (sender,data,addressId) {};
Core.event.updateCheckoutProductsBegin = function (sender, data) {}; 
Core.event.updateCheckoutProductsEnd = function (sender,data,deliveryId) {};
Core.event.setCarrierBegin = function (sender,stockId, carrierId) {};
Core.event.setCarrierEnd = function (sender,data) {};
Core.event.updatePaymentBegin = function (sender, data) {}; 
Core.event.updatePaymentEnd = function (sender,data) {};
Core.event.setPaymentEnd = function (sender,data) {};
Core.event.updateBankDetailsBegin = function(sender, data) {};
Core.event.updateBankDetailsEnd = function(sender, data) {};
Core.event.updateTotalEnd = function(sender, data) {};
Core.event.updateTotalEnd = function (sender,data) {};
Core.event.makeAnOrderBegin = function (sender, data) {}; 
Core.event.setCheckoutAddress = function () {};
// Cart related functions --------------------
function AddToCartQuantity(sender,productsQuantity) {
	Core.event.addToCartBegin(sender,productsQuantity);
	url = typeof(language)  == 'undefined' ? "/product/addcartquantity/" : language + "/product/addcartquantity/";
	$.post(url + '?noHelpers=true', { data: productsQuantity } , function(response){
		Core.event.addToCartEnd(sender, null, response);
	});
}



function AddToCart(sender, productId, incartButtonText, movetoCart, addedText) {
	Core.event.addToCartBegin(sender,productId);
	url = typeof(language)  == 'undefined' ? "/product/addcart/" : language + "/product/addcart/";
	$.get(url + productId + '?noHelpers=true', null , function(html){
		Core.event.addToCartEnd(sender, productId, html, incartButtonText, movetoCart, addedText);
	});
}

function DeleteFromCart (sender, productId) {
	Core.event.deleteFromCartBegin(sender,productId);	
	url = typeof(language) == 'undefined' ? '/common/cart/delete' : language + '/common/cart/delete';
	$.post(url + '?noHelpers=true', {"productId" : productId} , function(totalValues){
		Core.event.deleteFromCartEnd(sender,productId,totalValues);
	}, "json");
}

function RefreshCartItems(sender) {
	Core.event.refreshCartItemsBegin('','');
	var selector; var remove = ""; var status; var css; var result;
	url = typeof(language) == 'undefined' ? '/common/cart/refresh' : language + '/common/cart/refresh';
	$.getJSON(url + '?noHelpers=true', $("#cart-form").serialize() , function(obj){
		Core.event.refreshCartItemsEnd('',obj);
	});
}

function gotoCart(){
	window.location = typeof(language) == 'undefined' ? '/cart' : language + '/cart';
}

function quantityKeyPressed(e){
	if (e.keyCode=='13'){ RefreshCartItems(''); }
}
// --------------------------------------------------


// Address related functions  -----------------------
function CreateAddress (newAddressBlockId, modifyAdressBlock){
	modifyAdressBlock = modifyAdressBlock || false;
	Core.event.addressCreateBegin(newAddressBlockId);
	url = typeof(language)  == 'undefined' ? "/common/address/create" : language + "/common/address/create";
	$.post(url + '?noHelpers=true', $('form','#'+newAddressBlockId).serialize(), function(data){
		if (data.operationstatus == 'success'){
			$('#'+newAddressBlockId).replaceWith(data.html + data.newAddressHtml).ready(function() {
				Core.event.addressCreateSuccess(newAddressBlockId,data,modifyAdressBlock);
			});
		} else if (data.operationstatus == 'validation error') {
			Core.event.addressCreateFail(newAddressBlockId,data.messages);
		}
	}, "json");
}

function SaveAddress (addressBlockId, modifyAdressBlock){
	modifyAdressBlock = modifyAdressBlock || false;
	Core.event.addressSaveBegin(addressBlockId);
	url = typeof(language)  == 'undefined' ? "/common/address/update" : language + "/common/address/update";
	$.getJSON(url + '?noHelpers=true', $('form', '#'+addressBlockId).serialize(),  function(data){
		if (data.operationstatus == 'success'){
			$('#'+addressBlockId).replaceWith(data.html).ready(function() {
				Core.event.addressSaveSuccess(addressBlockId,data,modifyAdressBlock);
			});
		} else if (data.operationstatus == 'validation error') {
			Core.event.addressCreateFail(addressBlockId,data.messages);
		}
    });
}

function DeleteAddress (addressBlockId){
	Core.event.addressDeleteBegin(addressBlockId);
	url = typeof(language)  == 'undefined' ? "/common/address/delete" : language + "/common/address/delete";
	$.getJSON(url + '?noHelpers=true', $('form',"#"+addressBlockId).serialize(), function(data){
	    $("#"+addressBlockId).remove().ready(function() {
			Core.event.addressDeleteEnd(addressBlockId,data);
		});
        //$("#address_block_new").replaceWith(data.newAddressHtml).ready(function() {
        	//$("#address_block_new").addClass('collapsed');
		//});

	});
	return false;
}

// Save HTML for new address block
jQuery.fn.outerHTML = function() {	return $('<div></div>').append( this.clone() ).html();	};
var newAddress = '';
$(document).ready(function() {
	newAddress = newAddress == '' ? $("#address_block_new").outerHTML() : newAddress;
});
// --------------------------------------------------


// Checkout related functions  ----------------------

function updateTransport (addressId){
	Core.event.updateTransportBegin('', addressId); 
	if (addressId != '' && addressId != 0 && addressId != null){
		url = typeof(language)  == 'undefined' ? "/common/checkout/carriers" : language + "/common/checkout/carriers";
		$.get(url + '?noHelpers=true', { 'addressid': addressId},  function(data) {
			Core.event.updateTransportEnd(this,data,addressId) ;
		});
	}
}
function updateCheckoutProducts (deliveryId){
	Core.event.updateCheckoutProductsBegin('', deliveryId); 
	if (deliveryId != '' && deliveryId != 0 && deliveryId != null){
		url = typeof(language)  == 'undefined' ? "/common/checkout/products" : language + "/common/checkout/products";
		$.get(url + '?noHelpers=true', { 'deliveryid': deliveryId},  function(data) {
			Core.event.updateCheckoutProductsEnd(this,data,deliveryId) ;
		});
	}
}

function SetCarrier(sender,stockId, carrierId) {
	Core.event.setCarrierBegin(sender,stockId, carrierId);
	post = 'stockId=' + stockId + '&carrierId=' + carrierId;
	url = typeof(language)  == 'undefined' ? "/common/checkout/setcarrier" : language + "/common/checkout/setcarrier";
	$.post(url + '?noHelpers=true', post, function(data){
        //SetPayment (this, 0);
		Core.event.setCarrierEnd(sender, data, carrierId);
	});
} 
function setSelfDelivery(sender, carrierId) {
	post = 'stockId=' + 0 + '&carrierId=' + carrierId + '&notSet=1';
	url = typeof(language)  == 'undefined' ? "/common/checkout/setcarrier" : language + "/common/checkout/setcarrier";
	$.post(url + '?noHelpers=true', post, function(data){
		UpdatePayment (this, carrierId);
	});
}

function UpdatePayment (sender, carrierId){
	Core.event.updatePaymentBegin(sender,'');
	post = 'carrierId=' + carrierId;
	url = typeof(language)  == 'undefined' ? "/common/checkout/payments" : language + "/common/checkout/payments";
	$.get(url + '?noHelpers=true', post,  function(data){
		Core.event.updatePaymentEnd(sender,data);
	});
}

function SetPayment(sender, paymentId) {
	post = 'paymentId=' + paymentId ;
	url = typeof(language)  == 'undefined' ? "/common/checkout/setpayment" : language + "/common/checkout/setpayment";
	$.post(url + '?noHelpers=true', post, function(data){
		Core.event.setPaymentEnd (sender, data);
	}, "json");
} 

function UpdateBankDetails(sender){
	Core.event.updateBankDetailsBegin(sender, '');
	url = typeof(language)  == 'undefined' ? "/common/checkout/bankdetails" : language + "/common/checkout/bankdetails";
	$.post(url + '?noHelpers=true', '', function(data){
		Core.event.updateBankDetailsEnd(sender, data);
	}, "json");
}

function UpdateTotal (sender){
	Core.event.updateTotalBegin(sender, '');
	url = typeof(language)  == 'undefined' ? "/common/checkout/total" : language + "/common/checkout/total";
	$.get(url + '?noHelpers=true', '',  function(data){
		Core.event.updateTotalEnd (sender,data);
	});
}

function MakeAnOrder (sender){
	Core.event.makeAnOrderBegin(sender);
	url = typeof(language)  == 'undefined' ? "/common/checkout/makeorder" : language + "/common/checkout/makeorder";
	var comment = $('#ordercomment').length ? '&ordercomment=' + $('#ordercomment').val() : '';
	$.get(url + '?noHelpers=true' + comment, $('#beznal_details').length ? $('#beznal_details').serialize() : '',  function(data){
		Core.event.makeAnOrderEnd = function (sender,data) {};
		data = data.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
		if (data.substring(0,4) == "true"){
			url = typeof(language)  == 'undefined' ? "/OrderSummary.html" : language + "/OrderSummary.html";
			location.replace(url);
		} else if (data.substring(0,5) == "false") {
			url = typeof(language)  == 'undefined' ? "/cart" : language + "/cart";
			window.location = url;
		} else if (data.substring(0,14) == '/account/order'){
			url = typeof(language)  == 'undefined' ? data : language + data;
			location.replace(url);
		} else {
			$(data).insertAfter(sender).ready(function(){
				$('#paymentForm').submit();
			});
		}
	});
}
// ----------------------------------------


// Preorder related functions  ----------------------
function AddToPreorder(button, productId, inpreorderButtonText, movetoPreorder, addedText) {
	Core.event.addToPreorderBegin(button,productId);
	url = typeof(language)  == 'undefined' ? "/product/addpreorder/" : language + "/product/addpreorder/";
	$.get(url + productId + '?noHelpers=true', null , function(html){
		Core.event.addToPreorderEnd(button, productId, html, inpreorderButtonText, movetoPreorder, addedText);
	});
}

function DeleteFromPreorder(button, productId) {
	Core.event.deleteFromPreorderBegin(button,productId);
	url = typeof(language) == 'undefined' ? '/common/advanceorder/delete' : language + '/common/advanceorder/delete';
	$.getJSON(url + '?noHelpers=true', {"productId" : productId} , function(obj){
		Core.event.deleteFromPreorderEnd(button, productId, obj);
	});
}

function RefreshPreorderItems(sender) {
	Core.event.refreshPreorderItemsBegin(sender,'');
	url = typeof(language) == 'undefined' ? '/common/advanceorder/refresh' : language + '/common/advanceorder/refresh';
	$.getJSON(url + '?noHelpers=true', $("#preorder-form").serialize() , function(obj){
		Core.event.refreshPreorderItemsEnd(sender, obj);
	});
}

function FromPreorderToCart(){
	url = typeof(language) == 'undefined' ? '/common/advanceorder/makeanorder' : language + '/common/advanceorder/makeanorder';
	$.post(url + '?noHelpers=true', function(){ gotoCart(); });
}

function quantityPOKeyPressed(e){
	if (e.keyCode=='13'){ RefreshPreorderItems(''); }
}
function gotoPreorder(){
	window.location = typeof(language) == 'undefined' ? '/advanceorder' : language + '/advanceorder';
}
//----------------------------------------


//Product related functions  ----------------------
var positionY;
function estimateShipping(productId){
	positionY = $(this).scrollTop(); // scrolled height
	if(($.browser.msie) && (jQuery.browser.version == "6.0")) popupEclipce_IE6_Fix();
	$("body").prepend("<div id='shadow'></div>"); $("#shadow").css("height", $(document).height()); // Disable page with transparent cover.
	url = typeof(language)  == 'undefined' ? "/common/calculateshipping/index" : language + "/common/calculateshipping/index";
	$.get(url + '?noHelpers=true', {'productId':productId}, function( popup ){
		$("body").prepend(popup);
		$("#estimate-container").css("height", $(document).height());
		var top = parseInt(($(window).height() - parseInt($("#estimate_shiping_popup").height())) / 2); // middle of a screen
		$("#estimate_shiping_popup").css({"margin-top" : top + positionY > 0 ? top + positionY : 0 + "px", "visibility" : "visible" });
	});
}

function removeEstimateShipping(){
	$("#shadow, #estimate-container, #estimate_shiping_popup").detach();
	if(($.browser.msie) && (jQuery.browser.version == "6.0")){
		removeEclipse_IE6_Fix();
	}
}

$(document).ready(function() {
	$("#close_estimate_shipping").live("click", function(){ removeEstimateShipping(); });

	$("#estimate-container").live("click", function(event){
		 if(this == event.target) {  
			 removeEstimateShipping();
		 }
	});

});

//------ Sugest price related functions -----------

function suggestPrice(productId){
	positionY = $('html').scrollTop();
	if(($.browser.msie) && (jQuery.browser.version == "6.0")) popupEclipce_IE6_Fix(); else $('html').animate({scrollTop:0}, 'fast'); 
	$("body").prepend("<div id='shadow'></div>"); $("#shadow").css("height", $(document).height()); // Disable page with transparent cover.
	url = typeof(language)  == 'undefined' ? "/suggest_price/"+productId : language + "/suggest_price/"+productId;
	$.get(url + '?noHelpers=true', {'productId':productId}, function( popup ){
		$("body").prepend(popup);
		$("#suggestprice-container").css("height", $(document).height());
		$("#suggestprice_popup").css("visibility","visible");
	});
}

function suggestPriceSubmit(productId){
    var className = $("#suggestprice-container .button").attr('class');
    $("#suggestprice-container .button").removeAttr('onclick').removeClass(className).addClass(className.replace("-over", "") + '-wait');
	url = typeof(language)  == 'undefined' ? "/suggest_price/"+productId : language + "/suggest_price/"+productId;
	$.post(url + '?noHelpers=true', $("#coreform").serialize(), function( popup ){
		$("#suggestprice-container").replaceWith( popup ).ready(function(){
			$("#suggestprice-container").css("height", $(document).height());
			$("#suggestprice_popup").css("visibility","visible");
		});
	});
}


function removeSuggestPrice(){
	$("#shadow, #suggestprice-container, #suggestprice_popup").detach();
	if(($.browser.msie) && (jQuery.browser.version == "6.0")){
		removeEclipse_IE6_Fix();
	}
	$('html').animate({scrollTop:positionY}, 'fast');
}

$(document).ready(function() {
	$("#close_suggestprice").live("click", function(){ removeSuggestPrice(); });
	
	$("#suggestprice-container").live("click", function(event){
		 if(this == event.target) {  
			 removeSuggestPrice();
		 }
	});
	
});
