﻿/* DOM Selector, Traversing plugins */
/* write by stone58@qq.com [qq:31474361] */
//get element by id
function withID(id) { return document.getElementById ? document.getElementById(id) : document.all[id] }
//get elements by className, from a node or document
function withClass(cn, node) {
    node = node && node.nodeType > 0 ? node : document;
    return node.getElementsByClassName ? node.getElementsByClassName(cn) :
    (function () {
        var elms = [];
        each(node.getElementsByTagName('*'), function (elm) {
            if (elm.tagName && hasClass(cn, elm)) elms.push(elm);
        });
        return elms;
    })();
}
//get child node elements
function getChildNodes(node) {
    var cns = [];
    each(node.childNodes, function (cn) {
        if (cn.nodeType == "1") cns.push(cn);
    });
    return cns;
}
//get siblings
function getSiblings(node) {
    
    var elms = [];
    each(getChildNodes(node.parentNode), function (n) {
        if (node != n) elms.push(n);
    });
    return elms;
}
//with each of an object,array
function each(obj, fn) {
    switch (Object.prototype.toString.apply(obj)) {
        case '[object Object]': var i = 0; for (var x in obj) { if (fn.call(obj[x], obj[x], i++) == false) break; } break;
        default: if (obj.length != window.$_undefined_) { for (var i = 0, l = obj.length; i < l; i++) { if (fn.call(obj[i], obj[i], i) == false) break; } }
    }
}
//get the index from a set
function index(elm, set) {
    var index = -1;
    each(set, function (e, i) {
        if (elm == e) { index = i; return false; }
    });
    return index;
}
//add class to a element
function addClass(cn, elm) {
    if (!hasClass(cn, elm)) elm.className += ' ' + cn;
}
//remove classes from a element
function removeClass(cn, elm) {
    cn = cn.split(/[\s,]+/);
    each(cn, function (klass) {
        elm.className = elm.className.replace(new RegExp('\\b' + klass + '\\b'), '');
    });
}
//return true if has a asigned className ;
function hasClass(cn, elm) { return !!elm.className.match(new RegExp('\\b' + cn + '\\b')) }
//hide element
function hide(elm) {
    // store current display property
    elm._computedDisplay = (elm.currentStyle || getComputedStyle(elm, null)).display;
    elm._computedDisplay = elm._computedDisply == "none" ? "block" : elm._computedDisply;
    elm.style.display = "none";
}
//show element
function show(elm) {
    elm.style.display = elm._computedDisplay || "block";
}
//bind Event
function bind(t, sEventType, fn) {
    //IE和FF的兼容性处理
     if(!t) return false;
    if (t.addEventListener) {//如果是FF
        t.addEventListener(sEventType, fn, false);
    } else if (t.attachEvent) {//如果是IE
        t.attachEvent('on' + sEventType, function (e) { fn.call(t, e) });
    } else {
        t['on' + sEventType] = fn;
    }
}
function unbind(t, sEventType, fnHandler) {
    if (t.removeEventListener) {//如果是FF
        t.removeEventListener(sEventType, fnHandler, false);
    } else if (t.detachEvent) {//如果是IE
        t.detachEvent('on' + sEventType, fnHandler);
    } else {
        t['on' + sEventType] = null;
    }
}
//停止事件冒泡
function stopPropagation(e) {
    if (e && e.stopPropagation)
        e.stopPropagation();
    else
        window.event.cancelBubble = true;
    return false;
}
//禁用默认行为
function preventDefault(e) {
    if (e && e.preventDefault)
        e.preventDefault();
    else
        window.event.returnValue = false;
    return false;
}

