/**
 * Programa :  [root]/includes/js/geral.js
 **/

function fg_is_chrome()
{
   return (navigator.userAgent.toLowerCase().indexOf('chrome') > -1);
}
function fg_load_xsl(s_src)
{
   if(fg_is_chrome())
   {
      var xslhttp = new XMLHttpRequest();
      xslhttp.open("GET", s_src, false);
      xslhttp.send('');
      var o_xsl = xslhttp.responseXML.documentElement;
   }
   else
   {
      var o_xsl = Sarissa.getDomDocument();
      o_xsl.async = false;
      o_xsl.load(s_src);
   }
   return o_xsl;
}

function fg_size_text(s_size)
{
   if(s_size=='s') // small
   {
      s_size_text = '11'
      s_size_title = '12'
   }
   else if(s_size=='m') // medium
   {
      s_size_text = '13'
      s_size_title = '14'
   }
   else if(s_size=='b') //big
   {
      s_size_text = '15'
      s_size_title = '16'
   }
   
   $$('div.col1 div.dv_conteudo_centro').each(function(o_div){
      o_div.descendants().each(function(o_element){
         if(o_element.hasClassName('spn_titulo'))
         {
            o_element.setStyle({fontSize: s_size_title+'px'});
            o_element.descendants().each(function(o_child){
               o_child.setStyle({fontSize: s_size_title+'px'});
            });
         }
         else if(o_element.hasClassName('dv_corpo'))
         {
            o_element.setStyle({fontSize: s_size_text+'px'});
            o_element.descendants().each(function(o_child){
               o_child.setStyle({fontSize: s_size_text+'px'});
            });
         }
      });
//       '.spn_titulo'
   });
}

function fg_fixIE()
{
   var A = new RegExp("MSIE ([\\d.]+)").exec(navigator.userAgent);
   return A ? (parseFloat(A[1]) < 7) : false
}

function fg_fix_png_IE()
{
   // this will iterate with each element with the class 'ie-fix-opacity' and add an IE filter,
   // replacing the background-image for the filter of that image
   $$('.ie-fix-opacity').each(function(poElement){
      // if IE5.5+ on win32, then display PNGs with AlphaImageLoader
      if(fg_fixIE())
      {
         var cBGImg = poElement.currentStyle.backgroundImage;
         var cImage = cBGImg.substring(cBGImg.indexOf('"') + 1, cBGImg.lastIndexOf('"'));

         poElement.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + cImage + "', sizingMethod='scale')";
         poElement.style.backgroundImage = "none";
      }
   });
}

