



function history(f){
    eval(f);
}

function goto(f){
    var r = Math.random();
    frames['hFrame'].location.href = 'historyMan.jsp?f=' + f + '&r=' + r;
}

function hideCleMenu(divid) {
    document.getElementById(divid).innerHTML="";
    document.getElementById(divid).style.display='none';
}

function showContactList() {
    document.getElementById('contacts').style.display="block";
    document.getElementById('adduser').style.display="none";
    document.getElementById('events').style.display="none";
    document.getElementById('status').style.display="none";
    document.getElementById('call').style.display="none";
    document.getElementById('clemenu').style.display="none";
    document.getElementById('dialog').style.display="none";
    document.getElementById('more').style.display="none";
    document.getElementById('help').style.display="none";
    document.getElementById('phonebook').style.display="none";
    clearTimeout(dtimer);
    clearTimeout(cltimer);
    clearTimeout(etimer);
    clearTimeout(cstimer);
    updateContacts();
    setTimeout("menuForContacts()", 200);
}

function buildMenu(item1, item2, item3, item4) {
    document.getElementById('item1').innerHTML=item1;
    document.getElementById('item2').innerHTML=item2;
    document.getElementById('item3').innerHTML=item3;
    document.getElementById('item4').innerHTML=item4;
}

var backFromStatus = "cl";
function showChangeStatus(from) {
    backFromStatus = from;
    document.getElementById('clemenu').style.display="none";
    document.getElementById('contacts').style.display="none";
    document.getElementById('call').style.display="none";
    document.getElementById('events').style.display="none";
    document.getElementById('dialog').style.display="none";
    document.getElementById('more').style.display="none";
    document.getElementById('help').style.display="none";
    document.getElementById('phonebook').style.display="none";
    
    if(from == 'callphone') {
        document.getElementById('item1').innerHTML=
            "\n<a class=\"aincl\" target=\"cl\" onclick=\"javascript:openCallPhoneForm()\">" +
            "\n<img src=\"../images/big/back.png\" border=\"0\"/><br />Back</a>";
    } else if(from == 'events'){
        document.getElementById('item1').innerHTML=
            "\n<a class=\"aincl\" target=\"cl\" onclick=\"javascript:showEvents()\">" +
            "\n<img src=\"../images/big/back.png\" border=\"0\"/><br />Back</a>";
    } else {
        document.getElementById('item1').innerHTML=
            "\n<a class=\"aincl\" target=\"cl\" onclick=\"javascript:showContactList()\">" +
            "\n<img src=\"../images/big/back.png\" border=\"0\"/><br />Back</a>";
    }
    document.getElementById('item2').innerHTML="";
    document.getElementById('item3').innerHTML="";
    document.getElementById('item4').innerHTML="";
    getStatus();
    
}

function showForm() {
    document.getElementById('msgform').style.display='block';
}

function hideForm() {
    document.getElementById('msgform').style.display='none';
}

function gotoForm() {
    location="#top";
    document.getElementById('msg').focus();
}

var curKeyId = null;
var curDivId = null;
var curNameId = null;
var curMenuNormal = null;
function showCleMenu(divid, key, name, push, normal) {
    if((curKeyId != null) && (!push)) {
        hideCleMenu(curDivId);
        if(curKeyId == key) {
            curKeyId = null;
            curDivId = null;
            curNameId = null;
            return;
        }
    }
    curKeyId = key;
    curDivId = divid;
    curNameId = name;
    curMenuNormal = normal;
    
    chat_visibility = 'visible';
    if(!normal) {chat_visibility = 'hidden';}
    
    if(key.indexOf('+') != -1) {
        key = '___' + key.substring(1, key.length);
    }
    document.getElementById(divid).innerHTML=
        "\n<input onclick=\"openCallForm(\'" + key + "\', \'" + escape(encodeURIComponent(name)) + "\', " + normal + ")\" type=\"image\" src=\"../images/big/start_call.png\" value=\"Call\" border=\"0\" />"
        + 
        ((normal)
        ?
        "\n<input onclick=\"showDialog(\'" + key + "\', \'" + escape(encodeURIComponent(name)) + "\')\" type=\"image\" src=\"../images/big/start_chat.png\" value=\"Chat\" border=\"0\" />"
        :
        "\n<input onclick=\"openSmsForm(\'" + key + "\', \'" + escape(encodeURIComponent(name)) + "\')\" type=\"image\" src=\"../images/big/sms_but.png\" value=\"SMS\" border=\"0\" />"
        )
        + "\n<a href=\"#top\"><img src=\"../images/big/up.png\" alt=\"Up\" border=\"0\" /></a>"
    ;
    
    document.getElementById(divid).style.display='block';
}

var cltimer;
function updateContacts() {
    cltimer = setTimeout("updateContacts();", 20000);
    var ucxhr = false;
    try { 
        ucxhr = new XMLHttpRequest();
        if (ucxhr.overrideMimeType) {
            ucxhr.overrideMimeType('text/xml');
        }
    } catch(e) {
        ucxhr = new ActiveXObject(Microsoft.XMLHTTP);
    } 
    
    ucxhr.onreadystatechange = function() {
        if(ucxhr.readyState == 4) {
            if(ucxhr.status  == 200) {
                var answer = ucxhr.responseText; 
                if(answer.indexOf('[response]:') < 0) {
                    alert('ERROR in parsing response!');
                    return;
                }
                var r = answer.substring(answer.indexOf('[response]:')+11, answer.length); 
                document.getElementById('contacts').innerHTML=r; 
                
                if(curDivId != null) {
                    showCleMenu(curDivId, curKeyId, curNameId, true, curMenuNormal);
                }
                
                /*if(answer.indexOf('[event]:') < 0) {
                    return;
                }*/
                var event = answer.substring(answer.indexOf('[event]:')+8, answer.indexOf('[response]:'));
                if((event.length > 2) && (answer.indexOf('[event]:') >= 0)) {
                    popup(event + "<br /><br />"
                        + "<button onclick=\"answerCall()\" value=\"yes\" class=\"bluebig\"> Ok </button>&nbsp;&nbsp;&nbsp;"
                        + "<button onclick=\"cancelCall()\" value=\"no\" class=\"bluebig\"> Cancel </button>"
                    );
                }
                var executeStr = answer.substring(answer.indexOf('[execute]:')+10, answer.indexOf('[event]:'));
                if((executeStr.length > 2) && (answer.indexOf('[execute]:') >= 0)) {
                    eval(executeStr);
                }
               
            } else {
                document.getElementById('contacts').innerHTML="Error code " + ucxhr.status + ". Possible connection lost.";
            }
        }
    }; 
    ucxhr.open("GET", "get_contacts.jsp", true); 
    ucxhr.send(null);
}

function getStatus() {
    var xhr = false;
    try { 
        xhr = new XMLHttpRequest(); 
    } catch(e) {
        xhr = new ActiveXObject(Microsoft.XMLHTTP);
    } 
    
    xhr.onreadystatechange = function() {
        if(xhr.readyState == 4) {
           if(xhr.status  == 200) {
               document.getElementById('status').innerHTML=xhr.responseText; 
           } else {
               document.getElementById('status').innerHTML="Error code " + xhr.status;
           }
        }
    }; 
    document.getElementById('status').style.display="block";
    document.getElementById('status').innerHTML="Loading..."; 
    xhr.open("GET", "status.jsp?action=get", true); 
    xhr.send(null);
}

