function urlencode(str) {
	return escape(str).replace(/\+/g,'%2B').replace(/%20/g, '+').replace(/\*/g, '%2A').replace(/\//g, '%2F').replace(/@/g, '%40');
}

function changeUrlBar(url) {
	if(window.history.replaceState)
		window.history.replaceState(null, url, url);
	else
		window.location.href = window.location.href+"#"+url;
}

function slideDown(elementName) {
	$("#"+elementName).stop(true, true);
	$("#"+elementName).slideDown(200);
}
function slideUp(elementName) {
	$("#"+elementName).stop(true, true);
	$("#"+elementName).slideUp(200);
}

function show(elementName) {
	$("#"+elementName).show(0);
}

function hide(elementName) {
	$("#"+elementName).hide(0);
}

function submitFormAjax(formID, url) {
	if (url.search("\\?") != -1)
		url = url+"&ajax";
	else
		url = url+"?ajax";
	if($("#fancybox-content").length > 0) {
		$.post(url, $("#"+formID).serialize(), function(data) {
			$("#fancybox-content").html(data);
		});
	}
}

function simpleLoadPage(url) {
	if (url.search("\\?") != -1)
		url = url+"&ajax";
	else
		url = url+"?ajax";
	if($("#fancybox-content").length > 0) {
		$.fancybox({
	 		href: url,
	 	    overlayOpacity: .8,
	    	overlayColor:'#1d1d1d'
		});
		//$("#fancybox-content").load(url);
	}
}

function fetchPage(elementName, url, hash, replaceUrl, noEffect) {
	var element = $("#"+elementName);
	if(replaceUrl)
		changeUrlBar(url);
	if (url.search("\\?") != -1)
		url = url+"&ajax";
	else
		url = url+"?ajax";
	if(noEffect) {
		element.load(url);
	} else {
		element.fadeTo(200, 0.1, function() {
			element.load(url, function() {
				element.fadeTo(300, 1, function() {
					if(hash) {
						var hashOffest = $("#"+hash).offset();
						$("html:not(:animated),body:not(:animated)").animate({scrollTop: hashOffest.top-12}, 500);
					}	
				});
			})
		});
	}
}

function toggleVisibility(elementName) {
	var element = $("#"+elementName);
	if(element.is(':visible'))
		element.fadeTo(300, 0).slideToggle(200);
	else {
		element.css("opacity", 0);
		element.slideToggle(200).fadeTo(300, 1);
	}
}

function toggleVisibilityFast(elementName) {
	var element = $("#"+elementName);
	element.toggle();
}

function showOneHideAll(elementName, hideElementClass) {
	var element = $("#"+elementName);
	var hideElements = $("."+hideElementClass+':visible');
	if(hideElements.length > 0) {
		hideElements.fadeTo(100, 0).slideUp(100, function() {
			showElement(element);
		});
	} else {
		showElement(element);
	}
	
	function showElement(element) {
		element.css("opacity", 0);
		element.slideDown(100).fadeTo(200, 1);
	}
}

function changeImage(elementName, image, linkElement, link) {
	var element = $("#"+elementName);
	if(element.attr("src") != image) {
		element.fadeTo(100, 0.1, function() {
			if(linkElement)
				$("#"+linkElement).attr("href", link);
			element.attr("src", image).fadeTo(100, 1);
		});
	}
}

function changeOrderByLinksHref(url) {
	$('#filterPriceAsc').attr("href", url+'&ordby=price&ord=asc');
	$('#filterPriceDesc').attr("href", url+'&ordby=price&ord=desc');
	
	$('#filterViewsAsc').attr("href", url+'&ordby=_views&ord=asc');
	$('#filterViewsDesc').attr("href", url+'&ordby=_views&ord=desc');
	
	$('#filterRatingAsc').attr("href", url+'&ordby=_rating&ord=asc');
	$('#filterRatingDesc').attr("href", url+'&ordby=_rating&ord=desc');
}

//Comment functions
function showAddCommentWrapper(url) {	//NE DELA
	setTimeout(function() {
		alert("bla");
		toggleVisibility('add-comment');
	}, 2000);
	fetchPage('item_view', url, 'itemNavigation', true);
}

function insertComment() {
	var title = $("#commentTitle").val();
	var comment = $("#commentContent").val();
	$("#commentTitle").val("");
	$("#commentContent").val("");
	console.log(title+" "+comment);
	var url = document.location.href;
	if (url.search("\\?") != -1)
		url = url+"&cma";
	else
		url = url+"?cma";
	$.post(url, {comments: true, title: title, comment: comment}, function(data) {
		$("#add-comment").fadeTo(300, 0).slideToggle(200, function() {
			if(data > 0) {
				$("#numComments").html(data);
				showInsertedComment();
			} else
				showInsertCommentError();
		});
	});
}

function showInsertedComment() {
	var url = document.location.href;
	if (url.search("\\?") != -1)
		url = url+"&cmlast";
	else
		url = url+"?cmlast";
	$.get(url, function(data) {
		$("#noComments").hide();
		$("#commentsHolder").prepend(data);
		$(".commentFadeIn").css("opacity", 0);
		$(".commentFadeIn").slideToggle(200).fadeTo(300, 1);
		$(".commentFadeIn").effect("highlight", {}, 1000);
		$(".commentFadeIn").removeClass("commentFadeIn");
	//	$(".commentFadeIn").fadeIn(1000);
	});
}

function showInsertCommentError() {
	$("#noComments").html("Zgodila se je napaka, prosimo poizkusite znova.");
}

function commentUsefull(usefull) {
	var url = document.location.href;
	if (url.search("\\?") != -1)
		url = url+"&usefull="+usefull;
	else
		url = url+"?usefull="+usefull;
	$.get(url, function(data) {
		$("#usefullNum").fadeTo(100, 0, function() {
			$("#usefullNum").html(data);
		}).fadeTo(100, 1);
	});
}

//Cart function
function cartAddItemFromMatched(url) {
	$.fancybox.close();
	cartAddItem(url);
}
function cartAddItem(url, callbackUrl) {	
	if (url.search("\\?") != -1)
		url = url+"&ajax";
	else
		url = url+"?ajax";
	$.get(url, function(data) {
		$("#cartNumItems").html(data);
		miniCartShow('mini-cart', callbackUrl, true);
	});
}

function cartRemoveItem(elementName, url) {
	if (url.search("\\?") != -1)
		url = url+"&ajax";
	else
		url = url+"?ajax";
	$.get(url, function(data) {	//data = new_item_quantity|new_item_price|new_total|new_regular|new_savings
		var newData = data.split("|");
		if(!newData[0]) {
			toggleVisibility(elementName);
		} else {
			$("#"+elementName+"_quantity").val(newData[0]);
			$("#"+elementName+"_price").html(newData[1]);
		}
		$(".cartTotalValue").html(newData[2]);
		$(".cartRegularPrice").html(newData[3]);
		$(".cartSavings").html(newData[4]);
	});
}

function miniCartShow(elementName, url, autoHide) {
	$("#"+elementName).stop(true, true);
	
	if(!autoHide)
		var autoHide = false;
	if (url.search("\\?") != -1)
		url = url+"&mini";
	else
		url = url+"?mini";
	var element = $("#"+elementName);
	if($(element).is(":hidden")) {
		element.load(url, function() {
			if(autoHide) {
				element.stop(true, true);
			//	$('#itemAdded').show(0).delay(1600).slideUp(100);
				element.slideDown(200).delay(2000).slideUp(200);
			} else
				slideDown(elementName);
		});
	}
}

function miniCartHide(elementName) {
	$("#"+elementName).stop(true, true);
	$("#"+elementName).delay(200).slideUp(300);
}

function showAjaxPopup(url) {
	if (url.search("\\?") != -1)
		url = url+"&ajax";
	else
		url = url+"?ajax";
	$.fancybox({
	    titleShow     : false,
	    href: url,
	    transitionIn: 'none',
	    transitionOut: 'none',
	    speedIn: 0,
	    speedOut: 0,
	    overlayShow: false
	});
}

//Order step functions
function orderNextStep(elementName, post) {
	var step = $("#thisOrderStep").val();
	var url = "";
	
	if(step == 4) {
		$("#side-addcart-btn").hide(0);
		$("#cart-navigation").hide(0);
	}
	
	if(step == 1 || $("#doNotPost").length != 0)
		url = $("#nextOrderStepUrl").val();
	else
		url = $("#thisOrderStepUrl").val();
	url = url+"?ajax";
	if(!elementName)
		elementName = "cart";
	var element = $("#"+elementName);
	var holder = $("#orderSteps");
	holder.height(holder.height());
	element.hide("slide", { direction: "left" }, 200, function() {
		if(post && $("#doNotPost").length == 0) {
			$.post(url, $("#step_"+step).serialize(), function(data) {
				orderStepShow(element, holder, data);
			}); 
		} else {
			$.get(url, function(data) {
				orderStepShow(element, holder, data);
			}); 
		}
	});
}

function orderPreviousStep(elementName) {
	var step = $("#thisOrderStep").val();
	var url = $("#prevOrderStepUrl").val();
	if(step == 1) {
		window.location.href = url;
			return false;
	}
	url = url+"?ajax";
	if(!elementName)
		elementName = "cart";
	var element = $("#"+elementName);
	var holder = $("#orderSteps");
	holder.height(holder.height());
	element.hide("slide", { direction: "right" }, 200, function() {
		$.get(url, function(data) {
			orderStepShow(element, holder, data, "left");
		});
	});
}

function orderStepShow(element, holder, data, direction) {
	if(!direction)
		direction = "right";
	element.html(data);
	element.css("visibility", "hidden");
	element.css("display", "block");
	var height = element.height();
	element.css("display", "none");
	element.css("visibility", "visible");
	holder.animate({ height: height }, function () {
		element.show("slide", { direction: direction }, 200, function() {
			holder.css('height', 'auto');
		});
	});
}

function orderChangeDeliveryAddress(elementName, addresses, url) {
	var aid = $(addresses).val();
	url = url+"?aid="+aid+"&ajax";
	$("#"+elementName).load(url);
}

//registration
function validateForm(formID) {
	var submit = true;
	$("#"+formID+" .required").each(function(i) {
		if($(this).attr("class") == "required" && $(this).val() == "") {
			$(this).css("border", "1px solid red");
			submit = false;
		}
		if($("#rc-"+$(this).attr("name")).attr("class") == "reg-check-false") {
			$(this).css("border", "1px solid red");
			submit = false;
		}
	});
	if(submit)
		$("#"+formID).submit();
}

function showLoginWindow(elementName, url) {
	if (url.search("\\?") != -1)
		url = url+"&ajax";
	else
		url = url+"?ajax";
	$.fancybox({
	    titleShow: false,
	    padding: 1,
	    overlayOpacity: .8,
	    overlayColor:'#1d1d1d',
	    href: url
	});
}

//items
var groupVisible = false;
function showGroupItems(elementName, url, itemGroupElement) {
	if(!groupVisible) {
		if (url.search("\\?") != -1)
			url = url+"&ajax";
		else
			url = url+"?ajax";
		$(itemGroupElement).removeClass("fadeOnGroup");				//remove class on clicked group
		$("#"+elementName).load(url, function() {					//load items, then ...
			$("#groupItems").fadeTo(0, 0);							//hide but not remove loaded items
			$(".fadeOnGroup").fadeTo(200, 0.2).click(function() {	//fade other items and set on click event
				showGroupItems("", "", itemGroupElement);			//that hides group items
				return false;										//and returns false so no other action is taken
			});
			$("#"+elementName).slideDown(200, function() {			//slide down group items holder
				groupVisible = true;
				$("#groupItems").fadeTo(200, 1);					//fade in group items as they are invisible
			});
		});
	} else {
		if(!itemGroupElement) {
			$(".item").each(function(i) {
				$(this).removeClass("fadeOnGroup");
				$(this).addClass("fadeOnGroup");
			});
		} else {
			$(itemGroupElement).addClass("fadeOnGroup");
		}
		$("#groupItems").fadeTo(200, 0, function() {				//fade out group items
			$(".fadeOnGroup").fadeTo(200, 1).unbind('click');		//remove onclick event on other items
			$(".items_groups").slideUp(200, function() {			//slide up group items holder
				groupVisible = false;
			});
		});
	}
}

//Other
function showPages() {
	$("#pagesActive").fadeIn(200);
}
function hidePages() {
	$("#pagesActive").fadeOut(200);
}

function initScroller() {
	var initialOffset;
	var timeout;
	var scrollingDiv = $("#scrollable");
 	$(window).scroll(function() {
 		var sdOffset = scrollingDiv.offset();
 		var topOffset = $(window).scrollTop() + 1;
 		if(!initialOffset)
 			initialOffset = sdOffset.top;
 		margin = topOffset - initialOffset;
 		if(margin < 0)
 			margin = 0;
 		clearTimeout(timeout);
		timeout = setTimeout(function() {
			scrollingDiv
				.stop()
				.animate({"marginTop": margin + "px"}, 500, function() {
					if(margin == 0)
 						$(".hide_on_slide").fadeIn(250);
				});
 			if(margin > 0)
 				$(".hide_on_slide").fadeOut(50);
		}, 100);
	});
}

/*FORM TEXT */

function clickclear(thisfield, defaulttext) {
	if (thisfield.value == defaulttext) {
		thisfield.value = "";
	}
}

function clickrecall(thisfield, defaulttext) {
	if (thisfield.value == "") {
		thisfield.value = defaulttext;
	}
}


