//SIP klient vytvořen Vojtěchem Šaclem
//JSSIP 0.3.0
var phone;
var call;
var soundPlayer = document.createElement("audio");
soundPlayer.volume = 0.5;
//Přihlášení k serveru
function phoneInit() {
 writeStatus("připojuje...");
    var sip_uri = $("#uri").val();
    var outbound_proxy = $("#proxy").val();
    outbound_proxy = "ws://" + outbound_proxy + ":5060";
    var sip_password = $("#password").val();
    var configuration  = {
        'ws_servers':  [outbound_proxy],
        'uri': sip_uri,
        'display_name': '',
        'password':  sip_password,
        'register_expires': 600,
        'secure_transport': false,
        'stun_server': 'aliax.net',
        'trace_sip': true,
        'hack_ip_in_contact': true,
        'hack_via_tcp': true
    };

    try {
        phone = new JsSIP.UA(configuration);
    } catch(e) {
        console.log(e);
        return;
    }

    phone.on('connected', wsConnected);
    phone.on('disconnected', wsDisconnected);
	// Zpětná odezva nový videohovor
    phone.on('newRTCSession', function(e) {
            console.info('newRTCSession');
            newRTCSession(e);
        }
    );
	// Zpětná odezva nová zpráva
    phone.on('newMessage', function(e) {
            console.info('new message');
            newMessage(e);
        }
    );

    // Zpětná odezva připojeno
    phone.on('registered', function(e){
    		createContactList();
            console.info('Registered');
            writeStatus("Klient připojen");
            $('#contact_list').attr('hidden', false);
            writeCall("");
            $("#callLine").show(); 
 		}
    );
	// Zpětná odezva nepřipojeno
    phone.on('unregistered', function(e){
            console.info('Deregistered');
            writeStatus("Klient nepřipojen");
            $('#contact_list').attr('hidden', true);
            $('.chatokno').remove();
        }
    );
	// Zpětná odezva připojení selhalo
    phone.on('registrationFailed', function(e) {
            console.info('Registration failure');
            writeStatus("Registrace selhala");
            $('#contact_list').attr('hidden', true);
			$('.chatokno').remove();
    		writeCall("");
        }
    );

    // Start
    phone.start();
};
// Navázání spojení a započnutí hovoru
function placeCall(target) {
writeCall("Navázání spojení <br/><input type='text' class='Callbutton' onclick='cancelCall();' value='Zrušit' readonly/>");
callLine.style.color="orange";
var selfView, remoteView;
    var target;
    $('#remoteView').attr('hidden', false);
    $('#selfView').attr('hidden', false);
    var poster = $('#selfView').attr("poster");
var selfView =   document.getElementById('selfView');
var remoteView =  document.getElementById('remoteView');   
var eventHandlers = {
  'progress':   function(e){ /* Your code here */ },
  'failed':     function(e){ /* Your code here */ },
  'started':    function(e){
   },
  'ended':      function(e){ /* Your code here */ }
};

var options = {
  'eventHandlers': eventHandlers,
  'extraHeaders': [ 'X-Foo: foo', 'X-Bar: bar' ],
  'mediaConstraints': {'audio': true, 'video': true}
};


    try
    {
        phone.call(target, options);
        
    }
    catch(e)
    {
        console.log(e);
        return;
    }
};
//Barva stavového řádku
function writeStatus(text)
{
    $("#statusLine").html(text);
if(text =="Klient připojen"){
statusLine.style.color="green";}
else if(text =="WebSocket server aktivní"){
statusLine.style.color="orange";}
else if(text =="připojuje..."){
statusLine.style.color="black";}
else
statusLine.style.color="red";
};
 
function writeCall(textc){

    $("#callLine").html(textc);
};

//Nové WebRTC spojení (videohovor)
function newRTCSession (e) {
    var session, message, display_name, uri;
    message = e.data.request;
    call = e.data.session;
    uri = call.remote_identity.uri;
var selfView =   document.getElementById('selfView');
var remoteView =  document.getElementById('remoteView');
	// Zpětná vazba příchozího hovoru
    if (call.direction === 'incoming')
    {
        incomingCall(uri);
    }
    else
    {

    }
	//Události při určitém stavu hovoru
    call.on('failed',function(e) {
		writeCall("Volání selhalo");
		callLine.style.color="red";
		$.fancybox.close();
        //skrytí video prvků
        $('#remoteView').attr('hidden', true);
        $('#selfView').attr('hidden', true);
    });
    call.on('ended', function(e) {
         writeCall("Volání ukončeno");
         callLine.style.color="black";
       $('#remoteView').attr('hidden', true);
       $('#selfView').attr('hidden', true);
       var poster = $('#remoteView').attr("poster");
		$('#selfView').attr('poster', poster);
		delete $('#remoteView');
       
    });

    call.on('started',function(e){
        writeCall("Volání zahájeno <br/>" + uri + "<br/><input type='text' class='Callbutton' onclick='hangUp();' value='Zavěsit' readonly/>");
        callLine.style.color="green";
        var rtcSession = e.sender;
            if (rtcSession.getLocalStreams().length > 0) {
      selfView.src = window.URL.createObjectURL(rtcSession.getLocalStreams()[0]);
    }

    // Attach remote stream to remoteView
    if (rtcSession.getRemoteStreams().length > 0) {
      remoteView.src = window.URL.createObjectURL(rtcSession.getRemoteStreams()[0]);
    }
    });

    call.on('progress',function(e){
        if (e.data.originator === 'remote') {
            writeCall("Navázání spojení <br/><input type='button' class='Callbutton' onclick='cancelCall();' value='Zrušit' />");
            callLine.style.color="orange"; 
        }
    });
    call.on('newDTMF',function(e){
            if (e.data.originator === 'remote') {
       sound_file = e.data.dtmf.tone;

     }
    });

};
//Odhlášení klienta od SIP serveru
function phoneStop(){
	var options = null;
    phone.unregister();
    try{
     call.terminate(options);}
     catch(e){};
     $("#callLine").hide();
     $('#contact_list').attr('hidden', true);
     $('.chatokno').remove();
};