function setStatus(value) {
    var xhr = false;
    try { 
        xhr = new XMLHttpRequest(); 
    } catch(e) {
        xhr = new ActiveXObject(Microsoft.XMLHTTP);
    } 
    
    xhr.onreadystatechange = function() {
        if(xhr.readyState == 4) {
           //showContactList();
        }
    }; 
    xhr.open("GET", "status.jsp?action=set&value=" + value, true); 
    xhr.send(null);
    showContactList();
}

var lastKey = "";
var lastName = "";
function openCallForm(key, name, normal) {
    name=unescape(name);
    name=decodeURIComponent(name);
    lastKey = key;
    lastName = name;
    document.getElementById('call').innerHTML="Loading...";
    getCallForm(normal);
    
    document.getElementById('call').style.display="block";
    document.getElementById('contacts').style.display="none";
    document.getElementById('status').style.display="none";
    document.getElementById('events').style.display="none";
    document.getElementById('clemenu').style.display="none";
    document.getElementById('dialog').style.display="none";
    document.getElementById('more').style.display="none";
    document.getElementById('help').style.display="none";
    document.getElementById('phonebook').style.display="none";
    
    menuForCall(normal);
    try {
        document.getElementById('callnick').innerHTML=name;
        document.getElementById('key').value=key;
    } catch(e){}
    
}

function getCallForm(normal) {
    var cfxhr = false;
    try { 
        cfxhr = new XMLHttpRequest(); 
    } catch(e) {
        cfxhr = new ActiveXObject(Microsoft.XMLHTTP);
    } 
    
    cfxhr.onreadystatechange = function() {
        if(cfxhr.readyState == 4) {
           if(cfxhr.status  == 200) {
               document.getElementById('call').innerHTML=cfxhr.responseText; 
               document.getElementById('callnick').innerHTML=lastName;
               document.getElementById('key').value=lastKey;
               scrollUp();
           } else {
               document.getElementById('call').innerHTML="Error code " + cfxhr.status;
           }
        }
    }; 
    cfxhr.open("GET", "call.jsp?startcall=no&normal="+normal, true); 
    cfxhr.send(null);
}

function startCallContact() {
    var cnumber = document.getElementById('cnumber').value;
    var key = document.getElementById('key').value;
    
    if(!checkNumber(cnumber)) {
        alert('Please enter correct phone number');
        return;
    }
    
    var xhr = false;
    try { 
        xhr = new XMLHttpRequest(); 
    } catch(e) {
        xhr = new ActiveXObject(Microsoft.XMLHTTP);
    } 
    
    xhr.onreadystatechange = function() {
        if(xhr.readyState == 4) {
           if(xhr.status  == 200) {
               document.getElementById('callform').innerHTML=xhr.responseText; 
           } else {
               document.getElementById('call').innerHTML="Error code " + xhr.status;
           }
        }
    }; 
    var params = "&id=" + encodeURI(key) + "&cnumber=" + encodeURI(cnumber);
    document.getElementById('call').style.display="block";
    document.getElementById('callform').innerHTML="Calling...";
    document.getElementById('contacts').style.display="none";
    document.getElementById('events').style.display="none";
    document.getElementById('status').style.display="none";
    document.getElementById('dialog').style.display="none";
    document.getElementById('more').style.display="none";
    document.getElementById('help').style.display="none";
    document.getElementById('phonebook').style.display="none";
    xhr.open("GET", "call.jsp?startcall=yes"+params, true); 
    xhr.send(null);
    menuForCall();
    
    updateCallingStatus();
}

function openCallPhoneForm() {
    var xhr = false;
    try { 
        xhr = new XMLHttpRequest(); 
    } catch(e) {
        xhr = new ActiveXObject(Microsoft.XMLHTTP);
    } 
    
    xhr.onreadystatechange = function() {
        if(xhr.readyState == 4) {
            if(xhr.status  == 200) {
                document.getElementById('call').innerHTML=xhr.responseText; 
                scrollUp();
            } else {
                document.getElementById('call').innerHTML="Error code " + xhr.status;
            }
        }
    }; 
    document.getElementById('call').style.display="block";
    document.getElementById('call').innerHTML="Loading...";
    document.getElementById('contacts').style.display="none";
    document.getElementById('status').style.display="none";
    document.getElementById('events').style.display="none";
    document.getElementById('clemenu').style.display="none";
    document.getElementById('dialog').style.display="none";
    document.getElementById('more').style.display="none";
    document.getElementById('help').style.display="none";
    document.getElementById('phonebook').style.display="none";
    xhr.open("GET", "call_phone.jsp?startcall=no", true); 
    xhr.send(null);
    menuForCallPhone();
}

function startCallPhone(contname, contnumber) {
    var cpnumber = document.getElementById('cpnumber').value;
    if(contname && contnumber) {
        //call from phone book
        if(contnumber.indexOf('+') != -1) {
            contnumber = '___' + contnumber.substring(1, contnumber.length);
    }
    } else {
        if(!checkNumber(cpnumber)) {
            alert('Please enter correct phone number');
            return;
        }
    }
    
    var xhr = false;
    try { 
        xhr = new XMLHttpRequest(); 
    } catch(e) {
        xhr = new ActiveXObject(Microsoft.XMLHTTP);
    } 
    
    xhr.onreadystatechange = function() {
        if(xhr.readyState == 4) {
            if(xhr.status  == 200) {
                document.getElementById('bubblecallyournumber').style.display="none";
                document.getElementById('callphoneform').innerHTML=xhr.responseText; 
            } else {
                document.getElementById('call').innerHTML="Error code " + xhr.status;
            }
        }
    }; 
    
    var params = "";
    if(contname && contnumber) {
        params += "&contnumber=" + encodeURI(contnumber) + "&contname=" + encodeURI(contname);
    } else {
        params += "&cpnumber=" + encodeURI(cpnumber);
        var saveContact = document.getElementById('saveascontact').checked;
        var contactid = document.getElementById('contactid').value;
        if(saveContact && (contactid == '' || contactid == 'Enter contact name...'))  {
            alert('Please, enter correct contact name.');
            return;
        }
        if(saveContact) {
            params += "&savecontact=yes&contactid=" + encodeURIComponent(contactid);
        }
    }
    
    document.getElementById('phonebookform').style.display="none";
    document.getElementById('callphoneform').style.display="block";
    document.getElementById('callphoneform').innerHTML="Calling...";
    document.getElementById('contacts').style.display="none";
    document.getElementById('events').style.display="none";
    document.getElementById('status').style.display="none";
    document.getElementById('clemenu').style.display="none";
    document.getElementById('dialog').style.display="none";
    document.getElementById('more').style.display="none";
    document.getElementById('help').style.display="none";
    document.getElementById('phonebook').style.display="none";
    
    document.getElementById('callphoneselectbar').style.display="none";
    
    xhr.open("GET", "call_phone.jsp?startcall=yes"+params, true); 
    xhr.send(null);
    menuForCall();
    
    updateCallingStatus();
}

