function online_status2icon(status){
   var icon='skin/icon_questionmark.png';
   switch (status) {
      case 'busy':
         icon="<img src='skin/icon_online_busy.png'>";      
      break;
      case 'online':
         icon="<img src='skin/icon_online_available.png'>";      
      break;      
   }
   return icon;
}


function make_acceptChatMessage(initiator,chat_id){
    return initiator+' wants to chat with you! '+"<BR><a href='chat_private.php?command=accept&chat_id="+escape(chat_id)+"'>accept chat</a>";
}



// handles returning output of ajax_whoisonline.php
function handleWhoIsOnlineMenu(responseText, responseStatus){
      if((responseStatus==200)&&(responseText!='')){
         // the response is a list 
         var all=responseText.split('{whoisonline_section_delimiter}');
         var data=string2array(all[0]);
         var page_user=all[1]; 
         var html='<table class=chatmenu><TR><TH colspan=2>Click on an online contact to invite</TH></TR>';
         // deze loopt pakt whoisonline uit en processt direct per user
         for (user in data) {
            var record=data[user].split('{%^i}');
            // laat andere users dan de huidige zien in een menu
            if ((user!=page_user)&&(user!='')&&(user!=undefined)&&(page_user!='')) {
               // maak een link die de invitee uitnodigt via chat_private
               // chat_id is het id van de invitee
               var status_icon=online_status2icon(record[2]);
               // alleen bij status=online chat mogelijkheid aanbieden
               if (record[2]=='online')
                  html+="<tr><TD>"+status_icon+"</TD><TD><a href='chat_private.php?command=invite&chat_id="+page_user+"&invitee="+user+"'>"+record[1]+'</a></td></tr>';
               else
                  html+="<tr><TD>"+status_icon+"</TD><TD><span class=unavailable>"+record[1]+'</span></td></tr>';
            } else {
              // user is wel de huidige gebruiker, kijken of er boodschappen zijn
              var action=record[3];
              if (action!=''){
                   var command=action.split(':');
                   if (command[0]=='invite') {
                      // de huidige user is invitee, moet naar zelfde chatkamer geleid als de initiator
                      // dus we hebben ook een chat_id nodig, dit is user_id van de invitee
                      var initiator_aliases=command[1].split('{%^i}');
                      //var message=initiator_aliases[1]+' wants to chat with you! '+"<BR><a href='chat_private.php?command=accept&chat_id="+user+"'>accept chat</a>";
                      var message=make_acceptChatMessage(initiator_aliases[1],user);
                   }
               
                   
              }           
            
           }
         }
         html+='</table>';
         if (message!=undefined)
            html+='<br>'+message;
         document.getElementById('menu_space').innerHTML=html;
      }
}


function whoIsOnline(countObject){
       var user_id=document.getElementById('page_user').value;
       var alias=document.getElementById('page_alias').value;
       var querystring="user_id="+escape(user_id)+"&alias="+alias;
       countObject.update(querystring);
}


function handleCounter(responseText,responseStatus){
      if(responseStatus==200){
         // the response is a simpledb string
         var all=responseText.split('{whoisonline_section_delimiter}');
         var raw=string2array(all[0]);
         var page_user=all[1];
         var total_online=0;
         var list="<a href='chat_private.php'><img src='skin/icon_chat.png'></a>";
         for (user in raw) { // associative array heeft geen length!
            total_online++;
            // recordstring alleen verder splitsen voor de huidige user (bij menu verder uitsplitsen)
            if (user==page_user) {
                var data=raw[user].split('{%^i}');
                // 0 = activity
                // 1 = alias
                var action=data[3];
                if (action!=''){
                   var command=action.split(':');
                   if (command[0]=='invite') {
                      // de huidige user is invitee, moet naar zelfde chatkamer geleid als de initiator
                      // dus we hebben ook een chat_id nodig, dit is user_id van de invitee
                      var message=make_acceptChatMessage(command[1],user);
                   }
                }           

            }
         }
         if (message!=undefined)
               var html="<span class=status>"+message+"</span>";
         else if (total_online>1) {
               var html="<span class=status>Now online: "+total_online+' users. '+list+"</span>";
         } else var html="";
         document.getElementById('count_space').innerHTML=html;
      }
}


function avatarChange(command){
    //worden niet gebruikt
    //var global_alias=document.getElementById('page_alias').value; 
    //var global_avatar=document.getElementById('page_avatar').value;
    //var global_username=document.getElementById('page_user').value;
    var querystring="user_id="+controlObject.username+"&alias="+controlObject.alias+"&avatar="+encodeURI(controlObject.avatar);
    switch(command){
       case 'save':
           querystring+="&command="+command;
           querystring+="&input="+document.getElementById('alias_entry').value;
       break;
       case 'next':
       case 'prev':
           querystring+="&command="+command;
       break;
       default:
           
       break;
    }
    controlObject.update(querystring);
}


