var ns4;
var op5;
var op6;
var agt;
var mac;
var ie; 
var mac_ie;

function sniffBrowsers() {
    ns4 = document.layers;
    op5 = (navigator.userAgent.indexOf("Opera 5")!=-1) ||(navigator.userAgent.indexOf("Opera/5")!=-1);
    op6 = (navigator.userAgent.indexOf("Opera 6")!=-1) ||(navigator.userAgent.indexOf("Opera/6")!=-1);
    agt=navigator.userAgent.toLowerCase();
    mac = (agt.indexOf("mac")!=-1);
    ie = (agt.indexOf("msie") != -1); 
    mac_ie = mac && ie;
}


function getStyleObject(objectId, doc) {
    if(document.getElementById && document.getElementById(objectId)) {
    return document.getElementById(objectId).style;
    } else if (document.all && document.all(objectId)) {
    return document.all(objectId).style;
    } else if (document.layers && document.layers[objectId]) {
        return getObjNN4(document,objectId);
    } else {
    return false;
    }
} 

function changeObjectVisibility(objectId, newVisibility) {
    var styleObject = getStyleObject(objectId, document);
    if(styleObject) {
    styleObject.visibility = newVisibility;
    return true;
    } else {
    return false;
    }
} 

function findImage(name, doc) {
    var i, img;
    for (i = 0; i < doc.images.length; i++) {
        if (doc.images[i].name == name) {
            return doc.images[i];
        }
    }
    for (i = 0; i < doc.layers.length; i++) {
        if ((img = findImage(name, doc.layers[i].document)) != null) {
            img.container = doc.layers[i];
            return img;
        }
    }
    return null;
}

function getImage(name) {
    if (document.layers) {
        return findImage(name, document);
    }
    return null;
}

function getObjNN4(obj,name)
{
    var x = obj.layers;
    var foundLayer;
    for (var i=0;i<x.length;i++)
    {
        if (x[i].id == name)
             foundLayer = x[i];
        else if (x[i].layers.length)
            var tmp = getObjNN4(x[i],name);
        if (tmp) foundLayer = tmp;
    }
    return foundLayer;
}

function getElementHeight(Elem) {
    if (ns4) {
        var elem = getObjNN4(document, Elem);
        return elem.clip.height;
    } else {
        var elem;
        if(document.getElementById) {
            var elem = document.getElementById(Elem);
        } else if (document.all){
            var elem = document.all[Elem];
        }
        if (op5) {
            xPos = elem.style.pixelHeight;
        } else {
            xPos = elem.offsetHeight;
        }
        return xPos;
    } 
}

function getElementWidth(Elem) {
    if (ns4) {
        var elem = getObjNN4(document, Elem);
        return elem.clip.width;
    } else {
        var elem;
        if(document.getElementById) {
            var elem = document.getElementById(Elem);
        } else if (document.all){
            var elem = document.all[Elem];
        }
        if (op5) {
            xPos = elem.style.pixelWidth;
        } else {
            xPos = elem.offsetWidth;
        }
        return xPos;
    }
}

function getElementLeft(Elem) {
    if (ns4) {
        var elem = getObjNN4(document, Elem);
        return elem.pageX;
    } else {
        var elem;
        if(document.getElementById) {
            var elem = document.getElementById(Elem);
        } else if (document.all){
            var elem = document.all[Elem];
        }
        xPos = elem.offsetLeft;
        tempEl = elem.offsetParent;
          while (tempEl != null) {
              xPos += tempEl.offsetLeft;
              tempEl = tempEl.offsetParent;
          }
        return xPos;
    }
}


function getElementTop(Elem) {
    if (ns4) {
        var elem = getObjNN4(document, Elem);
        return elem.pageY;
    } else {
        if(document.getElementById) {    
            var elem = document.getElementById(Elem);
        } else if (document.all) {
            var elem = document.all[Elem];
        }
        yPos = elem.offsetTop;
        tempEl = elem.offsetParent;
        while (tempEl != null) {
              yPos += tempEl.offsetTop;
              tempEl = tempEl.offsetParent;
          }
        return yPos;
    }
}


function getImageLeft(myImage) {
    var x, obj;
    if (document.layers) {
        var img = getImage(myImage);
        if (img.container != null)
            return img.container.pageX + img.x;
        else
            return img.x;
      } else {
        return getElementLeft(myImage);
    }
    return -1;
}

function getImageTop(myImage) {
    var y, obj;
    if (document.layers) {
        var img = getImage(myImage);
        if (img.container != null)
            return img.container.pageY + img.y;
        else
            return img.y;
    } else {
        return getElementTop(myImage);
    }
    return -1;
}