var cstimer;
function updateCallingStatus() {   
    clearTimeout(cltimer);
    clearTimeout(etimer);
    clearTimeout(dtimer);
    var xhr = false;
    try { 
        xhr = new XMLHttpRequest(); 
    } catch(e) {
        xhr = new ActiveXObject(Microsoft.XMLHTTP);
    } 
    xhr.onreadystatechange = function() {
        if(xhr.readyState == 4) {
            if(xhr.status == 200) {
                try {
                    document.getElementById('callstatus').innerHTML=xhr.responseText; 
                    if(xhr.responseText.indexOf('Call ended') != -1) {
                        document.getElementById('hangupButton').src="../images/big/back.png";
                    }
                } catch(e){}
            } else {
                document.getElementById('callstatus').innerHTML="Error code " + xhr.status;
            }
        }
    }; 
    xhr.open("GET", "utils.jsp?command=getcallingstatus", true); 
    xhr.send(null);
    
    cstimer = setTimeout("updateCallingStatus()", 20000);
}

function answerCall() {
    var ccxhr = false;
    try { 
        ccxhr = new XMLHttpRequest(); 
    } catch(e) {
        ccxhr = new ActiveXObject(Microsoft.XMLHTTP);
    } 
    ccxhr.onreadystatechange = function() {
        if(ccxhr.readyState == 4) {
        }
    }; 
    ccxhr.open("GET", "call.jsp?answercall=yes", true); 
    ccxhr.send(null);
    
    popup('Establishing connection. Please wait...' + "<br /><br />"
        + "<input onclick=\"javascript:cancelCall()\" id=\"hangupButton\" type=\"image\" src=\"../images/big/hang_up.png\" value=\"Hang up\" border=\"0\" />&nbsp;&nbsp;&nbsp;"
        //+ "<button onclick=\"cancelCall()\" value=\"cancel\" class=\"bluebig\">Cancel Call</button>&nbsp;&nbsp;&nbsp;"
    );
}

function cancelCall() {
    var ccxhr = false;
    try { 
        ccxhr = new XMLHttpRequest(); 
    } catch(e) {
        ccxhr = new ActiveXObject(Microsoft.XMLHTTP);
    } 
    ccxhr.onreadystatechange = function() {
        if(ccxhr.readyState == 4) {
        }
    }; 
    ccxhr.open("GET", "call.jsp?cancelcall=yes", true); 
    ccxhr.send(null);
    showContactList();
    unpop();
}

function cancelCallPhone() {
    var ccxhr = false;
    try { 
        ccxhr = new XMLHttpRequest(); 
    } catch(e) {
        ccxhr = new ActiveXObject(Microsoft.XMLHTTP);
    } 
    ccxhr.onreadystatechange = function() {
        if(ccxhr.readyState == 4) {
        }
    }; 
    ccxhr.open("GET", "call_phone.jsp?cancelcall=yes", true); 
    ccxhr.send(null);
    showContactList();
}

function menuForContacts() {
    buildMenu(
        "\n<a class=\"aincl\" target=\"cl\" onclick=\"goto('openCallPhoneForm()')\">" +
        "\n<img src=\"../images/big/call_phone.png\" border=\"0\"/><br />Call Phone</a>",
        //"\n<a class=\"aincl\" target=\"cl\" onclick=\"showChangeStatus('cl')\">" +
        "\n<a class=\"aincl\" target=\"cl\" onclick=\"goto('showChangeStatus(\\'cl\\')')\">" +
        "\n<img src=\"../images/big/status.png\" border=\"0\"/><br />Status</a>",
        "\n<a class=\"aincl\" target=\"cl\" onclick=\"goto('showEvents()')\">" +
        "\n<img src=\"../images/big/events.png\" border=\"0\"/><br />Events</a>",
        "\n<a class=\"aincl\" target=\"cl\" onclick=\"goto('showMoreMenu()')\">" +
        "\n<img src=\"../images/big/more.png\" border=\"0\"/><br />More</a>"
    );
}

function menuForMore() {
    buildMenu(
        "\n<a class=\"aincl\" target=\"cl\" onclick=\"javascript:showContactList()\">" +
        "\n<img src=\"../images/big/back.png\" border=\"0\"/><br />Back</a>",
        "",
        "",
        ""
    );
}

function menuForMoreCall() {
    var callnick = document.getElementById('callnick').innerHTML;
    var key = document.getElementById('key').value;
    buildMenu(
        "\n<a class=\"aincl\" target=\"cl\" onclick=\"javascript:openCallForm('" + key + "', '" + escape(encodeURIComponent(callnick)) + "', true)\">" +
        "\n<img src=\"../images/big/back.png\" border=\"0\"/><br />Back</a>",
        "",
        "",
        ""
    );
}

function menuForMoreCall(normal) {
    var callnick = document.getElementById('callnick').innerHTML;
    var key = document.getElementById('key').value;
    buildMenu(
        "\n<a class=\"aincl\" target=\"cl\" onclick=\"javascript:openCallForm('" + key + "', '" + escape(encodeURIComponent(callnick)) + "', " + normal + ")\">" +
        "\n<img src=\"../images/big/back.png\" border=\"0\"/><br />Back</a>",
        "",
        "",
        ""
    );
}

function menuForPhoneBook() {
    buildMenu(
        "\n<a class=\"aincl\" target=\"cl\" onclick=\"javascript:showContactList()\">" +
        "\n<img src=\"../images/big/back.png\" border=\"0\"/><br />Back</a>",
        "\n<a class=\"aincl\" target=\"cl\" onclick=\"javascript:openAddPhoneBookUserForm()\">" +
        "\n<img src=\"../images/big/add_user.png\" border=\"0\"/><br />Add Contact</a>",
        "",
        ""
    );
}

function clearMenu() {
    buildMenu(
        "",
        "",
        "",
        ""
    );
}

function menuForChat(key, name) {
    buildMenu(
        "\n<a class=\"aincl\" target=\"cl\" onclick=\"showEvents()\">" +
        "\n<img src=\"../images/big/events.png\" border=\"0\"/><br />Events</a>",
        "\n<a class=\"aincl\" target=\"cl\" onclick=\"openCallForm(\'" + key + "\', \'" + escape(encodeURIComponent(name)) + "\', true)\">" +
        "\n<img src=\"../images/big/call.png\" border=\"0\"/><br />Call</a>",
        "\n<a class=\"aincl\" target=\"cl\" onclick=\"showContactList()\">" +
        "\n<img src=\"../images/big/contacts.png\" border=\"0\"/><br />Contacts</a>",
        "\n<a class=\"aincl\" target=\"cl\" onclick=\"closeDialog()\">" +
        "\n<img src=\"../images/big/close.png\" border=\"0\"/><br />Close Chat</a>"
    );
}

function menuForCall(normal) {
    buildMenu(
        "\n<a class=\"aincl\" target=\"cl\" onclick=\"showEvents()\">" +
        "\n<img src=\"../images/big/events.png\" border=\"0\"/><br />Events</a>",
        "\n<a class=\"aincl\" target=\"cl\" onclick=\"showChangeStatus('call')\">" +
        "\n<img src=\"../images/big/status.png\" border=\"0\"/><br />Status</a>",
        "\n<a class=\"aincl\" target=\"cl\" onclick=\"showContactList()\">" +
        "\n<img src=\"../images/big/contacts.png\" border=\"0\"/><br />Contacts</a>",
        "\n<a class=\"aincl\" target=\"cl\" onclick=\"showMoreMenuForCall(" + normal + ")\">" +
        "\n<img src=\"../images/big/more.png\" border=\"0\"/><br />More</a>"
    );
}

