/*****************************************************************************/
// basic:
/*****************************************************************************/
// evalTextScript:
// addOnLoadEvent:
// addEvent:
// showModalDialog:
// urlFor:
// showMessage:
// cancelEvent:
// isOnlyNumber:
// dropReturn:
// changeFormStatus:
// dropSpaces:
// params2URL:
// execute:
// changeApplicationLanguage:
// copy:
// destroy:
// defined:
// openWindow:
// openMaximizedWindow:
// browserDetect:
// changeIconArrow:
// round:
/*****************************************************************************/


/*****************************************************************************/
function evalTextScript (str) {
   var index = str.indexOf ('<script type="text/javascript">');
   if (index < 0) return;

   while (index >= 0) {
      var sub = str.substr (index + 31, str.length);
      var last = sub.indexOf ('</script>'); 

      sub = sub.substr (0, last);

      try {
         eval (sub);
      }
      catch (e) {
         alert ('Error: ' + r.description+'\n----------\n' + sub);
         return;
      }

      str = str.substr (index+last+31, str.length); 
      index = str.indexOf ('<script type="text/javascript">');
   }//Each javascript code
}//evalTextScript


/*****************************************************************************/
function addOnLoadEvent (func) {
   addEvent (window, 'load', func);
}//addOnLoadEvent


/*****************************************************************************/
function addEvent (obj, event, func) {
   if (obj.attachEvent)
      obj.attachEvent ('on'+event, func);
   else if (obj.addEventListener)
      obj.addEventListener (event, func, false);
}//addEvent


/*****************************************************************************/
function showModalDialog (msg) {
   $('modal_dialog').style.top = '0px';
   $('modal_dialog').style.left = '0px';

   show ('modal_dialog');
   show ('modal_dialog_msg');

   var height = getClientHeight();
   var width = getClientWidth();
   var h = getElementHeight ('modal_dialog_msg');
   var w = getElementWidth ('modal_dialog_msg');

   $('modal_dialog').style.height = height + 'px';
   $('modal_dialog').style.width = width + 'px';

   $('modal_dialog_msg').style.top = ((height / 2) - (h / 2)) + 'px';
   $('modal_dialog_msg').style.left = ((width / 2) - (w / 2)) + 'px';
}//showModalDialog


/*****************************************************************************/
function urlFor (url) {
   return url_base + url;
}//urlFor


/*****************************************************************************/
function showMessage (msg, data) {
   data = data || {};

   if (msg) alert (lang.msg (msg));
   if (data.focus) $f(data.focus);

   return false;
}//showMessage


/*****************************************************************************/
function cancelEvent (e) {
   
}//cancelEvent


/*****************************************************************************/
function isOnlyNumber (key) {
   if ((key >= 48 && key <= 57) ||
       key == 8 ||
       key == 9 ||
       (key >= 35 && key <= 40))
      return true;

   return false;
}//isOnlyNumber


/*****************************************************************************/
function dropReturn (str, tag) {
   str = str.replace (/\n/g, (tag || ''));
   str = str.replace (/\r/g,'');

   return str;
}//dropReturn


/*****************************************************************************/
function changeFormStatus (status, form, value) {
   var status_local = !status;

   var type = typeof (form);

   switch (type) {
      case 'string':
         var f = $(form);
         if (!f) return false;

         f.disabled = status_local;

         if (!f.old_class) f.old_class = f.className || ' ';
         f.className = !status ? 'disabled' : f.old_class;

         if (defined (value)) $v(form, value);
      break; //string
      case 'object':
         if (!defined (form)) return;

         if (!defined (form.length)) {
            form.disabled = status_local;
            if (!form.old_class) form.old_class = form.className || ' ';

            form.className = !status ? 'disabled' : form.old_class;
            if (defined (value)) $v(form, value);
         }//Just one object
         else {
            var length = form.length;
            for (var i = 0; i < length; i++)
               changeFormStatus (status, form[i], value);
         }//Several objects
      break;//object
   }
}//changeFormStatus


/*****************************************************************************/
function dropSpaces (str) {
   if (!defined (str)) return '';

   str = str.replace (/^\s+/g, ""); 
   str = str.replace (/\s+$/g, ""); 

   return str;
}//dropSpaces


/*****************************************************************************/
function params2URL (params) {
   var str = '';
   var join = '';

   for (var key in params) {
      if (typeof (params[key]) == 'function') continue;

      str += join + key + '=' + params[key];
      join ='&'; 
   }//

   return str;
}//params2URL