function getImageWidth(myImage) {
    var x, obj;
    if (document.layers) {
        var img = getImage(myImage);
        return img.width;
    } else {
        return getElementWidth(myImage);
    }
    return -1;
}



function getImageHeight(myImage) {
    var y, obj;
    if (document.layers) {
        var img = getImage(myImage);
        return img.height;
    } else {
        return getElementHeight(myImage);
    }
    return -1;
}

function moveXY(myObject, x, y) {
    obj = getStyleObject(myObject)
    if (ns4) {
        obj.top = y;
         obj.left = x;
    } else {
        if (op5) {
            obj.pixelTop = y;
             obj.pixelLeft = x;
        } else {
            obj.top = y + 'px';
             obj.left = x + 'px';
        }    
    }
}

function changeClass(Elem, myClass) {
    var elem;
    if(document.getElementById) {
        var elem = document.getElementById(Elem);
    } else if (document.all){
        var elem = document.all[Elem];
    }
    if (op5 || op6) elem.style.className = myClass;
    else elem.className = myClass;
}

function changeBGColour(myObject, colour) {
    if (ns4) {
        var obj = getObjNN4(document, myObject);
        obj.bgColor=colour;
    } else {
        var obj = getStyleObject(myObject);
        if (op5) {
            obj.background = colour;    
        } else {
            obj.backgroundColor = colour;
        }    
    }
}

function changeImage(target, source) {
    var imageObj;
    
    if (ns4) {
        imageObj = getImage(target);
        if (imageObj) imageObj.src = eval(source).src; 
    } else {
        imageObj = eval('document.images.' + target);
        if (imageObj) imageObj.src = eval(source).src; 
    }
}

