/***
 * 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])
 }
}

/**
 * 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'));
}
