//
// Global vars already set for you
//   NEB_serverName
//   NEB_outerPath
//   NEB_resServerName

//
//
// Nebula Functions already defined for you to use
//   
//   NEB_getResource( path ) - returns url eg. NEB_getResource( 'foo.gif' );
//   NEB_getServerName() 
//
var scrw= screen.width
var scrh= screen.height
var nextEditWinId = 1;
var loader;
//
// Nebula Event handlers
//   Implement Me !
//
//  OnLoad
//
// before page loads
function NEB_onDesktopInit() {}	
// before anything gets loaded
function NEB_onStartDesktopLoad() {}
// before any panels are loaded
function NEB_onStartPanelLoad() {}
panels = new Array();
// after a specific panel has loaded
function NEB_onEndDesktopLoad(){}

function NEB_onPanelLoaded( panelId, elementPath, display ) {
  loader.loadMessage(panelId);
  loader.sparkle();
  
  
  
  if( display != "default" ) {
    var panel = new Object();
    panel.id = panelId;
    panel.display = display;
    panel.elementPath = elementPath;
    // the main panel has loaded, lets init the content for it.
//    InitContent( panel );
  }
}	
// after all panels load
function NEB_onEndPanelLoad(panelId) { 
}
// before any content onLoad handlers are called
function NEB_onStartContentLoad() {}
// after all content onLoad handlers have been called
function NEB_onEndContentLoad() {}
// all done loading
function NEB_onEndDesktopLoad() {
//	alert( 'loading' )
//	Nebula();
}
//
//
//  OnUnload
//
// before any unloading happens
function NEB_onStartDesktopUnload() {}
// before any panels are unloaded
function NEB_onStartPanelUnload() {}
// after a specific panel has unloaded
function NEB_onPanelUnloaded( panelId ) {}
// after all panels are unloaded
function NEB_onEndPanelUnload() {}
// before any content onUnload handlers are called
function NEB_onStartContentUnload() {}
// after all content onUnload handlers have been called
function NEB_onEndContentUnload() {}
// Everything unloded 
function NEB_onEndDesktopUnload() {}


//
//  Implementation ----------------------------------
//
// the atom object is here for you to use as a base for consuming other objects.
// you should not consume the atom... 
// -------------------------------------
// the atom consumes. 
// the atom is not consumed.
var atom = new Atom();
menuObjects = Array();
	  
// -------------------------------------

function Atom(){
//  var menuObjects;
  this.atom = new function(){
	  // just a constructor.
  }
  
  this.displayAll = function(){
	var msg = "";
	for( i in this ){
	   msg += i + ' : ' + this[i] + "\n";
	}  
    return msg;
  }
}

//var xml = new XmlHttpObject();
//alert('xml' + xml);
//xml.connect("/node/home");

function Nebula(){
  try {
	SwapContent("main", "/node/home");
  }catch(e){
	alert( 'error in nebula:' + e.description )
  }
}

panelContentObjs = new Array(); 

loader = new Loader('infoDisplay');

function addEditable(){
  	
}

function SendComment(path){
	cdata = document.getElementById('commentContent').value;
	
//	alert('sending ' + document.getElementById('commentContent').parentElement.nodeName)
//	panel = getPanelContentObject( path );
//	loader.loadMessage('executing save action... ');
	var xmlhttp = new XmlHttpObject(path, false);
//	xmlhttp.designateToPanel(panel);
  	xmlhttp.postComment("<content><![CDATA["+cdata+"]]></content>");
//	loader.sparkle();
//	document.getElementById('commentPanel').style.visibility='hidden';
	document.getElementById('commentLink').style.visibility='visible';
	removePanelContentObject(path);
	SwapContent('main', path, "");
}

function ShowComments(path){
	var xmlhttp = new XmlHttpObject(path, 'main', null, true);
//	xmlhttp.designateToPanel(panel);
  	xmlhttp.showComments(path);
//	document.getElementById('commentPanel').style.visibility='visible';
	document.getElementById('commentLink').style.visibility='hidden';
}

function SwapContent(panel, node, display){
	if(!!getPanelContentObject(node)){
		pan = getPanelContentObject(node);
		loader.loadMessage(pan.decsription);
		loader.sparkle();
	}else {
		loader.loadMessage('retrieving new content...');
		loader.sparkle();
	}
	
  	var xmlhttp = new XmlHttpObject(node, panel, display);
//	xmlhttp.designateToPanel(panel);
  	xmlhttp.connect();
//	loader.loadMessage('booyha');
//	loader.sparkle();

}

function CreateBlogList(panel, node){
  	var xmlhttp = new XmlHttpObject(node, panel, 'blogDir');
//	xmlhttp.designateToPanel(panel);
  	xmlhttp.connect();
}


