<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
	<head>
		<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
		<title>Site browser</title>
		<link rel="stylesheet" href="browser.css" type="text/css" media="screen" title="Browser style" charset="utf-8" />
		<script type="text/javascript" language="javascript" charset="utf-8" src="epoz_script_detect.js"></script>
		<script type="text/javascript" language="javascript" charset="utf-8" src="javascript_events_api.js"></script>
		<script type="text/javascript" language="javascript" charset="utf-8" src="sarissa.js"></script>
		<script type="text/javascript" language="javascript" charset="utf-8">
		// <![CDATA[
		/* keyboard keycodes */
		var keyLeft = 37, keyUp = 38, keyRight = 39, keyDown = 40, keyEnter = 13;
		
		/* globals variables */
		var finder, finderContent, cellWidth, currentColumn;
		var scrollbarPlaceholder_offset = 0;
		var scrollXStep = 25, scrollTimeStep = 10;
		var ressourceType = GetUrlParam('Type');
		var sConnUrl = GetUrlParam( 'Connector' ) ;
		var baseDepth = 0;
		if ( sConnUrl.substr(0,1) != '/' && sConnUrl.indexOf( '://' ) < 0 )
			sConnUrl = window.location.href.replace( /browser.html.*$/, '' ) + sConnUrl ;
		var getWindowWidth = (window.innerWidth != undefined) ? function(){return window.innerWidth;} : function(){return document.body.parentElement.clientWidth;};
		var getWindowHeight = (window.innerHeight != undefined) ? function(){return window.innerHeight;} : function(){return document.body.parentElement.clientHeight;};

		
		function _initBrowser(){
			finder = document.getElementById('finder');
			finder.colCpt = 3; // column counter;
			finderContent = document.getElementById('finderContent');
			cellWidth = Math.floor(getWindowWidth() / 3);
			
			addListener(window, 'resize', resizeBrowser);
			addListener(finder, 'click', onClickHandler);
			addListener(finder, 'dblclick', onDblClickHandler);
			var path = GetUrlParam('path');
			path = (path) ? path : '/';
			var level = -1;
			for (var i = 0 ; i<path.length ; i++){
				if (path.charAt(i) == '/')
					level += 1;
			}
			baseDepth = level;

			populateBrowser('ls', path);
			
			if (browser.isGecko)
				document.body.style.overflowX = 'scroll';
			resizeBrowser();
			scrollbarPlaceholder_offset = (window.scrollMaxY) ? window.scrollMaxY : document.body.offsetHeight - document.body.clientHeight;
			resizeBrowser();
			finder.style.width = cellWidth * 3 + "px";
		}
		addListener(window, 'load', _initBrowser);
		addListener(document, 'keydown', onKeydownHandler);
		
		function onClickHandler(evt) {
			var li = getTargetedObject(evt);
			switch (li.tagName) {
				case 'IMG':
					if (li.width != 16) // this img is a preview thumbnail.
						return;
					li = li.parentNode;
				case 'LI':
				  // click on the current selected row
				  if (currentColumn == li.parentNode && currentColumn.currentRow == li)
				    return;
				    
					currentColumn = li.parentNode;
					// hightlight row
					if (currentColumn.currentRow) {
						currentColumn.currentRow.className = currentColumn.currentRow.className.replace('-selected', '');
					}
					var command = li.className == 'folderish' ? 'ls' : 'info';
					li.className += '-selected';
					currentColumn.currentRow = li;

					populateBrowser(command, li.path);
			}
		}
		
		function onDblClickHandler(evt) {
		  var li = getTargetedObject(evt);
		  
		  if(li.tagName != 'LI') {
		      if (li.tagName == 'IMG' && li.parentNode.tagName == 'LI')
		        li = t.parentNode;
		      else
		        return;
		  }
		  switch(window.parent.name) {
	        case 'FCKeditorDialog_PlinnImage' :
	            if (li.className == 'contentish-selected') {
					        window.parent.updateOrInsertImage(li.link);
					        window.close();
				      }
					    break;
				  case '' :
				  case '_blank' :
				      var funcNum = GetUrlParam('CKEditorFuncNum');
				      window.opener.CKEDITOR.tools.callFunction(funcNum, li.link);
							window.close();
							break;
	    }
		}

		function onKeydownHandler(evt) {
			evt = (evt) ? evt : window.event;
			if(!currentColumn) currentColumn = finder.getElementsByTagName('ul')[0];
			if(!currentColumn.currentRow) {
				raiseMouseEvent(currentColumn.firstChild,'click');
				return;
			}
			
			var ob, evtType='click';
			switch (evt.keyCode) {
				case keyUp :
					ob = currentColumn.currentRow.previousSibling;
					break;
				case keyDown :
					ob = currentColumn.currentRow.nextSibling;
					break;
				case keyLeft :
					var currentLevel = parseInt(currentColumn.parentNode.id.slice(6));
					if (currentLevel) {
						ob = document.getElementById('level-' + (currentLevel - 1)).firstChild;
						if (ob.nodeType == 3) // text node
							ob = ob.nextSibling
						ob = ob.currentRow;
					}
					break;
				case keyRight :
					if(currentColumn.currentRow.className != 'folderish-selected')
						return;
					ob = document.getElementById('level-' + (parseInt(currentColumn.parentNode.id.slice(6)) + 1)).firstChild.firstChild;
					break;
				case keyEnter :
				  ob = currentColumn.currentRow;
				  evtType = 'dblclick'
				  break;
			};
			if (ob)
				raiseMouseEvent(ob, evtType);
		}
		
		function resizeBrowser() {
			var columns = finder.getElementsByTagName('ul');
			var col;
			for (var i=0 ; i<columns.length ; i++) {
				col = columns[i];
				col.style.height = getWindowHeight() - scrollbarPlaceholder_offset + "px";;
				
			}
			//document.body.style.width = getWindowWidth();
		}
		
		/* from fck default browser */
		function GetUrlParam( paramName )
		{
			var oRegex = new RegExp( '[\?&]' + paramName + '=([^&]+)', 'i' ) ;
			var oMatch = oRegex.exec( window.location.search ) ;

			if ( oMatch && oMatch.length > 1 )
				return unescape(oMatch[1]) ;
			else
				return '' ;
		}
		

		
		function populateBrowser(command, path) {
			var prevColNum = finder.colCpt;
			var level = -1;
			for (var i = 0 ; i<path.length ; i++){
				if (path.charAt(i) == '/')
					level += 1;
			}
			level = level - baseDepth;
			
			// prepare / cleanup columns
			var cellLevel, startCleanup = 3;
			switch (level) {
				case 0 : // initialization case
					startCleanup = 0;
					cellLevel = document.getElementById('level-0');
					cellLevel.style.width = cellWidth + "px";
					// remove default content
					cellLevel.removeChild(cellLevel.firstChild);
					
					// cosmetic: display the second col with a scrollbar
					var c1 = document.createElement('td');
					c1.id = "level-1";
					c1.style.width = cellWidth + "px";
					c1.appendChild(document.createElement('ul'));
					finderContent.appendChild(c1);
					
					// cosmetic: display the third col without scrollbar
					var c2 = document.createElement('td');
					c2.id = "level-2";
					c2.style.width = cellWidth + "px";
					finderContent.appendChild(c2);
					break;

				case 1 :
					cellLevel = document.getElementById("level-1");
					cellLevel.removeChild(cellLevel.firstChild);
					var c2 = document.getElementById("level-2");
					var ul = c2.firstChild;
					if (ul)
						c2.removeChild(ul);
					break;

				case 2 :
					cellLevel = document.getElementById("level-2");
					var ul = cellLevel.firstChild;
					if (ul) {
						cellLevel.removeChild(ul);
					}
					break;
					
				default :
					cellLevel = document.getElementById("level-" + level);
					if (!cellLevel) {
						cellLevel = document.createElement('td');
						cellLevel.id = "level-" + level;
						cellLevel.style.width = cellWidth + "px";
						finderContent.appendChild(cellLevel);
						startCleanup = 0;
						finder.colCpt += 1;
					}
					else {
						cellLevel.removeChild(cellLevel.firstChild);
						startCleanup = level + 1
					}
			}
			if (startCleanup) {
				var nextColumn = document.getElementById("level-" + startCleanup);
				while (nextColumn) {
					finderContent.removeChild(nextColumn);
					finder.colCpt -= 1;
					nextColumn = document.getElementById("level-" + ++startCleanup);
				}
			}
			
			// request
			var req = new XMLHttpRequest();
			req.open("POST", sConnUrl, false); // synchrone
			req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
			req.send("command=" + command + "&path="+escape(path) + "&Type=" + ressourceType);
			var respDom = req.responseXML.documentElement;
			
			
			var list = document.createElement('UL');
			list.style.height= getWindowHeight() - scrollbarPlaceholder_offset + "px";
			cellLevel.appendChild(list);
			
			switch (respDom.tagName) {
				case 'ls' :
					// import listing
					var rows = respDom.getElementsByTagName('row');
					var row, listItem, icon;
			
					for (var i = 0 ; i<rows.length ; i++){
						row = rows[i];
						listItem = document.createElement('li');
						if (row.getAttribute('folderish') != "0")
							listItem.className = 'folderish';
						else
							listItem.className = 'contentish';
				
						icon = document.createElement('img');
						with (icon) {
							src = row.getAttribute('icon');
							width = "16";
							height = "16";
							border = "0";
						}
				
						listItem.path = row.getAttribute('path');
						listItem.link = row.getAttribute('link');
						listItem.appendChild(icon);
						listItem.appendChild(document.createTextNode(row.firstChild.nodeValue));
						list.appendChild(listItem);
					}
					break;
				case 'info' :
					var li = document.createElement('li');
					list.appendChild(li);
					li.innerHTML = respDom.firstChild.nodeValue;
					
					// add create link button
					li = document.createElement('li');
					li.style.textAlign = 'center';
					var createLinkBtn = document.createElement('button');
					var text = (ressourceType == 'Image') ? 'Insert' : 'Create link';
					createLinkBtn.appendChild(document.createTextNode(text));
					
					createLinkBtn.onclick = function(){
					    var url = respDom.lastChild.firstChild.nodeValue;
					    switch(window.parent.name) {
					        case 'FCKeditorDialog_PlinnImage' :
    							    window.parent.updateOrInsertImage(url);
    							      break;
    						  case 'FCKBrowseWindow' :
    						  default:
    						      var funcNum = GetUrlParam('CKEditorFuncNum');
    						      window.opener.CKEDITOR.tools.callFunction(funcNum, url);
        							break;
					    }
					    window.close();
					};
					
					list.appendChild(li);
					li.appendChild(createLinkBtn);
					break;
			}
			
			if (prevColNum != finder.colCpt) {
				var finderWidth = finder.colCpt * cellWidth;
				finder.style.width = finderWidth + "px";
				if (finder.colCpt - prevColNum > 0) {
					var start = (window.scrollX) ? window.scrollX : document.body.scrollLeft;
					var stop = finder.colCpt * cellWidth - getWindowWidth();
					smoothScroll(start, stop);
				}
			}
		}
		
		function smoothScroll(start, stop) {
			start += scrollXStep;
			window.scroll(start, 0);
			if (start < stop) {
				setTimeout('smoothScroll(' + start + ', ' + stop + ')', scrollTimeStep);
			}
		}

		
		// ]]>
		</script>
	</head>
	<body>
	<table  id="finder" cellspacing="0">
	<tr id="finderContent">
	<td id="level-0"><ul>
			<li class="folderish">Folder</li>
			<li class="contentish">Content</li>
		</ul>
	</td>
	</tr>
	</table>
  </body>
</html>