function menuForCallPhone() {
    buildMenu(
        "\n<a class=\"aincl\" target=\"cl\" onclick=\"showEvents()\">" +
        "\n<img src=\"../images/big/events.png\" border=\"0\"/><br />Events</a>",
        "\n<a class=\"aincl\" target=\"cl\" onclick=\"showChangeStatus('callphone')\">" +
        "\n<img src=\"../images/big/status.png\" border=\"0\"/><br />Status</a>",
        "\n<a class=\"aincl\" target=\"cl\" onclick=\"showContactList()\">" +
        "\n<img src=\"../images/big/contacts.png\" border=\"0\"/><br />Contacts</a>",
        "\n<a class=\"aincl\" target=\"cl\" onclick=\"showHelp('callphone')\">" +
        "\n<img src=\"../images/big/help.png\" border=\"0\"/><br />Help</a>"
    );
}

function menuForChangeNumber() {
    buildMenu(
        "\n<a class=\"aincl\" target=\"cl\" onclick=\"openCallPhoneForm()\">" +
        "\n<img src=\"../images/big/back.png\" border=\"0\"/><br />Back</a>",
        "\n<a class=\"aincl\" target=\"cl\" onclick=\"setMyNumber()\">" +
        "\n<img src=\"../images/big/accept.png\" border=\"0\"/><br />Accept</a>",
        "\n<a class=\"aincl\" target=\"cl\" onclick=\"showContactList()\">" +
        "\n<img src=\"../images/big/contacts.png\" border=\"0\"/><br />Contacts</a>",
        "\n<a class=\"aincl\" target=\"cl\" onclick=\"showHelp('callphone')\">" +
        "\n<img src=\"../images/big/help.png\" border=\"0\"/><br />Help</a>"
    );
}

function menuForEvents() {
    buildMenu(
        "\n<a class=\"aincl\" target=\"cl\" onclick=\"javascript:showContactList()\">" +
        "\n<img src=\"../images/big/back.png\" border=\"0\"/><br />Back</a>",
        "\n<a class=\"aincl\" target=\"cl\" onclick=\"javascript:showChangeStatus('events')\">" +
        "\n<img src=\"../images/big/status.png\" border=\"0\"/><br />Status</a>",
        "\n<a class=\"aincl\" target=\"cl\" onclick=\"javascript:showContactList()\">" +
        "\n<img src=\"../images/big/contacts.png\" border=\"0\"/><br />Contacts</a>",
        "\n<a class=\"aincl\" target=\"cl\" onclick=\"javascript:clearEvents()\">" +
        "\n<img src=\"../images/big/close.png\" border=\"0\"/><br />Clear</a>"
    );
}

function onChatLoad(key) {
    menuForChat(key);
    updateDialog();
}

function scrollUp() {
    setTimeout(function(){window.scrollTo(0, 1);}, 100);
}

function onMainLoad() {
    showContactList();
}

function showChangeMyCountry() {
    var xhr = false;
    try { 
        xhr = new XMLHttpRequest(); 
    } catch(e) {
        xhr = new ActiveXObject(Microsoft.XMLHTTP);
    } 
    
    xhr.onreadystatechange = function() {
        if(xhr.readyState == 4) {
           if(xhr.status  == 200) {
               document.getElementById('mycountry').innerHTML=xhr.responseText; 
           } else {
               document.getElementById('mycountry').innerHTML="Error code " + xhr.status;
           }
        }
    }; 
    document.getElementById('mycountry').style.display="block";
    document.getElementById('mycountry').innerHTML="Loading...";
    document.getElementById('myfullnumber').style.display="none";
    xhr.open("GET", "utils.jsp?command=getmycountries", true); 
    xhr.send(null);
}

function showChangeCallingCountry() {
    var xhr = false;
    try { 
        xhr = new XMLHttpRequest(); 
    } catch(e) {
        xhr = new ActiveXObject(Microsoft.XMLHTTP);
    } 
    
    xhr.onreadystatechange = function() {
        if(xhr.readyState == 4) {
           if(xhr.status  == 200) {
               document.getElementById('callcountry').innerHTML=xhr.responseText; 
           } else {
               document.getElementById('callcountry').innerHTML="Error code " + xhr.status;
           }
        }
    }; 
    document.getElementById('callcountry').style.display="block";
    document.getElementById('callcountry').innerHTML="Loading...";
    document.getElementById('callnumber').style.display="none";
    xhr.open("GET", "utils.jsp?command=getcallcountries", true); 
    xhr.send(null);
}

function setMyCountry() {
    var xhr = false;
    try { 
        xhr = new XMLHttpRequest(); 
    } catch(e) {
        xhr = new ActiveXObject(Microsoft.XMLHTTP);
    } 
    
    xhr.onreadystatechange = function() {
        if(xhr.readyState == 4) {
           if(xhr.status  == 200) {
               document.getElementById('mycountry').innerHTML=xhr.responseText; 
           } else {
               document.getElementById('mycountry').innerHTML="Error code " + xhr.status;
           }
        }
    }; 
    var selIndex = document.getElementById('mycountrybox').selectedIndex;
    comboValue = document.getElementById('mycountrybox').options[selIndex].value;
    params = "&value="+comboValue;
    document.getElementById('mycountry').innerHTML="Updating...";
    document.getElementById('myfullnumber').style.display="block";
    xhr.open("GET", "utils.jsp?command=setmycountry"+params, true); 
    xhr.send(null);
}

function setCallCountry() {
    var xhr = false;
    try { 
        xhr = new XMLHttpRequest(); 
    } catch(e) {
        xhr = new ActiveXObject(Microsoft.XMLHTTP);
    } 
    
    xhr.onreadystatechange = function() {
        if(xhr.readyState == 4) {
           if(xhr.status  == 200) {
               document.getElementById('callcountry').innerHTML=xhr.responseText; 
               document.getElementById('callnumber').style.display="block";
           } else {
               document.getElementById('callcountry').innerHTML="Error code " + xhr.status;
           }
        }
    }; 
    var selIndex = document.getElementById('callcountrybox').selectedIndex;
    comboValue = document.getElementById('callcountrybox').options[selIndex].value;
    params = "&value="+comboValue;
    document.getElementById('callcountry').innerHTML="Updating...";
    xhr.open("GET", "utils.jsp?command=setcallcountry"+params, true); 
    xhr.send(null);
}

function showChangeMyNumber() {
    var xhr = false;
    try { 
        xhr = new XMLHttpRequest(); 
    } catch(e) {
        xhr = new ActiveXObject(Microsoft.XMLHTTP);
    } 
    
    xhr.onreadystatechange = function() {
        if(xhr.readyState == 4) {
           if(xhr.status  == 200) {
               document.getElementById('mynumber').innerHTML=xhr.responseText; 
           } else {
               document.getElementById('mynumber').innerHTML="Error code " + xhr.status;
           }
        }
    }; 
    document.getElementById('mynumber').innerHTML="Loading...";
    document.getElementById('bubblecallphonediv').style.display="none";
    xhr.open("GET", "utils.jsp?command=getmynumber", true); 
    xhr.send(null);
    menuForChangeNumber();
}

