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 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, selectElement, selectElementDiv) {
	var element = $("#"+elementName);
	var hideElements = $("."+hideElementClass+':visible');
	if(hideElements.length > 0) {
		hideElements.fadeTo(100, 0).slideUp(100, function() {
			showElement(element);
		});
	} else {
		showElement(element);
	}
	
	if(!selectElementDiv)
		selectElementDiv = "boxes";
	$('#'+selectElementDiv+' a').each(function(index) {
	    $(this).removeClass("selected");
	});
	$(selectElement).addClass("selected");
	
	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 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
	});
}

function validateForm(formID) {
	var submit = true;
	$("#"+formID+" :input").each(function(i) {
		if($(this).attr("class") == "required" && $(this).val() == "") {
			$(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
	});
}

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);
	});
}

function clickclear(thisfield, defaulttext) {
	if (thisfield.value == defaulttext) {
		thisfield.value = "";
	}
}

function clickrecall(thisfield, defaulttext) {
	if (thisfield.value == "") {
		thisfield.value = defaulttext;
	}
}