function fg_set_new_countdown(i_min_add)
{
    var d_now = new Date();
//    d_now.setUTCSeconds(d_now.getUTCSeconds()+i_min_add);
    d_now.setUTCMinutes(d_now.getUTCMinutes()+i_min_add);
    var i_timezone = d_now.getTimezoneOffset()*(-1);
    var s_sign = '+';
    if(i_timezone<0)
    {
      s_sign = '-';
      i_timezone = i_timezone*(-1);
    }
    var i_hour_gmt = (i_timezone/60).ceil();
    var i_minu_gmt = i_timezone%60;
    return d_now.getUTCFullYear() + "-" +
          (d_now.getUTCMonth()+1).toPaddedString(2) + "-" +
          d_now.getUTCDate().toPaddedString(2) + " " +
          d_now.getUTCHours().toPaddedString(2) + ":" +
          d_now.getUTCMinutes().toPaddedString(2) + ":" +
          d_now.getUTCSeconds().toPaddedString(2) + " GMT" +
          s_sign +
          i_hour_gmt.toPaddedString(2)+":"+
          i_minu_gmt.toPaddedString(2);
}

   function fg_key_code(o_event)
   {
      return (window.Event) ? ((o_event.which) ? o_event.which : o_event.keyCode) : o_event.keyCode;
   }

   function fg_window_open(s_url)
   {
      window.open(s_url,'new_window','toolbar=yes,location=yes,directories=yes,status=yes,scrollbars=yes,menubar=yes,resizable=yes');
   }

   function fg_campo_vazio(o_campo)
   {
      var b_retorno = false;
      
      if(o_campo)
         if (o_campo.value == "")
         {
            o_campo.focus();
            b_retorno = true;
         }
      return b_retorno;
   }

   function fg_campo_obrigatorio_label(o_campo)
   {
      var s_retorno = "";
      
      if (fg_campo_vazio(o_campo))
      {
         var o_label = document.getElementById("lbl_"+o_campo.name);
         if(o_label.textContent) // mozilla
         {
            s_retorno = "\t- "+o_label.textContent.replace(/:/g,"")+"\n";
         }
         else // IE
         {
            s_retorno = "\t- "+o_label.innerText.replace(/:/g,"")+"\n";
         }
      }
      return s_retorno;
   }

   function fg_campo_obrigatorio(o_campo, s_mensagem)
   {
      var s_retorno = "";
      
      if (fg_campo_vazio(o_campo))
      {
         s_retorno = "\t- "+s_mensagem +"\n";
      }
      return s_retorno;
   }

   function fg_hide_selects()
   {
      if (navigator.appVersion.match(/\bMSIE\b/))
      {
         $$('select').each(function(o_object) {
            o_object.hide();
         });
      }
   }

   function fg_show_selects()
   {
      if (navigator.appVersion.match(/\bMSIE\b/))
      {
         $$('select').each(function(o_object) {
            o_object.show();
         });
      }
   }

   var o_popup_modal;
   var o_reference_object;
   function fg_open_popup_modal(s_title, s_url, i_width, i_height, o_object)
   {
      o_reference_object = $(o_object);
      fg_hide_selects();

      o_popup_modal = dhtmlmodal.open('IdPopupModal', 'iframe', s_url, s_title, 'width='+i_width+'px,height='+i_height+'px,center=1,resize=0,scrolling=1');

      o_popup_modal.onclose=function() {
         fg_show_selects();
         return true; //allow closing of window
      }
   }

   var o_popup_window;
   function fg_open_popup(s_url, i_width, i_height) 
   {
      if (!(!o_popup_window || o_popup_window.closed))
      {
         o_popup_window.close();
      }
      o_popup_window = window.open(s_url,'windowName','scrollbars=1,status=1,minimize=no,left=200,top=200,width='+i_width+',height='+i_height+',resizable=1');
   }

   function fg_fields_changed(o_form)
   {
      var s_changed = "";
      for (var i=0;i<o_form.elements.length;i++) 
      {
         if((o_form.elements[i].type!="button")&&(o_form.elements[i].type!="file"))
         {
            if(isChanged(o_form.elements[i]))
            {
               s_changed = s_changed + o_form.elements[i].name + ";";
            }
         }
         
         if(o_form.elements[i].type=="file")
         {
            if(o_form.elements[i].value != "")
            {
               s_changed = s_changed + ";";
            }
         }
         
      }
      return s_changed;
   }
   
   // DECODES AND UNESCAPES ALL TEXT.
   function fg_decrypt_text(s_texto)
   {
      var s_k = unescape(s_texto.substr(0,s_texto.length-1));
      var s_return = '';
      for(i=0;i<s_k.length;i++)
         s_return += String.fromCharCode(s_k.charCodeAt(i)-s_texto.substr(s_texto.length-1,1));
      return unescape(s_return);
   }

   // ENCODES, IN UNICODE FORMAT, ALL TEXT AND THEN ESCAPES THE OUTPUT
   function fg_crypt_text(s_texto)
   {
      s_texto = escape(s_texto);
      var a_texto = new Array();
      for(i=0; i<s_texto.length; i++)
         a_texto[i] = s_texto.charCodeAt(i)+3;
      return ""+escape(eval("String.fromCharCode("+a_texto+")"))+3;
   }
   
   function fg_php_time()
   {
      var d_time = new Date();
      return parseInt(d_time.getTime()/1000.0);
   }
   
   function fg_is_checked(o_object)
   {
      var b_checked = false;
      if (typeof(o_object) != 'undefined')
      {
         var i_length = ( typeof (o_object.length) != 'undefined') ? o_object.length : 0;
         if (i_length)
         {
            for (var i_cont = 0; i_cont < i_length; i_cont++)
            {
               if (o_object[i_cont].checked)
               {
                  b_checked = true;
               }
            }
         }
         else
         {
            b_checked = o_object.checked;
         }
      }
      return b_checked;
   }
   
   function fg_do_check(o_check, s_element)
   {
      if(o_check.checked)
      {
         fg_check_all(s_element);
      }
      else
      {
         fg_uncheck_all(s_element);
      }
   }
   
   function fg_uncheck_all(s_element)
   {
      var o_checks = $A(document.getElementsByName(s_element));
      o_checks.each(function(s, index) {
         s.checked = false;
      });
   }

   function fg_select_by_value(o_select, s_value)
   {
      if(s_value!='')
      {
         var i_cont;
         for(i_cont = 0; i_cont < o_select.options.length; i_cont++)
         {
            if(o_select.options[i_cont].value==s_value)
            {
               o_select.selectedIndex = i_cont;
               break;
            }
         }
      }
   }

   function fg_get_checked_value(s_element)
   {
      var s_value = '';
      var o_checks = $A(document.getElementsByName(s_element));
      o_checks.each(function(s, index) {
         if(s.checked)
         {
            s_value = s.value;
            throw $break;
         }
      });
      return s_value;
   }

   function fg_all_checked(s_element, o_general)
   {
      var b_all_checked = true;
      var o_checks = $A(document.getElementsByName(s_element));
      o_checks.each(function(s, index) {
         if(s.id!=o_general.id)
         {
            if(!s.checked)
            {
               b_all_checked = false;
               throw $break;
            }
         }
      });
      return b_all_checked;
   }

   function fg_check_all(s_element)
   {
      var o_checks = $A(document.getElementsByName(s_element));
      o_checks.each(function(s, index) {
         s.checked = true;
      });
   }

   function fg_do_check_group(o_check, s_element, o_general)
   {
      if(o_check.checked)
      {
         if(fg_all_checked(s_element,o_general))
         {
            o_general.checked = true;
         }
      }
      else
      {
         o_general.checked = false;
      }
   }

   function fg_checkbox_value(s_element)
   {
      s_return = 'N';
      if($(s_element).checked)
      {
         s_return = 'S';
      }
      return s_return;
   }

   function fg_alert_remove()
   {
      if($('dv_alerta_erro'))
      {
         Element.remove('dv_alerta_erro');
      }
   }
   
   function fg_alert_add(o_form, s_msg_alert, s_div)
   {
      fg_alert_remove();

      if(s_div!='')
      {
         if(s_div == undefined)
         {
            s_div = 'dv_btn_opcoes';
         }
         fg_form_top(s_div);
      }
      o_form.insert({'top':'<div id="dv_alerta_erro" style="display:none">'+s_msg_alert+'</div>'});
      new Effect.Appear($('dv_alerta_erro'), {duration : 1 });
   }
   
   function fg_aplica(s_aplica)
   {
      var s_retorno = "";
      s_aplica = (s_aplica == null) ? "" : s_aplica;
      if(s_aplica == "aplica")
      {
         s_retorno = "S";
      }
      
      return s_retorno;
   }
   
   function fg_confirma_exclusao(s_contexto, o_form)
   {
      if(s_contexto=="")
      {
         fg_alert_add(o_form, "Não há registro a excluir!");
         return false;
      }

      s_contexto = s_contexto.replace(/&#8221;/g,'”').replace(/&#039;/g,"'");
      if (!confirm("Confirma a exclusão do registro\n'"+s_contexto+"' ?"))
      {
         return false;
      }
      return true;
   }

   function fg_expand_object(s_object)
   {
      var o_obj;

      o_obj = $(s_object);
      if(o_obj)
      {
         if(o_obj.className == 'tr_show')
         {
            o_obj.className = 'tr_hide';
         }
         else
         {
            o_obj.className = 'tr_show';
         }
      }
   }

   function fg_expand_objects(s_object)
   {
      var o_obj;
      var i_cont;

      i_cont = 0;
      while(o_obj = $(s_object+'_'+i_cont))
      {
         if(o_obj.className == 'tr_show')
         {
            o_obj.className = 'tr_hide';
         }
         else
         {
            o_obj.className = 'tr_show';
         }
         i_cont++;
      }
   }


   function fg_show_all()
   {
      if($('spn_group').className != "spn_selected")
      {
         fg_expand_tr('tr_filter', $('spn_group'))
      }
      $('sel_filter_type').selectedIndex = 1;
      fb_filter.f_filter_type($('sel_filter_type'), document.frm_filter_select);
      fb_filter.f_filter_submit(document.frm_filter_select, false);
   }

   function fg_expand_tr(s_prefix, o_this)
   {
      fg_expand_object(s_prefix+"_title");
      fg_expand_object(s_prefix+"_select");
      if(o_this.className == "spn_selected")
      {
         o_this.className = "spn_not_selected";
      }
      else
      {
         o_this.className = "spn_selected";
      }
   }

   function fg_form_top(id_div)
   {
      window.scrollTo(0,$(id_div).offsetTop);
   }

   function fg_msg_alerta(o_elem, i_msg)
   {
      var s_msg = "";
      if(i_msg==1)
      {
         s_msg = "Erro ao gravar matrícula!";
      }
      else if(i_msg==2)
      {
         s_msg = "Matricula gravada com sucesso!";
      }
      else if(i_msg==3)
      {
         s_msg = "Matriculas gravadas com sucesso!";
      }
      else if(i_msg==4)
      {
         s_msg = "Erro ao gravar registros!";
      }
      else if(i_msg==5)
      {
         s_msg = "Registros gravados com sucesso!";
      }
      if(s_msg!="")
      {
         fg_alert_add(o_elem, s_msg, 'frm_cadastro');
      }
   }

function fg_get_value(s_value, s_prefix)
{
   var s_return = '';
   s_value.split(',').each(function(s_elem){
      if(s_elem.startsWith(s_prefix))
      {
         s_return = s_return + s_elem.sub(s_prefix, '') + ',';
      }
   });

   return s_return.substring(0,s_return.length-1);
}

   function fg_request_hide_and_show(s_page, s_params, s_element, b_scroll)
   {
      if(b_scroll==undefined)
      {
         b_scroll = false;
      }
      $(s_element).innerHTML = "<div class='dv_centro'><img src='"+fgAppPath()+"includes/images/indicator_i.gif' alt='Carregando...' title='Carregando...'/></div>";

      new Ajax.Request(s_page, {
         parameters: s_params,
         onSuccess: function (transport) {
            var s_data = transport.responseText;
            new Effect.Fade(s_element, { duration: 0.4, afterFinish: function () {
               $(s_element).update(s_data);
               new Effect.Appear(s_element,{ duration: 0.4, afterFinish: function () {
               if(b_scroll)
               {
                  window.scrollTo(0,$(s_element).cumulativeOffset().top);
               }
            }});
            }});
         }
      });
   }
   
   function fg_event_source(o_event)
   {
      var o_return;
      if(o_event.target)
      {
         o_return = o_event.target;
      }
      else if(o_event.srcElement)
      {
         o_return = o_event.srcElement;
      }
      if(o_return.nodeType == 3) // defeat Safari bug
      {
         o_return = o_return.parentNode;
      }
      return o_return;
   }

   function fg_event_keycode(o_event)
   {
      var i_return;
      if(o_event.keyCode)
      {
         i_return = o_event.keyCode;
      }
      else if(o_event.which)
      {
         i_return = o_event.which;
      }
      return i_return;
   }

var o_submit_key = undefined;

   function fg_observe_form(s_form, f_function_submit)
   {
      Event.observe($(s_form), 'keypress', function(o_evn) {
         if (!o_evn) var o_evn = window.event;
         var i_keycode = fg_event_keycode(o_evn);
         var o_elem = fg_event_source(o_evn);
         if(i_keycode==Event.KEY_RETURN)
         {
            f_function_submit(o_elem.form);
            Event.stop(o_evn);
         }
         else if((i_keycode != Event.KEY_TAB)&&
                 (i_keycode != Event.KEY_BACKSPACE)&&
                 (i_keycode != Event.KEY_DELETE))
         {
            if(!Object.isUndefined(o_submit_key))
            {
               fn_submit = o_submit_key.get(o_elem.name);
               if(fn_submit)
               {
                  fn_submit(i_keycode, o_elem);
                  Event.stop(o_evn);
               }
            }
         }
      });
   }
   
   function fg_observe_keys(s_form)
   {
      Event.observe($(s_form), 'keypress', function(o_evn) {
         if (!o_evn) var o_evn = window.event;
         var i_keycode = fg_event_keycode(o_evn);
         var o_elem = fg_event_source(o_evn);
         if((i_keycode != Event.KEY_TAB)&&
           (i_keycode != Event.KEY_BACKSPACE)&&
           (i_keycode != Event.KEY_DELETE))
         {
            if(!Object.isUndefined(o_submit_key))
            {
               fn_submit = o_submit_key.get(o_elem.name);
               if(fn_submit)
               {
                  fn_submit(i_keycode, o_elem);
                  Event.stop(o_evn);
               }
            }
         }
      });
   }


// tree functions
function fg_on_load_tree(tt_tree)
{
   var tt_branches = tt_tree.getBranches();
   for(var i_cont = 0; i_cont < tt_branches.length; i_cont++)
   {
      tt_branches[i_cont].struct.lbl = tt_branches[i_cont].getText();
   }

   fg_renumbering_tree(tt_branches[0]);
}

function fg_renumbering_tree(tt_branch)
{
   var tt_branches = tt_branch.getChildren();
   if(tt_branches)
   {
      for(var i_cont = 0; i_cont < tt_branches.length; i_cont++)
      {
         tt_branches[i_cont].setOrd(i_cont+1);
         fg_renumbering_tree(tt_branches[i_cont]);
      }
   }
}

function fg_on_drop_tree(tt_move, tt_drop, b_finished)
{
   if (!b_finished)
   {
      if (tt_drop.struct.dropChildStyle)
      {
         tt_move.move(tt_drop);
         return false;
      }
      return true;
   }
   else
   {
      tt_root = tt_move.getParent();
      if(tt_root)
      {
         var tt_branches = tt_root.getChildren();
         for(var i_cont = 0; i_cont < tt_branches.length; i_cont++)
         {
            tt_branches[i_cont].setOrd(i_cont+1);
         }
      }

      tt_root = tt_drop.getParent();
      if(tt_root)
      {
         var tt_branches = tt_root.getChildren();
         for(var i_cont = 0; i_cont < tt_branches.length; i_cont++)
         {
            tt_branches[i_cont].setOrd(i_cont+1);
         }
         var tt_branches = tt_drop.getChildren();
         for(var i_cont = 0; i_cont < tt_branches.length; i_cont++)
         {
            tt_branches[i_cont].setOrd(i_cont+1);
         }
      }
      else
      {
         var tt_branches = tt_drop.getChildren();
         for(var i_cont = 0; i_cont < tt_branches.length; i_cont++)
         {
            tt_branches[i_cont].setOrd(i_cont+1);
         }
      }
   }
}

function fg_on_enter_field(o_event)
{
   o_field = o_event.element();
   if(o_field.value==o_field.defaultValue)
   {
      o_field.value = '';
   }
   o_field.addClassName('selected');
}

function fg_on_exit_field(o_event)
{
   o_field = o_event.element();
   if(o_field.value=='')
   {
      o_field.value = o_field.defaultValue;
      o_field.removeClassName('selected');
   }
}

function fg_generic_option(s_value, a_values)
{
   var s_result = "";
   var s_selected = "";

	if (s_value == "")
	{	s_result = "<option></option>"; }

   for (var i = 0; i < a_values.length; i++)
   {
		s_selected = "";
		if ((s_value != "") && (a_values[i][0] == s_value))
		{	s_selected = "selected";}
		s_result = s_result + "<option value=\""+a_values[i][0]+"\" "+s_selected+">"+a_values[i][1]+"</option>";
   }
	return s_result;
}

function fg_print_div_iframe(s_iframe, s_div)
{
	try
   {
   	var ifrm = $(s_iframe);
   	var content = $(s_div).innerHTML;

   	/* Determine what DOM model to use */
   	var printDoc = (ifrm.contentWindow || ifrm.contentDocument);
   	if (printDoc.document)
      {
   		printDoc = printDoc.document;
   	}

   	/* Create a HTML document to go into the iFrame */
   	/* The title will appear on the printed document */
   	printDoc.write("<html><head><title>title</title>");
   	printDoc.write("<link media='aural, braille, embossed, handheld, projection, screen, tty, tv' rel='stylesheet' type='text/css' href='"+fgCssPadrao()+"'>");
   	printDoc.write("<link media='print' rel='stylesheet' type='text/css' href='"+fgCssPadraoPrint()+"'>");
   	printDoc.write("</head><body onload=\'this.focus(); this.print();\'>");
   	printDoc.write(content + "</body></html>");
   	printDoc.close();
	}
	catch(e)
   {
		self.print();
	}
}

function fg_get_array_of(o_elem)
{
   s_return = "";
   if(o_elem)
   {
      if(typeof (o_elem)!='string')
      {
         s_return = o_elem.join(',');
      }
      else
      {
         s_return = o_elem;
      }
   }
   return s_return;
}