function handleAvatarChange(responseText, responseStatus){
      if(responseStatus==200){
         // the response is complete HTML menu
         // which is bullshit 
         // the processor should be more generic
         var changes=responseText.split('|');
         var avatar=changes[2];
         var command=changes[3];
         // dit wijzigt alleen de afbeelding in het Avatar Control venster
         document.getElementById('userAvatar').src=avatar;
         // dit wijzigt global de nieuwe uitgezochte, maar nog niet bevestigde avatar
         controlObject.avatar=avatar;
         controlObject.alias=changes[4];
         if (command=='save') {
            // doorgeven aan de 5 afbeeldingen van de chatbox
            controlObject.destination.src=avatar;
            document.getElementById(controlObject.name_destination).innerHTML=changes[4];
            // doorgeven aan de chat-sessie via veld op de pagina
            document.getElementById('page_avatar').value=avatar;
            document.getElementById('page_alias').value=changes[4];
            // 
         }
      }
}


function getChats(chat_object){
    var chat_id=chat_object.chat_id;
    var form_id='chatform';
    var entry=document.getElementById(form_id).chat_entry.value;
    // de page variabelen worden door de chatbox snippet geintroduceerd
    var page_avatar=document.getElementById('page_avatar').value;
    var page_alias=document.getElementById('page_alias').value;
    var page_user=document.getElementById('page_user').value;
    var querystring="chat_id="+chat_id+"&alias="+page_alias+"&user_id="+page_user+"&avatar="+encodeURI(page_avatar)+"&chat_input="+entry;
    chat_object.update(querystring);
    document.getElementById(form_id).chat_entry.value='';
    document.getElementById(form_id).chat_entry.focus();
    chat_object.inactivity_counter=0;
    chat_object.checked_in=true;
}


function readChats(chat_object){
    var chat_id=chat_object.chat_id;
    if (chat_object.checked_in){
       var page_avatar=document.getElementById('page_avatar').value;
       var page_alias=document.getElementById('page_alias').value;
       var page_user=document.getElementById('page_user').value;
       var querystring="chat_id="+chat_id+"&user_id="+page_user+"&alias="+page_alias+"&avatar="+encodeURI(page_avatar);
       chat_object.update(querystring);
       chat_object.inactivity_counter++;
       if (chat_object.inactivity_counter>5000) {
          // exit the room
          checkout(chat_id,chat_object);
       }
   }    
}


// handles returning output of both read and write 
function handleChat(responseText, responseStatus){
      if(responseStatus==200){
         // split the response in an id, result, online count, status messages
         var result=responseText.split("[result_delimiter]");
         var statusbar_id='statusbar';
         // de avatars en aliases zijn opgeslagen in velden van de snippet
         var avatar_string_id='avatar_string';
         var avatar_string=document.getElementById(avatar_string_id).value;
         var aliases_string_id='aliases_string';
         var aliases_string=document.getElementById(aliases_string_id).value;         
         //alert(responseText);
         var usernames=result[6].split(','); //losse usernames om te vergelijken met huidige user
         if (result[5]!=avatar_string) {
            document.getElementById(avatar_string_id).value=result[5];
            var images=result[5].split(','); //losse avatars
            for (var key=0;key<5;key++) {
               var image_destination='avatar_image'+key;
               if (images[key]==undefined) images[key]='/avatar/empty.png';
               var final_destination=document.getElementById(image_destination);
               final_destination.src=images[key];
               // de destinations voor de huidige user opslaan in het global control object
            }
         }
         if (result[4]!=aliases_string) {
            document.getElementById(aliases_string_id).value=result[4];
            var aliases=result[4].split(',');//de alias string, loopt gelijk op
            for (var key=0;key<5;key++) {
               var name_destination='name'+key;
               if (aliases[key]==undefined) {aliases[key]='';
               document.getElementById(name_destination).innerHTML=aliases[key];
               }
               
            }
         }
         // HTML zoals geretourneerd door script weergeven in de DIV met chat_id dat is opgeslagen in result[0]
         if (result[3]!='exit') {
            document.getElementById(result[0]).innerHTML=result[1];
         }
         // hoe dan ook de online counters bijstellen, eerst ophalen
         var online_count_string=document.getElementById(result[0]+'_online_count').value;
         var online_count=string2array(online_count_string);
         if ((online_count[result[0]]==undefined)||(online_count[result[0]]!=result[2])) {
            online_count[result[0]]=result[2];
            online_count_string=array2string(online_count);
            document.getElementById(result[0]+'_online_count').value=online_count_string;
            writeChatMenu(result[0],result[2]);
         }
         
      }
}


