//global functions and vars
var IE = document.all?true:false;
if(!IE) document.captureEvents(Event.KEYPRESS);
if(!IE) document.captureEvents(Event.MOUSEMOVE);

function $(id){    return document.getElementById(id);}

function getXmlHttpRequestObject(){
    if(window.XMLHttpRequest) return new XMLHttpRequest();
    else if(window.ActiveXObject) return new ActiveXObject("Microsoft.XMLHTTP");
}

function addHandler(object, event, handler){
    if(!IE) object.addEventListener(event, handler, false);
    else object.attachEvent('on' + event, handler);
}
function removeHandler(object, event, handler){
    if(!IE) object.removeEventListener(event, handler, false);
    else object.detachEvent('on' + event, handler);
}

function dump(obj, br) {
    var result='';
    for(var i in obj)
        if(typeof(i)!='function') result+='.'+i+'='+obj[i]+(br ? '<br />' : '\n');
    return result;
}

function getCharCode(e){
    if(!e) if(window.event) e=window.event;
    if(typeof(e.keyCode)=='number') char_code=e.keyCode;
    else if(typeof(e.which)=='number') char_code=e.which;
    else if(typeof(e.charCode)=='number') char_code=e.charCode;
    return char_code;
}
function uuid(){
    return ((new Date()).getTime() + "" + Math.floor(Math.random() *1000000)).substr(0, 18);
}
String.prototype.trim=function() { return this.replace(/^\s+|\s+$/g, ''); }
String.prototype.explode=function(sep){
    if(sep.length!=''){
        var res_arr=Array();
        var str=this;
        var i=0;
        while((pos=str.indexOf(sep))!=-1){
            res_arr[i++]=str.substr(0,pos);
            str=str.substr(pos+sep.length);
        }
        res_arr[i++]=str.substr(0,str.length);
        if(res_arr.length>0) return res_arr;
        else Array(this);
    }return false;
}
String.prototype.get_in_str=function(fstr,lstr,limit,trim){
    if(!limit) var limit=0;
    var str=this;
    var temp_arr=Array();
    var lcnt=0;
    while(str.indexOf(fstr)!=-1 && (limit ? lcnt<limit : true)){
        var fpos=str.indexOf(fstr)+fstr.length;
        str=str.substr(fpos);
        var lpos=str.indexOf(lstr);
        var val=(lpos!=-1 ? str.substr(0,lpos) : str);
        temp_arr[temp_arr.length]=(trim ? val.trim() : val);
        str=str.substr(lpos+lstr.lenght);
        lcnt++;
    }
    return (limit==1 ? (temp_arr[0] ? temp_arr[0] : '') : temp_arr);
}
Array.prototype.inArray=function(obj){
    var len=this.length;
    for(var x=0; x<len; x++){
        if(this[x]==obj) return true;
    }
    return false;
}
function setCursorPosition(target,pos){
    if(typeof(target)=='string') target=$(target);
    if(target.setSelectionRange){
        target.focus();
        target.setSelectionRange(pos,pos);
    }else if(target.createTextRange){
        var range = target.createTextRange();
        range.collapse(true);
        range.moveEnd('character', pos);
        range.moveStart('character', pos);
        range.select();
    }
}
function getSelectionStart(o){
    if(o.createTextRange){
        var r=document.selection.createRange().duplicate();
        r.moveEnd('character',o.value.length);
        if(r.text=='') return o.value.length;
        return o.value.lastIndexOf(r.text);
    }else return o.selectionStart;
}
function getSelectionEnd(o) {
    if(o.createTextRange){
        var r=document.selection.createRange().duplicate();
        r.moveStart('character',-o.value.length);
        return r.text.length;
    }else return o.selectionEnd;
}

