Index: trunk/CHANGELOG
===================================================================
--- trunk/CHANGELOG	(revision 1102)
+++ trunk/CHANGELOG	(revision 1103)
@@ -11,6 +11,8 @@
 ! = Update/Change
 
 ------------------------------------- 2.8.0 -------------------------------------
+6-Aug-2009 Matthias Gallas
+#	Fixed some display issues in argos_theme (Thanks to Argos)
 30-July-2009 Ruud Eisinga (Ruud)
 #	Fixed a bug in the /admin/media resizer parameters for dirs with whitespaces (thnx to tiesy)
 #	Fixed a bug in FCKeditor include.php. Now the editor can be used from other 
Index: trunk/wb/admin/pages/sections.php
===================================================================
--- trunk/wb/admin/pages/sections.php	(revision 1102)
+++ trunk/wb/admin/pages/sections.php	(revision 1103)
@@ -195,7 +195,7 @@
 				$edit_page ='<a name="'.$section['section_id'].'" href="'.ADMIN_URL.'/pages/modify.php?page_id='.$page_id.'#'.$section['section_id'].'">'.$module_name.'</a>';
 				$input_attribute = 'input_normal';
 				$template->set_var(array(
-						'STYLE_DISPLAY_SECTION_BLOCK' => ' style="visibility: visible;"',
+						'STYLE_DISPLAY_SECTION_BLOCK' => ' style="visibility:visible;"',
 						'NAME_SIZE' => 180,
 						'INPUT_ATTRIBUTE' => $input_attribute,
 						'VAR_SECTION_ID' => $section['section_id'],
@@ -221,7 +221,7 @@
 				$edit_page ='<a name="'.$section['section_id'].'" href="'.ADMIN_URL.'/pages/modify.php?page_id='.$page_id.'#'.$section['section_id'].'">'.$module_name.'</a>';
 				$input_attribute = 'input_small';
 				$template->set_var(array(
-						'STYLE_DISPLAY_SECTION_BLOCK' => ' style="visibility: hidden;"',
+						'STYLE_DISPLAY_SECTION_BLOCK' => ' style="display:none;"',
 						'NAME_SIZE' => 270,
 						'INPUT_ATTRIBUTE' => $input_attribute,
 						'VAR_SECTION_ID' => $section['section_id'],
Index: trunk/wb/templates/argos_theme/theme.css
===================================================================
--- trunk/wb/templates/argos_theme/theme.css	(revision 1102)
+++ trunk/wb/templates/argos_theme/theme.css	(revision 1103)
@@ -88,7 +88,7 @@
 
 table.pages_view {width:900px;}
 table.pages_view tr {background:#f0f0f0;}
-table.pages_view tr:hover {background:#eaeff6;}
+table.pages_view tr:hover, tr.sectionrow:hover {background:#eaeff6;}
 
 .page_list {display:none;}
 .page_list_show li {display:block;}
@@ -99,19 +99,16 @@
 .header_list_page_ID{width:40px;text-align:left;}
 .header_list_actions {text-align:left;width:120px;}
 
-.header_list_type {text-align:left;width:px;}
+.header_list_type {text-align:left;}
 .header_list_block {text-align:left;width:180px;}
 .header_list_pubdate_start {text-align:left;width:200px;}
 .header_list_pubdate_end {text-align:left;width:200px;}
-.header_list_section_ID {width:55px;text-align: right;}
 .header_list_sections_actions {text-align:left;width:60px;}
+.header_list_section_ID {width:55px;text-align:left;}
 
 .list_page_title {text-align:left;}
 .list_menu_title {width:300px;text-align:left;}
 .list_page_id {width:40px;text-align:left;}
 .list_actions {width:20px;}
-.list_type {text-align:left;width:px;}
-.list_block {text-align:left;width:180px;}
-.list_section_id {width:55px;text-align: right;}
 .list_pubdate_start {text-align:left;width:200px;}
-.list_pubdate_end {text-align:left;width:200px;}
+.list_pubdate_end {text-align:left;width:200px;}
\ No newline at end of file
Index: trunk/wb/templates/argos_theme/templates/pages_sections.htt
===================================================================
--- trunk/wb/templates/argos_theme/templates/pages_sections.htt	(revision 1102)
+++ trunk/wb/templates/argos_theme/templates/pages_sections.htt	(revision 1103)
@@ -14,54 +14,60 @@
 </table>
 
         <form name="section_properties" action="{ADMIN_URL}/pages/sections_save.php?page_id={VAR_PAGE_ID}" method="post">
-		<table cellpadding="0" cellspacing="0" border="0" width="100%">
+		
+        <table cellpadding="0" cellspacing="0" border="0" width="100%" class="img_noborder">
 			<tr class="pages_list">
 				<td class="header_list_type">{TEXT_TYPE}</td>
-				<td class="header_list_block" {STYLE_DISPLAY_SECTION_BLOCK}>{TEXT_BLOCK}</td>
+				<td class="header_list_block"><span {STYLE_DISPLAY_SECTION_BLOCK}>{TEXT_BLOCK}&nbsp;</span></td>
 				<td class="header_list_pubdate_start">{TEXT_PUBL_START_DATE}</td>
 				<td class="header_list_pubdate_end">{TEXT_PUBL_END_DATE}</td>
-				<td class="header_list_sections_actions">{TEXT_ACTIONS}</td>
-				<td class="header_list_section_ID">SID</td>
+				<td class="header_list_sections_actions" colspan="3">{TEXT_ACTIONS}</td>
+				<td class="header_list_section_ID">{TEXT_SID}</td>
+				<td {DISPLAY_DEBUG}>{TEXT_PID}</td>
 			</tr>
-		</table>
-		
-        <table cellpadding="0" cellspacing="0" border="0" width="100%" class="img_noborder">
 <!-- BEGIN section_block -->
-            	<tr>
-    				<td align="right" style="display:none;" width="5">
+            	<tr class="sectionrow">
+    				<td align="right" style="display:none;">
                       <input type="hidden" name="page_id" value="{VAR_PAGE_ID}"  />
                       <input type="hidden" name="section_id" value="{VAR_SECTION_ID}"  />
                       {VAR_SECTION_ID}
                     </td>
-                    <td class="list_type">{LINK_MODIFY_URL_VAR_MODUL_NAME}</td>
-                    <td class="list_block {INPUT_ATTRIBUTE}" {STYLE_DISPLAY_SECTION_BLOCK}>
+					
+                    <td>{LINK_MODIFY_URL_VAR_MODUL_NAME}</td>
+					
+                    <td class="{INPUT_ATTRIBUTE}"><span {STYLE_DISPLAY_SECTION_BLOCK}>
                     	<select name="block{VAR_SECTION_ID}" class="input_normal">
                         {SET_NONE_DISPLAY_OPTION}
                     	<!-- BEGIN block_block -->
                     		<option value="{VALUE}"{SELECTED}>{NAME}</option>
                     	<!-- END block_block -->
-                    	</select>
+                    	</select></span>&nbsp;
                     </td>
-                    <td class="list_pubdate_start"><input type="text" id="start_date{VAR_SECTION_ID}" name="start_date{VAR_SECTION_ID}" value="{VALUE_PUBL_START}" class="input_normal" />
+					
+                    <td><input type="text" id="start_date{VAR_SECTION_ID}" name="start_date{VAR_SECTION_ID}" value="{VALUE_PUBL_START}" class="input_normal" />
                         <img src="{THEME_URL}/images/{CLOCK_16_PNG}" id="trigger_start{VAR_SECTION_ID}" style="cursor:pointer;" title="{TEXT_CALENDAR}" alt="{TEXT_CALENDAR}"  />
                         <img src="{THEME_URL}/images/{CLOCK_DEL_16_PNG}" style="cursor:pointer;" alt="{TEXT_DELETE_DATE}" title="{TEXT_DELETE_DATE}" onclick="document.section_properties.start_date{VAR_SECTION_ID}.value=''" />
                     </td>
-                    <td class="list_pubdate_end"><input type="text" id="end_date{VAR_SECTION_ID}" name="end_date{VAR_SECTION_ID}" value="{VALUE_PUBL_END}" class="input_normal" />
+					
+                    <td><input type="text" id="end_date{VAR_SECTION_ID}" name="end_date{VAR_SECTION_ID}" value="{VALUE_PUBL_END}" class="input_normal" />
                         <img src="{THEME_URL}/images/{CLOCK_16_PNG}" id="trigger_stop{VAR_SECTION_ID}" alt="{TEXT_CALENDAR}" style="cursor: pointer;" title="{TEXT_CALENDAR}"  />
                         <img src="{THEME_URL}/images/{CLOCK_DEL_16_PNG}" style="cursor:pointer;" alt="{TEXT_DELETE_DATE}" title="{TEXT_DELETE_DATE}" onclick="document.section_properties.end_date{VAR_SECTION_ID}.value=''" />
                     </td>
 
-					<td class="list_actions">{VAR_MOVE_UP_URL}</td>
-                    <td class="list_actions">{VAR_MOVE_DOWN_URL}</td>
-                    <td class="list_actions">
+					<td>{VAR_MOVE_UP_URL}</td>
+					
+                    <td>{VAR_MOVE_DOWN_URL}</td>
+					
+                    <td>
                         <a href="javascript: confirm_link('{TEXT_ARE_YOU_SURE}', '{ADMIN_URL}/pages/sections.php?page_id={VAR_PAGE_ID}&amp;section_id={VAR_SECTION_ID}');">
                         <img src="{THEME_URL}/images/{DELETE_16_PNG}" alt="{TEXT_DELETE}" border="0" />
                         </a>
                     </td>
-                    <td class="list_section_id">{VAR_SECTION_ID}</td>
+					
+                    <td>{VAR_SECTION_ID}</td>
+					
                     <td {DISPLAY_DEBUG}>{POSITION}</td>
                 </tr>
-
 <!-- END section_block -->
                 <tr>
                     <td align="left" colspan="{DEBUG_COLSPAN_SIZE}">
Index: trunk/wb/modules/jsadmin/js/dragdrop.js
===================================================================
--- trunk/wb/modules/jsadmin/js/dragdrop.js	(revision 1102)
+++ trunk/wb/modules/jsadmin/js/dragdrop.js	(revision 1103)
@@ -1,346 +1,346 @@
-// Copyright 2006 Stepan Riha
-// www.nonplus.net
-// $Id: dragdrop.js 2 2006-04-18 03:04:39Z stepan $
-/**
-* -----------------------------------------------------------------------------------------
-*  MODIFICATON FOR THE JSADMIN MODULE
-* -----------------------------------------------------------------------------------------
-*	MODIFICATION HISTORY:
-*   Swen Uth; 01/24/2008
-*   +INCLUDE VARIABLE buttonCell FOR ADAPTATION TO LATER LAYOUTS
-*
-**/
-JsAdmin.DD = {};
-JsAdmin.movable_rows = {};
-	
-JsAdmin.init_drag_drop = function() {
-
-	// There seems to be many different ways the ordering is set up
-	//		pages/index.php has UL/LI containing tables with single row
-	//		pages/sections.php has a TABLE with many rows
-	//		pages/modify.php for manuals is completely weird...
-	// So we only want to deal with pages & sections...
-
-	var page_type = '';
-	var is_tree = false;
-
-	if(document.URL.indexOf(JsAdmin.ADMIN_URL + "/pages/index.php") > -1) {
-		page_type = 'pages';
-		is_tree = true;
-
-		// This page uses duplicate IDs and incorrectly nested lists:
-		// <ul id="p1">
-		//		<li id="p1"><table /></li>
-		//		<ul>... sub items ...</ul>
-		// </ul>
-		//
-		// We need to fix that to the following:
-		// <ul id="p1">
-		//		<li id="uniqueID"><table />
-		//		<ul>... sub items ...</ul>
-		//		</li>
-		// </ul>
-
-		// Stash all UL ids
-		var ids = {};
-		var lists = document.getElementsByTagName('ul');
-		for(var i = 0; i < lists.length; i++) {
-			if(lists[i].id) {
-				ids[lists[i].id] = true;
-			}
-		}
-
-		// Now fix all LIs
-		var items = document.getElementsByTagName('li');
- 		for(var i = 0; i < items.length; i++) {
-			var item = items[i];
-
-			// Fix duplicate ID
-			if(ids[item.id]) {
-				item.id =  JsAdmin.util.getUniqueId();
-			}
-
-			// Fix UL parented by UL
-			var ul = JsAdmin.util.getNextSiblingNode(item, 'ul');
-			if(ul) {
-				var lis = ul.getElementsByTagName('li');
- 				if(!lis || lis.length == 0) {
-					// Remove list without items
-					ul.parentNode.removeChild(ul);
-				} else {
-					// Make list child of list item
-					item.appendChild(ul);
-				}
-			}
-		}
-
-	} else if(document.URL.indexOf("/admin/pages/sections.php") > 0) {
-		page_type = 'sections';
-	} else {
-		// We don't do any other pages
-		return;
-	}
-
-	var links = document.getElementsByTagName('a');
-	var reImg = /(.*)move_(down|up)\.php(.*)/;
-
-	for(var i = 0; i < links.length; i++) {
-		var link = links[i];
-		var href = link.href || '';
-		var match = href.match(reImg);
-		if(!match) {
-			continue;
-		}
-		var url = match[1];
-		var op = match[2];
-		var params = match[3];
-		var tr = JsAdmin.util.getAncestorNode(link, 'tr');
-		var item = is_tree ? JsAdmin.util.getAncestorNode(tr, 'li') : tr;
-		if(!item) {
-			continue;
-		}
-
-		// Make sure we have a unique id
-		if(!item.id || YAHOO.util.Dom.get(item.id) != item) {
-			item.id = JsAdmin.util.getUniqueId();
-		}
-
-		if(is_tree) {
-			var parent = JsAdmin.util.getAncestorNode(item, 'ul');
-			new JsAdmin.DD.liDDSwap(item.id, (parent && parent.id) ? parent.id : 'top');
-		} else {
-			new JsAdmin.DD.trDDSwap(item.id);
-		}
-		item.className += " jsadmin_drag";
-
-		this.movable_rows[item.id] = { item: item, tr : tr, url : url, params : params };
-	}
-};
-
-//==========================================================================
-// Drag-drop utils
-//==========================================================================
-
-JsAdmin.DD.dragee = null;
-
-JsAdmin.DD.addMoveButton = function(tr, cell, op) {
-	if(op == 'down') {
-		cell++;
-	}
-	var item = JsAdmin.movable_rows[tr.id];
-	if(!JsAdmin.util.isNodeType(tr, 'tr')) {
-		var rows = tr.getElementsByTagName('tr');
-		tr = rows[0];
-	}
-	
-	var html = '<a href="' + item.url + 'move_' + op + '.php' + item.params
-				+ '"><img src="' + JsAdminTheme.THEME_URL + '/images/' + op
-				+ '_16.png" border="0" alt="' + op + '" /></a>';
-	tr.cells[cell].innerHTML = html;
-};
-
-JsAdmin.DD.deleteMoveButton = function(tr, cell, op) {
-	if(op == 'down') {
-		cell++;
-	}
-	if(!JsAdmin.util.isNodeType(tr, 'tr')) {
-		var rows = tr.getElementsByTagName('tr');
-		tr = rows[0];
-	}
-	
-	tr.cells[cell].innerHTML = "";
-};
-
-//==========================================================================
-// Drag-drop handling for table rows
-//==========================================================================
-
-JsAdmin.DD.trDDSwap = function(id, sGroup) {
-    this.init(id, sGroup);
-	this.addInvalidHandleType('a');
-	this.addInvalidHandleType('input');
-	this.addInvalidHandleType('select');
-    this.initFrame();
-	this.buttonCell = buttonCell;//, by Swen Uth
-	
-	// For Connection
-	this.scope = this;
-};
-
-JsAdmin.DD.trDDSwap.prototype = new YAHOO.util.DDProxy();
-
-JsAdmin.DD.trDDSwap.prototype.startDrag = function(x, y) {
-	if (JsAdmin.DD.dragee != this) {
-		this.rowIndex = this.getEl().rowIndex;
-		this.numRows = this.getEl().parentNode.rows.length;
-		this.opacity = YAHOO.util.Dom.getStyle(this.getEl(), "opacity");
-		this.background = YAHOO.util.Dom.getStyle(this.getEl(), "background");
-		YAHOO.util.Dom.setStyle(this.getEl(), "opacity", 0.5);
-		YAHOO.util.Dom.setStyle(this.getEl(), "background", "#dde");
-	}
-	JsAdmin.DD.dragee = this;
-};
-
-JsAdmin.DD.trDDSwap.prototype.onDragEnter = function(e, id) {
-  var elt = id ? YAHOO.util.Dom.get(id) : null;
-	var item = JsAdmin.movable_rows[this.getEl().id];
-	var rows = item.tr.parentNode.rows;
-	var wasFirst = item.tr.rowIndex == 1;
-	var wasLast = item.tr.rowIndex == this.numRows - 2;
-	if(elt.rowIndex < item.tr.rowIndex) {
-		elt.parentNode.insertBefore(item.tr, elt);
-	} else {
-		elt.parentNode.insertBefore(elt, item.tr);
-	}
-	// Fixup buttons
-	var isFirst = item.tr.rowIndex == 1;
-	var isLast = item.tr.rowIndex == this.numRows - 2;
-
-	if(wasFirst != isFirst) {
-		if(isFirst) {
-			JsAdmin.DD.deleteMoveButton(item.tr, this.buttonCell, 'up');
-			JsAdmin.DD.addMoveButton(JsAdmin.util.getNextSiblingNode(item.tr), this.buttonCell, 'up');
-		} else {
-			JsAdmin.DD.addMoveButton(item.tr, this.buttonCell, 'up');
-			JsAdmin.DD.deleteMoveButton(rows[1], this.buttonCell, 'up');
-		}
-	}
-	if(wasLast != isLast) {
-		if(isLast) {
-			JsAdmin.DD.deleteMoveButton(item.tr, this.buttonCell, 'down');
-			JsAdmin.DD.addMoveButton(JsAdmin.util.getPreviousSiblingNode(item.tr), this.buttonCell, 'down');
-		} else {
-			JsAdmin.DD.addMoveButton(item.tr, this.buttonCell, 'down');
-			JsAdmin.DD.deleteMoveButton(rows[rows.length-2], this.buttonCell, 'down');
-		}
-	}
-
-	this.DDM.refreshCache(this.groups);
-};
-
-JsAdmin.DD.trDDSwap.prototype.endDrag = function(e) {
-	YAHOO.util.Dom.setStyle(this.getEl(), "opacity", this.opacity);
-	YAHOO.util.Dom.setStyle(this.getEl(), "background", "white");
-	
-	JsAdmin.DD.dragee = null;
-
-	var newIndex = this.getEl().rowIndex;
-	if(newIndex != this.rowIndex) {
-		var url = JsAdmin.WB_URL + "/modules/jsadmin/move_to.php";
-		url += JsAdmin.movable_rows[this.getEl().id].params + "&position=" + newIndex;
-		document.body.className = String(document.body.className).replace(/(\s*)jsadmin_([a-z]+)/g, "$1") + " jsadmin_busy";
-		YAHOO.util.Connect.asyncRequest('GET', url, this, null);
-	}
-};
-
-JsAdmin.DD.trDDSwap.prototype.success = function(o) {
-	document.body.className = String(document.body.className).replace(/(\s*)jsadmin_([a-z]+)/g, "$1") + " jsadmin_success";
-};
-
-JsAdmin.DD.trDDSwap.prototype.failure = function(o) {
-	document.body.className = String(document.body.className).replace(/(\s*)jsadmin_([a-z]+)/, "$1") + " jsadmin_failure";
-};
-
-//==========================================================================
-// Drag-drop handling for list items
-//==========================================================================
-
-JsAdmin.DD.liDDSwap = function(id, sGroup) {
-    this.init(id, sGroup);
-	this.addInvalidHandleType('a');
-	this.addInvalidHandleType('input');
-	this.addInvalidHandleType('select');
-    this.initFrame();
- this.buttonCell = buttonCell;//, by Swen Uth
-	this.counter = 0;
-};
-
-JsAdmin.DD.liDDSwap.prototype = new YAHOO.util.DDProxy();
-
-JsAdmin.DD.liDDSwap.prototype.startDrag = function(x, y) {
-	// On IE, startDrag is sometimes called twice
-	if(JsAdmin.DD.dragee && JsAdmin.DD.dragee != this) {
-		JsAdmin.DD.dragee.endDrag(null);
-	}
-	if(JsAdmin.DD.dragee != this) {
-		this.rowIndex = JsAdmin.util.getItemIndex(this.getEl());
-		this.opacity = YAHOO.util.Dom.getStyle(this.getEl(), "opacity");
-		this.background = YAHOO.util.Dom.getStyle(this.getEl(), "background");
-		YAHOO.util.Dom.setStyle(this.getEl(), "opacity", 0.5);
-
-		this.list = JsAdmin.util.getAncestorNode(this.getEl(), "ul");
-		this.list.className += " jsadmin_drag_area";
-	}
-	JsAdmin.DD.dragee = this;
-};
-
-JsAdmin.DD.liDDSwap.prototype.onDragEnter = function(e, id) {
-	// Swap with other element
-	var elt = id ? YAHOO.util.Dom.get(id) : null;
-	var item = JsAdmin.movable_rows[this.getEl().id];
-	var eltRowIndex = JsAdmin.util.getItemIndex(elt);
-	var rowIndex = JsAdmin.util.getItemIndex(this.getEl());
-	var wasFirst = !JsAdmin.util.getPreviousSiblingNode(this.getEl());
-	var wasLast = !JsAdmin.util.getNextSiblingNode(this.getEl());
-
-	if(eltRowIndex < rowIndex) {
-		elt.parentNode.insertBefore(this.getEl(), elt);
-	} else {
-		elt.parentNode.insertBefore(elt, this.getEl());
-	}
-	// Fixup buttons
-	var isFirst = !JsAdmin.util.getPreviousSiblingNode(this.getEl());
-	var isLast = !JsAdmin.util.getNextSiblingNode(this.getEl());
-
-	if(wasFirst != isFirst) {
-		if(isFirst) {
-			JsAdmin.DD.deleteMoveButton(item.tr, this.buttonCell, 'up');
-			JsAdmin.DD.addMoveButton(JsAdmin.util.getNextSiblingNode(item.item), this.buttonCell, 'up');
-		} else {
-			JsAdmin.DD.addMoveButton(item.item, this.buttonCell, 'up');
-			var first, prev = JsAdmin.util.getPreviousSiblingNode(item.item);
-			while(prev) {
-				first = prev;
-				prev = JsAdmin.util.getPreviousSiblingNode(prev);
-			}
-			JsAdmin.DD.deleteMoveButton(JsAdmin.movable_rows[first.id].tr, this.buttonCell, 'up');
-		}
-	}
-	if(wasLast != isLast) {
-		if(isLast) {
-			JsAdmin.DD.deleteMoveButton(item.tr, this.buttonCell, 'down');
-			JsAdmin.DD.addMoveButton(JsAdmin.util.getPreviousSiblingNode(item.item), this.buttonCell, 'down');
-		} else {
-			JsAdmin.DD.addMoveButton(item.item, this.buttonCell, 'down');
-			var last, next = JsAdmin.util.getNextSiblingNode(item.item);
-			while(next) {
-				last = next;
-				next = JsAdmin.util.getNextSiblingNode(next);
-			}
-			JsAdmin.DD.deleteMoveButton(JsAdmin.movable_rows[last.id].tr, this.buttonCell, 'down');
-		}
-	}
-
-	this.DDM.refreshCache(this.groups);
-};
-
-JsAdmin.DD.liDDSwap.prototype.endDrag = function(e) {
-	YAHOO.util.Dom.setStyle(this.getEl(), "opacity", this.opacity);
-	this.list.className = String(this.list.className).replace(/(\s*)jsadmin_([a-z]+)/g, "$1");
-	JsAdmin.DD.dragee = null;
-	var newIndex = JsAdmin.util.getItemIndex(this.getEl());
-	if(newIndex != this.rowIndex) {
-		var url = JsAdmin.WB_URL + "/modules/jsadmin/move_to.php";
-		url += JsAdmin.movable_rows[this.getEl().id].params + "&position=" + (newIndex+1);
-		document.body.className = String(document.body.className).replace(/(\s*)jsadmin_([a-z]+)/g, "$1") + " jsadmin_busy";
-		YAHOO.util.Connect.asyncRequest('GET', url, this, null);
-	}
-};
-
-JsAdmin.DD.liDDSwap.prototype.success = function(o) {
-	document.body.className = String(document.body.className).replace(/(\s*)jsadmin_([a-z]+)/g, "$1") + " jsadmin_success";
-};
-
-JsAdmin.DD.liDDSwap.prototype.failure = function(o) {
-	document.body.className = String(document.body.className).replace(/(\s*)jsadmin_([a-z]+)/, "$1") + " jsadmin_failure";
-};
+// Copyright 2006 Stepan Riha
+// www.nonplus.net
+// $Id: dragdrop.js 2 2006-04-18 03:04:39Z stepan $
+/**
+* -----------------------------------------------------------------------------------------
+*  MODIFICATON FOR THE JSADMIN MODULE
+* -----------------------------------------------------------------------------------------
+*	MODIFICATION HISTORY:
+*   Swen Uth; 01/24/2008
+*   +INCLUDE VARIABLE buttonCell FOR ADAPTATION TO LATER LAYOUTS
+*
+**/
+JsAdmin.DD = {};
+JsAdmin.movable_rows = {};
+	
+JsAdmin.init_drag_drop = function() {
+
+	// There seems to be many different ways the ordering is set up
+	//		pages/index.php has UL/LI containing tables with single row
+	//		pages/sections.php has a TABLE with many rows
+	//		pages/modify.php for manuals is completely weird...
+	// So we only want to deal with pages & sections...
+
+	var page_type = '';
+	var is_tree = false;
+
+	if(document.URL.indexOf(JsAdmin.ADMIN_URL + "/pages/index.php") > -1) {
+		page_type = 'pages';
+		is_tree = true;
+
+		// This page uses duplicate IDs and incorrectly nested lists:
+		// <ul id="p1">
+		//		<li id="p1"><table /></li>
+		//		<ul>... sub items ...</ul>
+		// </ul>
+		//
+		// We need to fix that to the following:
+		// <ul id="p1">
+		//		<li id="uniqueID"><table />
+		//		<ul>... sub items ...</ul>
+		//		</li>
+		// </ul>
+
+		// Stash all UL ids
+		var ids = {};
+		var lists = document.getElementsByTagName('ul');
+		for(var i = 0; i < lists.length; i++) {
+			if(lists[i].id) {
+				ids[lists[i].id] = true;
+			}
+		}
+
+		// Now fix all LIs
+		var items = document.getElementsByTagName('li');
+ 		for(var i = 0; i < items.length; i++) {
+			var item = items[i];
+
+			// Fix duplicate ID
+			if(ids[item.id]) {
+				item.id =  JsAdmin.util.getUniqueId();
+			}
+
+			// Fix UL parented by UL
+			var ul = JsAdmin.util.getNextSiblingNode(item, 'ul');
+			if(ul) {
+				var lis = ul.getElementsByTagName('li');
+ 				if(!lis || lis.length == 0) {
+					// Remove list without items
+					ul.parentNode.removeChild(ul);
+				} else {
+					// Make list child of list item
+					item.appendChild(ul);
+				}
+			}
+		}
+
+	} else if(document.URL.indexOf("/admin/pages/sections.php") > 0) {
+		page_type = 'sections';
+	} else {
+		// We don't do any other pages
+		return;
+	}
+
+	var links = document.getElementsByTagName('a');
+	var reImg = /(.*)move_(down|up)\.php(.*)/;
+
+	for(var i = 0; i < links.length; i++) {
+		var link = links[i];
+		var href = link.href || '';
+		var match = href.match(reImg);
+		if(!match) {
+			continue;
+		}
+		var url = match[1];
+		var op = match[2];
+		var params = match[3];
+		var tr = JsAdmin.util.getAncestorNode(link, 'tr');
+		var item = is_tree ? JsAdmin.util.getAncestorNode(tr, 'li') : tr;
+		if(!item) {
+			continue;
+		}
+
+		// Make sure we have a unique id
+		if(!item.id || YAHOO.util.Dom.get(item.id) != item) {
+			item.id = JsAdmin.util.getUniqueId();
+		}
+
+		if(is_tree) {
+			var parent = JsAdmin.util.getAncestorNode(item, 'ul');
+			new JsAdmin.DD.liDDSwap(item.id, (parent && parent.id) ? parent.id : 'top');
+		} else {
+			new JsAdmin.DD.trDDSwap(item.id);
+		}
+		item.className += " jsadmin_drag";
+
+		this.movable_rows[item.id] = { item: item, tr : tr, url : url, params : params };
+	}
+};
+
+//==========================================================================
+// Drag-drop utils
+//==========================================================================
+
+JsAdmin.DD.dragee = null;
+
+JsAdmin.DD.addMoveButton = function(tr, cell, op) {
+	if(op == 'down') {
+		cell++;
+	}
+	var item = JsAdmin.movable_rows[tr.id];
+	if(!JsAdmin.util.isNodeType(tr, 'tr')) {
+		var rows = tr.getElementsByTagName('tr');
+		tr = rows[0];
+	}
+	
+	var html = '<a href="' + item.url + 'move_' + op + '.php' + item.params
+				+ '"><img src="' + JsAdminTheme.THEME_URL + '/images/' + op
+				+ '_16.png" border="0" alt="' + op + '" /></a>';
+	tr.cells[cell].innerHTML = html;
+};
+
+JsAdmin.DD.deleteMoveButton = function(tr, cell, op) {
+	if(op == 'down') {
+		cell++;
+	}
+	if(!JsAdmin.util.isNodeType(tr, 'tr')) {
+		var rows = tr.getElementsByTagName('tr');
+		tr = rows[0];
+	}
+	
+	tr.cells[cell].innerHTML = "";
+};
+
+//==========================================================================
+// Drag-drop handling for table rows
+//==========================================================================
+
+JsAdmin.DD.trDDSwap = function(id, sGroup) {
+    this.init(id, sGroup);
+	this.addInvalidHandleType('a');
+	this.addInvalidHandleType('input');
+	this.addInvalidHandleType('select');
+    this.initFrame();
+	this.buttonCell = buttonCell;//, by Swen Uth
+	
+	// For Connection
+	this.scope = this;
+};
+
+JsAdmin.DD.trDDSwap.prototype = new YAHOO.util.DDProxy();
+
+JsAdmin.DD.trDDSwap.prototype.startDrag = function(x, y) {
+	if (JsAdmin.DD.dragee != this) {
+		this.rowIndex = this.getEl().rowIndex;
+		this.numRows = this.getEl().parentNode.rows.length;
+		this.opacity = YAHOO.util.Dom.getStyle(this.getEl(), "opacity");
+		this.background = YAHOO.util.Dom.getStyle(this.getEl(), "background");
+		YAHOO.util.Dom.setStyle(this.getEl(), "opacity", 0.5);
+		YAHOO.util.Dom.setStyle(this.getEl(), "background", "#dde");
+	}
+	JsAdmin.DD.dragee = this;
+};
+
+JsAdmin.DD.trDDSwap.prototype.onDragEnter = function(e, id) {
+  var elt = id ? YAHOO.util.Dom.get(id) : null;
+	var item = JsAdmin.movable_rows[this.getEl().id];
+	var rows = item.tr.parentNode.rows;
+	var wasFirst = item.tr.rowIndex == 1;
+	var wasLast = item.tr.rowIndex == this.numRows - 2;
+	if(elt.rowIndex < item.tr.rowIndex) {
+		elt.parentNode.insertBefore(item.tr, elt);
+	} else {
+		elt.parentNode.insertBefore(elt, item.tr);
+	}
+	// Fixup buttons
+	var isFirst = item.tr.rowIndex == 1;
+	var isLast = item.tr.rowIndex == this.numRows - 2;
+
+	if(wasFirst != isFirst) {
+		if(isFirst) {
+			JsAdmin.DD.deleteMoveButton(item.tr, this.buttonCell, 'up');
+			JsAdmin.DD.addMoveButton(JsAdmin.util.getNextSiblingNode(item.tr), this.buttonCell, 'up');
+		} else {
+			JsAdmin.DD.addMoveButton(item.tr, this.buttonCell, 'up');
+			JsAdmin.DD.deleteMoveButton(rows[1], this.buttonCell, 'up');
+		}
+	}
+	if(wasLast != isLast) {
+		if(isLast) {
+			JsAdmin.DD.deleteMoveButton(item.tr, this.buttonCell, 'down');
+			JsAdmin.DD.addMoveButton(JsAdmin.util.getPreviousSiblingNode(item.tr), this.buttonCell, 'down');
+		} else {
+			JsAdmin.DD.addMoveButton(item.tr, this.buttonCell, 'down');
+			JsAdmin.DD.deleteMoveButton(rows[rows.length-2], this.buttonCell, 'down');
+		}
+	}
+
+	this.DDM.refreshCache(this.groups);
+};
+
+JsAdmin.DD.trDDSwap.prototype.endDrag = function(e) {
+	YAHOO.util.Dom.setStyle(this.getEl(), "opacity", this.opacity);
+	YAHOO.util.Dom.setStyle(this.getEl(), "background", "transparent");
+	
+	JsAdmin.DD.dragee = null;
+
+	var newIndex = this.getEl().rowIndex;
+	if(newIndex != this.rowIndex) {
+		var url = JsAdmin.WB_URL + "/modules/jsadmin/move_to.php";
+		url += JsAdmin.movable_rows[this.getEl().id].params + "&position=" + newIndex;
+		document.body.className = String(document.body.className).replace(/(\s*)jsadmin_([a-z]+)/g, "$1") + " jsadmin_busy";
+		YAHOO.util.Connect.asyncRequest('GET', url, this, null);
+	}
+};
+
+JsAdmin.DD.trDDSwap.prototype.success = function(o) {
+	document.body.className = String(document.body.className).replace(/(\s*)jsadmin_([a-z]+)/g, "$1") + " jsadmin_success";
+};
+
+JsAdmin.DD.trDDSwap.prototype.failure = function(o) {
+	document.body.className = String(document.body.className).replace(/(\s*)jsadmin_([a-z]+)/, "$1") + " jsadmin_failure";
+};
+
+//==========================================================================
+// Drag-drop handling for list items
+//==========================================================================
+
+JsAdmin.DD.liDDSwap = function(id, sGroup) {
+    this.init(id, sGroup);
+	this.addInvalidHandleType('a');
+	this.addInvalidHandleType('input');
+	this.addInvalidHandleType('select');
+    this.initFrame();
+ this.buttonCell = buttonCell;//, by Swen Uth
+	this.counter = 0;
+};
+
+JsAdmin.DD.liDDSwap.prototype = new YAHOO.util.DDProxy();
+
+JsAdmin.DD.liDDSwap.prototype.startDrag = function(x, y) {
+	// On IE, startDrag is sometimes called twice
+	if(JsAdmin.DD.dragee && JsAdmin.DD.dragee != this) {
+		JsAdmin.DD.dragee.endDrag(null);
+	}
+	if(JsAdmin.DD.dragee != this) {
+		this.rowIndex = JsAdmin.util.getItemIndex(this.getEl());
+		this.opacity = YAHOO.util.Dom.getStyle(this.getEl(), "opacity");
+		this.background = YAHOO.util.Dom.getStyle(this.getEl(), "background");
+		YAHOO.util.Dom.setStyle(this.getEl(), "opacity", 0.5);
+
+		this.list = JsAdmin.util.getAncestorNode(this.getEl(), "ul");
+		this.list.className += " jsadmin_drag_area";
+	}
+	JsAdmin.DD.dragee = this;
+};
+
+JsAdmin.DD.liDDSwap.prototype.onDragEnter = function(e, id) {
+	// Swap with other element
+	var elt = id ? YAHOO.util.Dom.get(id) : null;
+	var item = JsAdmin.movable_rows[this.getEl().id];
+	var eltRowIndex = JsAdmin.util.getItemIndex(elt);
+	var rowIndex = JsAdmin.util.getItemIndex(this.getEl());
+	var wasFirst = !JsAdmin.util.getPreviousSiblingNode(this.getEl());
+	var wasLast = !JsAdmin.util.getNextSiblingNode(this.getEl());
+
+	if(eltRowIndex < rowIndex) {
+		elt.parentNode.insertBefore(this.getEl(), elt);
+	} else {
+		elt.parentNode.insertBefore(elt, this.getEl());
+	}
+	// Fixup buttons
+	var isFirst = !JsAdmin.util.getPreviousSiblingNode(this.getEl());
+	var isLast = !JsAdmin.util.getNextSiblingNode(this.getEl());
+
+	if(wasFirst != isFirst) {
+		if(isFirst) {
+			JsAdmin.DD.deleteMoveButton(item.tr, this.buttonCell, 'up');
+			JsAdmin.DD.addMoveButton(JsAdmin.util.getNextSiblingNode(item.item), this.buttonCell, 'up');
+		} else {
+			JsAdmin.DD.addMoveButton(item.item, this.buttonCell, 'up');
+			var first, prev = JsAdmin.util.getPreviousSiblingNode(item.item);
+			while(prev) {
+				first = prev;
+				prev = JsAdmin.util.getPreviousSiblingNode(prev);
+			}
+			JsAdmin.DD.deleteMoveButton(JsAdmin.movable_rows[first.id].tr, this.buttonCell, 'up');
+		}
+	}
+	if(wasLast != isLast) {
+		if(isLast) {
+			JsAdmin.DD.deleteMoveButton(item.tr, this.buttonCell, 'down');
+			JsAdmin.DD.addMoveButton(JsAdmin.util.getPreviousSiblingNode(item.item), this.buttonCell, 'down');
+		} else {
+			JsAdmin.DD.addMoveButton(item.item, this.buttonCell, 'down');
+			var last, next = JsAdmin.util.getNextSiblingNode(item.item);
+			while(next) {
+				last = next;
+				next = JsAdmin.util.getNextSiblingNode(next);
+			}
+			JsAdmin.DD.deleteMoveButton(JsAdmin.movable_rows[last.id].tr, this.buttonCell, 'down');
+		}
+	}
+
+	this.DDM.refreshCache(this.groups);
+};
+
+JsAdmin.DD.liDDSwap.prototype.endDrag = function(e) {
+	YAHOO.util.Dom.setStyle(this.getEl(), "opacity", this.opacity);
+	this.list.className = String(this.list.className).replace(/(\s*)jsadmin_([a-z]+)/g, "$1");
+	JsAdmin.DD.dragee = null;
+	var newIndex = JsAdmin.util.getItemIndex(this.getEl());
+	if(newIndex != this.rowIndex) {
+		var url = JsAdmin.WB_URL + "/modules/jsadmin/move_to.php";
+		url += JsAdmin.movable_rows[this.getEl().id].params + "&position=" + (newIndex+1);
+		document.body.className = String(document.body.className).replace(/(\s*)jsadmin_([a-z]+)/g, "$1") + " jsadmin_busy";
+		YAHOO.util.Connect.asyncRequest('GET', url, this, null);
+	}
+};
+
+JsAdmin.DD.liDDSwap.prototype.success = function(o) {
+	document.body.className = String(document.body.className).replace(/(\s*)jsadmin_([a-z]+)/g, "$1") + " jsadmin_success";
+};
+
+JsAdmin.DD.liDDSwap.prototype.failure = function(o) {
+	document.body.className = String(document.body.className).replace(/(\s*)jsadmin_([a-z]+)/, "$1") + " jsadmin_failure";
+};