function checkout(chat_id,chat_object){
    chat_object.checked_in=false;
    var querystring="chat_id="+chat_id+"&alias="+chat_object.alias+'&chat_input=exit';
    document.getElementById(chat_id).innerHTML="<span class=status>You have checked out of this room.</span><BR>";
    chat_object.update(querystring);
}


function readChatMenu(){
    // reserve querystring for path
    var querystring="";
    menuObject.update(querystring);
}

function writeChatMenu(chat_id,count){
    // reserve querystring for path
    var querystring="chat_id="+chat_id+"&count="+count;
    menuObject.update(querystring);
}


// handles returning output of both read and write 
function handleChatMenu(responseText, responseStatus){
      if(responseStatus==200){
         // the response is complete HTML menu
         // which is bullshit 
         // the processor should be more generic
         document.getElementById('menu_space').innerHTML=responseText;
      }
}


function getShouts(shoutspace_id,shout_object){
    var form_id=shoutspace_id+'_form';
    var entry=document.getElementById(form_id).shout_entry.value;
    var querystring="shout_id="+shoutspace_id+"&shout_input="+entry+"&alias="+shout_object.alias;
    // optionele databasename voor de shouts    
    if (shout_object.dbfilename!=undefined){
       querystring+="&dbfilename="+shout_object.dbfilename;    
    }
    shout_object.update(querystring);
    document.getElementById(form_id).shout_entry.value='';
}


function handleShout(responseText, responseStatus){
      if(responseStatus==200){
         // split the response in an id and a result part
         var result=responseText.split("[result_delimiter]");
         var space=document.getElementById(result[0]);
         space.innerHTML=result[1];
      }
}


function handleBlog(responseText, responseStatus){
      if(responseStatus==200){
         document.getElementById('teasespace').innerHTML=responseText; 
      }
}


function handleContent(responseText, responseStatus){
      if(responseStatus==200){
         document.getElementById(element_id).innerHTML=responseText; 
      }
}


function putComments_deprecate(){
    var querystring="shout="+document.shoutform.shout.value+"&alias="+document.shoutform.alias.value;
    shoutbox.update(querystring); 
    document.shoutform.shout.value='';
}


function ajaxObject(url, callbackFunction) {
  var that=this;      
  this.updating = false;
  this.abort = function() {
    if (that.updating) {
      that.updating=false;
      that.AJAX.abort();
      that.AJAX=null;
    }
  }
  this.update = function(passData,postMethod) { 
    if (that.updating) { return false; }
    that.AJAX = null;                          
    if (window.XMLHttpRequest) {              
      that.AJAX=new XMLHttpRequest();              
    } else {                                  
      that.AJAX=new ActiveXObject("Microsoft.XMLHTTP");
    }                                             
    if (that.AJAX==null) {                             
      return false;                               
    } else {
      that.AJAX.onreadystatechange = function() {  
        if (that.AJAX.readyState==4) {             
          that.updating=false;                
          that.callback(that.AJAX.responseText,that.AJAX.status,that.AJAX.responseXML);        
          that.AJAX=null;                                         
        }                                                      
      }                                                        
      that.updating = new Date();                              
      if (/post/i.test(postMethod)) {
        var uri=urlCall+'?'+that.updating.getTime();
        that.AJAX.open("POST", uri, true);
        that.AJAX.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        that.AJAX.setRequestHeader("Content-Length", passData.length);
        that.AJAX.send(passData);
      } else {
        var uri=urlCall+'?'+passData+'&timestamp='+(that.updating.getTime()); 
        that.AJAX.open("GET", uri, true);                             
        that.AJAX.send(null);                                         
      }              
      return true;                                             
    }                                                                           
  }
  var urlCall = url;        
  this.callback = callbackFunction || function () { };
}


function CreateBookmarkLink() {
 title = document.title; 
 url = location.href;
	if (window.sidebar) { // Mozilla Firefox Bookmark
		window.sidebar.addPanel(title, url,"");
	} else if( window.external ) { // IE Favorite
		window.external.AddFavorite( url, title); }
	else if(window.opera && window.print) { // Opera Hotlist
		return true; }
}


function string2array(instring) {
	nw=new Array();
	if (instring!='') {
        sobject=instring.split('[*]');
        if (sobject[0]!='')
    	    keys=sobject[0].split('[|]');
    	  else keys=new Array();
    	  if (sobject[1]!='')
    	    values=sobject[1].split('[|]');
    	  else values=new Array();
        for (var k=0;k<keys.length;k++){
            nw[keys[k]]=values[k];
        } 
   }
	return nw;
}

function array2string(aarray) {
      if (aarray.length>0) {
        var keys=new Array();
        var values=new Array();
        for (var key in aarray){
            keys[key]=key;
            values[key]=aarray[key];
        }
        return keys.join('[|]')+'[*]'+values.join('[|]'); 
      } else return'';
}

