// -- INIZIO OPZIONI
var fTitles = false;   // Visualizzare i titoli sotto alle immagini?
var fAlerts = false;   // Visualizzare errori di navigazione?

// -- FINE OPZIONI

var objFlickr = null;
var usingFlickr = null;
var action = "";

var api_key = "e8e4610d6c3a5ebe5a77906f16068948";
var username = "";

function NewFlickr()
{
  if (window.XMLHttpRequest)
    return new XMLHttpRequest();
  else
    return new ActiveXObject("Microsoft.XMLHTTP");
}

function callFlickr(method, params, var1, var2, var3)
{
  action = var1;
  var strParams = encodeURIComponent("method="+method+"&api_key="+api_key+"&"+params);
  if (!usingFlickr)
  {
    usingFlickr = true;
    objFlickr = NewFlickr();
    objFlickr.open("get", "/mods/mod_flickr/flickr_proxy.php?params="+strParams);
    objFlickr.onreadystatechange = function(){statechange(var1, var2, var3)};
    objFlickr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    objFlickr.send(null);
  }
}

function myalert(str)
{
  if (str != "" && fAlerts) alert(str);
}

function statechange(var1, var2, var3)
{
  if (objFlickr.readyState == 4)
  {
    var strError = "";
    var xml = null;
    
    if (objFlickr.status == 200)
    {
      if (!(xml = objFlickr.responseXML))
        strError = "Errore nell'interpretazione della risposta XML";
      /*
      else
        alert(objFlickr.responseText);*/
    }
    else
      strError = "Errore di navigazione";
    
    if (strError != "")
    {
      myalert(strError);
      objFlickr = null;
      usingFlickr = null;
    }
    else
      listener(xml, var1, var2, var3);
  }
}

function setUsernameFromEmail(email)
{
  if (!usingFlickr)
  {
    username = "";
    callFlickr("flickr.people.findByEmail", "find_email="+email, "findByEmail");
  }
  else
    setTimeout("setUsernameFromEmail('"+email+"')", 500);
}

function setUsernameFromUsername(user)
{
  if (!usingFlickr)
  {
    username = "";
    callFlickr("flickr.people.findByUsername", "username="+encodeURIComponent(user), "findByUsername");
  }
  else
    setTimeout("setUsernameFromUsername('"+user+"')", 500);
}

function setUsername(strUser)
{
  if (!usingFlickr)
    username = strUser;
  else
    setTimeout("setUsername('"+strUser+"')", 500);
}

function getLatestPhotos(page, n)
{
  if (!usingFlickr)
    callFlickr("flickr.people.getPublicPhotos", "user_id="+username+"&page="+page+"&per_page="+n, "getLatestPhotos");
  else
    setTimeout("getLatestPhotos('"+page+"', '"+n+"')", 500);
}

function getRandomPhotos(n)
{
  if (!usingFlickr)
    callFlickr("flickr.people.getPublicPhotos", "user_id="+username+"&per_page=500", "getRandomPhotos", n);
  else
    setTimeout("getRandomPhotos("+n+")", 500);
}

function createNewPhoto(pic)
{
  var div = document.getElementById("plugin_flickr");
  var newimg = null, newa = null, newdiv = null, newspan = null;
  var button = div.getElementsByTagName("input")[0];
  
  // il nuovo div contenitore
  newdiv = document.createElement("div");
  newdiv.className = "photo";
  
  // una nuova immagine html
  newimg = document.createElement("img");
  newimg.setAttribute("src", "http://farm"+pic.getAttribute("farm")+".static.flickr.com/"+pic.getAttribute("server")+"/"+pic.getAttribute("id")+"_"+pic.getAttribute("secret")+"_t.jpg");
  newimg.setAttribute("alt", pic.getAttribute("title"));
  
  // il link alla foto su flickr
  newa = document.createElement("a");
  newa.setAttribute("href", "http://www.flickr.com/photos/"+pic.getAttribute("owner")+"/"+pic.getAttribute("id"));
  newa.setAttribute("target", "_blank");
  
  newa.appendChild(newimg);
  newdiv.appendChild(newa);
  
  // span con il titolo
  if (fTitles)
  {
    newspan = document.createElement("span");
    newspan.innerHTML = pic.getAttribute("title");
    newdiv.appendChild(newspan);
  }
  
  // la aggiungo al div
  div.insertBefore(newdiv, button);
}

/* Elimina i vecchi div con le foto */
function clearPhotos()
{
  var flickr, olddiv, i;
  
  flickr = document.getElementById("plugin_flickr");
  
  /* Elimino i vecchi div con classe "photo" (se ce ne sono) */
  olddiv = flickr.getElementsByTagName("div");
  i = 0;
  while (i < olddiv.length)
  {
    if (olddiv[i].className == "photo")
      flickr.removeChild(olddiv[i]);
    else
      i++;
  }
}

function listener(xml, var1, var2, var3)
{
  switch (var1)
  {
	case "findByEmail":
	  if (xml.getElementsByTagName("user").length > 0)
	    username = xml.getElementsByTagName("user")[0].getAttribute("id");
	  else
	    if (fAlerts) alert("Nessun username trovato");
	  break;
	
 	case "findByUsername":
	  if (xml.getElementsByTagName("user").length > 0)
	    username = xml.getElementsByTagName("user")[0].getAttribute("id");
	  else
	    if (fAlerts) alert("Nessun username trovato");
	  break;

   case "getLatestPhotos":
      clearPhotos();
      var pictures = xml.getElementsByTagName("photo"), iPic = 0, pic;
      
      for (iPic = 0; iPic < pictures.length; iPic++)
        createNewPhoto(pictures[iPic]);
      break;
    
    case "getRandomPhotos":
      clearPhotos();
      var pictures = xml.getElementsByTagName("photo"), iPic=0, pic, rnd;
      var n = (pictures.length >= var2 ? var2 : pictures.length);
      var good, strExtract = ";";
      
      // Punto all'elemento che conterrą le immagini
      var div = document.getElementById("plugin_flickr");
      
      for (iPic=0; iPic<n; iPic++)
      {
        good = false;
        do
        {
          rnd = Math.floor(Math.random()*(pictures.length-1));
          good = strExtract.search(";"+rnd+";") == -1;
        } while (!good);
        strExtract += rnd + ";"
        
        createNewPhoto(pictures[rnd]);
      }
      
      break;
      
    default:
      myalert("Caso nn contemplato");
      break;
  }
  usingFlickr = false;
  objFlickr = null;
  action = "";
}