var fileinfo = {
	"geometry": null,
	"preview_geometry": null,
	"filename": null,
	"source": null
};

var crop = {
	"api": null,
	"loaded": false
}

var settings = {
	"active_filter": null,
	"block": false
};

function upload_success()
{
	$("#process-btn").unbind("click");
	$("#target-rename").unbind("click");

	$(document).ready(function(){
		$.getJSON("index.php?action=thumbnail&sid=" + sid, function(data){
			if (data["thumbnail"])
				reload_image("#thumbnail-holder > img", data["thumbnail"], null, true);
			ShowTab("#tab2-btn", "#tab2");
		});

		$.getJSON("index.php?action=processable&sid=" + sid, function(data){

			fileinfo["source"] = data["source"];
			update_geometry(data["original_geometry"], data["preview_geometry"]);

			if (data["filename_full"])
			{
				fileinfo["filename"] = data["filename_full"];
				$("#target-filename").val(fileinfo["filename"]);
				convert();
			}

			reset_history("#history-holder");
			reset_filters();
			create_preview(data["source"]);
			update_fileinfo(data["filename"], data["type"], data["size"], data["original_geometry"]);
			update_filter_holders();
		});
	});
}

function reload_crop(image_el, url, unbind)
{
	var date = new Date();
	url	= url + "?" + date.getTime();

	$.loadImages([url], function(){

		try
		{
			$("#preview").css("width", fileinfo["preview_geometry"]["width"] + "px");
			$("#preview").css("height", fileinfo["preview_geometry"]["height"] + "px");
		} catch (ex) {  }

		$(image_el).attr("width",	fileinfo["preview_geometry"]["width"]);
		$(image_el).attr("height",	fileinfo["preview_geometry"]["height"]);
		$(image_el).attr("src", url);

		crop["api"].setOptions({
			imageWidth:		fileinfo["geometry"]["width"],
			imageHeight:	fileinfo["geometry"]["height"],
			hide: true
		});

		crop["api"].update();

		if (unbind != undefined || unbind != null)
		{
			$("#x").val("");
			$("#y").val("");
			$("#w").val("");
			$("#h").val("");

			reset_filter_anime(unbind);
		}

		update_filter_holders();
	});
}

function reload_image(el, url, geometry, update_parent)
{
	var date = new Date();
	url = url + "?" + date.getTime();

	if ($(el).is(":visible"))
		$(el).fadeOut("fast");

	$.loadImages([url], function(){
		if (geometry != undefined || geometry != null)
		{
			try
			{
				var p = $("#preview");

				p.css("width", geometry["width"] + "px");
				p.css("height", geometry["height"] + "px");

				$(el).attr("width", geometry["width"]);
				$(el).attr("height", geometry["height"]);
			}
			catch (ex) {  }
		}

		$(el).attr("src", url);

		if ($(el).is(":hidden"))
		{
			$(el).show(100, function(){
				if (update_parent)
				{
					var img = new Image();
					img.src = url;
					var t_height = (img.height >= 130 ? 280 : 240);

					$(el).parent().parent()
						.css("height", t_height + "px")
						.fadeIn(100, function(){
							$("div.slot-right").css("height", (t_height + 40) + "px");
							update_filter_holders();
						});
				}
			});
		}
	});

}

