function tab_select(tabs_id, contents_id, ev_type){
    var tabs = get_child_nodes(tabs_id);
    var ctn_nodes = get_child_nodes(contents_id);
    for (var i = 0; i < tabs.length; i++) {
        if (ev_type == 'click') {
            void function(){
                var idx = i;
                tabs[i].onclick = function(){
                    var pns = get_child_nodes(this.parentNode);
                    for (var j = 0; j < pns.length; j++) {
                        idx == j ? add_cls(pns[j], 'current') : rm_cls(pns[j], 'current');
                    }
                    for (var m = 0; m < ctn_nodes.length; m++) {
                        idx == m ? add_cls(ctn_nodes[m], 'current') : rm_cls(ctn_nodes[m], 'current');
                    }
                }
            }();
        }
        else {
            void function(){
                var idx = i;
                tabs[i].onmouseover = function(){
                    var pns = get_child_nodes(this.parentNode);
                    for (var j = 0; j < pns.length; j++) {
                        idx == j ? add_cls(pns[j], 'current') : rm_cls(pns[j], 'current');
                    }
                    for (var m = 0; m < ctn_nodes.length; m++) {
                        idx == m ? add_cls(ctn_nodes[m], 'current') : rm_cls(ctn_nodes[m], 'current');
                    }
                }
            }();
        }
    }
}

function get_child_nodes(obj){
    var obj = typeof(obj) == 'string' ? document.getElementById(obj) : obj;
    var nodes = [];
    for (var i = 0; i < obj.childNodes.length; i++) {
        if (obj.childNodes[i].nodeName != '#text' && obj.childNodes[i].nodeName != '#comment') {
            nodes.push(obj.childNodes[i]);
        }
    }
    return nodes;
}

function add_cls(e, cls){
    var tmp_str = ' ' + e.className + ' ';
    if (!(tmp_str.indexOf(cls) >= 0)) {
        e.className += ' ' + cls;
    }
}

function rm_cls(e, cls){
    if (e.className) {
        e.className = e.className.replace(new RegExp("\\b" + cls + "\\b\\s*", "g"), "");
    }
}

function has_cls(e, cls){
    var find_cls = ' ' + cls + ' ';
    var obj_cls = ' ' + e.className + ' ';
    return obj_cls.indexOf(find_cls) >= 0;
}

function zoom_img(obj, w, h){
    if (!h || !w) {
        return false;
    }
    var obj = typeof(obj) == 'string' ? document.getElementById(obj) : obj;
    var w_radio = w / obj.offsetWidth;
    var h_radio = h / obj.offsetHeight;
    if (w_radio > h_radio) {
        obj.style.height = h_radio * obj.offsetHeight + 'px';
    }
    else {
        obj.style.width = w_radio * obj.offsetWidth + 'px';
    }
    return true;
}

function create_cookie(name, value, days){
    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=/";
}