function SetEditable( path ){
	panel = getPanelContentObject( path );
	panel.edit();
//	document.getElementById('main').appendChild(panel.editor.div);
}

function toggleHTMLSrc(path, rte, buttons){
//	alert(path);
	panel = getPanelContentObject( path );
	panel.editor.toggleHTMLSrc(rte, buttons);
}

function rteCommand(path, rte, command, option){
	panel = getPanelContentObject( path );
	panel.editor.rteCommand(rte, command, option);
}

function dlgColorPalette(path, rte, command, option){
	panel = getPanelContentObject( path );
	panel.editor.dlgColorPalette(rte, command, option);
}
function dlgInsertLink(path, rte, command){
	panel = getPanelContentObject( path );
	panel.editor.dlgInsertLink(rte, command);
}
function addImage(path, rte){
	panel = getPanelContentObject( path );
	panel.editor.addImage(rte);
}
function dlgInsertTable(path, rte, command){
	panel = getPanelContentObject( path );
	panel.editor.dlgInsertTable(rte, command);
}
function checkspell(path){
	panel = getPanelContentObject( path );
	panel.editor.checkSpell();
}
function saveContent(pnl, path, rte){
	panel = getPanelContentObject( path );
	panel.editor.updateRTE(rte);
	panel.editor.setHiddenVal(rte);
	
	var xmlhttp = new XmlHttpObject(path, false);
//	xmlhttp.designateToPanel(panel);
  	xmlhttp.sendBack(document.getElementById('hdn'+rte).value);
	removePanelContentObject(panel.contentPath);
	SwapContent(pnl, panel.contentPath)
  
}


function NEB_onPanelLoaded(id, defLoc, foo){
	return true;
	
//    if( defLoc && !!defLoc.indexOf('/script/')){
		//xmlhttp = new XmlHttpObject('/node'+defLoc, id);
		//xmlhttp.connect();
		//panel = getPanelContentObject(defLoc);
		//SwapContent(panel, defLoc);
	
	//}	
}


function displayContent( id ){
  if( id == "import" ) {
	
	forum = new ForumHandler();
    document.getElementById("content").innerHTML = id;	
  }
}


// key checking
function checkArrows( field, evt ) {
  var keyCode = 
    document.layers ? evt.which :
    document.all ? event.keyCode :
    document.getElementById ? evt.keyCode : 0;
  var r = '';
  var tmpdom = atom.GetResponseDom();
  
  if (keyCode == 39 || keyCode == 13) {
	if( field.className == "menu_group_active" ){
	  //say( 'returning' );
	  return;  
    }
	r += 'arrow right or enter';
	var newnode = tmpdom.selectSingleNode("//NebulaMenu[@name='"+field.name+"']");
    try {
//      for( i in atom ){
//		alert( i + ' ' + atom[i] );
//		for( j in atom[i] ){
//		  alert( "-->" + j + ' ' + atom[i][j] );	
//		}
//	  }
  	  atom.addToMenu( newnode, field.id );
	} catch(e){
      say( 'couldnt expand atom ' + e.description )
	}
  } else if (keyCode == 40) {
	changeField(keyCode,field)
//	document.getElementById( field.id ).nextSibling.focus();
    r += 'arrow down';
  } else if (keyCode == 38) {
    r += 'arrow up';
//	mp.expandNode( field.id	)
  } else if (keyCode == 37) {
    //say( 'lastfieldid: ' + lastfieldid  + ' field.id: ' + field.id);
	var name = document.getElementById(field.id).getAttribute("name");
    var node = document.getElementById(name);
	//say( 'node ' + node.getAttribute("class"))
	if( field.className == "menu_group" ){
	  return;
    } 
	//alert( retractable )
	atom.retractNode( field.id );
    r += 'arrow left';
    r += ' ' + keyCode;
	var msg = '';
	var x=0;
  } 
  r += ' ' + keyCode;
  window.status = r;
//  alert(r);
  return true;
}

function changeField(x,y){
     numElements = document.getElementsByTagName('div').length
	 var els = document.getElementsByTagName('div');
	 say( numElements );
//     var newnode = tmpdom.selectSingleNode("//NebulaMenu[@name='"+field.name+"']");

	 for (i=0;i<numElements;i++){
          if (els[i] == y){
               curLoc = i
          }
     }
     if (x==37||x==38){
          if(curLoc>0){
               els[curLoc-1].focus()
          }
     }
     if (x==39||x==40){
          if(curLoc<numElements-1){
               els[curLoc+1].focus()
          }
     }
}