function setMyNumber() {
    var cnumber = document.getElementById('cnumber').value;
    
    if(!checkNumber(cnumber)) {
        alert('Please enter correct phone number');
        return;
    }
    
    var xhr = false;
    try { 
        xhr = new XMLHttpRequest(); 
    } catch(e) {
        xhr = new ActiveXObject(Microsoft.XMLHTTP);
    } 
    
    xhr.onreadystatechange = function() {
        if(xhr.readyState == 4) {
           if(xhr.status  == 200) {
               openCallPhoneForm();
           } else {
               document.getElementById('mynumber').innerHTML="Error code " + xhr.status;
           }
        }
    }; 
    
    params = "&cnumber=" + encodeURI(cnumber);
    document.getElementById('mynumber').innerHTML="Updating...";
    xhr.open("GET", "utils.jsp?command=setmynumber"+params, true); 
    xhr.send(null);
}

function showEvents() {
    updateEvents();
    document.getElementById('events').style.display="block";
    document.getElementById('events').innerHTML="Loading...";
    document.getElementById('call').style.display="none";
    document.getElementById('contacts').style.display="none";
    document.getElementById('status').style.display="none";
    document.getElementById('clemenu').style.display="none";
    document.getElementById('dialog').style.display="none";
    document.getElementById('more').style.display="none";
    document.getElementById('help').style.display="none";
    document.getElementById('phonebook').style.display="none";
    menuForEvents();
}

function showMoreMenu() {
    document.getElementById('more').style.display="block";
    document.getElementById('call_more').style.display="none";
    document.getElementById('main_more').style.display="block";
    document.getElementById('call').style.display="none";
    document.getElementById('events').style.display="none";
    document.getElementById('contacts').style.display="none";
    document.getElementById('status').style.display="none";
    document.getElementById('clemenu').style.display="none";
    document.getElementById('dialog').style.display="none";
    document.getElementById('help').style.display="none";
    document.getElementById('phonebook').style.display="none";
    menuForMore();
}

function showMoreMenuForCall() {
    document.getElementById('more').style.display="block";
    document.getElementById('call_more').style.display="block";
    document.getElementById('main_more').style.display="none";
    document.getElementById('call').style.display="none";
    document.getElementById('events').style.display="none";
    document.getElementById('contacts').style.display="none";
    document.getElementById('status').style.display="none";
    document.getElementById('clemenu').style.display="none";
    document.getElementById('dialog').style.display="none";
    document.getElementById('help').style.display="none";
    document.getElementById('phonebook').style.display="none";
    menuForMoreCall();
}

function showMoreMenuForCall(normal) {
    document.getElementById('more').style.display="block";
    document.getElementById('call_more').style.display="block";
    document.getElementById('main_more').style.display="none";
    document.getElementById('call').style.display="none";
    document.getElementById('events').style.display="none";
    document.getElementById('contacts').style.display="none";
    document.getElementById('status').style.display="none";
    document.getElementById('clemenu').style.display="none";
    document.getElementById('dialog').style.display="none";
    document.getElementById('help').style.display="none";
    document.getElementById('phonebook').style.display="none";
    menuForMoreCall(normal);
}

var etimer;
function updateEvents() {
    clearTimeout(etimer);
    clearTimeout(cltimer);
    clearTimeout(dtimer);
    clearTimeout(cstimer);
    etimer = setTimeout("updateEvents();", 20000);
    var xhr = false;
    try { 
        xhr = new XMLHttpRequest(); 
    } catch(e) {
        xhr = new ActiveXObject(Microsoft.XMLHTTP);
    } 
    
    xhr.onreadystatechange = function() {
        if(xhr.readyState == 4) {
           if(xhr.status  == 200) {
               document.getElementById('events').innerHTML=xhr.responseText; 
           } else {
               document.getElementById('events').innerHTML="Error code " + xhr.status;
           }
        }
    }; 
    xhr.open("GET", "events.jsp?command=getevents", true); 
    xhr.send(null);
}

function closeDialog() {
    showContactList();
}

var lastDialogKey = "";
var lastDialogName = "";
function showDialog(key, name) {
    name=unescape(name);
    name = decodeURIComponent(name);
    if(lastDialogKey != key) {
        document.getElementById('messages').innerHTML="Loading...";
    }
    lastDialogKey = key;
    lastDialogName = name;
    
    updateDialog(key);
    document.getElementById('sendid').value = key;
    document.getElementById('chatnick').innerHTML=name;
    
    document.getElementById('dialog').style.display="block";
    document.getElementById('call').style.display="none";
    document.getElementById('contacts').style.display="none";
    document.getElementById('status').style.display="none";
    document.getElementById('clemenu').style.display="none";
    document.getElementById('events').style.display="none";
    document.getElementById('more').style.display="none";
    document.getElementById('help').style.display="none";
    document.getElementById('phonebook').style.display="none";
    menuForChat(key, name);
}

var dtimer;
function updateDialog(key) {
    clearTimeout(cltimer);
    clearTimeout(etimer);
    clearTimeout(cstimer);
    dtimer = setTimeout("updateDialog('" + key + "');", 15000);
    var xhr = false;
    try { 
        xhr = new XMLHttpRequest(); 
    } catch(e) {
        xhr = new ActiveXObject(Microsoft.XMLHTTP);
    } 
    
    xhr.onreadystatechange = function() {
        if(xhr.readyState == 4) {
            if(xhr.status  == 200) {
                var answer = xhr.responseText; 
                if(answer.indexOf('[response]:') < 0) {
                    alert('ERROR in parsing response!');
                    return;
                }
                var r = answer.substring(answer.indexOf('[response]:')+11, answer.length); 
                document.getElementById('messages').innerHTML=r; 
                //gotoForm();
                
                if(answer.indexOf('[event]:') < 0) {
                    return;
                }
                var event = answer.substring(answer.indexOf('[event]:')+8, answer.indexOf('[response]:'));
                if(event.length > 0) {
                    popup(event + "<br /><br />"
                        + "<button onclick=\"answerCall()\" value=\"yes\" class=\"bluebig\"> Ok </button>&nbsp;&nbsp;&nbsp;"
                        + "<button onclick=\"cancelCall()\" value=\"no\" class=\"bluebig\"> Cancel </button>"
                    );
                }
                //gotoForm();
                //document.getElementById('messages').innerHTML=xhr.responseText; 
            } else {
                document.getElementById('messages').innerHTML="Error code " + xhr.status;
            }
        }
    }; 
    var params = "id=" + encodeURI(key);
    xhr.open("GET", "get_messages.jsp?"+params, true); 
    xhr.send(null);
}

