var url = '.';
browser = navigator.appName;
if(!browser.match("Netscape"))
    window.location="help/notice.htm";

function login(){
    var path = url+'/php/login.php'
    var params =''
    AjaxGet(path,params,"LOGIN")
}

function changeBackground(){
  color =   document.getElementById('colors').value;
  world.setColor(color);
  world.fillRect(0,0,worldSize,worldSize);
  world.setColor('gainsboro');
  for(i=0; i<=avenues; i++)	// Plotting the grid (Karel's world) 
    world.drawLine(i*cellSize, 0, i*cellSize, cellSize*streets);
  for(i=0; i<=streets; i++)   	      
    world.drawLine(0,i*cellSize, cellSize*avenues,i*cellSize);
  saveX=karelX; saveY=karelY;
  for(i=0;i<avenues;i++)
    for(j=0;j<streets;j++) {                         
      karelX=i; karelY=j;	
      redrawBeeper();
  }
  karelX=saveX; karelY=saveY;				 
  world.paint();
  redrawKarel();
}

function designON(what){
      
    var title = document.getElementById('worldTitle').value;

    title = "Karel's world";//title.replace('*** '+design+' DESIGN ON ***','');
    document.getElementById('worldTitle').value = title;
    
    if(what !== 'none'){
        title = title.replace('\n',"");
        title=title+'*** '+what+' DESIGN ON ***';
        document.getElementById('worldTitle').value = title;
    }
    design = what;
}

function new_program(){
   clearProgram();
   document.getElementById('programTitle').value="Karel's program:";
}

function new_world(){
   clearWorld();
   if(curProgram == "map")document.getElementById('program').value="";
   //document.getElementById('worldTitle').value="Karel's world:";
}

function open_program(){
    div = document.getElementById("program_div");
    div.innerHTML='<fieldset> <legend>Open file</legend>'+
	            'Select file: <select name="combop" id="combop"></select></fieldset><br>'+
	            '<input type="button" value="Open" onclick="open_program_name(document.getElementById(\'combop\').value)">'+
                  '<input type="button" value="Cancel" onclick="div.style.visibility=\'hidden\'">';
    div.style.visibility="visible";
    var urlpath = url+'/php/open_file.php'
    var params ='?project=programs';
    AjaxGet(urlpath,params,"OPEN_PROGRAM")
}

function open_program_name(file){
    document.getElementById('programTitle').value = "Karel's program: "+file ;
    div.style.visibility='hidden';
    var path = '../programs/'+file;
    var urlpath = url+'/php/load_file.php'
    var params ='?filename='+path
    AjaxGet(urlpath,params,"LOAD_PROGRAM")

}

function open_world(){
    div = document.getElementById("world_div");
    div.innerHTML='<fieldset> <legend>Open file</legend>'+
	            'Select file: <select name="combow" id="combow"></select></fieldset><br>'+
	            '<input type="button" value="Open" onclick="open_world_name(document.getElementById(\'combow\').value)">'+
                  '<input type="button" value="Cancel" onclick="div.style.visibility=\'hidden\'">';
    div.style.visibility="visible";
    var urlpath = url+'/php/open_file.php'
    var params ='?project=worlds';
    AjaxGet(urlpath,params,"OPEN_WORLD")
}

function open_world_name(file){
    document.getElementById('worldTitle').value = "Karel's world: "+file ;
    div.style.visibility='hidden';
    var path = '../worlds/'+file;
    var urlpath = url+'/php/load_file.php'
    var params ='?filename='+path
    AjaxGet(urlpath,params,"LOAD_WORLD")
}

function upload_file(){
    if(!check('project')) return;
    div = document.getElementById("file_div");
    div.innerHTML='<form action="php/upload.php" method="post" enctype="multipart/form-data" target="upload_target" onSubmit="document.getElementById(\'proj\').value=document.getElementById(\'w_project\').value">'+
                   '<label>File:  <input name="myfile" type="file" size="30" />'+
                   '</label><br>'+
                   '<input type="hidden" name="proj" id="proj">'+
                   '<label>   <input type="submit" name="submitBtn" class="sbtn" value="Upload" />'+
                   '</label>'+
                   '<label>   <input type="button" value="Cancel" onclick="div.style.visibility=\'hidden\'">'+
                   '</label>'+
                   '<iframe id="upload_target" name="upload_target" src="#" style="width:0;height:0;border:0px solid #fff;"></iframe>'+
                   '</form>';
    div.style.visibility="visible";
}

function addCombop(options) {
    var textb = document.getElementById("txtCombop");
    var combo = document.getElementById("combop");
    var option = document.createElement("option");
    op = options.split(" ");
    for(i=0; i < op.length; i++){
	   var option = document.createElement("option");
         option.text = op[i];
	   option.value = op[i];
         if(op[i] == "") break;
	   try {
		combo.add(option, null); //Standard
	   }catch(error) {
		combo.add(option); // IE only
	   }
    }
}

function addCombow(options) {
    var textb = document.getElementById("txtCombow");
    var combo = document.getElementById("combow");
    var option = document.createElement("option");
    op = options.split(" ");
    for(i=0; i < op.length; i++){
	   var option = document.createElement("option");
         option.text = op[i];
	   option.value = op[i];
         if(op[i] == "") break;
	   try {
		combo.add(option, null); //Standard
	   }catch(error) {
		combo.add(option); // IE only
	   }
    }
}

function delete_program(){
    line=document.getElementById('programTitle').value.split(": ");
    filename = line[1];
    if(filename == undefined) {alert("Wrong file name.");return;}
    if(!confirm("Are you sure you like to delete file: "+filename))return;
    var path = '../programs/'+filename;
    var urlpath = url+'/php/remove_file.php'
    var params ='?filename='+path
    AjaxGet(urlpath,params,"REMOVE_FILE")
    document.getElementById('programTitle').value="Karel's program:";
}

