//==============================================================
//description: create timer event
//  parameter: ev -- event function
//             t  -- timer milliseconds  
//     return:   
//==============================================================
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);
    }
}

//===============================================================
//description:retrieve object by id
//  parameter:id -- ojetct id 
//     return:  
//===============================================================
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;
}

//===============================================================
//description:create element
//  parameter:type -- element type 
//            id   -- element id (option)
//            parent -- parent object(option)
//     return:element object reference   
//===============================================================
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;
}

//==============================================================
//description: retrieve element of form
//  parameter: fid -- form object id
//             fname -- element name
//     return: element object reference  
//==============================================================
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;
}

//==============================================================
//description: 
//  parameter:
//     return:   
//==============================================================
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();
}




//==============================================================
//description:
//  parameter:
//     return:   
//==============================================================
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;
}

//==============================================================
//description:
//  parameter:
//     return:   
//==============================================================
function getFloat(o,d)
{
    if(!d)d=0.0;
    o=parseFloat(o);
    if(isNaN(o))o=d;
    return o;
}

//==============================================================
//description: add event to element
//  parameter:el -- element object reference
//            evname -- event name , not with prefix "on-"
//            func -- function to respond to the event
//     return: none   
//==============================================================
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;
    }
}

//==============================================================
//description: remove event from element
//  parameter: el -- elemnent object reference
//             evname -- event name
//             func -- function to respond to the event
//     return: none  
//==============================================================
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;
    }
}

//==============================================================
//description:
//  parameter:
//     return:   
//==============================================================
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;
}

if(!String.prototype.byteLength)
{
String.prototype.byteLength=function()
{
    return byteLength(this);
}
}
if(!String.prototype.trim)
{
String.prototype.trim=function()
{
    return trim(this);
}
}

function emptyFunc()
{
}

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;
}

//==============================================================
//description: use ajax function; set user/pwd equal to null 
//  parameter: func -- end function
//             method -- post / get method
//             url -- network url
//             data -- transaction data
//             efunc -- error response function  
//     return:   
//==============================================================
function sAJAX(func,method,url,data,efunc)
{
    AJAX(func,method,url,true,null,null,data,efunc);
}

//==============================================================
//description:
//  parameter: func -- end function
//             method -- post / get method
//             url -- network url
//             async -- asynchronous / synchronization
//             user -- network username
//             passwd -- network password
//             data -- transaction data
//             efunc -- error response function  
//     return:   
//==============================================================
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;
}

//==============================================================
//description: setup window xmlhttprequest class where ActiveXObject is enabled
//  parameter:
//     return:   
//==============================================================


///////////////////////////////////////check updated
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;
    };
}

//==============================================================
//description: use ajax function , set mehod/ url / error functin
//  parameter: func -- end function
//             data -- transaction data
//     return: http request  
//==============================================================
function myAJAX(func,data)
{
    return sAJAX(func,'post',_AjaxURL,data,function(req)
    {
        alert('\u7cfb\u7edf\u5f02\u5e38\uff0c\u9519\u8bef\u4ee3\u7801\uff1a'+req.status);
    }
    );
}

// split string
var SP1=String.fromCharCode(1);
var SP2=String.fromCharCode(2);
var SP3=String.fromCharCode(3);
