/******************************************************
 This function captures the "enter" button pression
 ******************************************************/
 
 function placeCall() {
    var current = new Date();
    if ( this.lastcall != undefined && current - this.lastcall < 300 )
        return;
    this.lastcall = current;
    
    var callbutton = document.getElementById("callbutton");
    if ( callbutton.value == closeTranslation ) {
        closeCall();
        return;
    }
                
    var VisitorContact;
    if(visitorContact == null){
        var prefix = document.getElementById("ds").value;
        var number = document.getElementById("numberac").value;
        if(number == null || number == editHereString || number == yourNumberString || number.length == 0){
            document.getElementById("numberac").focus();
            document.getElementById("numberac").value = editHereString;
            return;
        }
        VisitorContact = prefix + number;
    }
    else
        VisitorContact = visitorContact; // caso LCS

    //il pulsante di chiamata cambia stato e diventa rosso
    callbutton.value = closeTranslation;
    callbutton.className = "close";
    if(document.getElementById("ds")!= null)
        document.getElementById("ds").disabled = true;
    document.getElementById("numberac").disabled = true;
    try{
        setChangeableLanguage(0);
    } catch(e){
    //alert(e.message()
    }

    thirdPartyCall.placeCall(SubscriberID, ContactID, VisitorContact, Language, Referral, VisitorID, VisitorCookie, Referer, md5TokenHash, md5TokenTS, onCallState);
}

function closeCall() {
    thirdPartyCall.closeCall();
}

function cleanNumber(obj)
{
	var number = obj.value;

    number = number.replace(/[^\d\+]/g, ""); // tutto ciò che non è numero e neanche "+" viene eliminato
    number = number.replace(/^\+/, "00");//il "+" iniziale viene trasformato in "00"
    number = number.replace(/[^\d]/g, "");// tutto ciò che non è numero viene eliminato

    if(number.match(/^00/)){ //riconoscimento prefisso int ed eliminazione con riconoscimento combo
        
        var ds=document.getElementById("ds");
        var reg=new RegExp("^"+ds.value);
        if(number.match(reg))
            number=number.replace(reg,"");
        else{
            for(i=0;i<ds.options.length;i++)
            {
                reg=new RegExp("^"+ds.options[i].value);
                if(number.match(reg)){
                    number=number.replace(reg,"");
                    ds.value=ds.options[i].value;
                    break;
                }
            }
        }
    }

//se parte ancora con 00 si potrebbe avvisare (edit in rosso, alert (multilanguage))
//non far partire chiamata...

    obj.value=number;
}

function CheckKey(k){
  var actb_display = 0;
  var numberac =  document.getElementById('numberac');
  if ( k == 27 && (visitorContact == null)){
      //server per rimuovere l'autocomplete
        document.getElementById('ds').focus();
        actb_display = 0;
        actb_display = false;
        numberac.focus();
  }

  numberac.focus();
  if ( k == 13 ) {
        if ( actb_display == false || actb_display == 0 ) {
            cleanNumber(numberac);
            placeCall();
        }
  }
}

function checkNumberEditBox(){
    var nu = document.getElementById('numberac');
    nu.focus();
    if(nu.value != null && (nu.value == yourNumberString || nu.value == editHereString))
        nu.value = "";
}

function Append(text){
    var append = document.getElementById(debugArea).value;
    append = append + myString +"\n";	
}// end Append

function changePrefixBox(){
    if(visitorContact != null)
        return;
    //alert("change prefix box");
    var ds = document.getElementById("ds");
    var nu = document.getElementById('numberac');
    var call_btn = document.getElementById('callbutton');
    var prefix = ds.value;
    if ( prefix == cookiePrefix )
        nu.value = cookieNumber;
    else
        nu.value = yourNumberString;//"";
    nu.disabled = ds.value == "-";
    call_btn.disabled = ds.value == "-";//|| nu.value == null || nu.value.length == 0;
    ds.focus();
    AutocompleteObj = actb(document.getElementById('numberac'), getNumbersForPrefix(prefix));
    if(!call_btn.disabled)
        call_btn.focus();
}