function delete_world(){
    line=document.getElementById('worldTitle').value.split(": ");
    filename = line[1];
    if(filename == undefined) {alert("Wrong file name.");return;}
    if(!confirm("Are you sure you like to delete file: "+filename))return;
    var path = '../worlds/'+filename;
    var urlpath = url+'/php/remove_file.php'
    var params ='?filename='+path
    AjaxGet(urlpath,params,"REMOVE_FILE");
    document.getElementById('worldTitle').value="Karel's world:";
}

function save_program_as(){
    div = document.getElementById("program_div");
    div.innerHTML = 'Program name: <input type="text" id = "program_name" size="12" > '+  
     '<input type="button" onClick="save_new_program(document.getElementById(\'program_name\').value); div.style.visibility=\'hidden\';" value="Save" >'+
     '<input type="button" onClick="div.style.visibility=\'hidden\';" value="Cancel" >'
    div.style.visibility="visible";
}

function save_world_as(){
    div = document.getElementById("world_div");
    div.innerHTML = 'Program name: <input type="text" id = "world_name" size="12" > '+  
     '<input type="button" onClick="save_new_world(document.getElementById(\'world_name\').value); div.style.visibility=\'hidden\';" value="Save" >'+
     '<input type="button" onClick="div.style.visibility=\'hidden\';" value="Cancel" >'
    div.style.visibility="visible";
}

function save_new_program(filename){
    var valid = /^(\w)+(\.?)(\w{0,})$/;
    if(!valid.test(filename)) {
        alert("Invalid file name: "+filename);
        return;
    }
    ext = filename.split(".");
    switch(ext[1]){
        case "p": project='programs'; break;
        default: project = "wrong"; break;
    }
    if(project == "wrong"){ alert("Wrong file name: "+filename); return;}
    var path = '../'+project+'/'+filename;
    var urlpath = url+'/php/save_file.php'
    var data = 'data='+path+':::'+encodeURIComponent(document.getElementById('program').value);
    AjaxPost(urlpath,data,"SAVE_FILE")
    div.style.visibility='hidden';
    document.getElementById('programTitle').value="Karel's world: "+filename;
}

function save_new_world(filename){
    var valid = /^(\w)+(\.?)(\w{0,})$/;
    if(!valid.test(filename)) {
        alert("Invalid file name: "+filename);
        return;
    }
    ext = filename.split(".");
    switch(ext[1]){
        case "w": project='worlds'; break;
        default: project = "wrong"; break;
    }
    if(project == "wrong"){ alert("Wrong file name: "+filename); return;}
    var path = '../'+project+'/'+filename;
    var urlpath = url+'/php/save_file.php'
    var data = 'data='+path+':::'+encodeURIComponent(document.getElementById('program').value);
    AjaxPost(urlpath,data,"SAVE_FILE")
    div.style.visibility='hidden';
    document.getElementById('worldTitle').value="Karel's world: "+filename;
}


function save_program(){
    line=document.getElementById('programTitle').value.split(": ");
    filename = line[1];
    if(filename == undefined) {alert("Wrong file name.");return;}
    save_new_program(filename);
}

function save_world(){
    line=document.getElementById('worldTitle').value.split(": ");
    filename = line[1];
    if(filename == undefined) {alert("Wrong file name.");return;}
    save_new_world(filename);
}


function AjaxGet(urlpath,params,callId){
    var req = null; 
    urlpath = urlpath+params
    if(window.XMLHttpRequest)
        req = new XMLHttpRequest(); 
    else if (window.ActiveXObject){
  		req = new ActiveXObject("Microsoft.XMLHTTP");
    }
    if(req == null){ alert("Request not created");return;}
    req.onreadystatechange = function(){ 
   		if(req.readyState == 4)  AjaxResponse(req.responseText,callId);	
    };            
    req.open('GET', urlpath, true); 
	//req.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
	req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
	req.send(null); 
}

function AjaxPost(urlpath,data,callId){
    var http_request = false;
    if (window.XMLHttpRequest) { // Mozilla, Safari,...
        http_request = new XMLHttpRequest();
        if (http_request.overrideMimeType) {
         		// set type accordingly to anticipated content type
            		http_request.overrideMimeType('text/html');
        }
    } else if (window.ActiveXObject){
	    try{ http_request = new ActiveXObject("MSXML2.XMLHTTP.6.0");  }catch(e){}
  	    try{ if(!http_request) http_request = new ActiveXObject("MSXML2.XMLHTTP");  }catch(e){}
    }
    if (!http_request) { alert('Cannot create XMLHTTP instance');	return false;}
    http_request.onreadystatechange =  function () {
        if (http_request.readyState == 4) {
            if (http_request.status == 200) {
                AjaxResponse(http_request.responseText,callId);         
         	} else {
                alert('There was a problem with the request.');
         	}
        }
    }         
    http_request.open("POST", urlpath, true);
    http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    http_request.setRequestHeader("Content-length", data.length);
    http_request.setRequestHeader("Connection", "close");
    http_request.send(data);
}

function AjaxResponse(response,callId){
    switch(callId){
        case 'OPEN_PROGRAM': addCombop(response);
            break;
	  case 'LOAD_PROGRAM': 	changeMode('Source code');document.getElementById('program').value = response; 
	      break;
        case 'OPEN_WORLD': addCombow(response);
            break;
        case 'LOAD_WORLD': 	changeMode('World code');document.getElementById('program').value = response;runProgram();
            break;        
        case 'SAVE_FILE' : ;
		break;
        case 'REMOVE_FILE': //alert(response);document.getElementById('w_file').value=""; 
            break;
        default: break
    }
}