/*****************************************************************************/
function execute (func, data, params) {
      var type = typeof (func);

      try {
         switch (type) {
            case 'string': eval (func); break;//string
            case 'function': func (data, params); break;//function
         };

         return true;
      }//Try
      catch (e) {
         //if (show_error) 
         //alert ('ERROR (execute): ' + e.description+' ('+e.number+')\n-----------\n' + func);
         return false;
      }//Cath
}//execute


/*****************************************************************************/
function changeApplicationLanguage (language) {
   var url = window.location.toString();

   var index = url.indexOf ('language=');
   if (index > 0) {
      var after = url.substr (0, index);
      var before = url.substr ((index + 11), url.length);

      url = after + 'language='+language+before;
   }//Exist variable for language
   else if (url.indexOf ('?') > 0) {
      url += '&language='+language;
   }//Exists ?, put as &
   else {
      url += '?language='+language;
   }//First list param

   window.location = url;
}//changeApplicationLanguage


/*****************************************************************************/
// copy:
/*****************************************************************************/
function copy (source) {
   if (!source) return false;

   var destination;

   var type = typeof (source);
   if (type == 'string' ||
       type == 'number') return source;

   if (defined (source.length)) {
      destination = [];
      var length = source.length;
      for (var i = 0; i < length; i++)
         destination[i] = source[i];
      }//Array copy
   else {
      destination = {};
      for (var info in source)
         if (info != 'toJSONString')
            destination[info] = source[info];
   }//Object copy

   return destination;
}//copy



/*****************************************************************************/
function defined (data) {
   if (data == null) return false;
   return typeof(data) != 'undefined' || false;
}//defined


/*****************************************************************************/
function destroy (obj) {
   var type = typeof (obj);

   switch (type) {
      case 'object':
         if (!defined (obj.length)) {
            for (var method in obj) {
               destroy (obj[method]);
               delete (obj[method]);
            }
         }//Hash
         else {
            var length = obj.length;
            for (var id = 0; id < length; id++) {
               destroy (obj[id]);
               delete (obj[id]);
            }
         }//Array
      break;//object
   }//

   obj = undefined;

   return obj;
}//destroy


/******************************************************************************/
function openWindow (page, width, height, params_obj) { 
   var params = '';
   if (defined (params_obj))
      params = params2URL (params_obj);

   var y = Math.abs((screen.availWidth - width)/2);
   var x = Math.abs((screen.availHeight - height)/2);
 
   return window.open (page + (params ? '?'+params:''),'','left='+y+',top='+x+',width='+width+',height='+height+',scrollbars=yes,resizable=yes');
}//openWindow


/******************************************************************************/
function openMaximizedWindow (page, params_obj) {
   var params = '';
   if (defined (params_obj))
      params = params2URL (params_obj); //Pass extra POST params

   return window.open (page + (params ? '?'+params:''),'','left=0,top=0,width='+(screen.width-10)+',height='+(screen.height-30)+',scrollbars=yes');
}//openMaximizedWindow


/******************************************************************************/
function AbrirVentanaMaximizada (page, width, height) {
   return openWindow (page, screen.width, screen.height);
}//AbrirVentanaMaximizada


/******************************************************************************/
function browserDetect () {
   var agt = '';
   try {
      agt = navigator.userAgent.toLowerCase();
   }
   catch (e) {}

   var is_ie = (agt.indexOf ('msie') != -1 && agt.indexOf ('windows') != -1) ? 1:0;
   var is_nav = 0;

   if (!is_ie) is_nav = agt.indexOf ('mozilla') != -1 ? 1:0;

   this.is_ie = function () {return is_ie;};
   this.is_nav = function () {return is_nav;};
   this.agt = function () {return agt;};
}//browserDetect


/******************************************************************************/
function changeIconArrow (img) {
   var src = $(img).src;
   var visible = false;

   if (src.indexOf ('up') > -1) {
      src = '/img/icons/arrow_down.gif';
      visible = true;
   }
   else
      src = '/img/icons/arrow_up.gif';

   $(img).src = src;

   return visible;
}//changeIconArrow


/*****************************************************************************/
function round (number, dec) {
 return (Math.round(number * Math.pow(10, dec))) / Math.pow(10, dec);
}//round


//Default object for browser detect.
var browser = new browserDetect ();

//Extend some basic object
Number.prototype.toRad = function () {return this * Math.PI / 180;}

/*
function toRad (n) {
   return n * Math.PI / 180;
}//toRad
*/