function selectionText(target,value){
    if(typeof(target)=='string') target=document.getElementById(target);
    if(document.selection){
        target.focus();
        sel=document.selection.createRange();
        if(value) sel.text=value;
        else return sel.text;
    }else if(target.selectionStart || target.selectionStart=='0'){
        var startPos = target.selectionStart;
        var endPos = target.selectionEnd;
        if(value){
            target.value = target.value.substring(0, startPos)+value+target.value.substring(endPos, target.value.length);
        }else return target.value.substring(startPos, endPos);
    }
}
function input_check_numeric(elem,after_dot,max,blur){
    if(!after_dot) after_dot=0;
    if(typeof(elem)=='string') elem=$(elem);
    var pos=getSelectionStart(elem);
    var temp_str='';
    elem.value=elem.value.replace(',','.');
    for(i=0; i<elem.value.length; i++){
        var v=elem.value;
        if((v.charCodeAt(i)>=48 && v.charCodeAt(i)<=57) || (after_dot>0 && v.charAt(i)=='.' && temp_str.indexOf('.')==-1)){
            temp_str+=v.charAt(i);
        }
    }
    if((tpos=temp_str.indexOf('.'))!=-1) temp_str=temp_str.substr(0,tpos+after_dot+1);
    if(max && parseFloat(temp_str)>max) temp_str=max;
    elem.value=temp_str;
    if(!blur) setCursorPosition(elem,pos);
}

if(!getCookie('newWinCounter')) setCookie('newWinCounter','0',1,'/');
function open_window(link,w,h){
    var newWinCounter=getCookie('newWinCounter');
    var top = (screen.height - h) / 2;
    var left = (screen.width - w) / 2;
    var win = "width="+(w+20)+",height="+(h+20)+",top="+top+",left="+left+",menubar=no,location=no,resizable=yes,scrollbars=yes";
    newWin = window.open(link,'newWin'+newWinCounter,win);
    newWin.focus();
    createCookie('newWinCounter',newWinCounter+1,1);
    return newWin;
}
function setCookie(name,value,days,path) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        var expires = '; expires='+date.toGMTString();
    }
    else var expires = '';
    document.cookie = name+'='+value+expires+';'+(path ? ' path='+path : '');
}

function getCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}

function deleteCookie(name) {
    createCookie(name,"",-1);
}

function clear_select(select_elem,first_text){
    while (select_elem.firstChild) {
        select_elem.removeChild(select_elem.firstChild);
    }
    if(first_text) select_elem.options[0]=new Option(first_text,0);
}
function input_focus(inp,text){    if(typeof(inp)=='string') var inp=$(inp);
    var is_pass=(inp.type=='password');
    if(inp.value=='') inp.value=text;
    if(is_pass) inp.type='text';
    function inp_focus(e){        if(is_pass) inp.type='password';
        if(inp.value.trim()==text) inp.value='';
    }
    function inp_blur(e){
        if(inp.value.trim()==''){            inp.value=text;
            if(is_pass) inp.type='text';
        }
    }
    addHandler(inp,'focus',inp_focus);
    addHandler(inp,'blur',inp_blur);
}
function dataTable(tabla){
    if(typeof(tabla)=='string') tabla=$(tabla);
    if(typeof(checkCell)=='undefined') checkCell=0;
    tabla.className='dataTable';
    for(i=0; i<tabla.rows.length; i++){
        if(tabla.rows[i].className!='dataTableRowNone') dataTableTr(tabla.rows[i]);
    }
}
function dataTableTr(obj){
    obj.className='dataTableRow';
    function msover(e){
        obj.className='dataTableRowOver';
    }
    function msout(e){
        obj.className='dataTableRow';
    }
    function msclick(e){
        if(obj.className!='dataTableRowSelected'){
            obj.className='dataTableRowSelected';
            removeHandler(obj,'mouseover', msover);
            removeHandler(obj,'mouseout', msout);
        }else{
            obj.className='dataTableRowOver';
            addHandler(obj,'mouseover', msover);
            addHandler(obj,'mouseout', msout);
        }
    }
    addHandler(obj,'mouseover', msover);
    addHandler(obj,'mouseout', msout);
    addHandler(obj,'click', msclick);
}