function utf8_encode ( str_data ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Webtoolkit.info (http://www.webtoolkit.info/)
    // *     example 1: utf8_encode('Kevin van Zonneveld');
    // *     returns 1: 'Kevin van Zonneveld'
 
    str_data = str_data.replace(/\r\n/g,"\n");
    var utftext = "";
 
    for (var n = 0; n < str_data.length; n++) {
        var c = str_data.charCodeAt(n);
        if (c < 128) {
            utftext += String.fromCharCode(c);
        } else if((c > 127) && (c < 2048)) {
            utftext += String.fromCharCode((c >> 6) | 192);
            utftext += String.fromCharCode((c & 63) | 128);
        } else {
            utftext += String.fromCharCode((c >> 12) | 224);
            utftext += String.fromCharCode(((c >> 6) & 63) | 128);
            utftext += String.fromCharCode((c & 63) | 128);
        }
    }
 
    return utftext;
}

function utf8_decode ( str_data ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Webtoolkit.info (http://www.webtoolkit.info/)
    // *     example 1: utf8_decode('Kevin van Zonneveld');
    // *     returns 1: 'Kevin van Zonneveld'
 
    var string = "", i = 0, c = c1 = c2 = 0;
 
    while ( i < str_data.length ) {
        c = str_data.charCodeAt(i);
        if (c < 128) {
            string += String.fromCharCode(c);
            i++;
        } else if((c > 191) && (c < 224)) {
            c2 = str_data.charCodeAt(i+1);
            string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
            i += 2;
        } else {
            c2 = str_data.charCodeAt(i+1);
            c3 = str_data.charCodeAt(i+2);
            string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
            i += 3;
        }
    }
 
    return string;
}
function number_format( number, decimals, dec_point, thousands_sep ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +     bugfix by: Michael White (http://crestidg.com)
    // +     bugfix by: Benjamin Lupton
    // +     bugfix by: Allan Jensen (http://www.winternet.no)
    // +    revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +     bugfix by: Howard Yeend
    // *     example 1: number_format(1234.5678, 2, '.', '');
    // *     returns 1: 1234.57     
 
    var n = number, c = isNaN(decimals = Math.abs(decimals)) ? 2 : decimals;
    var d = dec_point == undefined ? "." : dec_point;
    var t = thousands_sep == undefined ? "," : thousands_sep, s = n < 0 ? "-" : "";
    var i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "", j = (j = i.length) > 3 ? j % 3 : 0;
    
    return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
}
function urldecode( str ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Philip Peterson
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // *     example 1: urldecode('Kevin+van+Zonneveld%21');
    // *     returns 1: 'Kevin van Zonneveld!'
    
    var ret = str;
       
    ret = ret.replace(/\+/g, '%20');
    ret = decodeURIComponent(ret);
    ret = ret.toString();
 
    return ret;
}
function urlencode( str ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Philip Peterson
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // *     example 1: urlencode('Kevin van Zonneveld!');
    // *     returns 1: 'Kevin+van+Zonneveld%21'
                                     
    var ret = str;
    
    ret = ret.toString();
    ret = encodeURIComponent(ret);
    ret = ret.replace(/%20/g, '+');
 
    return ret;
}
function get(nombre){
    return document.getElementById(nombre);
}
function empty(id){
    var obj=document.getElementById(id);
    if(obj.value==""){
        return true;
    }
    if(obj.value=="undefined"){
        return true;
    }
    if(obj.value==0){
        return true;
    }
    if(obj.value==null){
        return true;
    }
    if(obj.value=="undefined"){
        return true;
    }
    if(obj.length==0){
        return true;
    }
    return false;
}
function number_format( number, decimals, dec_point, thousands_sep ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +     bugfix by: Michael White (http://crestidg.com)
    // +     bugfix by: Benjamin Lupton
    // +     bugfix by: Allan Jensen (http://www.winternet.no)
    // +    revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +     bugfix by: Howard Yeend
    // *     example 1: number_format(1234.5678, 2, '.', '');
    // *     returns 1: 1234.57     
 
    var n = number, c = isNaN(decimals = Math.abs(decimals)) ? 2 : decimals;
    var d = dec_point == undefined ? "." : dec_point;
    var t = thousands_sep == undefined ? "," : thousands_sep, s = n < 0 ? "-" : "";
    var i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "", j = (j = i.length) > 3 ? j % 3 : 0;
    
    return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
}
function include(filename){
    if($("script[src="+filename+"]").length>0){
        return false;
    }
    var fileref=document.createElement('script');
    fileref.setAttribute("type","text/javascript");
    fileref.setAttribute("src", filename);
    document.getElementsByTagName("head")[0].appendChild(fileref);
    return true;
}
function load_css(filename){
    var fileref=document.createElement("link");
    fileref.setAttribute("rel", "stylesheet");
    fileref.setAttribute("type", "text/css");
    fileref.setAttribute("href", filename);
    document.getElementsByTagName("head")[0].appendChild(fileref);
    return true;
}
function selText(){
    var txt = '';
     if (window.getSelection)
    {
        txt = window.getSelection();
             }
    else if (document.getSelection)
    {
        txt = document.getSelection();
            }
    else if (document.selection)
    {
        txt = document.selection.createRange().text;
            }
    else 
        return;
    return txt;
}
/**
* Verifica si existe el valor en el arreglo
*/
function in_array(value,array){
    for(var i in array){
        if(array[i]==value)
            return true;
    }
    return false;
}

function print_full_date(timestamp){
    var date=new Date(timestamp);
    return date.getFullYear()+"-"+(parseInt(date.getMonth())+1)+"-"+date.getDate()+" "+date.getHours()+":"+date.getMinutes();
}

function print_r(theObj){
  if(theObj.constructor == Array ||
     theObj.constructor == Object){
    document.write("<ul>")
    for(var p in theObj){
      if(theObj[p].constructor == Array||
         theObj[p].constructor == Object){
document.write("<li>["+p+"] => "+typeof(theObj)+"</li>");
        document.write("<ul>")
        print_r(theObj[p]);
        document.write("</ul>")
      } else {
document.write("<li>["+p+"] => "+theObj[p]+"</li>");
      }
    }
    document.write("</ul>")
  }
}
function dump(arr,level) {
    var dumped_text = "";
    if(!level) level = 0;
    
    //The padding given at the beginning of the line.
    var level_padding = "";
    for(var j=0;j<level+1;j++) level_padding += "&nbsp;&nbsp;&nbsp;";
    
    if(typeof(arr) == 'object') { //Array/Hashes/Objects 
        for(var item in arr) {
            var value = arr[item];
            
            if(typeof(value) == 'object') { //If it is an array,
                dumped_text += level_padding + "'" + item + "' ...\n<br>";
                dumped_text += dump(value,level+1);
            } else {
                dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n<br>";
            }
        }
    } else { //Stings/Chars/Numbers etc.
        dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
    }
    document.write(dumped_text);
}
String.prototype.capitalize = function(){
   return this.replace( /(^|\s)([a-z])/g , function(m,p1,p2){ return p1+p2.toUpperCase(); } );
};
Object.size = function(obj) {
    var size = 0, key;
    for (key in obj) {
        if (obj.hasOwnProperty(key)) size++;
    }
    return size;
};
