var x = 0;
var y = 0;
var observers = new Array();
var fact_observers = new Array();

function setupListeners()
{
   if (context == null) 
	  	return;
   count = 0;
   request = "getCount.php?load=views";
	// Set up the observers that detect mouse clicks on the geometry
	 count = sendRequest(request);
	 var i = 1;
	 for (i=1;i<=count;i++){
      observers[i] = setListenerObserver("SkyPort"+i+"Touch", "touchTime", new Function('fx', 'sensorTouched("SkyPort'+i+'", "")'));
   }
}

function sensorTouched(f, t)
{
  document.getElementById('manipulation').style.visibility = "visible";
  addToSky(f);
  removeBack();
  addFacts(f);
  document.getElementById('statusArea').innerHTML = "Facts are added to sky.";
  changeView();
  document.getElementById('statusArea').innerHTML = "View is rotating."; 
  document.getElementById('statusArea').innerHTML = "Sky view.";
} 

function addObservers()
{
   if (context == null) 
	  	return;
   str = "";
   request = "getCount.php?load=facts"; 
	 var arr = new Array();
	 str = sendRequest(request);
   str = str.substr(0,str.length-1);
	 arr = str.split(",");
	 for (i=0;i<arr.length;i++){
      fact_observers[i] = setFactListenerObserver(i,"FactTouch" + i, "touchTime", new Function('fx', 'factTouched('+arr[i]+', "")'));
   }
}

function addToSky(nodeName){
   context = browser.getExecutionContext(); 
       if (context == null)
	       {
		        alert("Couldn't get executionContext object!");
		        return;
	       }  
  
    var node = context.getNode(nodeName);
    x = node.translation.x;
    z = node.translation.z;
    
    var camera = context.getNode("TO-SKY");
    camera.position.x = x;
    camera.position.z = z;
}

function removeBack(){
   context = browser.getExecutionContext(); 
       if (context == null)
	       {
		        alert("Couldn't get executionContext object!");
		        return;
	       }  
	 
  var rootnodes = context.getRootNodes();       
	var i;
	var top = rootnodes.length - 1;
  var node = context.getRootNodes()[top-1]; 
   if (node.getName()=="BACK") 
    context.removeRootNode(node);
  rootnodes = context.getRootNodes();
  removeFacts();
}

function addFacts(nodeName){
   context = browser.getExecutionContext(); 
       if (context == null)
	       {
		        alert("Couldn't get executionContext object!");
		        return;
	       }  
    
    var node = context.getNode(nodeName);
    x = node.translation.x;
    z = node.translation.z;
    
    request = "php_response.php";
    request += "?load=facts";
    request += "&x="+x;
    request += "&z="+z; 
    
    if (document.getElementById('history').checked == true)
        request += "&history=true";
      else
        request += "&history=false";
    if (document.getElementById('people').checked == true)
        request += "&people=true";
      else
        request += "&people=false";
    if (document.getElementById('art').checked == true)
        request += "&art=true";
      else
        request += "&art=false";       
   if (document.getElementById('low').checked == true)
        request += "&res=low";
      else
        request += "&res=high";
    request += "&sensor=" + nodeName; 
    
    var str = "";
    str = sendRequest(request);
    createX3DFromString(str);
    addObservers();
}

function changeView(){
   context = browser.getExecutionContext();
    if (context == null)
	     {
		      alert("Couldn't get executionContext object!");
		      return;
	     } 
   var camera = context.getNode("TO-SKY");
	 camera.set_bind = true;
} 
 
function viewBack(){
  var context = browser.getExecutionContext();
    if (context == null)
	     {
		      alert("Couldn't get executionContext object!");
		      return;
	     } 
	 
  var rootnodes = context.getRootNodes();   
	var top = rootnodes.length - 1;
  var camera = context.getRootNodes()[top]; 
  if (camera.getName() == "BACK")
    camera.set_bind = true;
  else
  {   
    camera = context.getRootNodes()[top-1]; 
  
    if (camera.getName() == "BACK")
       {
          camera.set_bind = true;
          removeFacts();
       }
    }     
  document.getElementById('statusArea').innerHTML = "View is back.";
  document.getElementById('manipulation').style.visibility = "hidden";
  document.getElementById('f_info').innerHTML = ""; 
}

