/***
 * loadScript
 * Carregar um ficheiro Javascript e definir um callback quando o ficheiro estiver totalmente carregado
 * @param {Object} source
 * @param {Object} callbackfunction
 */
function loadScript(source, callbackfunction){
  // first check is the file has allready been loaded
  if ( ! js_file_exists(source)) {
    // pegar no head do documento
    var docHead = document.getElementsByTagName('head')[0];
    if (docHead) {
      // cria uma nova tag do tipo Script
      var scriptTag = document.createElement('script');
      // adicionar os atributos à tag
      scriptTag.setAttribute('src', source);
      scriptTag.setAttribute('type', 'text/javascript');
      // chamar uma função depois de o js ser carregado (no IE)
      var loadFunction = function(){
        if (this.readyState == 'complete' || this.readyState == 'loaded') {
          callbackfunction();
        }
      };
      scriptTag.onreadystatechange = loadFunction;
      // chamar uma função depois de o js ser carregado (Firefox)
      scriptTag.onload = callbackfunction;
      // finalmente adicionar a tag ao head do documento
      docHead.appendChild(scriptTag);
    }
  } else {
    callbackfunction();
  }
}

/**
 * carregar scripts js dinamicamente
 **/
function js_file_exists(filename){
 var targetelement = "script"
 var targetattr= "src"
 var allsuspects=document.getElementsByTagName(targetelement)
 for (var i=allsuspects.length; i>=0; i--) {
  if (allsuspects[i] && allsuspects[i].getAttribute(targetattr)!=null && allsuspects[i].getAttribute(targetattr).indexOf(filename)!=-1)
   return true;
 }
 return false;
}
function load_js_file(filename){
  var fileref = document.createElement("script")
  fileref.setAttribute("type", "text/javascript")
  fileref.setAttribute("src", filename)
  if ((typeof fileref != "undefined") && (!js_file_exists(filename)))
    document.getElementsByTagName("head")[0].appendChild(fileref)
}
function remove_js_file(filename, filetype){
 var targetelement = "script"
 var targetattr = "src"
 var allsuspects=document.getElementsByTagName(targetelement)
 for (var i=allsuspects.length; i>=0; i--) {
  if (allsuspects[i] && allsuspects[i].getAttribute(targetattr)!=null && allsuspects[i].getAttribute(targetattr).indexOf(filename)!=-1)
   allsuspects[i].parentNode.removeChild(allsuspects[i])
 }
}

/**
 * carregar css's dinamicamente
 **/
function css_file_exists(filename){
 var targetelement = "link"
 var targetattr= "href"
 var allsuspects=document.getElementsByTagName(targetelement)
 for (var i=allsuspects.length; i>=0; i--) {
  if (allsuspects[i] && allsuspects[i].getAttribute(targetattr)!=null && allsuspects[i].getAttribute(targetattr).indexOf(filename)!=-1)
   return true;
 }
 return false;
}

function load_css_file(filename){
  var fileref = document.createElement("link")
  fileref.setAttribute("rel", "stylesheet")
  fileref.setAttribute("type", "text/css")
  fileref.setAttribute("href", filename)
  if ((typeof fileref != "undefined") && (!css_file_exists(filename)))
    document.getElementsByTagName("head")[0].appendChild(fileref)
}

function remove_css_file(filename, filetype){
 var targetelement = "link"
 var targetattr = "href"
 var allsuspects=document.getElementsByTagName(targetelement)
 for (var i=allsuspects.length; i>=0; i--) {
  if (allsuspects[i] && allsuspects[i].getAttribute(targetattr)!=null && allsuspects[i].getAttribute(targetattr).indexOf(filename)!=-1)
   allsuspects[i].parentNode.removeChild(allsuspects[i])
 }
}

/**
 * TV Helpers for Google Picasa API
 **/
var TVPIC = function() {
    return {
        get: function(url_path, callbackName, params) {
            if (typeof params == 'undefined' ) params = '';
            var newScript = document.createElement("script");
            newScript.type = "text/javascript";
            newScript.id = "_json_";

            newScript.src = url_path + "?alt=json"+params+"&callback=" + callbackName;

            var head = document.querySelector("html > head");
            var oldScript = document.getElementById("_json_");
            if (oldScript)
                head.removeChild(oldScript);
            head.appendChild(newScript);
        },

        ImageData: function(url, width, height) {
            this.url = url;
            this.width = width;
            this.height = height;
        },

        PhotoInfo: function(image, thumbnail, position, time) {
            this.image = image;
            this.thumbnail = thumbnail;
            this.position = position;
            this.time = time;
        },

        thumbnailData: function(photoEntry) {
            var mediaGroup = photoEntry.media$group;
            if (mediaGroup) {
                var ts = mediaGroup.media$thumbnail;
                if (ts) {
                    if (! (ts instanceof Array))
                        ts = [ts];
                    return new TVPIC.ImageData(ts[0].url, ts[0].width, ts[0].height);
                }
            }
            return false;
        },

        imageData: function(photoEntry) {
            var mediaGroup = photoEntry.media$group;
            if (mediaGroup) {
                var cs = mediaGroup.media$content;
                if (cs) {
                    return new TVPIC.ImageData(cs[0].url, cs[0].width, cs[0].height);
                }
            }
            return false;
        }
    };
}();

/**
 * clearElements
 * limpa todos os inputs que estiverem dentro de um determinado elemento html,
 * normalmente um form, mas pode ser um div por exemplo.
 **/
function clearFormElements(el){
  var object = new Array();
  object[0] = document.getElementById(el).getElementsByTagName('input');
  object[1] = document.getElementById(el).getElementsByTagName('textarea');
  object[2] = document.getElementById(el).getElementsByTagName('select');
  var type = null;
  for (var x=0; x<object.length; x++){
    for (var y=0; y<object[x].length; y++){
      type = object[x][y].type
      switch(type){
        case "text":
        case "textarea":
        case "password":
          object[x][y].value = "";
          break;
        case "radio":
        case "checkbox":
          object[x][y].checked = "";
          break;
        case "select-one":
          object[x][y].options[0].selected = true;
          break;
        case "select-multiple":
          for (z=0; z<object[x][y].options.length; z++){
            object[x][y].options[z].selected = false;
          }
        break;
      }
    }
  }
}

/**
 * outros
 */
function spin_div(div_id) {
  container = $(div_id);
  positioning = 'top: '+container.offsetTop+'px; width: '+container.offsetWidth+'px; height: '+container.offsetHeight+'px; ';
  container.innerHTML += '<div id="'+div_id+'_spin" class="spin_div" style="position: absolute; ' + positioning + '"></div>';
}

function remove_spin_div(div_id) {
  container = $(div_id);
  container.removeChild( $(div_id+'_spin'));
}