function sendMsg() {
    var xhr = false;
    try { 
        xhr = new XMLHttpRequest(); 
    } catch(e) {
        xhr = new ActiveXObject(Microsoft.XMLHTTP);
    } 
    
    xhr.onreadystatechange = function() {
        if(xhr.readyState == 4) {
            if(xhr.status  == 200) {
                var answer = xhr.responseText; 
                if(answer.indexOf('[response]:') < 0) {
                    alert('ERROR in parsing response!');
                    return;
                }
                var r = answer.substring(answer.indexOf('[response]:')+11, answer.length); 
                document.getElementById('messages').innerHTML=r; 
                gotoForm();
                
                if(answer.indexOf('[event]:') < 0) {
                    return;
                }
                var event = answer.substring(answer.indexOf('[event]:')+8, answer.indexOf('[response]:'));
                if(event.length > 0) {
                    popup(event + "<br /><br />"
                        + "<button onclick=\"answerCall()\" value=\"yes\" class=\"bluebig\"> Ok </button>&nbsp;&nbsp;&nbsp;"
                        + "<button onclick=\"cancelCall()\" value=\"no\" class=\"bluebig\"> Cancel </button>"
                    );
                }
                
                //document.getElementById('messages').innerHTML=xhr.responseText; 
            } else {
                document.getElementById('messages').innerHTML="Error code " + xhr.status;
            }
        }
    }; 
    var sendid = document.getElementById('sendid').value;
    var msg = document.getElementById('msg').value;
    if(msg == '') {
        return;
    }
    var params = "id=" + encodeURI(sendid) + "&sendmsg=" + encodeURI(msg);
    xhr.open("GET", "get_messages.jsp?"+params, true); 
    xhr.send(null);
    document.getElementById('msg').value="";
}

function viewProfile() {
    var callnick = document.getElementById('callnick').innerHTML;
    var key = document.getElementById('key').value;
    if(key.indexOf('___') == 0) {
        key = '+' + key.substring(3, key.length);
    }
    
    alert('Nick: ' + callnick + '\nID: ' + key.substring(0, key.indexOf('@')) );
}

function deleteContact(confirmed) {
    var callnick = document.getElementById('callnick').innerHTML;
    var key = document.getElementById('key').value;
    if(confirmed) {
        sendDelUser(key);
    } else {
        var reallyDelete = confirm("Do you really want to remove " + callnick + " from contact list?");
        if(reallyDelete) {
            deleteContact(true);
        }
    }
    
}

function openAddUserForm() {
    
    document.getElementById('adduser').style.display="block";
    document.getElementById('help').style.display="none";
    document.getElementById('call').style.display="none";
    document.getElementById('contacts').style.display="none";
    document.getElementById('status').style.display="none";
    document.getElementById('clemenu').style.display="none";
    document.getElementById('events').style.display="none";
    document.getElementById('more').style.display="none";
    document.getElementById('dialog').style.display="none";
    document.getElementById('phonebook').style.display="none";
}

function addUser() {
    var xhr = false;
    try { 
        xhr = new XMLHttpRequest(); 
    } catch(e) {
        xhr = new ActiveXObject(Microsoft.XMLHTTP);
    } 
    
    xhr.onreadystatechange = function() {
        if(xhr.readyState == 4) {
            if(xhr.status  == 200) {
                var answer = xhr.responseText;
            } else {
            }
        }
    }; 
    var userid = document.getElementById('userid').value;
    var usernick = document.getElementById('usernick').value;
    if(userid == '') {
        alert('Please enter correct Skype Name');
        return;
    }
    var params = "&userid=" + encodeURI(userid) + "&usernick=" + encodeURI(usernick);
    xhr.open("GET", "utils.jsp?command=adduser"+params, true); 
    xhr.send(null);
    document.getElementById('userid').value="";
    document.getElementById('usernick').value="";
    showContactList();
}

function sendDelUser(userid) {
    var xhr = false;
    try { 
        xhr = new XMLHttpRequest(); 
    } catch(e) {} 
    
    xhr.onreadystatechange = function() {
        if(xhr.readyState == 4) {
            if(xhr.status  == 200) {
                var answer = xhr.responseText;
            } else {
            }
        }
    }; 
    var params = "&userid=" + encodeURI(userid);
    xhr.open("GET", "utils.jsp?command=deluser"+params, true); 
    xhr.send(null);
    showContactList();
}

function prepareConferenceCall() {
    clearTimeout(cltimer);
    
    document.getElementById('contacts').style.display="block";
    document.getElementById('contacts').innerHTML = "Loading...";
    document.getElementById('adduser').style.display="none";
    document.getElementById('help').style.display="none";
    document.getElementById('call').style.display="none";
    document.getElementById('status').style.display="none";
    document.getElementById('clemenu').style.display="none";
    document.getElementById('events').style.display="none";
    document.getElementById('more').style.display="none";
    document.getElementById('dialog').style.display="none";
    document.getElementById('phonebook').style.display="none";
    
    var xhr = false;
    try { 
        xhr = new XMLHttpRequest();
    } catch(e) {
        xhr = new ActiveXObject(Microsoft.XMLHTTP);
    } 
    
    xhr.onreadystatechange = function() {
        if(xhr.readyState == 4) {
            if(xhr.status  == 200) {
                var answer = xhr.responseText; 
                if(answer.indexOf('[response]:') < 0) {
                    alert('ERROR in parsing response!');
                    return;
                }
                var r = answer.substring(answer.indexOf('[response]:')+11, answer.length); 
                document.getElementById('contacts').innerHTML=r; 
                
                document.getElementById('item2').innerHTML="<a class=\"aincl\" target=\"cl\" onclick=\"setConfCall()\">" +
                    "\n<img src=\"../images/big/call.png\" border=\"0\"/><br />Call</a>";
                
            } else {
                document.getElementById('contacts').innerHTML="Error code " + ucxhr.status;
            }
        }
    }; 
    xhr.open("GET", "get_contacts.jsp?confcall=true", true); 
    xhr.send(null);
}

var confUsers = null;
var confNicks = null;
function setConfCall() {
    confUsers = document.getElementsByName('confusers');
    confNicks = document.getElementsByName('confnicks');
    var checkedSize = 0;
    for (i=0; i < confUsers.length; i++) {
        if(confUsers[i].checked) {
            checkedSize++;
        }
    }
    if(checkedSize == 0) {
        alert('Please, add participants to start a conference.');
        return;
    }
    openConfCallForm();
}

function openConfCallForm() {
    var xhr = false;
    try { 
        xhr = new XMLHttpRequest(); 
    } catch(e) {
        xhr = new ActiveXObject(Microsoft.XMLHTTP);
    } 
    
    xhr.onreadystatechange = function() {
        if(xhr.readyState == 4) {
            if(xhr.status  == 200) {
                document.getElementById('call').innerHTML=xhr.responseText; 
                var callnicks = 'Conference with ';
                var checkedSize = 0;
                for (i=0; i < confUsers.length; i++) {
                    if(confUsers[i].checked) {
                        checkedSize++; 
                        callnicks += confNicks[i].innerHTML + ", ";
                    }
                }
                callnicks = callnicks.substring(0, callnicks.length-2);
                document.getElementById('callnick').innerHTML = callnicks;
            } else {
                document.getElementById('call').innerHTML="Error code " + xhr.status;
            }
        }
    }; 
    document.getElementById('call').style.display="block";
    document.getElementById('call').innerHTML="Loading...";
    document.getElementById('contacts').style.display="none";
    document.getElementById('status').style.display="none";
    document.getElementById('events').style.display="none";
    document.getElementById('clemenu').style.display="none";
    document.getElementById('dialog').style.display="none";
    document.getElementById('more').style.display="none";
    document.getElementById('help').style.display="none";
    document.getElementById('phonebook').style.display="none";
    xhr.open("GET", "call_conf.jsp?startcall=no", true); 
    xhr.send(null);
    document.getElementById('item2').innerHTML="";
    //TODO:
    //menuForConfCall();
}

