//dojo.require("dojo.MyApp.Tools");
dojo.require("dojo.MyApp.Audioplayer");

dojo.provide("dojo.MyApp.Main");
dojo.declare("dojo.MyApp.Main", null,
{
	tools:new dojo.MyApp.Tools(),
	structure:null,
	activeTab:null,
	defaultTab:"Audiotrack",
	audioplayer:new dojo.MyApp.Audioplayer(),
	constructor:function(full)
	{
		if (full)
		{
			//dojo.require("dojo.MyApp.Tabs.Audiotrack");
			//dojo.require("dojo.MyApp.Tabs.Group");
			//dojo.require("dojo.MyApp.Tabs.CG");
			//dojo.require("dojo.MyApp.DataTypes.Audiotrack");
			//dojo.require("dojo.MyApp.DataTypes.Group");
			//dojo.require("dojo.MyApp.DataTypes.AudiotrackGroup");
			
			this.loadStructure();
		}
		
		dojo.addOnLoad(function()
		{
			
		});
	},
	loadStructure:function()
	{
		this.ajax({handleType:"json"}, "/clientStructure/get/", null, this.makeStructure);
	},
	makeStructure:function(data)
	{
		this.structure = data;
		
		if (main.activeTab == null)
		{
			main.tab(main.defaultTab);
		}
		else
		{
			main.tab(main.activeTab.name);
		}
	},
	reloadStructure:function()
	{
		this.ajax({handleType:"json"}, "/clientStructure/get/", null, this.refreshStructure);
	},
	refreshStructure:function(data)
	{
		main.structure = data;
		
		main.activeTab.refreshContent();
		main.activeTab.viewList();
		this.refreshItemCtnrHeight();
	},
	ajax:function(params, url, data, onResponse)
	{	
		if (typeof(params) == "object")
		{
			var handleType = params.handleType;
		}
		else
		{
			var handleType = "json";
		}
		
		dojo.xhrGet(
		{
			url:url,
			content:data,
			handleAs:handleType,
			preventCache:true,
			load:function(responseData)
			{
				onResponse.call(main, responseData);
			}
		});
	},
	manage:function(className, id, data)
	{	
		var obj = eval("new dojo.MyApp.DataTypes." + className + "(" + id + ")");
		
		if (data != null && data != undefined)
		{
			
			var properties = [];

			if (data instanceof Array)
			{
				for (var i = 0; i < data.length; i++)
				{
					if (this.tools.checkFormValue(data[i], className))
					{
						var propName = data[i].id;
						
						if (data[i].type == "list")
						{
							var propValues = $("#input_" + className.toLowerCase() + "_" + data[i].id).val();
							if (propValues != null)
							{
								var propValue = propValues.join(";");
							}
							
							var obj = new dojo.MyApp.DataTypes.AudiotrackGroup();
							properties.push({name:"id_" + className.toLowerCase(), value:id});
						}
						else
						{	
							var propValue = dojo.byId("input_" + className.toLowerCase() + "_" + data[i].id).value;
						}
						
						dojo.byId("input_" + className.toLowerCase() + "_" + data[i].id).value = " ";
						
						properties.push({name:propName, value:propValue});
					}
					else
					{
						return false;
					}
				}
			}				
			else
			{
				if (this.tools.checkFormValue(data, className))
				{
					if (data.type == "list")
					{
						
						var propValues = $("#input_" + className.toLowerCase() + "_" + data.id).val();
						
						if (propValues != null)
						{
							var propValue = propValues.join(";");
						}
						else
						{
							var propValue = "";
						}
						
						var obj = new dojo.MyApp.DataTypes.AudiotrackGroup();
						properties.push({name:"id_" + className.toLowerCase(), value:id});
					}
					else
					{	
						var propValue = dojo.byId("input_" + className.toLowerCase() + "_" + data.id).value;
					}
					
					dojo.byId("input_" + className.toLowerCase() + "_" + data.id).value = " ";
					properties.push({name:data.id, value:propValue});
				}
				else
				{
					return false;
				}
			}
			
			obj.set(properties);
			obj.save();
		}
		else
		{
			obj.remove();
		}	
	},
	tab:function(name)
	{
		if (this.activeTab != null)
		{
			this.activeTab.close();
		}

		this.activeTab = eval("new dojo.MyApp.Tabs." + name);
		this.activeTab.view();
		
		this.refreshItemCtnrHeight();
		
		setTimeout(function()
		{
			var mainHeight = $("#main").height();
			$(".main_vertical_bgd").height(mainHeight);
		}, 2000);
	},
	refreshItemCtnrHeight:function()
	{
		var ctnrs = $(".item_ctnr");
		
		dojo.forEach(ctnrs, function(ctnr, i)
		{
			var divs = $(ctnr).children("div");
			
			var ctnrHeight = 0;
			
			dojo.forEach(divs, function(div, i)
			{
				ctnrHeight = ($(div).height() > ctnrHeight) ? $(div).height() : ctnrHeight;
			});
			
			dojo.forEach(divs, function(div, i)
			{
				$(div).height(ctnrHeight);
			});
		});
	},
	editField:function(id, property, type, event)
	{
		var dataType = {};
		dataType.name  = this.activeTab.name.toLowerCase();
		dataType.alias =  this.activeTab.alias;
		
		var dataObj = dojo.getObject("main.structure." + dataType.name);
		
		var data = {};
		
		if (type == "text")
		{
			data.text = eval("dataObj[id]." + property.name);
		}
		else
		{
			data.list = eval("dataObj[id]." + property.name);
		}
		
		data.id = id;
		
		this.showEditWindow(dataType, property, data, type, event);
	},
	showEditWindow:function(dataType, property, data, type, event)
	{
		main.activeTab.closeAddForm();
		
		var event = this.tools.makeEvent(event);
		
		main.showMask();
		
		if (type == "text")
		{	
			var editWindow = dojo.create("div", {"id":"edit_window"});
			dojo.place(editWindow, dojo.body());
			
			$("#edit_window").css("top", (event.pageY - 100) + "px");
			
			var editWindowTitle = dojo.create("div", {"id":"edit_window_title", innerHTML:"<h2>" + dataType.alias + "->" + property.alias + "</h2>"});
			dojo.place(editWindowTitle, editWindow);
			
			var editWindowBody = dojo.create("div", {"id":"edit_window_body"});
			dojo.place(editWindowBody, editWindow);
			
			var editWindowExitButton = dojo.create("div", {"id":"edit_window_button_exit", innerHTML:"X"});
			dojo.place(editWindowExitButton, editWindow);
			
			$("#edit_window_button_exit").bind("click", function()
			{
				main.closeEditWindow();
			});
			
			var editWindowBodyTextarea = dojo.create("textarea", {"id":"input_" + dataType.name + "_" + property.name, innerHTML:data.text, cols:40, rows:5});
			dojo.place(editWindowBodyTextarea, editWindowBody);
			
			var editWindowFooter = dojo.create("div", {"id":"edit_window_footer"});
			dojo.place(editWindowFooter, editWindow);
			
			var editWindowOkButton = dojo.create("div", {"id":"edit_window_button_ok", innerHTML:"OK"})
			dojo.place(editWindowOkButton, editWindowFooter);
			
			$("#edit_window_button_ok").bind("click", function()
			{
				main.manage(main.activeTab.name, data.id, {"id": property.name});
				main.closeEditWindow();
				main.activeTab.viewAddForm();
			});
		}
		else if (type == "list-list")
		{
			//var editObj     = dojo.getObject("main.structure." + dataType.name);
			var propertyObj = dojo.getObject("main.structure." + property.name);
			//var editObjProperty = eval("editObj[data.id]." + property.name);
			
			var editWindow = dojo.create("div", {"id":"edit_window"});
			dojo.place(editWindow, dojo.body());
			
			$("#edit_window").css("top", (event.pageY - 100) + "px");
			$("#edit_window").css("width", "800px");
			$("#edit_window").css("margin-left", "-400px");
			
			var editWindowTitle = dojo.create("div", {"id":"edit_window_title", innerHTML:"<h2>" + dataType.alias + "->" + property.alias + "</h2>"});
			dojo.place(editWindowTitle, editWindow);
			
			var editWindowBody = dojo.create("div", {"id":"edit_window_body"});
			dojo.place(editWindowBody, editWindow);
			
			var editWindowExitButton = dojo.create("div", {"id":"edit_window_button_exit", innerHTML:"X"});
			dojo.place(editWindowExitButton, editWindow);
			
			$("#edit_window_button_exit").bind("click", function()
			{
				main.closeEditWindow();
			});
			
			var editWindowBodyListDiv = dojo.create("div", {"style":{"float":"left"}, innerHTML:"Добавленные<br/>"});
			dojo.place(editWindowBodyListDiv, editWindowBody);
			
			var editWindowBodyList = dojo.create("select", {"id":"input_" + dataType.name + "_" + property.name, "multiple":"multiple", "style":{"width":"380px", "margin":"3px"}});
			dojo.place(editWindowBodyList, editWindowBodyListDiv);
			
			var br = dojo.create("br");
			dojo.place(br, editWindowBodyListDiv);
			
			var editWindowBodyListDelButton = dojo.create("div", {"id":"edit_window_body_list_del_button", innerHTML:"->", "class":"edit_window_manage_button"});
			dojo.place(editWindowBodyListDelButton, editWindowBodyListDiv);
			
			$("#edit_window_body_list_del_button").bind("click", function()
			{
				$("#input_" + dataType.name + "_" + property.name + "_add").append($("#input_" + dataType.name + "_" + property.name).children("option:selected"));
			});
			
			for (var i in data.list)
			{	
				var option = dojo.create("option", {"value":data.list[i], innerHTML:eval("propertyObj[data.list[i]]." + property.infoProp)})
				dojo.place(option, editWindowBodyList);
			}
			
			var editWindowBodyListAddDiv = dojo.create("div", {"style":{"float":"left"}, innerHTML:"Доступные<br/>"});
			dojo.place(editWindowBodyListAddDiv, editWindowBody);
			
			var editWindowBodyListAdd = dojo.create("select", {"id":"input_" + dataType.name + "_" + property.name + "_add", "multiple":"multiple", "style":{"width":"380px", "margin":"3px"}});
			dojo.place(editWindowBodyListAdd, editWindowBodyListAddDiv);
			
			var br = dojo.create("br");
			dojo.place(br, editWindowBodyListAddDiv);
			
			var editWindowBodyListAddDelButton = dojo.create("div", {"id":"edit_window_body_list_add_del_button", innerHTML:"<-", "class":"edit_window_manage_button"})
			dojo.place(editWindowBodyListAddDelButton, editWindowBodyListAddDiv);
			
			$("#edit_window_body_list_add_del_button").bind("click", function()
			{
				$("#input_" + dataType.name + "_" + property.name).append($("#input_" + dataType.name + "_" + property.name + "_add").children("option:selected"));
			});
			
			for (var k in propertyObj)
			{
				var flag = 1;
				
				dojo.forEach(data.list, function(dataItem, j)
				{
					if (propertyObj[k].id == dataItem)
					{
						flag = 0;
					}
				});
				
				if (flag)
				{
					var option = dojo.create("option", {"value":propertyObj[k].id, innerHTML:eval("propertyObj[k]." + property.infoProp)});
					dojo.place(option, editWindowBodyListAdd);
				}
			}
			
			var clearer = dojo.create("div", {"class":"clearer"}); 
			dojo.place(clearer, editWindow);
			
			var editWindowFooter = dojo.create("div", {"id":"edit_window_footer"});
			dojo.place(editWindowFooter, editWindow);
			
			var editWindowOkButton = dojo.create("div", {"id":"edit_window_button_ok", innerHTML:"OK"})
			dojo.place(editWindowOkButton, editWindowFooter);
			
			$("#edit_window_button_ok").bind("click", function()
			{
				$("#input_" + dataType.name + "_" + property.name).children("option").attr("selected", "true");
				main.manage(main.activeTab.name, data.id, {"id": property.name, type:"list"});
				main.closeEditWindow();
			});
		}
	},
	closeEditWindow:function()
	{
		dojo.destroy("edit_window");
		main.hideMask();
		main.activeTab.viewAddForm();
	},
	showMask:function()
	{
		var mask = dojo.create("div", {"id":"mask"});
		dojo.place(mask, dojo.body());
		
		var mainHeight     = $("#main").height();
		var mainMenuHeight = $("#main_menu").height();
		
		$("#mask").height(mainHeight + mainMenuHeight + 50);
	},
	hideMask:function()
	{
		dojo.destroy("mask");
	}
});
