/* script v2.0 暴雨不在明天 inare2.cn@gmail.com 2009.6.28
 *
 * inare2.cn js 库
 *
 */
window.onerror = function (sMessage, sUrl, sLine) {
	alert("An error occurred:\n" + sMessage + "\nURL: " + sUrl + "\nLine Number: " + sLine);
	return true;
};

var isIE = (new RegExp('internet explorer', 'gi')).test(navigator.appName);

var undefined;

var Try = {
    these : function(){
	    var returnValue;

	    for (var i = 0, length = arguments.length; i < length; i++){
	        var lambda = arguments[i];
		    try {
		        returnValue = lambda();
			    break;
		    } catch (e) {}
	    }

	    return returnValue || false;
	}
};

var $ = {};

$.id = function(id){
    return (typeof id === "string") ? document.getElementById(id) : id;
};

$.css = function(ele, style){
    ele = $.id(ele);

    if (style.constructor==Array){
        for (var i=0; i < style.length; i+=2)
            ele.style[style[i]] = style[i + 1];
    } else if (typeof style === "object"){
        for (p in style)
	        ele.style[p] = style[p];
    } else if (arguments.length >= 3){
        for (var i=1; i < arguments.length; i+=2)
            ele.style[arguments[i]] = arguments[i + 1];
    } else {
        return (ele.currentStyle ? ele.currentStyle : document.defaultView.getComputedStyle(ele, null))[style];
    }
};

$._attrName = {
	'class' : 'className',
	'id' : 'id',
	'style' : 'style',
    'src' : 'src'
};

$._setAttr = function(ele, attr, value){
	if ($._attrName[attr])
	    ele[$._attrName[attr]] = value;
	else
		ele.setAttribute(attr, value);
};

$.attr = function(ele, attrs){
    ele = $.id(ele);

    if (attrs.constructor==Array){
        for (var i=0; i < attrs.length; i+=2)
            $._setAttr(ele, attrs[i], attrs[i + 1]);
    } else if (typeof attrs === "object"){
        for (p in attrs)
	        $._setAttr(ele, p, attrs[p]);
    } else if (arguments.length >= 3){
        for (var i=1; i < arguments.length; i+=2)
            $._setAttr(ele, arguments[i], arguments[i + 1]);
    } else {
        if ($._attrName[attrs])
			return ele[$._attrName[attrs]];
		else
			return ele.getAttribute(attrs);
    }
};

//添加事件处理函数（兼容FF、IE）
$.addEventListener = function(ele, type, func){
    ele = $.id(ele);
    if(ele.addEventListener){
	    ele.addEventListener(type, func, false);
	} else {
	    ele.attachEvent("on" + type, func);
	}
};

//删除事件处理函数
$.delEventListener = function(ele, type, func){
    ele = $.id(ele);
    if(ele.removeEventListener){
	    ele.removeEventListener(type, func, false);
	} else {
		ele.detachEvent("on" + type, func);
	}
};

$.createElement = function(tagName, attrs, str, parent){
	var ele = document.createElement(tagName);

	if(attrs)
        $.attr(ele, attrs);

    if(str)
        ele.innerHTML = str;

	if(parent)
		$.id(parent).appendChild(ele);

	return ele;
};

// 设置元素的不透明度
// element可以为DOM对象，或id
$.setOpacity = function (ele, value){
	if(isIE)
		$.css(ele, {"filter" : "alpha(opacity:" + Math.round(value * 100) + ")"}); //设置CSS滤境
	else
		$.css(ele, {"opacity" : value}); //设置Opacity样式
};

//获取元素的不透明度
$.getOpacity = function (ele){
    if(isIE)
        return parseFloat(stripAlpha($.css(ele, "filter"))) / 100; //获取filter样式属性
    else
        return parseFloat($.css(ele, "opacity")); //获取opacity样式属性
};

$.fadeIn = function (ele, func){
    ele = $.id(ele);

	//获取当前不透明度
	var currentOpactity = $.getOpacity(ele);

	//如果不透明度大于1则停止渐变过程
	if(currentOpactity >= 1){
		$.setOpacity(ele, 1);

        //渐变完成回调
        if(func) func(ele);
		return;
	} else {
		$.setOpacity(ele, currentOpactity + 0.02);

		//10ms后再次执行fadeIn函数
		setTimeout(function(){$.fadeIn(ele);}, 10);
	}
};

$.fadeOut = function (ele, func){
    ele = $.id(ele);

	//获取当明不透明度
	var currentOpactity = $.getOpacity(ele);

	//如果不透明度小于0.01,结束渐变过程
	if(currentOpactity <= 0.01){
		$.setOpacity(ele, 0);

        //渐变完成回调
        if(func) func(ele);
		return;
	} else {
		//将不透明度减小0.02
		$.setOpacity(ele, currentOpactity - 0.02)

		setTimeout(function(){$.fadeOut(ele); }, 10);
	}
};

$.getOffset = function (ele) {
    ele = $.id(ele);
	return {height:ele.offsetHeight, width:ele.offsetWidth};
};