function read_cookie(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 erase_cookie(name){
    createCookie(name, "", -1);
}
function Ajax(config){
    //public
    this.author = 'alisan';
    this.version = '2011-09-20 build2.2';
    
    //private xml_engine
    var xml_engine = null, handlers = [];
    
    //private var config
    var url, method, result_format, syn, charset;
    
    var init = function(){
        url = config.url || '';
        method = config.method || 'GET';
        result_format = config.result_format || 'text';	//text | xml | json | msg
        syn = config.syn ? config.syn : true;
        charset = config.charset ? config.charset : 'utf-8';
        
        if (window.XMLHttpRequest) {
            xml_engine = new XMLHttpRequest();
            xml_engine.overrideMimeType && xml_engine.overrideMimeType('text/xml');
        }
        else {
            if (window.ActiveXObject) {xml_engine = new ActiveXObject('Msxml2.XMLHTTP') || new ActiveXObject('Microsoft.XMLHTTP');}
            else {alert('YOUR BROWSER IS NOT SUPPORT FOR AJAX, PLEASE UPGRADE YOUR BROWSER FIRST');}
        }
        xml_engine.onreadystatechange = callback;
    };
    
    var callEvent = function(ev, param){
        for (var i = 0; i < handlers.length; i++) {
            if (handlers[i].event == ev && handlers[i].func) {
                handlers[i].func(param);
            }
        }
    }
	
    var callback = function(){
        if (xml_engine.readyState == 4) {
            if (xml_engine.status == 200) {
				var result = null;
                if (result_format == 'json') {
					if(xml_engine.responseText.length > 1);{
						eval('result = ' + xml_engine.responseText);
					} 
                } else if (result_format == 'xml') {
                    result = xml_engine.responseXML;
                } else if(result_format == 'msg'){
					var msg = {};
                	
					var pattern = /id="msg_content".*?value="(.*?)".*?\/\>/;
					msg.content = pattern.exec(xml_engine.responseText)[1];
					
					pattern = /id="msg_flag".*?value="(.*?)".*?\/\>/;
					msg.flag = pattern.exec(xml_engine.responseText)[1];
					
					pattern = /id="msg_url".*?value="(.*?)".*?\/\>/;
					msg.url = pattern.exec(xml_engine.responseText)[1];
					
					pattern = /id="msg_expired".*?value="(.*?)".*?\/\>/;
					msg.expired = pattern.exec(xml_engine.responseText)[1];
					
					pattern = /id="msg_ext".*?value="(.*?)".*?\/\>/;
					msg.ext = pattern.exec(xml_engine.responseText)[1];
					
					result = msg;
                } else {
					result = xml_engine.responseText;
				}
				
                callEvent('RESULT', result);
                xml_engine = null;
            } else {
                callEvent('FAULT');
            }
        } else {
            callEvent('INIT', xml_engine.readyState);
            if (xml_engine.readyState == 0) {
                callEvent('READY');
            } else {
                callEvent('LOADING');
            }
        }
    }
    
    this.send = function(param){
        xml_engine.open(method, url, true);
        if (result_format == 'xml') {
            xml_engine.setRequestHeader('Content-Type', 'text/xml;');
        } else {
			xml_engine.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset='+charset);
        }
        
        method == 'GET' && (param = null);
        xml_engine.send(param);
    }
    
    this.addEventListener = function(ev, handler){
        for (var i = handlers.length; i >= 0; i--) {
            if (handlers[i] && handlers[i].event && handlers[i].event == ev && handlers[i].func == handler) {
                return false;
            }
        }
        handlers.push({
            event: ev,
            func: handler
        });
    }
    
    init();
}

function add_bookmark(title, url){
    if (window.sidebar) {
        window.sidebar.addPanel(title, url, '');
    }
    else 
        if (document.all) {
            window.external.AddFavorite(url, title);
        }
        else 
            if (window.opera && window.print) {
                return true;
            }
}

function set_home(obj, vrl){
    try {
        obj.style.behavior = 'url(#default#homepage)';
        obj.setHomePage(vrl);
    } 
    catch (e) {
        if (window.netscape) {
            try {
                netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
            } 
            catch (e) {
                alert("此操作被浏览器拒绝！\n请在浏览器地址栏输入“about:config”并回车\n然后将[signed.applets.codebase_principal_support]设置为’true’");
            }
            var prefs = Components.classes['@mozilla.org/preferences-service;1'].getService(Components.interfaces.nsIPrefBranch);
            prefs.setCharPref('browser.startup.homepage', vrl);
        }
    }
}

function collect_game(a_obj){
    var a_obj = typeof(a_obj) == 'string' ? document.getElementById(a_obj) : a_obj;
	a_obj.onclick = function(){return false;}
	
    var collect_result = function(msg){
        if (!msg) { return false;}
        if (msg.flag == 1) {
            a_obj.innerHTML = msg.content;
            a_obj.style.color = 'gray';
        }
        else {
            alert(msg.content);
            if (msg.url) {
                location.href = msg.url;
            }
        }
    }
	
    var ajax = new Ajax({url: a_obj.getAttribute('HREF'),result_format: 'msg'});
    ajax.addEventListener('INIT', function(){a_obj.innerHTML = '收藏中...'});
    ajax.addEventListener('RESULT', collect_result);
    ajax.send();
    return false;
}

function prize_up(a_obj){
    a_obj.onclick = function(){ return false;}
	
    var result = function(msg){
        if (msg.flag == 1) {
            a_obj.innerHTML = '<em>' + (msg.ext) + '</em>' + msg.content;
            a_obj.style.color = 'gray';
        }
        else {
            a_obj.innerHTML = '<em>' + a_obj.getElementsByTagName('EM')[0].innerHTML + '</em>' + msg.content;
            a_obj.title = msg.content;
            a_obj.style.color = 'red';
            if (obj.msg_url) {
                location.href = msg.url;
            }
        }
    }
    var init = function(){
        var prize_num = parseInt(a_obj.getElementsByTagName('EM')[0].innerHTML, 10);
        a_obj.innerHTML = '<em>' + prize_num + '</em>正提交';
    }
    var ajax = new Ajax({ url: a_obj.getAttribute('HREF'), result_format: 'msg', charset: 'gbk'});
    ajax.addEventListener('INIT', init);
    ajax.addEventListener('RESULT', result);
    ajax.send();
    return false;
}

function get_position(obj){
    var r = new Array();
    r['x'] = obj.offsetLeft;
    r['y'] = obj.offsetTop;
    while (obj = obj.offsetParent) {
        r['x'] += obj.offsetLeft;
        r['y'] += obj.offsetTop;
    }
    return r;
}

function game_level_effect(){
    var spans = document.getElementsByTagName('SPAN');
    star_spans = [];
    for (var i = spans.length - 1; i >= 0; i--) {
        if (spans[i].className.indexOf('star_comment') >= 0) {
            star_spans.push(spans[i]);
        }
    }
    for (var i = star_spans.length - 1; i >= 0; i--) {
        var ori_class = star_spans[i].className;
        void function(){
            var cls = ori_class;
            var as = star_spans[i].getElementsByTagName('A')
            for (var j = 0; j < as.length; j++) {
                void function(){
                    var k = j;
                    as[j].onmouseover = function(){
                        this.parentNode.parentNode.className = 'star_comment star_' + (k + 1);
                    }
                    as[j].onmouseout = function(){
                        this.parentNode.parentNode.className = cls;
                    }
                    as[j].onclick = function(){
                    }
                }();
            }
        }();
    }
}

function sel_all(container){
	if(!container) container = document;

	container = typeof(container) == 'string' ? document.getElementById(container) : container;
	var inputs = container.getElementsByTagName('INPUT');

	var tmps = [];
	for(var i=0; i<inputs.length; i++)
		if(inputs[i].type == 'checkbox')
			tmps.push(inputs[i]);

	var checked = false;
	for(var i=0; i<tmps.length; i++){
		if(i==0)
			checked = tmps[i].checked;
		if(checked)
			tmps[i].checked = false;
		else
			tmps[i].checked = true;
	}
}

function select_skin(sel){
    var sel = typeof(sel) == 'string' ? document.getElementById(sel) : sel;
    sel.parentNode.style.position = 'relative';
    var w = sel.offsetWidth;
    var h = sel.offsetHeight;
    var span = document.createElement('SPAN');
    span.style.cssText = 'border:none; position:relative; display:block; width:' + w + 'px;' + 'height:' + h + 'px';
    sel.parentNode.insertBefore(span, sel.nextSibling);
    sel.style.display = 'none';
    var dl = document.createElement('DL');
    dl.className = 'select_skin_dl';
    dl.width = w + 'px;'
    dl.style.cssText = 'width:' + w + 'px';
    for (var i = 0; i < sel.options.length; i++) {
        var dd = document.createElement('DD');
        dd.innerHTML = sel.options[i].text;
        void function(){
            var idx = i;
            dd.onclick = function(){
                var dds = this.parentNode.getElementsByTagName('DD');
                sel.selectedIndex = idx;
                dl.onmouseout();
                if (sel.onchange) {
                    sel.onchange();
                }
            }
        }();
        dl.appendChild(dd);
    }
    dl.onmouseover = function(){
        this.style.height = 'auto';
        var dds = this.getElementsByTagName('DD');
        for (var i = 0; i < dds.length; i++) {
            if (i == sel.selectedIndex) {
                dds[i].className = 'selected';
            }
            else {
                dds[i].className = '';
            }
            dds[i].style.display = 'block';
        }
    }
    dl.onmouseout = function(){
        this.style.height = '20px';
        var dds = this.getElementsByTagName('DD');
        for (var i = 0; i < dds.length; i++) {
            if (sel.selectedIndex == i) {
                dds[i].style.display = 'block';
                dds[i].className = 'selected';
            }
            else {
                dds[i].className = '';
                dds[i].style.display = 'none';
            }
        }
    }
    span.appendChild(dl);
    dl.onmouseout();
}
