﻿String.prototype.trim = function() {
    return this.replace(/(^\s*)|(\s*$)/g, "");
}
function $(name) {
    return document.getElementById(name) || document.getElementsByName(name)[0] || '';
}
function tag(name, elem) {
    return (elem || document).getElementsByTagName(name);
}
function hasClass(name, type) {
    var r = [];
    var re = new RegExp("(^|\\s)" + name + "(\\s|$)");
    var e = tag(type || "*");
    for (var i=0; i<e.length; i++) {
        if (re.test(attr(e[i], "class"))) r.push(e[i]);
    }
    return r;
}
function attr(elem, name, value) {
    if (!name || name.constructor != String) return '';
    name = {'for':'htmlFor','class':'className'}[name] || name;
    if (typeof value != 'undefined') {
        elem[name] = value;
        if (elem.setAttribute) elem.setAttribute(name, value);
    }
    return elem[name] || elem.getAttribute(name) || '';
}
/*addEvent*/
function addEvent(elem, type, handler) {
    if (!handler.$guid) handler.$guid = addEvent.guid++;
    if (!elem.events) elem.events = {};
    var handlers = elem.events[type];
    if (!handlers) {
        handlers = elem.events[type] = {};
        if (elem["on" + type]) handlers[0] = elem["on" + type];
    }
    handlers[handler.$guid] = handler;
    elem["on" + type] = handleEvent;
}
addEvent.guid = 1;
function removeEvent(elem, type, handler) {
    if (elem.events && elem.events[type]) delete elem.events[type][handler.$guid];
}
function handleEvent(event) {
    var reValue = true;
    event = event || fixEvent(window.event);
    var handlers = this.events[event.type];
    for (var i in handlers) {
        this.$handleEvent = handlers[i];
        if (this.$handleEvent(event) === false) reValue = false;
    }
    return reValue;
}
function fixEvent(event) {
    event.preventDefault = fixEvent.preventDefault;
    event.stopPropagation = fixEvent.stopPropagation;
    return event;
    fixEvent.preventDefault = function() {
        this.returnValue = false;
    }
    fixEvent.stopPropagation = function() {
        this.cancelBubblu = true;
    }
}
/*Ajax*/
if (typeof XMLHttpRequest == 'undefined') {
    XMLHttpRequest = function() {
        return new ActiveXObject(navigator.userAgent.indexOf("MSIE 5") >= 0 ? "Microsoft.XMLHTTP" : "Msxml2.XMLHTTP");
    }
}
function serialize(a) {
    var s = [];
    a = (a.constructor == Array) ? a : [a];
    for (var i=0,j=a.length; i<j; i++) {
        s.push(a[i].name + "=" + escape(a[i].value));
    }
    return s.join("&");
}
function ajax(params) {
    params = {
        url: params.url || "",
        timeout: params.timeout || 5000,
        data: params.data || [],
        onRuntime: params.onRuntime || function() {},
        onError: params.onError || function() {},
        onSuccess: params.onSuccess || function() {}
    };
    var xml = new XMLHttpRequest();
    xml.open("POST", params.url, true);
    var timeout = params.timeout;
    var done = false;
    setTimeout(function() {
        done = true;
    });    
    xml.onreadystatechange = function() {
        if (xml.readyState < 4) params.onRuntime();
        if (xml.readyState == 4 || done) {
            if (Success(xml)) {
                params.onSuccess(unescape(xml.responseText));
            } else {
                params.onError();
            }
        }
    };
    xml.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    xml.send(serialize(params.data));
    function Success(r) {
        try {
            return (r.status >= 200 && r.status < 300) || r.status == 304;
        } catch(e) {}
        return false;
    }
}
function getParam(name) {
    var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
    var r = location.search.substr(1).match(reg);
    if (r!=null) return unescape(r[2]);
    return null;
}
function hide(obj) {obj.style.display = "none";}
function show(obj) {obj.style.display = "block";}
addEvent(window, "load", function() {
    var inputs = tag("input");
    for (var i=0,j=inputs.length; i<j; i++) {
        var type = inputs[i].getAttribute("type");
        if (type == "text" || type == "password") {
            addEvent(inputs[i],"focus", function(){this.style.backgroundColor = "#e2f0ff";})
            addEvent(inputs[i], "blur", function(){this.style.backgroundColor = "#fff";})
        }
        if (type == "checkbox") inputs[i].style.border = "0px";
    }
});
