var box = {
	knowledge : {
		edit : function(event) {
			id = event.data.intId;
			jQuery('#draggable_' + id + '_view').hide();
			jQuery('#draggable_' + id + '_edit').show();
			jQuery('#button_edit_' + id ).hide();
			jQuery('#button_delete_' + id ).hide();
			event.preventDefault();
		}
	},
	
	contextmenu : {
		init : function(target, context_menu_id, type) {
			jQuery(target).contextMenu(context_menu_id, {
				bindings: {
					'add-knowledge' : function(t) {
						var strParentDOMId = t.id.replace(/_view$/g, '');
						var intId = jQuery('#' + strParentDOMId).attr('node_id');
//						alert(intId + ' ' + strParentDOMId);
						if ('application' == type) {
							box.application.insert(gt.gettext("Neuer Eintrag"), strParentDOMId, intId);
						}
						else if ('technology' == type) {
							box.technology.insert(gt.gettext("Neuer Eintrag"), strParentDOMId, intId);
						}
					}	
				}
			});
		
		}
	},
	/**
	 * opens a box with further user interaction
	 * @param {} type type of box
	 * @param {} target dom-target
	 */
	open : function(type, target) {
		util.hide_workingspace();
		
		if ('application' == type) {
			jQuery('#type-header').html(gt.gettext("Anwendungsorientiertes Wissen zu eigenem Profil hinzufügen"));
		}
		else if ('technology' == type) {
			jQuery('#type-header').html(gt.gettext("Technologischorientiertes Wissen zu eigenem Profil hinzufügen"));
		}
		
		var dom_id = '#' + target + '-box';
		
		jQuery('#' + target).val('');
		
		jQuery(dom_id).css({
			'position' : 'absolute',
			'z-index' : '9999',
			'width' : '600px'
		});
		
		jQuery(dom_id).appendTo('body');
		
		jQuery(dom_id).fadeIn('normal');		
		
		// position of the event-editor
		center_div = target + '-box'; // defined global

		jQuery(window).bind('scroll', util.position);				
		util.position();
	
		
	},
	send : function (target) {
		var send_text = jQuery.trim(jQuery('#' + target).val());
		
		if (typeof send_text != 'undefined' && send_text.length > 0) {
			jQuery.post(doc_root + 'includes/ajax/box.send.' + target + '.php', {
				'request' : send_text
			}, function(data, status) {
				util.close(target + '-box');
				if (data) {
					alert(gt.gettext("Nachricht wurde erfolgreich übermittelt"));
				}
				else {
					alert(gt.gettext("Nachricht konnte leider nicht gesendet werden. Bitte versuchen Sie es später erneut."));
				}
			}, 'json')
		}
		else {
			alert(gt.gettext("bitte füllen Sie das Feld aus"));
		}
	},
	application:	{
		/**
		 * Updates a application
		 * @param {} intId
		 * @param {} intRight
		 * @param {} unique_dbid
		 */
		update: function(intId, intRight, unique_dbid)	{
			var strHeadline = jQuery('#' + intRight).val();
			var strHeadlineEn = jQuery('#' + intRight + '_en').val(); //englisch
			var strWikipediaUrl = jQuery('#draggable_'+unique_dbid+'_wiki-url').val();
			var strWikipediaEnUrl = jQuery('#draggable_'+unique_dbid+'_wiki-url-en').val();
			
			jQuery('#draggable_' + unique_dbid + '_view').text(strHeadline);
			jQuery('#draggable_' + unique_dbid + '_view_en').text(strHeadlineEn);
			jQuery('#draggable_' + unique_dbid + '_wiki-url').val(strWikipediaUrl);
			jQuery('#draggable_' + unique_dbid + '_wiki-url-en').val(strWikipediaEnUrl);
			
			jQuery.post(doc_root + 'includes/ajax/box.application.update.php', {
				intRight: intId,
				strHeadline: strHeadline,
				strHeadlineEn: strHeadlineEn,
				strWikipediaUrl: strWikipediaUrl,
				strWikipediaEnUrl: strWikipediaEnUrl,
				intId: unique_dbid
			}, function (data, status) { 
				jQuery('#draggable_' + unique_dbid + '_edit').hide();
				jQuery('#draggable_' + unique_dbid + '_view').show();
				jQuery('#button_edit_' + unique_dbid ).show();
				jQuery('#button_delete_' + unique_dbid ).show();
			}, "json");
			
		}, // end update
		
		/**
		 * deletes a node from tree whith all its children
		 * 
		 * @param {INT} intLeft 
		 * @param {INT} intRight
		 * @param {INT} intId - unique id (autoincrement in db)
		 */
		Delete: function(intLeft, intRight, intId)	{
			var blnDelete = confirm(gt.gettext("Wollen Sie dieses Element und alle Unterelemente wirklich löschen?"));
			if(blnDelete)	{
				jQuery.post(doc_root + 'includes/ajax/box.application.delete.php', {
					intRight: intRight,
					intLeft: intLeft,
					intId: intId
				}, function (data, status) { 
//					alert('#draggable_' + intRight +' .remove');
					jQuery('#draggable_' + intId).remove();
					//if (jQuery('#child-of-'))
				}, "json");				

			}
			
		}, // end delete	
		/**
		 * Inserts a empty node in to the tree of the 
		 * element with the passed intId. 
		 * @param {} strHeadline
		 * @param {} intRight
		 * @param {} intId
		 */
		insert: function(strHeadline, intRight, intId)	{
			jQuery.post(doc_root + 'includes/ajax/box.application.insert.php', {
				strHeadline: strHeadline,
				intRight: intRight,
				intId: intId
			}, function (data, status) { 
				
				
				// check if sub ul exists
				if (jQuery('#child-of-' + intId).length > 0) {
					var branches = $(data.node_html).appendTo('#child-of-' + intId);
				}
				else {
					// wrap in ul
					var node  = 
						'<ul id="child-of-' + intId + '">' +
							data.node_html + 
							'</ul>' ;
					var branches = $(node).appendTo('#draggable_' + intId);
					jQuery('#draggable_' + intId + ' > span').removeClass('file').addClass('open').addClass('folder');
				}
				
				jQuery('#application-tree').treeview({
					add: branches
				});
				
				box.contextmenu.init('.knowledge-tree', 'context-knowledge-tree', 'application');
				
			}, "json");			
			
		}, // end insert		
		
		/**
		 * 
		 * @param {} tree_type
		 * @param {} intUserId
		 */ 
		get: function(tree_type, intUserId)	{
			util.hide_workingspace();
			var title = '';
			
			if ('application' == tree_type) {
				title = gt.gettext("Anwendungsorientiertes Wissen");
			} 
			else if ('technology' == tree_type) {
				title = gt.gettext("Technologieorientiertes Wissen");
			} 

			jQuery('#objBox h1#objBoxTitle').html(title);
			jQuery('#objBoxContent').html('<img src="' + doc_root + 'misc/icons/loader.gif" style="padding-top:10%;padding-left:47%;padding-right:47%;"/><div style="padding:42%;padding-top:0;" >' + gt.gettext("Lade...") + '</div>');

			
			center_div = 'objBox'; // defined global
			jQuery('#' + center_div).css({
				'position' : 'absolute',
				'height' : '400px',
				'z-index' : '99999'					
			});		
			
			jQuery('#' + center_div).appendTo('body');
			jQuery('#' + center_div).fadeIn(function() {
	
				jQuery.post(doc_root + "includes/ajax/user.box." + tree_type + ".get.php", {
					intUserId : intUserId
				}, function(data, status) {
					// show user knowledge here
				}, 'json');
			});
			
			jQuery(window).bind('scroll', util.position);
			util.position();
		}, // end get
		
		position: function()	{
		
			var objBox = document.getElementById('objBox');
		
			if(parseInt(navigator.appVersion) > 3) {
				if(navigator.appName == "Netscape") {
				  var intScreenWidth = window.innerWidth;
				  var intScreenHeight = window.innerHeight;
			 	}
				if (navigator.appName.indexOf("Microsoft")!=-1) {
					var intScreenWidth = document.body.offsetWidth;
					var intScreenHeight = document.body.offsetHeight;
				}
			}
			
			var scrollPos;
			if (typeof window.pageYOffset != 'undefined') {
				scrollPos = window.pageYOffset;
			}
			else if (typeof document.compatMode != 'undefined' && document.compatMode != 'BackCompat') {
				scrollPos = document.documentElement.scrollTop;
			}
			else if (typeof document.body != 'undefined') {
				scrollPos = document.body.scrollTop;
			}
			
			var intLeft = (intScreenWidth - parseInt(objBox.style.width)) / 2;
			var intTop = (intScreenHeight - parseInt(objBox.style.height)) / 2 + scrollPos;
			
			objBox.style.left = intLeft + 'px';
			objBox.style.top = intTop + 'px';
		
		} // end position
	
	}, // end application	
	
	technology:	{
		/**
		 * Updates a technology
		 * @param {} intId
		 * @param {} intRight
		 * @param {} unique_dbid
		 */
		update: function(intId, intRight, unique_dbid)	{
			var strHeadline = jQuery('#' + intRight).val();
			var strHeadlineEn = jQuery('#' + intRight + '_en').val(); //englisch
			var strWikipediaUrl = jQuery('#draggable_'+unique_dbid+'_wiki-url').val();
			var strWikipediaEnUrl = jQuery('#draggable_'+unique_dbid+'_wiki-url-en').val();
			
			jQuery('#draggable_' + unique_dbid + '_view').text(strHeadline);
			jQuery('#draggable_' + unique_dbid + '_view_en').text(strHeadlineEn);
			jQuery('#draggable_' + unique_dbid + '_wiki-url').val(strWikipediaUrl);
			jQuery('#draggable_' + unique_dbid + '_wiki-url-en').val(strWikipediaEnUrl);
			
			jQuery.post(doc_root + 'includes/ajax/box.technology.update.php', {
				intRight: intId,
				strHeadline: strHeadline,
				strHeadlineEn: strHeadlineEn,
				strWikipediaUrl: strWikipediaUrl,
				strWikipediaEnUrl: strWikipediaEnUrl,
				intId: unique_dbid
			}, function (data, status) { 
				jQuery('#draggable_' + unique_dbid + '_edit').hide();
				jQuery('#draggable_' + unique_dbid + '_view').show();
				jQuery('#button_edit_' + unique_dbid ).show();
				jQuery('#button_delete_' + unique_dbid ).show();
			}, "json");
			
		}, // end update
		
		
		/**
		 * deletes a node from thre whith all its children
		 * 
		 * @param {INT} intLeft 
		 * @param {INT} intRight
		 * @param {INT} intId - unique id (autoincrement in db)
		 */
		Delete: function(event)	{
			intId = event.data.intId;
			intLeft = event.data.intLeft;
			intRight = event.data.intRight;
			console.log(intId + " " + intLeft + " " + intRight);
			var blnDelete = confirm(gt.gettext("Wollen Sie dieses Element wirklich löschen?"));
			if(blnDelete)	{
				jQuery.post(doc_root + 'includes/ajax/box.technology.delete.php', {
					intRight: intRight,
					intLeft: intLeft,
					intId: intId
				}, function (data, status) { 
//					alert('#draggable_' + intRight +' .remove');
					jQuery('#draggable_' + intId).remove();
					//if (jQuery('#child-of-'))
				}, "json");				

			}
			
			event.preventDefault();
			
		}, // end delete		
		
		/**
		 * Inserts a empty node in to the tree of the 
		 * element with the passed intId. 
		 * @param {} strHeadline
		 * @param {} intRight
		 * @param {} intId
		 */
		insert: function(strHeadline, intRight, intId)	{
			jQuery.post(doc_root + 'includes/ajax/box.technology.insert.php', {
				strHeadline: strHeadline,
				intRight: intRight,
				intId: intId
			}, function (data, status) { 
 				// check if sub ul exists
				if (jQuery('#child-of-' + intId).length > 0) {
					var branches = $(data.node_html).appendTo('#child-of-' + intId);
				}
				else {
					// wrap in ul
					var node  = 
						'<ul id="child-of-' + intId + '">' +
							data.node_html + 
							'</ul>' ;
					var branches = $(node).appendTo('#draggable_' + intId);
					jQuery('#draggable_' + intId + ' > span').removeClass('file').addClass('open').addClass('folder');
				}
				
				jQuery('#technology-tree').treeview({
					add: branches
				});
				
				box.contextmenu.init('.knowledge-tree', 'context-knowledge-tree', 'technology');


			}, "json");				

		}, // end insert			
		get: function(intId)	{
			util.hide_workingspace();
			
			jQuery('#objBox h1#objBoxTitle').html(gt.gettext("Technologieorientiertes Wissen"));
			jQuery('#objBoxContent').html('<img src="' + doc_root + 'misc/icons/loader.gif" style="padding-top:10%;padding-left:47%;padding-right:47%;"/><div style="padding:42%;padding-top:0;" >' + gt.gettext("Lade...") + '</div>');

			// position of the event-editor
			center_div = 'objBox'; // defined global
			jQuery('#' + center_div).appendTo('body');
			
			jQuery('#' + center_div).css({
				'position' : 'absolute',
				'height' : '400px',
				'z-index' : '99999'
  			});			
			
			
			jQuery('#' + center_div).fadeIn(function() {
//				jQuery(this).dropShadow();
				
				jQuery.post(doc_root + "includes/ajax/box.technology.get.php", {
					intUserId : intId
				}, function(data, status) {
					jQuery('#objBoxContent').html(data);
					jQuery('#application-source-tree').treeview({
						collapsed: false
					});
					jQuery('#application-target-tree').treeview({
						collapsed: false
					});					
					jQuery.post(doc_root + 'includes/ajax/user.box.technology.get.php', {
						intUserId : intId
					}, function (data, status) {
						for (t_index in data) {
							jQuery('#droppable_' + data[t_index].intTechnologyId).parents().show();
							jQuery('#droppable_' + data[t_index].intTechnologyId).show();
						}
					}, 'json');
				});
				
			});
			
			jQuery(window).bind('scroll', util.position);				
			util.position();
			
		}, // end get
		position: function()	{
		
			var objBox = document.getElementById('objBox');
		
			if(parseInt(navigator.appVersion) > 3) {
				if(navigator.appName == "Netscape") {
				  var intScreenWidth = window.innerWidth;
				  var intScreenHeight = window.innerHeight;
			 	}
				if (navigator.appName.indexOf("Microsoft")!=-1) {
					var intScreenWidth = document.body.offsetWidth;
					var intScreenHeight = document.body.offsetHeight;
				}
			}
			
			var scrollPos;
			if (typeof window.pageYOffset != 'undefined') {
				scrollPos = window.pageYOffset;
			}
			else if (typeof document.compatMode != 'undefined' && document.compatMode != 'BackCompat') {
				scrollPos = document.documentElement.scrollTop;
			}
			else if (typeof document.body != 'undefined') {
				scrollPos = document.body.scrollTop;
			}
			
			var intLeft = (intScreenWidth - parseInt(objBox.style.width)) / 2;
			var intTop = (intScreenHeight - parseInt(objBox.style.height)) / 2 + scrollPos;
			
			objBox.style.left = intLeft + 'px';
			objBox.style.top = intTop + 'px';
		
		} // end position
	
	}, // end technology	
	hide: function() {
		//document.getElementById('objBox').style.display = 'none';
		jQuery('#objBox').removeShadow();
		jQuery('#objBox').fadeOut();
	}	// end hide

};