function handle_filter(action, values)
{
	var apply		= $("#tab2");
	var apply_btn	= $("#apply-filter-btn");

	var filter_items = {
		"apply": apply,
		"apply_btn": apply_btn
	};

	if (action != "convert")
		apply.mask("", 0);

	settings["block"] = true;

	$.ajax({
		url: "index.php?action=" + action + "&sid=" + sid,
		dataType: "json",
		timeout: 0,
		data: values,
		async: (action == "convert" || action == "processable" ? false : true),
		success: function(data)
		{
			switch (action)
			{
				case "crop":
					update_geometry(data["original_geometry"], data["preview_geometry"]);
					reload_crop("#cbox", data["source"], filter_items);

					if (data["history_html"])
						update_history(data["history_html"]);
				break;

				case "convert":
					var a = [
						"bmp",
						"gif",
						"jp2",
						"jpc",
						"jpg",
						"pcx",
						"png",
						"psd",
						"sgi",
						"tga",
						"tif"
					];

					var b = false;

					if (data["converted"])
					{
						$.each(a, function(i){
							if (data["format"] == a[i])
							{
								window.location.href = "finish.php?sid=" + sid;
								b = true;
								return false;
							}
						});

						if (b == false)
						{
							$("#dialog-modal").dialog({
								height: 140,
								modal: true
							});
							$("#dialog-modal-href")
								.attr("href", data["filename"])
								.click(function(){
									$("#dialog-modal").dialog("close");
								});
						}
					}
				break;

				case "resize":
				case "rotate":
				case "bnw":
				case "sepia":
				case "swirl":
				case "comment":
				case "charcoal":
				case "brightness":
				case "sharpness":
				case "noise":
				case "auto-contrast":
				case "negate":
				case "oil-paint":
				case "hs":

					if (action == "rotate" || action ==  "resize")
						update_geometry(data["original_geometry"], data["preview_geometry"]);

					reload_image("#cbox", data["source"], data["preview_geometry"]);
					reset_filter_anime(filter_items);

					if (data["history_html"])
						update_history(data["history_html"]);
				break;
			}

			settings["block"] = false;
		}
	});
}

function revert_history(target, sender)
{
	if (target != undefined)
	{
		sender = "#tab2";
		$(sender).mask("", 0);
		
		$.ajax({
			url: "index.php?action=history" + "&sid=" + sid,
			dataType: "json",
			data: "target=" + target,
			success: function(data)
			{
				$(sender).unmask();

				reload_image("#cbox", data["source"], data["preview_geometry"]);

				if (data["history_html"])
					update_history(data["history_html"]);

				if (data["geometry"] && data["preview_geometry"])
					update_geometry(data["geometry"], data["preview_geometry"]);

				if (settings["active_filter"] == "crop")
					reload_crop("#cbox", data["source"], null);
			}
		});
	}
}