/**************************************/
//
// Popup
//
function show_popup( layerId ) {

  if (document.getElementById(layerId).style.visibility == 'hidden') {
    document.getElementById(layerId).style.visibility = 'visible';
	} else {
	  document.getElementById(layerId).style.visibility = 'hidden';
	}

}

function popup_mnuitem_clicked(layerId, action, url) {
//	alert(url);
  document.getElementById(layerId).style.visibility = 'hidden';
  if (action == 'edit') {
//  	alert('Opening Editor . . .');
//		document.location = url;
    openEditorWin( url );
  } else if (action == 'goto') {
		
  		document.location = url;
  } else if (action == 'properties') {
//  	alert('Opening Properties . . .');
//		document.location = url;
    openEditorWin( url );
  } else if (action == 'delete') {
    if (confirm("Permenantly Remove Element!\nAre You Sure?")) {
//    	alert('Deleting Element!');
  		document.location = url;
    }
  }
}
function popup_mnuitem_over(thediv, over) {
  
	if (over) {
	  thediv.style.background = '#88AAFE';
	  thediv.style.color = '#FFFFFF';
	} else {
	  thediv.style.background = '#FFFFFF';
	  thediv.style.color = '#336699';
	}
	
}

function edit_wrapper_out(wrapperDiv, editbarId) {
  document.getElementById(editbarId).style.visibility = 'hidden';
//	wrapperDiv.style.border = '0px solid #FFFFFF';
//	wrapperDiv.style.padding = '1px';
}
function edit_wrapper_over(wrapperDiv, editbarId) {
  document.getElementById(editbarId).style.visibility = 'visible';
//	wrapperDiv.style.padding = '0px';
//	wrapperDiv.style.border = '1px solid #0000FF';
}

// editor


function openEditorWin( location ) {
  window.location=location;
/*
	w = 640;
	h = 600;
  lpos= (scrw - w) / 2;
  tpos= (scrh - h) / 2;
	myId = nextEditWinId++;
  newWindow = window.open(location, 
													'editwin_' + myId, 
													'width=' + w + ', height=' + h + ', left='+lpos+', top='+tpos+', toolbar=no, location=no, directories=no, status=yes, scrollbars=auto, resizable=yes');
  newWindow.focus();
  */
}

function openPageWin( action, elementPath, windowName ) {
	w = 640;
	h = 600;
  lpos= (scrw - w) / 2;
  tpos= (scrh - h) / 2;
  newWindow = window.open('http://' + NEB_serverName + '/' + action + elementPath, 
													windowName, 
													'width=' + w + ', height=' + h + ', left='+lpos+', top='+tpos+', toolbar=no, location=no, directories=no, status=yes, scrollbars=yes, resizable=yes');
  newWindow.focus();
}

function openHelpWin( elementPath, windowName ) {
	w = 500;
	h = 500;
  lpos= (scrw - w) / 2;
  tpos= (scrh - h) / 2;
  newWindow = window.open('http://' + NEB_serverName + '/syshelp.php' + elementPath, 
													windowName, 
													'width=' + w + ', height=' + h + ', left='+lpos+', top='+tpos+', toolbar=no, location=no, directories=no, status=yes, scrollbars=yes, resizable=yes');
  newWindow.focus();
}

function clearme( who ) {
	who.value = '';
//	who.select();
//	document.getElementById(who.id).value = "";
}

function isValidBLiveName( name ) {

}

function bliveNameField_OnKeyPress( textBox, evt ) {
  
	
	// name too long
  if( textBox.value.length >= 32 ) {
    evt.returnValue = false;
    return false
  }
	
	// lowercase a - z, number or '-'
  if((evt.keyCode >= 97 && evt.keyCode <= 122) || (evt.keyCode >=48 && evt.keyCode <= 57) || evt.keyCode == 45 || evt.keyCode == 95  ){ 
    evt.returnValue = true; 
	  return true;
  }
	
	// change uppercase A-Z to lower
  if( evt.keyCode >= 65 && evt.keyCode <= 90 ) {
//	  evt.keyCode += 32;
	  evt.returnValue = true; 
	  return true;
	}
	
	evt.returnValue = false;
	return false
  
}

function openDevPanelWin( from ) {
         devWindow = window.open('/devpanel/', 'dev_panel_win', 'width=900, height=700, toolbar=no, location=no, directories=no, status=yes, scrollbars=yes, resizable=yes');
         devWindow.focus();
}

function NEB_openInIFrame( panelId, url ) {
	
  	panel = getPanelContentObject(panelId);
	var iframe = document.createElement('iframe');
	iframe.src=url;
	iframe.style.border='1px solid #FFFFFF';
	iframe.style.width='90%';
	iframe.style.height='300';
	
	document.getElementById(panelId).innerHTML="";
	document.getElementById(panelId).appendChild(iframe);
	
}
