/* 
iBlip - Webowy klient BLIP dla iPhone
Autor: Dominique Stranz
Kontakt: dominique@stranz.org
 */

var originalSettings = {}; 
var interval = null;
var avatar_list = [];
var avatar_toGet = [];
var last_id = null;
var isUsed = false;


//Ładowanie ustawień
function load()
{
    originalSettings.login = '';
    originalSettings.password = '';
    dashcode.setupParts();
    
    //Ustawienia z Cookies
    var login = getCookie('login');
    originalSettings.login = (login)?login:'';
    var password = getCookie('password');
    originalSettings.password = (password)?Base64.decode(password):'';
    var refresh = getCookie('refresh');
    originalSettings.refresh = (refresh)?refresh:'0';
    var avatars = getCookie('avatars');
    originalSettings.avatars = (avatars)?avatars:'0';
    var fontFamily = getCookie('fontFamily');
    originalSettings.fontFamily = (fontFamily)?fontFamily:'Marker Felt';
    
    loadSettings();
    checkInterval();
    fontFamilyChanged();
    
    if(password){ 
    window.setTimeout("window.scrollTo(0, 1)",5);
    } else {  window.setTimeout("flipToSettings()",5); }
}

//Sterowanie widokami
//Front - pisanie
//List - dashboard
//Settings - preferencje
function flipToFront(event)
{
    var views = document.getElementById('views');
    var front = document.getElementById('front');
    if (views && views.object && front) {
        views.object.setCurrentView(front, true);
                   window.scrollTo(0, 1);
    }
}


function flipToSettings(event)
{
    var views = document.getElementById('views');
    var settings = document.getElementById('settings');
    if (views && views.object && settings) {
        views.object.setCurrentView(settings);
                   window.scrollTo(0, 1);
    }
}

function flipToList(event)
{
    var views = document.getElementById('views');
    var list = document.getElementById('list');
    if (views && views.object && list) {
        views.object.setCurrentView(list);
           window.scrollTo(0, 1);
       }
}

function flipAndSave(event)
{
        saveSettings();
        flipToFront(event);

}

//Operacje na preferencjach

function clearSettings(event)
{
        setCookie('login','');
        setCookie('password','');
        setCookie('refresh','');
        setCookie('avatars','');
        setCookie('fontFamily','');
        originalSettings.login = '';
        originalSettings.password = '';
        originalSettings.refresh = '0';
        originalSettings.avatars = '0';
        originalSettings.fontFamily = 'Marker Felt';

        loadSettings();    
        checkInterval();
        fontFamilyChanged();
}

function checkInterval(){
 var refresh = document.getElementById('refresh');
    if(refresh.value == '0'){
        clearInterval(interval);
    } else {
        if(interval){
          clearInterval(interval);
        }
         interval = setInterval("getBlip();",parseInt(refresh.value)*1000);
    }
}


function saveSettings()
{
    var login = document.getElementById('login');
    var password = document.getElementById('password');
    var refresh = document.getElementById('refresh');
    var avatars = document.getElementById('avatars');
    var fontFamily = document.getElementById('fontFamily');

    setCookie('login',login.value);
    setCookie('password',Base64.encode(password.value));
    setCookie('refresh',refresh.value);
    setCookie('avatars',avatars.value);
    setCookie('fontFamily',fontFamily.value);
    
    checkInterval();
    fontFamilyChanged();
}

function loadSettings()
{
    var login = document.getElementById('login');
    var password = document.getElementById('password');
    var refresh = document.getElementById('refresh');
    var avatars = document.getElementById('avatars'); 
    var fontFamily = document.getElementById('fontFamily');  

    login.value = originalSettings.login;
    password.value = originalSettings.password;
    refresh.value = originalSettings.refresh;
    avatars.value = originalSettings.avatars;
    fontFamily.value = originalSettings.fontFamily;
  
}

function fontFamilyChanged()
{
    var value = document.getElementById('fontFamily').value;
    document.getElementById('message').style.fontFamily = value;
}


//WYSYŁANIE BLIPA

function sendBlip(event)
{
var message = document.getElementById("message");	
message = message.value;

if(message.length > 160){
alert('Blip może mieć tylko 160 znaków');
return false;
}

var feedURL = "ajax/updates";
var onloadHandler = function() { respondSend(xmlRequest); };	

// XMLHttpRequest setup code
var xmlRequest = new XMLHttpRequest();
xmlRequest.onload = onloadHandler;
var login = document.getElementById("login");
login = login.value;

var password = document.getElementById("password");	
password = password.value;

xmlRequest.open("POST", feedURL,false,login,password);

var data = "update[body]="+message;
xmlRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlRequest.setRequestHeader("Cache-Control", "no-cache");
xmlRequest.setRequestHeader("Accept","application/json");
xmlRequest.setRequestHeader("X-Blip-api","0.02");
xmlRequest.setRequestHeader("User-Agent", "iBlip");
xmlRequest.send(data);

}