function convert()
{
	var process	= $("#process-btn");
	var format	= $("#conversion-format");
	var quality	= $("#convert-qlty");
	var rename_chk_box		= $("#target-rename");
	var rename_txt_fname	= $("#target-filename");
	var forbidden_chars = [ /\~/, /\!/, /\@/, /\?/,
		/\#/, /\\$/, /\%/, /\^/, /\&/, /\*/,
		/\(/, /\)/, /\+/, /\=/, /\]/, /\[/, /\\/,
		/\//, /\'/, /\"/, /\</, /\>/, /\:/ ];
	var valid = true;
	
	if (fileinfo["filename"])
		process.attr("disabled", false);

	process.click(function(){
		var values =	"format=" + format.val() +
						"&quality=" + quality.val() +
						"&filename=" + $.URLEncode(rename_txt_fname.val());

		if (rename_txt_fname.val() != false && valid)
		{
			process.attr("disabled", true);
			handle_filter("convert", values);
			process.attr("disabled", false);
		}
	});

	format.focus(function(){
		if ($(this).val() == "7")
			quality.attr("disabled", false);
		else
			quality.attr("disabled", true);
	});

	format.blur(function(){
		if ($(this).val() == "7")
			quality.attr("disabled", false);
		else
			quality.attr("disabled", true);
	});

	format.change(function(){
		if ($(this).val() == "7")
			quality.attr("disabled", false);
		else
			quality.attr("disabled", true);
	});

	rename_chk_box.click(function(){
		if (rename_txt_fname.attr("disabled"))
			rename_txt_fname.attr("disabled", false);
		else
			rename_txt_fname.attr("disabled", true);
	});

	rename_txt_fname.keyup(function(){
		$.each(forbidden_chars, function(i){
			if ($(rename_txt_fname).val().match(forbidden_chars[i]))
			{
				$("#target-filename-error").html("<span style=\"color: red;\">Invalid input</span>");
				valid = false;
				return false;
			}
			else
			{
				valid = true;
				$("#target-filename-error").html("");
			}
		});
	});
}

function update_geometry(original, preview)
{
	if (original != undefined && preview != undefined)
	{
		fileinfo["geometry"] = original;
		fileinfo["preview_geometry"] = preview;
	}
}

function update_history(history)
{
	try
	{
		var h = $("#history-holder");

		if (h.is(":hidden"))
			h.fadeIn(100);

		h.html(history.toString());
	}
	catch (ex) { }
}

function apply(action)
{
	var apply_btn = $("#apply-filter-btn");
	var values = null;
	
	apply_btn.click(function(){
		switch (action)
		{
			case "crop":
				values	=	"x=" + $("#x").val() + "&y=" + $("#y").val() +
				"&w="	+ $("#w").val() + "&h=" + $("#h").val();

				if ($("#w").val() !== "0" && $("#h").val() !== "0")
					apply_send_req(action, apply_btn, values);
			break;

			case "resize":
				values =	"width=" + $("#resize-width").val()	+
							"&height=" + $("#resize-height").val() +
							"&units=" + $("#resize-units").val();

				var width	= parseInt($("#resize-width").val());
				var height	= parseInt($("#resize-height").val());

				if (width != 0 && height != 0)
					apply_send_req(action, apply_btn, values);
			break;

			case "rotate":
				var angle = get_angle();
				values = "angle=" + angle;

				if (angle != false)
					apply_send_req(action, apply_btn, values);
			break;

			case "comment":
				var left	= $("#comment-left-position").val();
				var top		= $("#comment-top-position").val();
				var size	= $("#comment-font-size").val();
				var color	= $("div.colorpicker_hex > input").val();
				var font	= $("#comment-font").val();
				var text	= $("#comment-text").val();
				var opacity	= $("#comment-transparency").val();

				var check = [ left,  top, size, color, text ];
				var errors = check_fields(check);

				if (errors == 0)
				{
					values	=	"left="		+ left +
								"&top="		+ top +
								"&font="	+ font +
								"&size="	+ size +
								"&color="	+ color +
								"&text="	+ $.URLEncode(text) +
								"&opacity="	+ opacity;

					apply_send_req(action, apply_btn, values);
				}
			break;

			case "noise":
				values = "type=" + $("#noise-filter-type").val();
				if ($("#noise-filter-type").val() == "1" || $("#noise-filter-type").val() == "2")
					apply_send_req(action, apply_btn, values);
			break;

			case "hs":
				var h,s;
				h = $("#hs-hue-slider").slider("option", "value");
				s = $("#hs-saturation-slider").slider("option", "value");

				values = "hue=" + h + "&saturation=" + s;
				apply_send_req(action, apply_btn, values);
			break;

			case "bnw":
			case "auto-contrast":
			case "negate":
				apply_send_req(action, apply_btn, null);
			break;

			case "sepia":
			case "swirl":
			case "charcoal":
			case "brightness":
			case "sharpness":
			case "oil-paint":
				var p, v;

				switch (action)
				{
					case "swirl":p = "degrees";break;
					case "charcoal":p = "radius";break;

					default:p = "amount";
				}

				v = $("#filters-with-slider-1-slider").slider("option", "value");
				values = p + "=" + v;

				if (v != null)
					apply_send_req(action, apply_btn, values);
			break;
		}
	});
}

function apply_send_req(action, el, val)
{
	el.attr("disabled", true);
	handle_filter(action, val);
}

function apply_update()
{
	$("#apply-filter-container").show();
}

function bind_slider(slider_el, input_el, max_value)
{
	var slider = $(slider_el).slider({
		min: 0,
		max: max_value,
		slide: function(){
			var v = slider.slider("option", "value");
			$(input_el).val(v);
		},
		change: function(){
			var v = slider.slider("option", "value");
			$(input_el).val(v);
		}
	});

	$(input_el).keyup(function(){
		var v;
		try {v = parseInt($(this).val());}
		catch (ex) {v = 0;}

		if (v > max_value)
			slider.slider("option", "value",  max_value);
		else
			slider.slider("option", "value",  v);
	});

	$(input_el).blur(function(){
		var v;
		try {v = parseInt($(this).val());}
		catch (ex) {v = 0;}

		if (v > max_value)
		{
			slider.slider("option", "value",  max_value);
			$(this).val(max_value);
		}
		else if (v < 0)
		{
			slider.slider("option", "value",  0);
			$(this).val(0);
		}
	});

	return slider;
}

function check_fields(fields)
{
	var errors = 0;

	if (fields.constructor.toString().indexOf("Array") != -1)
	{
		for (var i = 0; i < fields.length; i++)
		{
			if (fields[i] == null)
				errors++;
		}
	}
	else if (typeof(fields) == "string")
	{
		if (fields.length == 0)
			errors++;
	}
	else
	{
		try
		{
			fields = $(fields);

			if (fields.val() == null)
				errors++;
		}
		catch (ex)
		{
			fields = fields.val();

			if (fields == null)
				errors++;
		}
	}

	return errors;
}

function get_angle()
{
	if ($("#rotate-90cc").attr("checked"))
		return -90;
	else if ($("#rotate-90").attr("checked"))
		return 90;
	else if ($("#rotate-180").attr("checked"))
		return 180;
	else
		return false;
}

function init_draft_filter(filter)
{
	reset_filters();
	$("#filters").css("height", "60px");

	if (!crop["loaded"])
		return;

	var apply_holder = $("#apply-filter-container");
	var type = 0;
	var flabel = "";

	switch (filter)
	{
		case "oil-paint":
		case "sharpness":
		case "brightness":
		case "charcoal":
		case "sepia":
		case "swirl":
			type = 1;

			if (filter == "oil-paint")
				flabel = "Oil Paint";
			else if (filter == "sharpness")
				flabel = "Sharpness";
			else if (filter == "brightness")
				flabel = "Brightness";
			else if (filter == "charcoal")
				flabel = "Charcoal";
			else if (filter == "sepia")
				flabel = "Sepia";
			else if (filter == "swirl")
				flabel = "Swirl";

		break;

		case "bnw":
		case "auto-contrast":
		case "negate":
			type = 2;

			if (filter == "bnw")
				flabel = "Black & White";
			else if (filter == "auto-contrast")
				flabel = "Auto Contrast";
			else if (filter == "negate")
				flabel = "Negate";
		break;
	}

	if (type == 1)
	{
		var container = $("#filters-with-slider-1");
		var label = $("#filters-with-slider-1-lbl");

		var s	= "#filters-with-slider-1-slider";
		var sv	= "#filters-with-slider-1-value";

		var default_v = 50;

		switch (filter)
		{
			case "charcoal":default_v = 20;break;
			case "oil-paint":default_v = 0;break;
		}

		var slider = bind_slider(s, sv, 100);
		slider.slider("option", "value", default_v);

		label.html("Amount");
		container.show(100, function(){update_filter_holders();});
		apply_holder.show();
	}
	else if (type == 2)
	{
		$("#filters-with-no-settings").show(100, function(){update_filter_holders();});
		apply_holder.show();
	}
	
	apply(filter);
	$("#filters-label > h3").html(flabel)
	$("#filters-label").fadeIn(100);
}

function init_filter(filter)
{
	$("#filters").css("height", "60px");

	if (settings["block"] || !crop["loaded"])
		return;

	var label;
	
	switch (filter)
	{
		case "crop":
			if (crop["loaded"])
				init_crop();

			label = "Crop";
		break;
		
		case "resize":
			init_resize();
			label = "Resize";
		break;
		
		default:
			reset_filters();
			hide_filter_list();
			hide_crop_api();
			
			var image_filter = null;

			switch (filter)
			{
				case "rotate":label = "Rotate";break;
				case "comment":label = "Comment";break;
				case "noise":label = "Noise Reduction";break;
				case "hs":label = "Hue & Saturation";break;
			}

			switch (filter)
			{
				case "rotate":
				case "comment":
				case "noise":
				case "hs":
					image_filter = $("#" + filter + "-filter");

					if (filter == "rotate")
					{
						$("#rotate-90-gallery").click(function(){
							$("#rotate-90").attr("checked", true);
						});

						$("#rotate-90cc-gallery").click(function(){
							$("#rotate-90cc").attr("checked", true);
						});

						$("#rotate-180-gallery").click(function(){
							$("#rotate-180").attr("checked", true);
						});
					}
					else if (filter == "comment")
						init_color_picker();
					else if (filter == "hs")
					{
						var hue = bind_slider("#hs-hue-slider", "#hs-hue-value", 100);
						hue.slider("option", "value", 50);

						var hue_v = $("#hs-hue-value");
						hue_v.val("50");

						var saturation = bind_slider("#hs-saturation-slider", "#hs-saturation-value", 100);
						saturation.slider("option", "value", 50);

						var saturation_v = $("#hs-saturation-value");
						saturation_v.val("50");
					}

					image_filter.show(100, function(){update_filter_holders();});
					$("#apply-filter-container").show();
				break;
			}
			
			settings["active_filter"] = filter;
			apply(filter);
		break;
	}

	$("#filters-label > h3").html(label)
	$("#filters-label").fadeIn(100);
}

function create_preview(url)
{
	var p = $("#preview");

	p.html("");
	p.css("width", fileinfo["preview_geometry"]["width"] + "px");
	p.css("height", fileinfo["preview_geometry"]["height"] + "px");
	p.css("margin", "0 auto");
	p.mask("");

	var c = $("div.container");

	c.css("height", (c.height() + fileinfo["preview_geometry"]["height"]) + "px");

	$.loadImages([url], function(){
		crop["loaded"] = true;
		p.unmask();
		p.html("<img id=\"cbox\" width=\""+fileinfo["preview_geometry"]["width"]+"\" height=\""+fileinfo["preview_geometry"]["height"]+"\" src=\""+fileinfo["source"]+"\" alt=\"\" />");
		$("#history-holder").show(100, function(){update_filter_holders();})
	});
}

function init_crop()
{
	reset_filters();
	apply("crop");
	hide_filter_list();
	hide_crop_api();

	if (fileinfo["preview_geometry"] != null)
	{
		$("#cbox").attr("width", fileinfo["preview_geometry"]["width"]);
		$("#cbox").attr("height", fileinfo["preview_geometry"]["height"]);
	}

	$("#crop-filter").show();
	$("#apply-filter-container").show(100, function(){update_filter_holders();});

	if (settings["active_filter"] != "crop")
	{
		crop["api"] = $("#cbox").imgAreaSelect({instance: true});

		$("#x, #y, #w, #h").change(function(){
			var x	= $("#x").val();
			var y	= $("#y").val();
			var w	= $("#w").val();
			var h	= $("#h").val();

			crop["api"].setOptions({show: true});
			crop["api"].setSelection(parseInt(x), parseInt(y), (parseInt(x) + parseInt(w)), (parseInt(y) + parseInt(h)));
			crop["api"].update();
		});

		crop["api"].setOptions(
		{
			imageWidth:		fileinfo["geometry"]["width"],
			imageHeight:	fileinfo["geometry"]["height"],
			hide: true,
			disable: false,
			onSelectEnd: function(img, selection){
				$("#x").val(selection["x1"]);
				$("#y").val(selection["y1"]);
				$("#w").val(selection["width"]);
				$("#h").val(selection["height"]);
			}
		});

		$("#crop-filter").show();
		apply_update();
	}

	settings["active_filter"] = "crop";
}

function init_resize()
{
	reset_filters();
	hide_filter_list();
	hide_crop_api();
	
	$("#resize-filter").show();
	$("#apply-filter-container").show(100, function(){update_filter_holders();});

	if (settings["active_filter"] != "resize")
	{
		var preset			= $("#resize-preset");
		var units			= $("#resize-units");
		var aspect_ratio	= fileinfo["geometry"]["width"] / fileinfo["geometry"]["height"];
		var bool_keep_ar	= $("#keep-ar").attr("checked");

		var width	= $("#resize-width");
		var height	= $("#resize-height");

		$("#keep-ar").click(function(){
			bool_keep_ar = !bool_keep_ar;
		});

		width.val(fileinfo["geometry"]["width"]);
		height.val(fileinfo["geometry"]["height"]);

		preset.change(function(){
			units.val(0);
			toggle_preset(preset.val());
		});

		units.change(function(){
			if (units.val() == "2")
			{
				preset.val(0);
				$("#keep-ar").attr("checked", false);
				bool_keep_ar = false;
				
				width.val("100");
				height.val("100");
			}
			else
			{
				$("#keep-ar").attr("checked", true);
				bool_keep_ar = true;

				toggle_preset(preset.val());
			}
		});

		width.keyup(function(){
			if (bool_keep_ar)
			{
				if (units.val() == "2")
					height.val(width.val());
				else if (units.val() == "1")
				{
					var w = parseInt(width.val());
					var x = Math.round((w / aspect_ratio));
					height.val(x);
				}
			}
		});

		height.keyup(function(){
			if (bool_keep_ar)
			{
				if (units.val() == "2")
					width.val(height.val());
				else if (units.val() == "1")
				{
					var h = parseInt(height.val());
					var x = Math.round((h * aspect_ratio));

					width.val(x);
				}
			}
		});
		apply_update();
	}

	settings["active_filter"] = "resize";
	apply("resize");
}

function init_color_picker()
{
	$(document).ready(function(){
		$("#comment-color-selector").ColorPicker({
			color: "#ffffff",

			onShow: function (picker) {
				var i = $(picker);

				if (i.is(":visible"))
					i.slideUp("fast");
				else
					i.slideDown("fast");

				return false;
			},

			onHide: function (picker) {
				$(picker).slideUp("fast");
				return false;
			},
			
			onChange: function (hsb, hex, rgb) {
				$("#comment-color-selector div").css("backgroundColor", "#" + hex);
			}
		});

		handle_input_field($("#comment-left-position"));
		handle_input_field($("#comment-top-position"));
		handle_input_field($("#comment-font-size"));
	});
}

function handle_input_field(input, ch)
{
	if (typeof(input) == "object")
	{
		$(document).ready(function(){

			if (ch == undefined)
			{
				if (input.val() != "")
					ch = input.val();
			}
			
			input.click(function(){
				if (input.val() == ch)
					input.val("");
			});

			input.blur(function(){
				if (!input.val())
					input.val(ch);
			});
		});
	}
}

function hide_crop_api()
{
	if (crop["api"] != null || (settings["active_filter"] == "crop"))
	{
		crop["api"].setOptions({hide: true});
		crop["api"].update();
	}
}

function hide_filter_list()
{
	if ($("#filters-list").is(":visible"))
		$("#filters-list").fadeOut(100);
}

function toggle_preset(preset)
{
	var target = 0;	
	preset = parseInt(preset);

	if (preset == 1)
		target = 400;
	if (preset == 2)
		target = 640;
	if (preset == 3)
		target = 800;
	if (preset == 4)
		target = 1024;
	if (preset == 5)
		target = 1600;

	var new_geometry = get_new_geometry(target);

	if (preset > 0)
	{
		$("#resize-width").val(new_geometry["width"]);
		$("#resize-height").val(new_geometry["height"]);
	}
	else
	{
		$("#resize-width").val(fileinfo["geometry"]["width"]);
		$("#resize-height").val(fileinfo["geometry"]["height"]);
	}
}

function get_new_geometry(target, input)
{
	var geometry = (input != undefined ? input : fileinfo["geometry"]);

	if (geometry != null || geometry != undefined)
	{
		var aspect_ratio = geometry["width"] / geometry["height"];
		var new_geometry = new Array();

		if (aspect_ratio >= 1)
		{
			new_geometry["width"] = target;
			new_geometry["height"] = Math.round((new_geometry["width"] / aspect_ratio));
		}
		else if (aspect_ratio < 1)
		{
			new_geometry["height"] = target;
			new_geometry["width"] = Math.round((new_geometry["height"] * aspect_ratio));
		}

		return new_geometry;
	}
	return false;
}

function reset_filters()
{
	try
	{
		crop["api"].setOptions({disable: true});
		crop["api"].update();
		
		$("#filters-with-slider-1-slider").slider("destroy");
	} catch (ex) {  }

	$("#apply-filter-container").hide();
	$("#apply-filter-btn").unbind("click");

	settings["active_filter"] = null;

	$("#filters-container > div").each(function(){
		$(this).hide();
	});
}

function reset_history(el)
{
	var html =	"<div style=\"margin: 0pt 20px auto 0;\" class=\"button\">" +
				"<div class=\"left\"></div>" +
				"<div class=\"center\">" +
				"<input type=\"button\" onclick=\"javascript: void(0);\" value=\"Undo\" disabled />" +
				"</div>" +
				"<div class=\"right\"></div>" +
				"</div>" + 
				"<div style=\"margin: 0pt auto;\" class=\"button\">" +
				"<div class=\"left\"></div>" +
				"<div class=\"center\">" +
				"<input type=\"button\" onclick=\"javascript: void(0);\" value=\"Redo\" disabled />" + 
				"</div>" +
				"<div class=\"right\"></div>" +
				"</div>";

	$(el).html(html);
}

function reset_filter_anime(anime)
{
	try
	{
		anime["apply"].unmask();
		anime["apply_btn"].val("Apply");
		anime["apply_btn"].attr("disabled", false);
	}
	catch(ex) {}
}

function update_filter_holders()
{
	var filter_height = $("div.slot-main").height();
	$("div.container").css("height", filter_height + "px");
}

function update_fileinfo(filename, type, size, geometry)
{
	var html = "<div style=\"text-align: left; margin: 0pt auto; width: 180px;\">";

	if (filename !== undefined || filename !== null)
		html += "Name: " + filename + "<br />";

	if (type !== undefined || type !== null)
		html += "Type: " + type + "<br />";

	if (size !== undefined || size !== null)
		html += "Size: " + size + "<br />";

	if (geometry !== undefined || geometry !== null)
		html += "Dimensions: " + geometry["width"] + "x" + geometry["height"];

	html += "</div>";

	$("#fileinfo").html(html);
}

$.extend({URLEncode:function(c){var o='';var x=0;c=c.toString();var r=/(^[a-zA-Z0-9_.]*)/;
  while(x<c.length){var m=r.exec(c.substr(x));
    if(m!=null && m.length>1 && m[1]!=''){o+=m[1];x+=m[1].length;
    }else{if(c[x]==' ')o+='+';else{var d=c.charCodeAt(x);var h=d.toString(16);
    o+='%'+(h.length<2?'0':'')+h.toUpperCase();}x++;}}return o;},
URLDecode:function(s){var o=s;var binVal,t;var r=/(%[^%]{2})/;
  while((m=r.exec(o))!=null && m.length>1 && m[1]!=''){b=parseInt(m[1].substr(1),16);
  t=String.fromCharCode(b);o=o.replace(m[1],t);}return o;}
});