$.slideDown = function (ele, type, mX, num) {
    $.css(ele,[type, $.getOffset(ele)[type]+num+"px"]);

    if($.getOffset(ele)[type]<mX){
		setTimeout(function(){$.slideDown(ele, type, mX, num);}, 10);
    }else{
		$.css(ele,[type, mX])
    }
};

$.slideUp = function (ele, type, mX, num) {
    $.css(ele,[type, $.getOffset(ele)[type]-num+"px"]);

    if($.getOffset(ele)[type]>mX){
		setTimeout(function(){$.slideUp(ele, type, mX, num);}, 10);
    }else{
		$.css(ele,[type, mX])
	}
};

$.msg = function(){};

//将字符串附加到$.id("main")
$._child = function(s){
    $.createElement('div', {"id":"main"}, s, document.body);
};

    //添加css
$._css = function(s){
    $.createElement('style', null, s, document.getElementsByTagName('head')[0]);
};

$._onAbort = function(xhr){
    $.msg("请求取消. " + xhr.status + " " + xhr.statusText);
};
$._onSuccess = function(xhr){
    $.msg("请求成功.");

    var h = xhr.getResponseHeader("Content-Type").replace(/(?:;)+$/, "");

    switch(h){
		case 'text/html' :
			$._child(xhr.responseText);
		break;

		case 'application/x-javascript' :
            eval(xhr.responseText);
		break;

		case 'text/css' :
			$._css(xhr.responseText);
		break;

		default:
			throw new Error('Content-Type: ' + h + ' undefined');
	}
};
$._onFailure = function(xhr){
    $.msg("请求失败. " + xhr.status + " " + xhr.statusText);
};

$.XHRObject = Try.these(
	function() {return new XMLHttpRequest();},
	function() {return new ActiveXObject("Msxml2.XMLHTTP");},
	function() {return new ActiveXObject("Microsoft.XMLHTTP");}
);

$.ajax = function(url, option){
	var xhr = $.XHRObject;

	if (option == undefined)  option ={};

	if (typeof option.onAbort != "function"){option.onAbort = $._onAbort;}
	if (typeof option.onSuccess != "function"){option.onSuccess = $._onSuccess;}
	if (typeof option.onFailure != "function"){option.onFailure = $._onFailure;}

	var async = (option.async === false) ? false : true;
    var method = (option.method === "post") ? "post" : "get";
	var send = option.send ? option.send : null;

	if (xhr == undefined){return;}
	if (xhr.readyState % 4 != 0){return;}

    $.msg("正在请求...");

	xhr.open(method, url, async);

	if (method == "post")
		xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

	xhr.send(send);

   var timer = setInterval(function(){
		if (xhr.readyState != 4){return;}
        clearInterval(timer);

		if (xhr.status == 0){
		    option.onAbort(xhr);
		} else if (xhr.status == 200){
			option.onSuccess(xhr);
		} else {
			option.onFailure(xhr);
		}
	}, 200);
};

$._abort = function(){
	$.XHRObject.abort();
};

var trim = String.prototype.trim = function(str){
    return str ? str.replace(/^\s+|\s+$/g, '') : this.replace(/^\s+|\s+$/g, '');
};

//参数oForm是对某个form对象的引用
function getRequestForm(oForm) {
	var aParams = new Array();
	// “名=值”对必须转换成URL编码格式，否则极有可能丢失数据
	for (var i = 0; i < oForm.elements.length; i++){
		switch (oForm.elements[i].tagName){
		case 'INPUT':
			switch (oForm.elements[i].type){
			case 'text':
			case 'hidden':
			case 'password':
				aParams.push(encodeURIComponent(oForm.elements[i].name) + "=" + encodeURIComponent(oForm.elements[i].value));
			break;

			case 'checkbox':
			case 'radio':
				if (oForm.elements[i].checked == true){
					aParams.push(encodeURIComponent(oForm.elements[i].name) + "=" + encodeURIComponent(oForm.elements[i].value));
				}
			break;
			}
		break;

		case 'SELECT':
		case 'TEXTAREA':
			aParams.push(encodeURIComponent(oForm.elements[i].name) + "=" + encodeURIComponent(oForm.elements[i].value));
		break;
		}
	}
	return aParams.join("&");
};

//AJAX方提交表单
function formSubmit(oForm, url, msg){
	if(typeof msg == "string")
		if(!confirm(msg))
			return;
	var f = $.id(oForm);
	var ac = (typeof url == 'string') ? url : $.attr(f, "action");
	var me = $.attr(f, "method");

	$.ajax(ac, {"method":me, "send":getRequestForm(f)});
};

//保存表单对象原来的值
var inputOldValue = {};
//表单获得焦点
function inputFocusIn(input){
	var name = $.attr(input, "name");
	var value = $.attr(input, "value");
 	if (!inputOldValue[name]){
		inputOldValue[name] = value;
		$.attr(input, "value", "");
 	} else if (inputOldValue[name] == value) {
		$.attr(input, "value", "");
	}
}

//表单失去焦点
function inputFocusOut(input){
	var name = $.attr(input, "name");
 	if (!$.attr(input, "value")){
 		$.attr(input, "value", inputOldValue[name]);
 	}
}