function startConfCall() {
    var cnumber = document.getElementById('cnumber').value;
    var key = document.getElementById('key').value;
    
    if(!checkNumber(cnumber)) {
        alert('Please enter correct phone number');
        return;
    }
    
    var xhr = false;
    try { 
        xhr = new XMLHttpRequest(); 
    } catch(e) {
        xhr = new ActiveXObject(Microsoft.XMLHTTP);
    } 
    
    xhr.onreadystatechange = function() {
        if(xhr.readyState == 4) {
           if(xhr.status  == 200) {
               document.getElementById('callform').innerHTML=xhr.responseText; 
           } else {
               document.getElementById('call').innerHTML="Error code " + xhr.status;
           }
        }
    }; 
    var params = "&cnumber=" + encodeURI(cnumber) + "&confsize=" + confUsers.length;
    var iter = 0;
    for (i=0; i < confUsers.length; i++) {
        if(confUsers[i].checked) {
            iter++;
            if(confUsers[i].value.indexOf('+') != -1) {
                params += "&userid_"+iter + "=" + '___' + encodeURI(confUsers[i].value.substring(1, confUsers[i].value.length));
            } else {
                params += "&userid_"+iter + "=" + encodeURI(confUsers[i].value);
            }
        }
    }
    document.getElementById('call').style.display="block";
    document.getElementById('callform').innerHTML="Calling...";
    document.getElementById('contacts').style.display="none";
    document.getElementById('events').style.display="none";
    document.getElementById('status').style.display="none";
    document.getElementById('dialog').style.display="none";
    document.getElementById('more').style.display="none";
    document.getElementById('help').style.display="none";
    document.getElementById('phonebook').style.display="none";
    xhr.open("GET", "call_conf.jsp?startcall=yes"+params, true); 
    xhr.send(null);
    menuForCall();
    
    updateCallingStatus();
}

function hideOffline(hide) {
    var xhr = false;
    try { 
        xhr = new XMLHttpRequest(); 
    } catch(e) {
        xhr = new ActiveXObject(Microsoft.XMLHTTP);
    } 
    
    xhr.onreadystatechange = function() {
        if(xhr.readyState == 4) {
            if(xhr.status  == 200) {
                //swith buttons
                if(hide) {
                    document.getElementById('hideofflinemenu').innerHTML=
                        "<a class=\"aincl\" target=\"cl\" onclick=\"javascript:hideOffline(false)\">"
                        + "<img src=\"../images/big/show_offline.png\" border=\"0\"/><br />Show Offline</a>"
                    ;
                } else {
                    document.getElementById('hideofflinemenu').innerHTML=
                        "<a class=\"aincl\" target=\"cl\" onclick=\"javascript:hideOffline(true)\">"
                        + "<img src=\"../images/big/hide_offline.png\" border=\"0\"/><br />Hide Offline</a>"
                    ;
                }
                showContactList();
            } else {alert('ERROR occured');}
        }
    }; 
    var comm = 'hideoffline';
    if(!hide) {comm = 'showoffline';}
    xhr.open("GET", "utils.jsp?command="+comm, true); 
    xhr.send(null);
}

function clearEvents() {
    var xhr = false;
    try { 
        xhr = new XMLHttpRequest(); 
    } catch(e) {
        xhr = new ActiveXObject(Microsoft.XMLHTTP);
    } 
    
    xhr.onreadystatechange = function() {
        if(xhr.readyState == 4) {
            if(xhr.status  == 200) {
                
            } else {}
        }
    }; 
    
    xhr.open("GET", "utils.jsp?command=clearevents", true); 
    xhr.send(null);
    showContactList();
}

var lastShownHelp = null;
function showHelp(screen) {
    if ((lastShownHelp != null) || (lastShownHelp != screen)) {
        var xhr = false;
        try { 
            xhr = new XMLHttpRequest(); 
        } catch(e) {
            xhr = new ActiveXObject(Microsoft.XMLHTTP);
        } 
    
        xhr.onreadystatechange = function() {
            if(xhr.readyState == 4) {
                if(xhr.status  == 200) {
                    document.getElementById('help').innerHTML=xhr.responseText; 
                    gotoForm();
                } else {
                    document.getElementById('help').innerHTML="Error code " + xhr.status;
                }
            }
        }; 
        document.getElementById('help').innerHTML="Loading...";
        xhr.open("GET", "get_help.jsp?section="+screen, true); 
        xhr.send(null);
    }
    document.getElementById('help').style.display="block";
    document.getElementById('call').style.display="none";
    document.getElementById('contacts').style.display="none";
    document.getElementById('status').style.display="none";
    document.getElementById('clemenu').style.display="none";
    document.getElementById('events').style.display="none";
    document.getElementById('more').style.display="none";
    document.getElementById('dialog').style.display="none";
    document.getElementById('phonebook').style.display="none";
    
    if(screen == 'callphone') {
        buildMenu(
            "\n<a class=\"aincl\" target=\"cl\" onclick=\"javascript:openCallPhoneForm()\">" +
            "\n<img src=\"../images/big/back.png\" border=\"0\"/><br />Back</a>",
            "",
            "",
            ""
        );
    }
    
    lastShownHelp = screen;
}

function about() {
    alert('IM+ Talk.\n(c) SHAPE Services 2002-2010 \nwww.shapeservices.com \n');
}

var smsSkypeoutId;

function openSmsForm(skypeoutId, skypename) {
    smsSkypeoutId = skypeoutId;
    var xhr = false;
    try { 
        xhr = new XMLHttpRequest(); 
    } catch(e) {} 
    
    xhr.onreadystatechange = function() {
        if(xhr.readyState == 4) {
            if(xhr.status  == 200) {
                document.getElementById('call').innerHTML=xhr.responseText; 
                scrollUp();
            } else {
                document.getElementById('call').innerHTML="Error code " + xhr.status;
            }
        }
    }; 
    document.getElementById('call').style.display="block";
    document.getElementById('call').innerHTML="Loading...";
    document.getElementById('contacts').style.display="none";
    document.getElementById('status').style.display="none";
    document.getElementById('events').style.display="none";
    document.getElementById('clemenu').style.display="none";
    document.getElementById('dialog').style.display="none";
    document.getElementById('more').style.display="none";
    document.getElementById('help').style.display="none";
    document.getElementById('phonebook').style.display="none";
    var params = '';
    if(skypename) params += "&skypename=" + skypename;
    if(skypeoutId) params += "&skypeoutid=" + skypeoutId;
    xhr.open("GET", "utils.jsp?command=getsmsform"+params, true); 
    xhr.send(null);
    menuForMore();
}