function changeFacts(){
    removeFacts();
    request = "php_response.php";
    request += "?load=change";
    request += "&x="+x;
    request += "&z="+z; 
    if (document.getElementById('history').checked == true)
        request += "&history=true";
      else
        request += "&history=false"; 
    if (document.getElementById('people').checked == true)
        request += "&people=true";
      else
        request += "&people=false";
    if (document.getElementById('art').checked == true)
        request += "&art=true";
      else
        request += "&art=false";   
   if (document.getElementById('low').checked == true)
        request += "&res=low";
      else
        request += "&res=high";
    var str = "";
    str = sendRequest(request);   
    createX3DFromString(str);
    addObservers();
   document.getElementById('statusArea').innerHTML = 'facts were changed to your selection'; 
}

function moveBox(move_dir){
   document.getElementById('statusArea').innerHTML = "box is moving to " + move_dir;
   context = browser.getExecutionContext(); 
       if (context == null)
	       {
		        alert("Couldn't get executionContext object!");
		        return;
	       }  
    
    var rootnodes = context.getRootNodes();       
	  var top = rootnodes.length - 1;
	  var facts_group = context.getRootNodes()[top];
	  
	  if (facts_group.getName() == "Facts"){
       switch (move_dir){
         case 'left': 
            facts_group.translation.x = facts_group.translation.x - move_x;
            break;
         case 'right':
            facts_group.translation.x = facts_group.translation.x + move_x;
            break;
         case  'up':
            facts_group.translation.z = facts_group.translation.z + move_z;
            break;
          case 'down':
            facts_group.translation.z = facts_group.translation.z - move_z;
            break;
          case  'back':
           //
           if (count<15) {
            facts_group.translation.y = facts_group.translation.y + move_y;
            move_x += d_y;
            move_z += d_y;
            count++;
            if (((count%5)==0 )&&(count!=0)){
               document.getElementById('statusArea').innerHTML = 'magnifying Years in scale';
               moveScale('back');
               
             }  
            } 
            break;
          case  'for':
            var camera = context.getNode("TO-SKY");
            if ((camera.position.y + move_y*2) >= (facts_group.translation.y - move_y))
            {} else {
                       facts_group.translation.y = (facts_group.translation.y - move_y) ;
                       move_x -= d_y;
                       move_z -= d_y;
                       count--;
                       if (((count%5)==0)&&(count!=0))
                          moveScale('for');
                }
            break; 
          case 'for and right':
            var camera = context.getNode("TO-SKY");
            if ((camera.position.y + move_y*2) >= (facts_group.translation.y - move_y))
            {} else {
                facts_group.translation.y = (facts_group.translation.y - move_y) ;
                move_x -= d_y;
                move_z -= d_y;
                count--;
                if (((count%5)==0)&&(count!=0))
                     moveScale('for');
              }  
            facts_group.translation.x = facts_group.translation.x + move_x;
            break;
          case 'for and left':
            var camera = context.getNode("TO-SKY");
            if ((camera.position.y + move_y*2) >= (facts_group.translation.y - move_y))
            {} else {
                facts_group.translation.y = (facts_group.translation.y - move_y) ;
                move_x -= d_y;
                move_z -= d_y;
                count--;
                if (((count%5)==0)&&(count!=0))
                       moveScale('for');
              }  
            facts_group.translation.x = facts_group.translation.x - move_x;
            break;     
             
       }
     }    
}

function factTouched(f,t){
   request = "getCount.php?load=info";
   request =  request + "&id=" + f;
   str = sendRequest(request);
   if (str == "")
     document.getElementById('f_info').innerHTML = "no additional info available";
   else
     document.getElementById('f_info').innerHTML = str; 
   document.getElementById('f_info').style.visibility = "visible";  
}



// JavaScript Document
