// bind colorbox to filterlinks when document ready
$(document).ready(function(){
	$(".filterbox").colorbox({scrolling: false});
});

// do bind colorbox to filterlinks within colorbox
$().bind("cbox_complete", function() {
	$(".filterbox").colorbox();

	$("#fb_content a").each(function() {
		$(this).click(function(event) {
			event.preventDefault();
			var input = $(this).parent().parent().find("input");
			if (input.is(":checked")){
				input.attr("checked", false);
				$("#fb_rail a").each(function() {
					this.href = $.fn.removeValueFromQueryString(this.href, input.attr("name"), escape(input.attr("value")));
				});
				submitLink = $.fn.removeValueFromQueryString(submitLink, input.attr("name"), escape(input.attr("value")));
			}
			else {
				input.attr("checked", true);
				$("#fb_rail a").each(function() {
					this.href += "&" + input.attr("name") + "=" + escape(input.attr("value"));
				});
				submitLink += "&" + input.attr("name") + "=" + escape(input.attr("value"));
			}
		});
	});
	
	$("#fb_content input").click(function() {
		that = $(this);
		// checked condition is inverted, due to click event on checkbox
		if (!$(this).is(":checked")){
			$("#fb_rail a").each(function() {
				this.href = $.fn.removeValueFromQueryString(this.href, that.attr("name"), escape(that.attr("value")));
			});
			submitLink = $.fn.removeValueFromQueryString(submitLink, that.attr("name"), escape(that.attr("value")));
		}
		else {
			$("#fb_rail a").each(function() {
				this.href += "&" + that.attr("name") + "=" + escape(that.attr("value"));
			});
			submitLink += "&" + that.attr("name") + "=" + escape(that.attr("value"));
		}
	});
	
	// add close function
	$("#fb_close").click(function() {
		$.fn.colorbox.close(); 
	});
	
	// add show result function
	$("#fb_submit").click(function() {
		window.location.href = submitLink;		
	});
	
});

$.fn.removeValueFromQueryString = function(url, parameter, value) {
	var queryString = url, ret = "";
	var params = [], list = [];

	// replace whitespace with +, caution with encoding
	if (value.indexOf('%20') > -1) {
		value = value.replace('%20','+');
	}
	
	if (url.indexOf('?') > -1) {
		var urlSplit = url.split('?');
		ret = urlSplit[0] + '?';
		queryString = urlSplit[1];
	}
	
	// normalize data
	var splitAmp = queryString.split('&');
	for (var i = 0; i < splitAmp.length; i++) {
		var splitEq = splitAmp[i].split('=');
		var k = splitEq[0];

		if (params[k] != undefined) {
			if (params[k].length > 0) {
				params[k] += ',' + splitEq[1];
			}
		} 
		else {
			params[k] = splitEq[1];
		}
	}

	// delete specified value from parameter list
	var len = 0
	for (key in params) {
		var values = params[key];
		var j = 0, tmp = [];

		if (values.indexOf(",") > -1) {
			var list = values.split(',');
			for (var i = 0; i < list.length; i++) {
				if (key == parameter) {
					if (list[i] != value) {
						tmp[j++] = list[i];
					}
				} 
				else {
					tmp[j++] = list[i];
				}
			}
			params[key] = tmp.join();
		} 
		else {
			if (key == parameter) {
				if (params[key] == value) {
					params[key] = '';
				}
			} 
			else {
				params[key] = values;
			}
		}
		len++;
	}

	// build queryString
	var i = 0;
	for (var k in params) {
		ret += k + "=" + params[k];
		if (i++ < len - 1) ret += '&';
	}
	return ret;
}