function sendSms() {
    var phoneNum;
    try {
        phoneNum = document.getElementById('cpnumber').value;
    } catch(e) {}
    var smsNum;
    try {
        smsNum = document.getElementById('smsnumber').innerHTML;
    } catch(e) {}
    
    if ((!smsSkypeoutId)
        && (!phoneNum) 
        && (!smsNum)) {
        alert('Please choose phone number at first.');
        return;
    }
    
    var skypeName;
    try {
        skypeName = document.getElementById('skypeoutname').value;
        skypeName=unescape(skypeName);
        skypeName=decodeURIComponent(skypeName);
    } catch(e) {}
        
    var xhr = false;
    try { 
        xhr = new XMLHttpRequest(); 
    } catch(e) {} 
    
    xhr.onreadystatechange = function() {
        if(xhr.readyState == 4) {
            if(xhr.status  == 200) {
                document.getElementById('call').innerHTML=xhr.responseText; 
                setTimeout(function(){showContactList();}, 1000);
            } else {
                document.getElementById('call').innerHTML="Error code " + xhr.status;
            }
        }
    }; 
    var params = '';
    if(phoneNum && (document.getElementById('callphoneform').style.display == "block")) {
        params += "&phonenum=" + encodeURI(phoneNum);
    } else if (smsNum && (document.getElementById('phonebookform').style.display == "block")) {
        if(smsNum.indexOf('+') != -1) {
            smsNum = '___' + smsNum.substring(1, smsNum.length);
        }
        params += "&smsnum=" + encodeURI(smsNum);
    } else {
        params += "&skypeoutid=" + encodeURI(smsSkypeoutId);
    }
        params += "&smsbody=" + document.getElementById('smsbody').value;    
    xhr.open("GET", "utils.jsp?command=sendsms"+params, true); 
    xhr.send(null);
}


//-----------

function checkNumber(sText){
    var codelength = 0;
    try {
        ccode = document.getElementById('ccode').value;
        codelength = ccode.length;
    } catch(e) {
        cpcode = document.getElementById('cpcode').value;
        codelength = cpcode.length;
    }
    if((codelength + sText.length) < 10) {
        return false;
    }
    
    var validChars = "0123456789";
    var number = true;
    var char;
    
    for (i = 0; i < sText.length && number == true; i++) {
        char = sText.charAt(i); 
        if (validChars.indexOf(char) == -1) {
            number = false;
        }
    }
    
    return number;
}

function popup(message) {
    document.getElementById('help').style.display="none";
    document.getElementById('call').style.display="none";
    document.getElementById('contacts').style.display="none";
    document.getElementById('status').style.display="none";
    document.getElementById('clemenu').style.display="none";
    document.getElementById('events').style.display="none";
    document.getElementById('more').style.display="none";
    document.getElementById('dialog').style.display="none";
    document.getElementById('phonebook').style.display="none";
    
    document.getElementById('inpopup').innerHTML=message;
    document.getElementById('popup').style.display = "block"; 
}

function unpop() {
    document.getElementById('popup').style.display = "none";
}

function showSaveAsContactBox() {
    if(document.getElementById('contactid').style.display == 'none') {
        document.getElementById('contactid').style.display = "block";
    } else {
        document.getElementById('contactid').style.display = "none";
    }
}

function clearOnClick(inputId, defaultText) {
    if(document.getElementById(inputId).value == defaultText) {
        document.getElementById(inputId).value = '';
    }
}

function popupPhoneBook(mode) {
    document.getElementById('callphoneform').style.display = "none";
    document.getElementById('phonebookform').style.display = "block";
    if(mode == 'smsbook') {
        document.getElementById('phonebookform').innerHTML="";
    }
    getPhoneBook('phonebookform', mode);
}

function popupEnterNewNumber() {
    document.getElementById('phonebookform').style.display = "none";
    document.getElementById('callphoneform').style.display = "block";
}

function openPhoneBook() {
    document.getElementById('phonebook').style.display = "block"; 
    
    document.getElementById('help').style.display="none";
    document.getElementById('call').style.display="none";
    document.getElementById('contacts').style.display="none";
    document.getElementById('status').style.display="none";
    document.getElementById('clemenu').style.display="none";
    document.getElementById('events').style.display="none";
    document.getElementById('more').style.display="none";
    document.getElementById('dialog').style.display="none";
    
    document.getElementById('phonebook').innerHTML="";
    menuForPhoneBook();
    getPhoneBook('phonebook', 'editbook');
}

function getPhoneBook(wheretoload, mode) {
    if(document.getElementById(wheretoload).innerHTML != '') {
        return;
    }
    var xhr = false;
    try { 
        xhr = new XMLHttpRequest(); 
    } catch(e) {
        xhr = new ActiveXObject(Microsoft.XMLHTTP);
    } 
    
    xhr.onreadystatechange = function() {
        if(xhr.readyState == 4) {
           if(xhr.status  == 200) {
               document.getElementById(wheretoload).innerHTML=xhr.responseText; 
           } else {
               document.getElementById(wheretoload).innerHTML="Error code " + xhr.status;
           }
        }
    }; 
    
    document.getElementById(wheretoload).innerHTML="Loading...";
    xhr.open("GET", "utils.jsp?command=getphonebook" + "&mode="+mode, true); 
    xhr.send(null);
}

function deleteFromPhoneBook(name, visname) {
    var answer = confirm("Remove user " + visname + " from Phone Book?");
    if (!answer){
        return;
    }

    var xhr = false;
    try { 
        xhr = new XMLHttpRequest(); 
    } catch(e) {
        xhr = new ActiveXObject(Microsoft.XMLHTTP);
    } 
    
    xhr.onreadystatechange = function() {
        if(xhr.readyState == 4) {
            if(xhr.status  == 200) {
                document.getElementById('phonebook').innerHTML="";
                getPhoneBook('phonebook', 'editbook');
            } else {
                alert("Error code " + xhr.status);
            }
        }
    }; 
    
    xhr.open("GET", "utils.jsp?command=pb_deluser" + "&username="+name, true); 
    xhr.send(null);
}

function addToPhoneBook() {
    var name = document.getElementById('username').value;
    var phone = document.getElementById('userphone').value;
    
    if( name.length < 1 ) {
        alert("Please enter valid Contact Name.");
        return;
    }
    
    if( (phone.length < 4) || !checkNumber(phone) ) {
        alert("Please enter valid phone number.");
        return;
    }

    var xhr = false;
    try { 
        xhr = new XMLHttpRequest(); 
    } catch(e) {
        xhr = new ActiveXObject(Microsoft.XMLHTTP);
    } 
    
    xhr.onreadystatechange = function() {
        if(xhr.readyState == 4) {
            if(xhr.status  == 200) {
                alert('User ' + name + ' was added to contact list.');
                document.getElementById('phonebook').innerHTML="";
                menuForPhoneBook();
                getPhoneBook('phonebook', 'editbook');
            } else {
                alert("Error code " + xhr.status);
            }
        }
    }; 
    
    xhr.open("GET", "utils.jsp?command=pb_adduser" + "&username="+encodeURI(name) + "&userphone="+phone, true); 
    xhr.send(null);
}

function openAddPhoneBookUserForm() {
    document.getElementById('pbadduserform').style.display="block";
    document.getElementById('phonebooklist').style.display="none";
    
    document.getElementById('item2').innerHTML="";
}

function setSmsPhone(name, visname, number) {
    document.getElementById('phonebookform').innerHTML = 'SMS to '
        + '<span id="smsname" class="biglabel" >' + visname + '</span>'
        + '<span id="smsnumber" class="label" style="margin-left: 5px">' + number + '</span>';
}

function showWhatForPhoneNumber() {
    alert('Your phone number is required for a call back. ' +
    'Please note, that you may enter any phone number. ' +
    'It may be a landline phone number where you wish to receive a callback. ' +
    'Important: We don’t save or record your phone number. ' +
    'All information is saved on your device only. For more information, please read our FAQ.');
}

function trimString(sInString) {
  sInString = sInString.replace( /^\s+/g, "" );
  return sInString.replace( /\s+$/g, "" );
}