function initializeNumbers() {    
    if (visitorContact != null)
       return; //caso di LCS
    
    var cn = ReadCookie("CookieNumbers");
    if ( cn != "" )
        cookieNumbers = YAHOO.lang.JSON.parse(cn);
    else
        cookieNumbers = new Array();
    var ds = document.getElementById("ds");
    var i = 0;

    if ( localCode != "" ){
            for ( i = 0; i < ds.options.length; ++i ) {
                if ( ds.options[i].text == localCode ) {
                    ds.options[i].selected = "1";
                    changePrefixBox();
                    return;
                }
            }              
    }
    
    if ( cookieNumber != "" && cookiePrefix != "" && cookieCountry != "" ) {
        for ( i = 0; i < ds.options.length; ++i ) {
            if ( ds.options[i].text == cookieCountry ) {                          
                document.getElementById('numberac').value = cookieNumber;
                ds.options[i].selected = "1";                                
                changePrefixBox();
                return;
            }
        }      
    }
    
    changePrefixBox();
    document.getElementById("callbutton").disabled = false;
    document.getElementById("callbutton").focus();
}

var call_closed;
var call_starting;
var call_connected;
var call_info;
var call_invalid_number;
var call_busy;

function loadImages() {
    call_closed = new Image(105, 58);
    call_closed.src = "images/chiamata_chiusa_03.png";
    call_closed.alt = "call closed";
    call_starting = new Image(105, 58);
    call_starting.src = "images/chiamata_inoltrata_01.png";
    call_starting.alt = "call starting";
    call_connected = new Image(105, 58);
    call_connected.src = "images/chiamata_attivata_02.png";
    call_connected.alt = "call connected";
    call_info = new Image(105, 58);
    call_info.src = "images/chiamata_info_generica_06.png";
    call_info.alt = "info";
    call_invalid_number = new Image(105, 58);
    call_invalid_number.src = "images/chiamata_num_non_corretto_05.png";
    call_invalid_number.alt = "invalid number";
    call_busy = new Image(105, 58);
    call_busy.src = "images/chiamata_num_occupato_04.png";
    call_busy.alt = "call closed";    
}

function changeStateImage(image)
{
    var stateimage = document.getElementById("stateimage");
    stateimage.src = image.src;
    stateimage.alt = image.alt;
    stateimage.style.visibility = "visible";
}

function saveNumber(prefix, number, country) {
     if ( visitorContact != null )
        return; //caso LCS
    var n = new Object();
    n.prefix = prefix;
    n.number = number;
    for (var i = 0; i < cookieNumbers.length; ++i) {
        if ( cookieNumbers[i].prefix == prefix && cookieNumbers[i].number == number ) {
            cookieNumbers.splice(i, 1);
        }
    }
    cookieNumbers.push(n);
    if ( cookieNumbers.lenght > 10 )
        cookieNumbers.splice(0, cookieNumbers.lenght - 10);
    SetCookie("CookieNumbers", YAHOO.lang.JSON.stringify(cookieNumbers), 90);
    SetCookie('sitofonoPrefix', prefix, 90);
    SetCookie('sitofonoNumber', number, 90);    
    SetCookie('sitofonoCountry', country, 90);    
}

function getNumbersForPrefix(prefix) {
    var numbers = new Array();
    for (var i = 0; i < cookieNumbers.length; ++i) {
        if ( cookieNumbers[i].prefix == prefix ){
            numbers.push(cookieNumbers[i].number);
        }
    }

    return numbers;
}

function showNotAvailablePanel(text) {
    document.getElementById('notavailablebackground').style.display='block';
    document.getElementById('notavailable').style.display='block';
    document.getElementById('notavailabletext').innerHTML = text;
}

function hideNotAvailablePanel(){
    document.getElementById('notavailable').style.display='none';
    document.getElementById("notavailablebackground").style.display='none';
}