function respondSend(xmlRequest) 
{

	if (xmlRequest.status == 200) {
        alert('Wystapił błąd, może nie jesteś zalogowany?');
	} else if (xmlRequest.status == 201) {
        alert('Twój blip został zarejestrowany');
        var message = document.getElementById("message");
        var counter = document.getElementById('counter');
        message.value = '';
        counter.innerHTML = '160';
	} else {
		console.log("Nie udało się wysłać wiadomości: HTTP status " + xmlRequest.status);
	}
}

function countSize(event)
{
    var message = document.getElementById('message');
    var counter = document.getElementById('counter');
    var left = (160 - message.value.length);
    counter.innerHTML = left;
}

//POBIERANIE KOKPITU

/* Funkcja parsuje dane z kokpitu */
function parseDashboard(data){

var avatars = document.getElementById('avatars');
avatars = avatars.value;
var itemList = document.createElement('ul');

var length =  data.length;

if(length > 0){
last_id = data[0].id;
}

for (var i = 0; i <  length; i++) {
  var idx = i;
  var body =  data[i].body;
  
  //Data i transport
  var time = document.createElement('li');
  time.setAttribute('class','time');
  time.innerHTML = data[i].created_at + ' | ' + data[i].transport.name;
  itemList.appendChild(time);

  //LINKI
  body = body.replace(/ (http:\/\/[A-Za-z0-9:@=\?/\.]+)/gi," <a href='$1' target='_blank'>$1</a>");
  body = body.replace(/\((http:\/\/[A-Za-z0-9:@=\?/\.]+)\)/gi,"(<a href='$1' target='_blank'>$1</a>)");
  body = body.replace(/^(http:\/\/[A-Za-z0-9:@=\?/\.]+)/gi,"<a href='$1' target='_blank'>$1</a>");
  //TAGI
  body = body.replace(/#([^ '-:,\?!\.]+)/gi,"<a href='http://blipcast.pl/$1' target='_blank'>$1</a>");
  
    var item = document.createElement('li');
    //NADAWCA
    var user = data[i].user_path.replace('/users/','');
    
    //Avatar
    if(avatars == '1'){
    var error = "getNewAvatar('"+user+"','av"+data[i].id+"')";
    var av = '<img src="Images/avatar.gif" id="av'+data[i].id+'" class="av" align="left" width="30" height="30" alt="'+user+'" onerror='+error+' />';
    avatar_toGet.push({"login":user,"id":data[i].id});
    } else {
    var av = '';
    }
    //--
    
    //ODBIORCA
    var recipient = (data[i].recipient_path)?' > '+data[i].recipient_path.replace('/users/',''):'';

    //ALL
    item.innerHTML =  av+'<b>'+ user + recipient + '</b>: '+body;

    //FOTKI
    var ff = document.createElement('li');
    ff.setAttribute('class','foto');
    ff.setAttribute('id','ff'+data[i].id);
    itemList.appendChild(ff);
        
  itemList.appendChild(item);

  //URL NA BLIPIE
  if(data[idx].type == 'Status'){
     var link = "http://blip.pl/statuses/"+data[idx].id;
    } else {    
    var link = "http://blip.pl/dm/"+data[idx].id;
    }

    //MENU
    var menu = document.createElement('li');
    menu.setAttribute('class','menu');

    //LINK DO BLIPA
    var llink = document.createElement('div');
    llink.innerHTML = 'blip';
    llink.setAttribute('onclick',"window.open('"+link+"');");
    menu.appendChild(llink);
    
    //POBIERZ FOTKE
    var ffoto = document.createElement('div');
    ffoto.innerHTML = (data[idx].pictures_path)?'foto':'&nbsp;';
    if(data[idx].pictures_path){
    var path = data[idx].pictures_path;
    ffoto.setAttribute('onclick',"getFoto('"+path+"','"+data[idx].id+"')"); 
    }
    menu.appendChild(ffoto);
  
    //ODPOWIEDZ
    var re = document.createElement('div');
    re.innerHTML = 'odpowiedz';
    var who = data[idx].user_path.replace('/users/','');
    re.setAttribute('onclick',"createRe('"+who+"')");
    menu.appendChild(re);
        
  itemList.appendChild(menu);
}
//document.getElementById('dashboard').innerHTML ='';
var dashboard = document.getElementById('dashboard');
dashboard.insertBefore(itemList,dashboard.getElementsByTagName('ul')[0]);

//POBIERANIE AVATARÓW
if(avatars == '1'){
    var a = avatar_toGet.pop()
     while(a){
           getAvatar(a.login,'av'+a.id);
           a = avatar_toGet.pop()
      }
}
}

//ZACIAGANIE DASHBOARDU
function getBlip(event){
if(isUsed){
return false;
} else {
isUsed = true;
}
if(last_id){
var feedURL = "ajax/dashboard/since/"+last_id;	// The feed to fetch
} else {
var feedURL = "ajax/dashboard";	// The feed to fetch
}
var onloadHandler = function() { respondBlip(xmlRequest); };

// XMLHttpRequest setup code
var xmlRequest = new XMLHttpRequest();
xmlRequest.onload = onloadHandler;
var login = document.getElementById("login");
login = login.value;

var password = document.getElementById("password");	
password = password.value;

xmlRequest.open("GET", feedURL);

xmlRequest.setRequestHeader("Accept","application/json");
var auth = Base64.encode(login + ':' + password);
xmlRequest.setRequestHeader("Authorization","Basic " + auth);
xmlRequest.send(null);
}

function respondBlip(xmlRequest) 
{

	if (xmlRequest.status == 200) {
       var data = eval(xmlRequest.responseText);
       parseDashboard(data);
     } else if(xmlRequest.status == 401){
        alert('Wystapił błąd, może nie jesteś zalogowany?');
     } else {
        console.log("Nie udało się pobrać kokpitu: HTTP status " + xmlRequest.status);
	}
    isUsed = false;
}

//FUNKCJE POMOCNICZE

//ODPOWIEDZ
function createRe(who){
    var message = document.getElementById('message');
    message.value = '>'+who+': ';
    flipToFront();
}

//POBIERZ FOTKE
function getFoto(url,i)
{
var idx = i;
var feedURL = 'ajax/'+url;	

    if(document.getElementById('ff'+idx).hasChildNodes()){
    return false;
    }

  var name = 'ff'+idx;
  var ff = document.getElementById(name);
  ff.innerHTML = 'Czekaj, ładuję fotkę...';

var onloadHandler = function() { respondFoto(xmlRequest,idx); };

// XMLHttpRequest setup code
var xmlRequest = new XMLHttpRequest();
xmlRequest.onload = onloadHandler;
var login = document.getElementById("login");
login = login.value;

var password = document.getElementById("password");
password = password.value;

xmlRequest.open("GET", feedURL);

xmlRequest.setRequestHeader("Accept","application/json");
var auth = Base64.encode(login + ':' + password);
xmlRequest.setRequestHeader("Authorization","Basic " + auth);
xmlRequest.send(null);

}


function respondFoto(xmlRequest,i) 
{
    //console.log(xmlRequest.responseText);
	if (xmlRequest.status == 200) {
       var data = eval(xmlRequest.responseText);
       var name = 'ff'+i;
       var ff = document.getElementById(name);
       var img = document.createElement('img');
       img.setAttribute('src',data[0].url.replace('.jpg','_inmsg.jpg'));
       ff.innerHTML = '';
       ff.appendChild(img);
     } else if(xmlRequest.status == 401){
        alert('Wystapił błąd, może nie jesteś zalogowany?');
     } else {
		console.log("Nie udało się pobrać zdjęcia: HTTP status " + xmlRequest.status);
	}
}


//USTAWIANIE AVATARA
function setAvatar(id, av){
if(av){ 
    var avatar = document.getElementById(id);
    avatar.setAttribute('src','http://www.blip.pl/user_generated/avatars/'+av+'_nano.jpg');
}
}

//POBIERANIE AVATARA    
function getAvatar(login,id)
{
//Avatar juz jest w ustawieniach?
var av = avatar_list[login];
if(av){
    setAvatar(id,av);
    return false;
}

//Avatar juz jest w cookies?
av = getCookie(login) 
if(av){
    avatar_list[login] = av;
    setAvatar(id,av);
    return false;
}

//Nie? No to trzeba ciągnąć...
getNewAvatar(login,id);
}

//POBIERANIE AVATARA PO ZMIANIE
function getNewAvatar(login,id){
var feedURL = "ajax/users/"+login+"/avatar";	
var onloadHandler = function() { respondAvatar(xmlRequest,login,id); };	

// XMLHttpRequest setup code
var xmlRequest = new XMLHttpRequest();
xmlRequest.onload = onloadHandler;
xmlRequest.open("GET", feedURL);

xmlRequest.setRequestHeader("Accept","application/json");

xmlRequest.send(null);
}


function respondAvatar(xmlRequest,login,id) 
{
	if (xmlRequest.status == 200) {
       var data = eval('('+xmlRequest.responseText+')');
       avatar_list[login] = data.id;
       setCookie(login,data.id);
       setAvatar(id,data.id);

     } else {
       		console.log("Nie udało się pobrać avatara " + login + ": HTTP status " + xmlRequest.status);

	}
}

//Skocz na mojego bloga
function goToMyBlog(event)
{
    document.location.href = 'http://dominique.stranz.org/i';
}


//Ustaw Cookie
function setCookie(name, value) { 
        var exp = new Date(); 
        exp.setTime(exp.getTime() + 699840000000); //90*90 dni
        var curCookie = name + "=" + escape(value) + 
		"; expires=" + exp.toGMTString() + 
		"; path=/" + 
		"; domain=dominique.stranz.org"
	 document.cookie = curCookie; 
}

//Pobierz Cookie
function getCookie(name) { 
var dc = document.cookie; 
var prefix = name + "="; 
var begin = dc.indexOf("; " + prefix); 
if (begin == -1) { 
begin = dc.indexOf(prefix); 
if (begin!= 0) return null; 
} else { 
begin += 2; 
} 
var end = document.cookie.indexOf(";", begin); 
if (end == -1) { 
end = dc.length; 
} 
return unescape(dc.substring(begin + prefix.length, end)); 
} 


//KONIEC
