
function $()
{
    var elements=new Array();
    for(var i=0;i<arguments.length;i++)
    {
        var element=arguments[i];
        if(typeof element=='string')
        element=document.getElementById(element);
        if(arguments.length==1)
        return element;
        elements.push(element);
    }
    return elements;
}
function $c(type,id,parent)
{
    var el=null;
    if(document.createElementNS)
    {
        el=document.createElementNS("http://www.w3.org/1999/xhtml",type);
    }
    else
    {
        el=document.createElement(type);
    }
    if(typeof parent!="undefined")
    {
        parent.appendChild(el);
    }
    if(typeof id!="undefined")
    {
        el.id=id;
    }
    return el;
}
document.getElementsByIdRegex=function(r,ele)
{
    if(!ele)ele=document;
    var children=ele.getElementsByTagName('*')||ele.all;
    var elements=new Array();
    var reg=new RegExp(r);
    for(var i=0;i<children.length;i++)
    {
        var child=children[i];
        var id=child.id;
        if(id)
        {
            try
            {
                if(id.match(reg))
                {
                    elements.push(child);
                }
            }
            catch(e)
            {
            }
        }
    }
    return elements;
}
function getFormElement(fid,fname)
{
    var f=$(fid);
    if(!f)f=document.forms[fid];
    if(!f)return false;
    var e=new Array();
    for(var i=0;i<f.elements.length;++i)
    {
        var ee=f.elements.item(i);
        if(ee&&ee.name&&ee.name==fname)
        {
            e.push(ee);
        }
    }
    if(e.length==1)return e[0];
    if(e.length==0)return false;
    return e;
}
function loc(u,target)
{
    var id='loc_form_tmp';
    var f=$(id);
    if(!f)
    {
        f=$c('form',id,document.body);
    }
    if(!target)target='';
    f.target=target;
    f.action=u;
    f.method='get';
    if(u.indexOf('?')>=0)
    {
        var t=u.split('?')[1];
        var ts=t.split('&');
        if(ts&&ts.length>0)
        {
            for(var i=0;i<ts.length;++i)
            {
                var tss=ts[i].split('=');
                if(tss&&tss.length==2)
                {
                    var h=$c('input',null,f);
                    h.type='hidden';
                    h.name=tss[0];
                    h.value=tss[1];
                }
            }
        }
    }
    f.submit();
}
function jsEncode(str)
{
    return encodeURIComponent(str);
}
function jsDecode(str)
{
    return decodeURIComponent(str);
}
function serializerForm(fname)
{
    var f=$(fname)||document.forms[fname];
    if(!f)return'';
    var s=''
    for(var i=0;i<f.elements.length;++i)
    {
        var e=f[i];
        if(!e.name)continue;
        var name=e.name;
        var value=null;
        if(e.tagName.toLowerCase()=='textarea')
        {
            value=e.value||e.innerHTML;
        }
        else if(e.tagName.toLowerCase()=='select')
        {
            if(!e.options[e.selectedIndex])continue;
            value=e.options[e.selectedIndex].value;
        }
        else if(e.tagName.toLowerCase()=='input')
        {
            switch(e.type.toLowerCase())
            {
                case'submit':case'hidden':case'password':case'text':value=e.value;
                break;
                case'checkbox':case'radio':if(!e.checked)continue;
                value=e.value;
                break;
                default:continue;
            }
        }
        s+=e.name+'='+jsEncode(value)+'&';
    }
    return s;
}
function utf8(wide)
{
    var c,s;
    var enc='';
    var i=0;
    while(i<wide.length)
    {
        c=wide.charCodeAt(i++);
        if(c>=0xDC00&&c<0xE000)continue;
        if(c>=0xD800&&c<0xDC00)
        {
            if(i>=wide.length)continue;
            s=wide.charCodeAt(i++);
            if(s<0xDC00||c>=0xDE00)continue;
            c=((c-0xD800)<<10)+(s-0xDC00)+0x10000;
        }
        if(c<0x80)enc+=String.fromCharCode(c);
        else if(c<0x800)enc+=String.fromCharCode(0xC0+(c>>6),0x80+(c&0x3F));
        else if(c<0x10000)enc+=String.fromCharCode(0xE0+(c>>12),0x80+(c>>6&0x3F),0x80+(c&0x3F));
        else enc+=String.fromCharCode(0xF0+(c>>18),0x80+(c>>12&0x3F),0x80+(c>>6&0x3F),0x80+(c&0x3F));
    }
    return enc;
}
var hexchars="0123456789ABCDEF";
var okURIchars="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-";
function toHex(n)
{
    return hexchars.charAt(n>>4)+hexchars.charAt(n&0xF);
}
function encodeURIComponentNew(s)
{
    var s=utf8(s);
    var c;
    var enc='';
    for(var i=0;i<s.length;i++)
    {
        if(okURIchars.indexOf(s.charAt(i))==-1)
        enc+='%'+toHex(s.charCodeAt(i));
        else
        enc+=s.charAt(i);
    }
    return enc;
}
function unescapeHTML(s)
{
    s=s.replace(/&nbsp;/g,' ');
    s=s.replace(/&lt;/g,'<');
    s=s.replace(/&gt;/g,'>');
    s=s.replace(/&amp;/g,'&');
    s=s.replace(/&quot;/g,'"');
    return s;
}
function escapeHTML(s)
{
    s=s.replace(/ /g,'&nbsp;');
    s=s.replace(/</g,'&lt;');
    s=s.replace(/>/g,'&gt;');
    s=s.replace(/&/g,'&amp;');
    s=s.replace(/\"/g,'&quot;');return s;}
function getAbsPos(el)
{
    var SL=0,ST=0;
    var is_div=/^div$/i.test(el.tagName);
    if(is_div&&el.scrollLeft)
    SL=el.scrollLeft;
    if(is_div&&el.scrollTop)
    ST=el.scrollTop;
    var r=
    {
        x:el.offsetLeft-SL,y:el.offsetTop-ST
    };
    if(el.offsetParent)
    {
        var tmp=this.getAbsolutePos(el.offsetParent);
        r.x+=tmp.x;
        r.y+=tmp.y;
    }
    return r;
}
function trim(s)
{
    return s.replace(/(^\s+)|(\s+$)/g,'');
}
function byteLength(str)
{
    var len=0;
    for(var i=0;i<str.length;i++)
    {
        if(str.charCodeAt(i)>255)
        {
            len+=2;
        }
        else
        {
            len++;
        }
    }
    return len;
}
function getInt(o,d)
{
    if(!d)d=0;
    o=parseInt(o);
    if(isNaN(o))o=d;
    return o;
}
function getFloat(o,d)
{
    if(!d)d=0.0;
    o=parseFloat(o);
    if(isNaN(o))o=d;
    return o;
}
function addEvent(el,evname,func)
{
    if(el.attachEvent)
    {
        el.attachEvent("on"+evname,func);
    }
    else if(el.addEventListener)
    {
        el.addEventListener(evname,func,true);
    }
    else
    {
        el["on"+evname]=func;
    }
}
function removeEvent(el,evname,func)
{
    if(el.detachEvent)
    {
        el.detachEvent("on"+evname,func);
    }
    else if(el.removeEventListener)
    {
        el.removeEventListener(evname,func,true);
    }
    else
    {
        el["on"+evname]=null;
    }
}
function stopEvent(ev)
{
    ev||(ev=window.event);
    if(document.all&&window.event)
    {
        ev.cancelBubble=true;
        ev.returnValue=false;
    }
    else
    {
        ev.preventDefault();
        ev.stopPropagation();
    }
    return false;
}
function removeClass(el,className)
{
    if(!(el&&el.className))
    {
        return;
    }
    var cls=el.className.split(" ");
    var ar=new Array();
    for(var i=cls.length;i>0;)
    {
        if(cls[--i]!=className)
        {
            ar[ar.length]=cls[i];
        }
    }
    el.className=ar.join(" ");
}
function addClass(el,className)
{
    Calendar.removeClass(el,className);
    el.className+=" "+className;
}
function mergeTemplate(template,context)
{
    for(var k in context)
    {
        for(var i=0;i<100;++i)
        {
            if(template.search('var_'+k+'_')!=-1)
            {
                template=template.replace('var_'+k+'_',context[k]);
            }
            else
            {
                break;
            }
        }
        for(var i=0;i<100;++i)
        {
            if(template.search('{'+k+'}')!=-1)
            {
                template=template.replace('{'+k+'}',context[k]);
            }
            else
            {
                break;
            }
        }
    }
    return template;
}
function getTemplate(id)
{
    var e=$(id);
    if(!e)return'';
    var s=e.innerHTML;
    if(!s)return'';
    return s.replace('<!--','').replace('-->','');
}
var timeouts=new Array();
function $t(ev,t)
{
    if(timeouts[ev])
    {
        clearTimeout(timeouts[ev]);
        timeouts[ev]=null;
    }
    if(t>=0)
    {
        timeouts[ev]=setTimeout(ev,t);
    }
}
if(typeof encodeURIComponent=="function")
{
}
else
{
function encodeURIComponent(s)
{
    return encodeURIComponentNew(s);
}
}
if(typeof decodeURIComponent=="function")
{
}
else
{
function decodeURIComponent(s)
{
    return unescape(s);
}
}
if(!Array.prototype.push)
{
Array.prototype.push=function()
{
    var startLength=this.length;
    for(var i=0;i<arguments.length;i++)
    this[startLength+i]=arguments[i];
    return this.length;
}
}
if(!String.prototype.byteLength)
{
String.prototype.byteLength=function()
{
    return byteLength(this);
}
}
if(!String.prototype.trim)
{
String.prototype.trim=function()
{
    return trim(this);
}
}
if(!String.prototype.escapeHTML)
{
String.prototype.escapeHTML=function()
{
    return escapeHTML(this);
}
}
if(!String.prototype.unescapeHTML)
{
String.prototype.unescapeHTML=function()
{
    return unescapeHTML(this);
}
}
function emptyFunc()
{
}
function gAJAX(func,url,efunc)
{
    sAJAX(func,'get',url,null,efunc);
}
function sAJAX(func,method,url,data,efunc)
{
    AJAX(func,method,url,true,null,null,data,efunc);
}
function AJAX(func,method,url,async,user,password,data,efunc)
{
    var req=new XMLHttpRequest();
    if(req)
    {
        req.onreadystatechange=function()
        {
            if(req.readyState==4&&req.status==200)
            {
                if(func)func(req);
            }
            else if(req.readyState==4&&req.readyState>200)
            {
                if(efunc)efunc(req);
            }
            if(req.readyState==4)
            {
                req.onreadystatechange=window.emptyFunc;
            }
        };
        method=method.toUpperCase();
        req.open(method,url,async,user,password);

        if(method=='POST')
        {
            req.setRequestHeader('Content-type','application/x-www-form-urlencoded');
        }
        if(data)
        {
            req.send(data);
        }
        else
        {
            req.send(null);
        }
    }
    return req;
}
if(window.ActiveXObject&&!window.XMLHttpRequest)
{
    window.XMLHttpRequest=function()
    {
        var msxmls=new Array('Msxml2.XMLHTTP','Microsoft.XMLHTTP');
        for(var i=0;i<msxmls.length;i++)
        {
            try
            {
                return new ActiveXObject(msxmls[i]);
            }
            catch(e)
            {
            }
        }
        return null;
    };
}