function onCallState(message) {
    if(message.StatusCode == 250){
        var statePanel = document.getElementById('callstatetext');
        if(statePanel != null){
            statePanel.innerHTML = getStatusString(message) + " " + message.EventReason;
        }
        return;
    }
    else if(message.StatusCode == 485){
        var text = message.EventReason != undefined || message.EventReason != null || message.EventReason != "" ? message.EventReason : getStatusString(message);
        showNotAvailablePanel(text)
    }

    var callbutton = document.getElementById("callbutton");
    
    var ds;
    if(visitorContact == null)
        ds = document.getElementById("ds");
    else ds = null; // caso LCS
    
    var nu = document.getElementById('numberac');
    if ( message.StatusCode < 300 ) {
        callbutton.value = closeTranslation;
        callbutton.className = "close";
        if(ds!= null)
            ds.disabled = true;
        nu.disabled = true;
        try{
            setChangeableLanguage(0);
          }catch(e){
            //alert(e.message()
          }
    } else {
        callbutton.value = callTranslation;
        callbutton.className = "call";
        if(ds!= null)
            ds.disabled = false;
        if(visitorContact == null)
            nu.disabled = false;
        try{
            if(meeboVisibility == 0)
              setChangeableLanguage(1);
        }catch(e){
            //alert(e.message()
        }
        if(message.StatusCode == 485) // subscriber non disponibile dalle xx alle yy
            return;
    }
    var callstatetext = document.getElementById('callstatetext');
    var prefix;
    
    if(visitorContact == null){
        prefix = document.getElementById("ds").value;
        var country = document.getElementById("ds").text;
    
        var number = document.getElementById("numberac").value;            
        if ( message.StatusCode < 300 )
            saveNumber(prefix, number, country);
    }
    else prefix = "";
    
    var msg = getStatusString(message);
            
    if ( timerID != 0 )
        clearTimeout(timerID);
    timerID = setTimeout("clearState("+message.StatusCode.toString()+");", 10000);
    var isVisitorMessage = message.Source == 2 || message.Destination == 2;
    var isSubscriberMessage = message.Source == 1 || message.Destination == 1;
    var isVoiceMailMessage = message.Source == 3 || message.Destination == 3;
            
    if ( message.StatusCode == 444 ) {
        if(visitorContact == null){
            if ( document.getElementById("ds").value == "0039"  // solo per l'Italia
                && document.getElementById("numberac").value.indexOf("3") == 0 )
                msg = mobileTranslation;
        }
        else if ( document.getElementById("numberac").value.indexOf("00393") == 0 )
            msg = mobileTranslation;            
        if ( isWebCallEnabled )
            msg = msg + '<br />' + '<a href="'+webCallLink+'">' + tPCWebInstructionsTranslation + '</a>';
    }
                        
    callstatetext.innerHTML = msg;
            
    var stateImage = document.getElementById("stateimage");
                        
    if ( (isSubscriberMessage || isVoiceMailMessage) && message.StatusCode > 199 && message.StatusCode < 300 )
        changeStateImage(call_connected);
    else if ( isVisitorMessage && message.StatusCode > 199 && message.StatusCode < 300 )
        changeStateImage(call_starting);
    else if ( isVisitorMessage && message.StatusCode > 99 && message.StatusCode < 200 ) 
        changeStateImage(call_closed);
    else if ( message.StatusCode == 486 )
        changeStateImage(call_busy);
    else if ( message.StatusCode == 444 || message.StatusCode == 413)
        changeStateImage(call_invalid_number);
    else if ( message.StatusCode > 299 && message.StatusCode < 500 )
        changeStateImage(call_info);
    else if ( message.StatusCode > 499 && message.StatusCode < 700 )
        changeStateImage(call_invalid_number);
    else if ( message.StatusCode > 699 )
        changeStateImage(call_closed);

    if(message.StatusCode == 413)
        document.getElementById("numberac").value = yourNumberString;
    
    if ( (message.StatusCode == 444 || message.StatusCode == 413) && isWebCallEnabled ) { // prefisso non abilitato: fa blinkare il link alla webcall
        var webcall = document.getElementById("webCallButton");

        setTimeout('document.getElementById("webCallButton").style.visibility="hidden";', 10000);
        setTimeout('document.getElementById("webCallButton").style.visibility="visible";', 10200);
        setTimeout('document.getElementById("webCallButton").style.visibility="hidden";', 10400);
        setTimeout('document.getElementById("webCallButton").style.visibility="visible";', 10600);
        setTimeout('document.getElementById("webCallButton").style.visibility="hidden";', 10800);
        setTimeout('document.getElementById("webCallButton").style.visibility="visible";', 11000);
                
    }
}
        
function clearState(statusCode) {            
    document.getElementById('callstatetext').innerHTML="&nbsp;";
    var stateImage = document.getElementById("stateimage");
    if ( statusCode > 299 )
        stateImage.style.visibility = "hidden";          
}

        

        


