(function()
{
	function readCookie(name) {
		var nameEQ = name + "=";
		var ca = document.cookie.split(';');
		for(var i=0;i < ca.length;i++) {
			var c = ca[i];
			while (c.charAt(0)==' ') c = c.substring(1,c.length);
			if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
		}
		return null;
	}
	
	request =
	{
		path: directory+"/ajax.php",
		requests: [],
		areasOptions: {},
		area_id_count: 0,
		
		get: function(data, callback)
		{
			if(request.requests.length > 0)
			{
				request.requests.push([data, callback]);
			}
			else
			{
				request.ajax(data, callback);
			}
		},
		
		ajax: function(data, callback)
		{
			//console.log(data);
			
			$.get(request.path, { data: JSON.stringify(data) },
			function(data)
			{
				//console.log(data);
				
				callback.call(this, data);
				
				if(data.dynamic)
				{
					dynamic.dynamic(data.dynamic);
				}
				
				if(request.requests.length > 0)
				{
					var next = request.requests.pop();
					request.ajax(next[0], next[1]);
				}
				
				if(xinha_reinit)
				{
					xinha_reinit();
				}
			})
			.error(
			function(data)
			{
				console.log(data.responseText);
			});
		}
	}

	
	dynamic =
	{
		directory: directory,
		
		initiate: function(area_id, options)
		{
			//var scripts = document.getElementsByTagName( "script" );
			//var thisScriptTag = scripts[ scripts.length - 1 ];

			request.areasOptions[area_id] = options;

			if(area_id > request.area_id_count)
			{
				request.area_id_count = area_id;
			}
			
			$(".dynamic.container.outer.area-id-"+area_id + "," + ".dynamic.item.new.area-id-"+area_id)
			.data("dynamic", area_id)
			.click(dynamic.click);
			
			//area_id++;
		},
		
		dynamic: function(data)
		{
			for(i in data)
			{
				var x = data[i];
				if(x["type"] == "html")
				{
					$(x["selector"])[x["type"]](x["template"]);
				}
			}
		},
		
		click: function(event)
		{			
			var $container = $(this);
			var $trigger = $(event.target);
			
			if($trigger.is(".dynamic.button"))
			{
				event.preventDefault();
				event.stopPropagation();
				
				var name = $trigger.attr("name");
				
				switch(name)
				{
					case "delete":
						dynamic["ajax"]["remove"]($container, $trigger);
					break;
					case "update":
					case "get":
					case "edit":
					case "add":
						dynamic["ajax"][name]($container, $trigger);
					break;
					case "clear":
						var area_id = $container.data("dynamic");
						
						$container.find("form.dynamic.area-id-"+area_id).each(function(index) 
						{
							$(this)[0].reset();
						});
					break;
				}
			}
		},
		
		dialog: function(message, type)
		{
			var $dialog = $( "#dialog" );
			
			if(!type)
			{
				type = "Alert";
			}
			
			if( $dialog.length > 0 )
			{
				$dialog
				.html(message)
				.dialog({ title: type })
				.dialog( "open" );
			}
			else
			{
				$('body')
				.append(
				'<div id="dialog" title="'+type+'">'+message+'</div>'
				);
				
				$( "#dialog" ).dialog({
					modal: true,
					buttons: {
						Ok: function() {
							$( this ).dialog( "close" );
						}
					}
				});
			}
		},
		
		module:
		{
			storeLocator:
			{
				data: {},
				
				ajax:
				{
					get_all: function(area_id)
					{
						var $container = $(".dynamic.container.inner.area-id-"+area_id);
						var $map = $("#"+area_id+"-map");
						
						var data =
						{
							"action": "get all",
							"options": request.areasOptions,
							"area id count": request.area_id_count,
							"area id": area_id,
							"item id": null
						};
						
						request.get(data,
						function(data)
						{	
							if(typeof data === "object" && "template" in data)
							{
								$map
								.gmap3({action:'clear'});
								
								$container
								.empty()
								.html(data["template"]);
							}
						});
					},
					
					locate: function(area_id, lat, lng, radius)
					{
						var $container = $(".dynamic.container.inner.area-id-"+area_id);
						var $map = $("#"+area_id+"-map");
						
						var data =
						{
							"action": "locate",
							"options": request.areasOptions,
							"area id count": request.area_id_count,
							"area id": area_id,
							"lat": lat,
							"lng": lng,
							"radius": radius
						};
						
						request.get(data, 
						function (data)
						{
							if(typeof data === "object")
							{
								var options = data["options"];
								
								for(area_id in options)
								{
									var area_options = options[area_id];
									
									if(area_options["message"])
									{
										dynamic.dialog(area_options["message"]);
									}
								}
								
								if("template" in data)
								{
									$map
									.gmap3({action:'clear'});
									
									$container
									.empty()
									.html(data["template"]);
								}
							}
						});
					}
				}
			}
		},
		
		ajax:
		{
			update: function($container, $trigger)
			{
				var area_id = $container.data("dynamic");
				var $item = $trigger.closest(".dynamic.item.outer.area-id-"+area_id);
				var item_id = $item.attr("id").replace("id-"+area_id+"-", "");
				var $form = $item.find("form.dynamic.area-id-"+area_id);
				
				var item = $form.submit(function(){return false;}).submit().serializeObject();
				
				if(item["file_upload"] == "")
				{
					delete item["file_upload"];
				}
				
				var data =
				{
					"action": "update",
					"options": request.areasOptions,
					"area id count": request.area_id_count,
					"area id": area_id,
					"item id": item_id,
					"item": item
				};
				
				var onComplete = function(data)
				{
					if(typeof data === "object" && "options" in data)
					{
						$container.sortable( "enable" );
						
						var options = data["options"];
						
						for(area_id_x in options)
						{
							var area_options = options[area_id_x];
							
							if(area_options["template modifier"] == "item")
							{
								$(".dynamic.container.inner.area-id-" + area_id_x)
								.append(area_options["template"])
								.filter(".sortable")
								.sortable( "refresh" );
							}
							else if(area_options["template modifier"] == "update")
							{
								$(".dynamic.item.inner.area-id-"+area_id_x+".item-id-"+item_id)
								.html(area_options["template"]);
							}
							else if(area_options["delete"])
							{
								$("#id-" + area_id_x + "-" + item_id)
								.remove();	
							}
						}
						
						 $("a[rel^='prettyPhoto']").prettyPhoto();
					}
				};
				
				if("file_upload" in item)
				{
					var $file_upload = $container
					.find('#file_upload_'+area_id+'-'+item_id);
					
					$file_upload
					.uploadifySettings("scriptData", {"data" : JSON.stringify(data), "admin": readCookie("admin")}, true);
					
					$file_upload
					.uploadifySettings("script", request.path);
					
					$file_upload
					.uploadifySettings("onComplete", function(event, ID, fileObj, response, data){
						onComplete(JSON.parse(response));
					});
					
					$file_upload
					.uploadifyUpload();
				}
				else
				{
					request.get(data, onComplete);
				}
			},
			
			get: function($container, $trigger)
			{
				var area_id = $container.data("dynamic");
				var $item = $trigger.closest(".dynamic.item.outer.area-id-"+area_id);
				var item_id = $item.attr("id").replace("id-"+area_id+"-", "");
					
				var data =
				{
					"action": "get",
					"options": request.areasOptions,
					"area id count": request.area_id_count,
					"area id": area_id,
					"item id": item_id
				};
				
				request.get(data,
				function(data)
				{	
					if(typeof data === "object" && "template" in data)
					{
						$container.sortable( "enable" );
						
						$(".dynamic.item.inner.area-id-"+area_id+".item-id-"+item_id)
						.html(data["template"][item_id]);
						
						 $("a[rel^='prettyPhoto']").prettyPhoto();
					}
				});
			},
			
			remove: function($container, $trigger)
			{
				if($trigger.css("opacity") == 1)
				{
					var area_id = $container.data("dynamic");
					var item_id = $trigger.closest(".dynamic.item.outer").attr("id").replace("id-"+area_id+"-", "");
	
					var data =
					{
						"action": "delete",
						"options": request.areasOptions,
						"area id count": request.area_id_count,
						"area id": area_id,
						"item id": item_id
					};
					
					request.get(data,
					function(data)
					{	
						if(typeof data === "object" && "options" in data)
						{
							var options = data["options"];
							
							for(area_id in options)
							{
								$("#id-" + area_id + "-" + item_id)
								.remove();
							}
							
							 $("a[rel^='prettyPhoto']").prettyPhoto();
						}
					});
				}
				else
				{
					$trigger.fadeTo("fast", 1);
				}
			},
			
			edit: function($container, $trigger)
			{
				var area_id = $container.data("dynamic");
				var $item = $trigger.closest(".dynamic.item.outer.area-id-"+area_id);
				var item_id = $item.attr("id").replace("id-"+area_id+"-", "");
					
				var data =
				{
					"action": "edit",
					"options": request.areasOptions,
					"area id count": request.area_id_count,
					"area id": area_id,
					"item id": item_id
				};
				
				request.get(data,
				function(data)
				{
					if(typeof data === "object" && "template" in data)
					{
						$container.sortable( "disable" );
						
						$(".dynamic.item.inner.area-id-"+area_id+".item-id-"+item_id)
						.html(data["template"])
						.find(".datepicker")
						.AnyTime_noPicker()
						.AnyTime_picker
						(
							{
								format: "%Y-%m-00",
								hideInput: true,
								placement: "inline"
							}
						);
						
						$("a[rel^='prettyPhoto']").prettyPhoto();
					}
				});
			},
			
			add: function($container, $trigger)
			{
				var area_id = $container.data("dynamic");
				var $form = $container.find("form.dynamic.area-id-"+area_id);
				
				var item = $form.submit(function(){return false;}).submit().serializeObject();

				var data =
				{
					"action": "add",
					"options": request.areasOptions,
					"area id count": request.area_id_count,
					"area id": area_id,
					"item": item
				};
				
				var onComplete = function(data)
				{
					if(typeof data === "object" && "options" in data)
					{
						var options = data["options"];
						
						for(area_id in options)
						{
							var area_options = options[area_id];
							
							if(area_options["message"])
							{
								dynamic.dialog(area_options["message"]);
							}
							
							if(area_options["template"])
							{							
								var $containerX = $(".dynamic.container.inner.area-id-" + area_id);
								
								$containerX
								.append(area_options["template"])
								.filter(".sortable")
								.sortable( "refresh" );
							}
						}
									
						$form.each(function()
						{
							$(this)[0].reset();
						});
						
						 $("a[rel^='prettyPhoto']").prettyPhoto();
					}
				}
				
				if("file_upload" in item)
				{
					var $file_upload = $container
					.find('#file_upload_'+area_id+'-new');
					
					$file_upload
					.uploadifySettings("scriptData", {"data" : JSON.stringify(data), "admin": readCookie("admin")}, true);
					
					$file_upload
					.uploadifySettings("script", request.path);
					
					//console.log(data);
					$file_upload
					.uploadifySettings("onComplete", function(event, ID, fileObj, response, data){
						//console.log(response);
						onComplete(JSON.parse(response));
					});
					
					$file_upload
					.uploadifyUpload();
				}
				else
				{
					request.get(data, onComplete);
				}
			},
			
			sort: function(event, ui)
			{
				var $container = $(this);
				var area_id = $container.data("dynamic");
				var $item = $(ui.item[0]);
				var item_id = $item.attr("id").replace("id-"+area_id+"-", "");
				var position = $item.index();
				
				var data =
				{
					"action": "sort",
					"options": request.areasOptions,
					"area id count": request.area_id_count,
					"area id": area_id,
					"item id": item_id,
					"position": position
				};
				
				request.get(data,
				function(data)
				{
					if(typeof data === "object" && "options" in data)
					{
						var $area_container, $items;
						
						for(area_id in data.options)
						{
							$("#id-" + area_id + "-" + item_id)
							.insertBefore($(".dynamic.item.outer.area-id-" + area_id).eq(position));
						}
					}
				});
			}
		}
	};
})();
	
$(function() 
{
	if(accessLevel == 1)
	{
		$( ".dynamic.container.inner.sortable" ).sortable(
		{
			items: ".dynamic.item.outer",
			update: dynamic.ajax.sort
		});
		
		/*
		$( ".datepicker" )
		.datepicker({ dateFormat: "yy-mm-dd" })
		.keydown(function() { return false; });
		*/
		
		$(".datepicker")
		.AnyTime_picker
		(
			{
				format: "%Y-%m-00",
				hideInput: true,
				placement: "inline"
			}
		);
	}
	
	 $("a[rel^='prettyPhoto']").prettyPhoto();
/*	
	function deleteButtonReset()
	{
		$(this).fadeTo("fast", 0.5);
	}
	
	$(".dynamic.item .buttons img")
	.click(buttons)
	.filter(".delete")
	.mouseleave(deleteButtonReset);
*/
});