//Relace pro rychlé zprávy
function newMessage(e) {
    var display_name, uri, text, session, request;
    message = e.data.message;
    uri = message.remote_identity;
    text = e.data.request.body;
	// Zpětná vazba pro příchozí textovou zprávu
    if (message.direction === 'incoming')
    {
        incomingMessage(uri, text);
    }
    else
    {

    }

};

function wsConnected(e) {
    writeStatus("WebSocket server aktivní");
};

function wsDisconnected() {
    writeStatus("WebSocket server neaktivní");    
};
//Funkce vyvolána při příchozím hovoru
function incomingCall(uri) {
   uri= uri.toString();
   uri = uri.slice(4,100);
   //Vyskakovací okno na stránce
   $.fancybox({
        'content': '<div class="fancybox"> Příchozí hovor od <font color="black">' + uri + '</font><br /> <input type="button" id="answerCall" onclick="answerCall();" value="Přijmout" /><input type="button" id="declineCall" onclick="declineCall();" value="Odmítnout" /></div>',
 		'width' : 800,
		'enableEscapeButton' : false,
		'hideOnOverlayClick' : false,
		'showCloseButton' : false,
		'showNavArrows' : false,
		
	});
    
       soundPlayer.setAttribute('src', 'sounds/incomingcall.mp3');
       soundPlayer.play();
};
// Přimutí hovoru
function answerCall(){
$.fancybox.close();
writeCall("Navázání spojení <br/><input type='button' class='Callbutton' onclick='cancelCall();' value='Zrušit' />");
callLine.style.color="orange";
    // odkrytí video panelů
    $('#remoteView').attr('hidden', false);
    $('#selfView').attr('hidden', false);
    var options = {
  'extraHeaders': [ 'X-Foo: foo', 'X-Bar: bar' ],
  'mediaConstraints': {'audio': true, 'video': true}
};
    call.answer(options);

};
// Odmítnutí hovoru
function declineCall(){
	$.fancybox.close();
	var options = null;
    call.terminate(options);
    writeCall("Volání odmítnuto");
    callLine.style.color="black";
    soundPlayer.setAttribute("src", "sounds/declinecall.mp3");
    soundPlayer.play();
    $('#remoteView').attr('hidden', true);
    $('#selfView').attr('hidden', true);
    var poster = $('#remoteView').attr("poster");
    $('#selfView').attr('poster', poster);
    $('#remoteView').attr('poster', poster);
    
};
// Ukončení hovoru po úspěšném spojení
function hangUp(){	
	var options = null;
    call.terminate(options);
    soundPlayer.setAttribute("src", "sounds/hangupcall.mp3");
    soundPlayer.play();
    $('#remoteView').attr('hidden', true);
    $('#selfView').attr('hidden', true);
    var poster = $('#remoteView').attr("poster");
    $('#selfView').attr('poster', poster);
    $('#remoteView').attr('poster', poster);
  
};
//Ukončení hovoru ještě před započetím
function cancelCall(){
	writeCall("Hovor zrušen");
	callLine.style.color="black";
	var options = null;
    call.terminate(options);
    $('#remoteView').attr('hidden', true);
    $('#selfView').attr('hidden', true);
    var poster = $('#remoteView').attr("poster");
    $('#selfView').attr('poster', poster);
    $('#remoteView').attr('poster', poster);
};
// Příchozí zpráva
function incomingMessage(uri, text) {
   uri= uri.toString();
   uri = uri.slice(4,100);
    var uri1 = uri.replace('@','')  
  uri1 = uri1.replace('.','');
 // Okno konverzace
 var chat = '<li id=\"'+uri1+'\" class=\"chatokno\">\
            <span class=\"chaturi\">'+uri+'</span>\<img src=\"images/zavritchat.png\" class=\"zavritchatokno\"/>\
            <form onsubmit=\"return false\"  class=\"addMessage\">\
            <div id=\"scrollBoxContainer\">\
               <div class=\"scrollBox\">\
                 <ul class=\"conversation\">\
                 </ul>\
               </div>\
              </div>\
               <input type=\"text\" name=\"message\" class=\"message\" />\
            </form>\
         </li>';
               if(document.getElementById(uri1)!=null){
               }else{
               if(uri!==$(".chaturi").text()){
               //Přidání okna konverzace
               $(".chatContainer").append(chat);};
               }
        var uri11= ('"#'+uri1+'"');
        //Přidání textu do jednotlivého okna
		$(".chatContainer").find(uri11).find(".conversation").append('<li class=\"peermessage\">příchozí:  ' + text + '</li>');
		$(".chatContainer").find(uri11+'.chatokno').css('background', '#49AC48');
       	soundPlayer.setAttribute('src', 'sounds/incomingmessage.mp3');
       	soundPlayer.play();
};