/**
 * @author BHP.Amen
 * @since 2008-4-9
 * @version 1.0
 * @copyright
 * 
 */

 /****浏览器检测****/
var userAgent = navigator.userAgent.toLowerCase();
var isOpera = userAgent.indexOf('opera') != -1 && opera.version();
var isFF = (navigator.product == 'Gecko') && userAgent.substr(userAgent.indexOf('firefox') + 8, 3);
var isIE = (userAgent.indexOf('msie') != -1 && !isOpera) && userAgent.substr(userAgent.indexOf('msie') + 5, 3);
var isIE7 = (userAgent.indexOf('msie') != -1 && !isOpera) && userAgent.substr(userAgent.indexOf('msie 7') + 5, 5);


/****基本函数****/
function $(id) {
	if (document.getElementById) {
		return document.getElementById(id);
	} else if (document.all) {
		return document.all[id];
	} else if (document.layers) {
		return document.layers[id];
	} else {
		return null;
	}
}
//******************************************
//String扩展
//******************************************
String.prototype.trim=function() {
	return this.replace(/(^\s*)|(\s*$)/g,''); 
}
String.prototype.lTrim=function() {
	return this.replace(/(^\s*)/g,'');  
}
String.prototype.rTrim=function() {
	return this.replace(/(\s*$)/g,''); 
}
String.prototype.strip = function() {
    return this.replace(/<\/?[^>]+>/gi, '').trim();
}
String.prototype.escapeHTML = function() {
    var div = document.createElement('div');
    var text = document.createTextNode(this);
    div.appendChild(text);
    return div.innerHTML;
}
String.prototype.unescapeHTML = function() {
    var div = document.createElement('div');
    div.innerHTML = this.stripTags();
    return div.childNodes[0].nodeValue;
}
String.prototype.escapeEx = function(){
    return escape(this).replace(/\+/g,"%2b");
}
//******************************************
//Array扩展
//******************************************
//返回一个对象在Array中的位置
Array.prototype.indexOf = function(object){    
	for (var i = 0; i < this.length; i++){
      if (this[i] == object){ 
			return i;
		}
	}
    return -1;   
} 
//删除Array指定对象，返回新Array
Array.prototype.del=function(object){
	var iIndex=this.indexOf(object);
	if(iIndex>-1){
		//alert((this.slice(0,iIndex).concat(this.slice(iIndex+1,this.length))).length)
		return this.slice(0,iIndex).concat(this.slice(iIndex+1,this.length));
	}
}
//检查一个对象是否包含在Array中
Array.prototype.contains = function(obj){    
    return this.indexOf(obj) > -1;    
}   
//删除一个对象
Array.prototype.remove = function(obj){    
    if(this.contains(obj)) {    
		var index = this.indexOf(obj);    
        for(var i = index; i < this.length - 1; i++) {    
            this[i] = this[i + 1];    
        }    
        this.length--;    
    }    
}
//清空数组
Array.prototype.clear = function(){
	this.length=0;
	return this;
}

/****Cookie操作函数****/
/**
 *cookie对象
 *@class cookie对象
 *@param 
 *@type object
 */
Cookie={};
/**
 *cookie对象的set方法
 *@requires cookie
 *@param indexName,value,savedays
 *@type void
 */
Cookie.set=function(name, value,savedays){
	var today = new Date();
	var expires = new Date();
	var saveTime;
    if(savedays==null){
		saveTime=365;
	}else{
		saveTime=savedays;
    }
    if(value instanceof Array){
		value=value.join();
	}
    if(saveTime==0){
		document.cookie = name + "=" + escape(value)+";";
	}else{
        expires.setTime(today.getTime() + 1000*60*60*24*Number(saveTime));
        document.cookie = name + "=" + escape(value)	+ "; expires=" + expires.toGMTString();
    }
	return value;
};
/**
 *cookie对象的get方法
 *@requires cookie
 *@param indexName
 *@type void
 */
Cookie.get=function(Name){
	var search = Name + "=";
	if(document.cookie.length > 0){
		var offset = document.cookie.indexOf(search);
		if(offset != -1){
			offset += search.length;
			var end = document.cookie.indexOf(";", offset);
			if(end == -1){
				end = document.cookie.length;
			};
			return unescape(document.cookie.substring(offset, end));
		}else{
			return "";
		}
	}else{
		return "";
	}
};

/****Ajax****/
var BHPAjax=function(){};
BHPAjax.prototype._AjaxObject=function(){
	var xmlHttp;
    if(typeof XMLHttpRequest != 'undefined') {   
        xmlHttp = new XMLHttpRequest();   
    }else{   
        var _msxmlhttp = new Array(   
            'Msxml2.XMLHTTP.6.0',   
            'Msxml2.XMLHTTP.3.0',   
            'Msxml2.XMLHTTP',   
            'Microsoft.XMLHTTP');   
        for(var i = 0; i < _msxmlhttp.length; i++) {   
            try {   
                if(xmlHttp = new ActiveXObject(_msxmlhttp[i])) break;   
            } catch (e) {   
                xmlHttp = null;   
            }   
        }   
    }   
    if(!xmlHttp)   
        this.Error("Could not create connection object.");
	return 	xmlHttp;
};
/*
 * @url			请求的URL地址
 *options:
	* @sdata 		发送POST数据   
	* @callback		回调函数
	* @method 		数据传递方式 post || get
	* @asyn			请求方式 指定此请求是否为异步方式，默认为true
*/
BHPAjax.prototype.Request=function(url,options){
	var method=options.method || 'get';
	var asyn=options.asyn || true;
	var sdata =options.sdata || null;
	if(options.callback){
		var callback=options.callback;
	}else{
		return;
	}
	var xmlHttp=this._AjaxObject();
	var _self=this;
	if(asyn){
		xmlHttp.onreadystatechange =function(){_self._CallBack(xmlHttp,callback);};
		}
	xmlHttp.open(method,url,asyn);
	if(method=="post"){
		if(!sdata){
			return;
		}
		xmlHttp.setRequestHeader('Content-length', sdata.length);
		xmlHttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
		xmlHttp.send(sdata);
	}else{ 
		xmlHttp.send(null);
	}
	if(asyn){   
        return xmlHttp;   
    }else{   
        this._CallBack(xmlHttp, callback);   
    }   
};
BHPAjax.prototype._CallBack=function(req,callback){
	if(req.readyState == 4) {
		if (req.status == 200) {
			var result = req.responseText;
			callback(result);
		} else {
			alert('页面错误,错误号:'+req.status);
		}
	}	
};
/****End Ajax****/

/**
 *通用对象的继承,a.extend(b)
 *@param 父对象
 *@type void
 */
Object.extend = function(destination, source) {
  for (property in source) {
    destination[property] = source[property];
  }
  return destination;
}
if (!window.Event){
    var Event = new Object();
}
/**
 *自定义Event对象继承event对象的一些常用方法
 */
Object.extend(Event,
{
    KEY_BACKSPACE: 8,
    KEY_TAB: 9,
    KEY_RETURN: 13,
    KEY_ESC: 27,
    KEY_LEFT: 37,
    KEY_UP: 38,
    KEY_RIGHT: 39,
    KEY_DOWN: 40,
    KEY_DELETE: 46,
	/**
	*键盘按键ASII码
	*@param 兼容firefox，必须写event参数
	*@requires Event
	*@type void
	*/	
    keyCode:function(event){
        return event.which || event.keyCode;
    },
	/**
	*事件源对象
	*@param 兼容firefox，必须写event参数
	*@requires Event
	*@type void
	*/
	element: function(event){
		return event.target || event.srcElement;
	},
	/**
	*事件源对象
	*@param 兼容firefox，必须写event参数
	*@requires Event
	*@type void
	*/
	srcElement: function(event){
		return event.target || event.srcElement;
	},
	/**
	*判断是否点了左键
	*@param 兼容firefox，必须写event参数
	*@requires Event
	*@type void
	*@return bool
	*/
	isLeftClick: function(event){
		return (((event.which)&&(event.which == 1))||((event.button) && (event.button == 1)));
	},
	/**
	*当前x轴坐标
	*@param 兼容firefox，必须写event参数
	*@requires Event
	*@type void
	*@return int
	*/
	pointerX: function(event){
		return event.pageX||(event.clientX +(document.documentElement.scrollLeft || document.body.scrollLeft));
	},
	/**
	*当前y轴坐标
	*@param 兼容firefox，必须写event参数
	*@requires Event
	*@type void
	*@return int
	*/
	pointerY: function(event){
		return event.pageY || (event.clientY + (document.documentElement.scrollTop || document.body.scrollTop));
	},
	/**
	*不响应事件
	*@param 兼容firefox，必须写event参数
	*@requires Event
	*@type void
	*/
	stop: function(event){
		if (event.preventDefault){
			event.preventDefault();
			event.stopPropagation();
		}
		else{
			event.returnValue = false;
		}
	},
	findElement: function(event, tagName) {
		var element = Event.element(event);
		while (element.parentNode && (!element.tagName ||
        (element.tagName.toUpperCase() != tagName.toUpperCase())))
			element = element.parentNode;
		return element;
	},
	observers: false,
	_observeAndCache: function(element, name, observer, useCapture){
		if (!this.observers){
			this.observers = [];
		}
		if (element.addEventListener){
			this.observers.push([element, name, observer, useCapture]);
			element.addEventListener(name, observer, useCapture);
		}
		else{
			this.observers.push([element, name, observer, useCapture]);
			try{
				element.attachEvent('on' + name, observer);
			}
			catch(e){
			}
		}
	},
	unloadCache: function(){
		if (!Event.observers){
			return;
		}
		for (var i = 0; i < Event.observers.length; i++){
			Event.stopObserving.apply(this, Event.observers[i]);
			Event.observers[i][0] = null;
		}
		Event.observers = false;
	},
	observe: function(element, name, observer, useCapture){
		if(typeof element=="object"){
			var element=element;
		}else{
			var element = $(element);
		}
		if(useCapture==null){
			useCapture=false;
		}else{
			useCapture = useCapture;
		}
		if (name == 'keypress' &&((navigator.appVersion.indexOf('AppleWebKit') > 0)|| element.attachEvent)){
			name = 'keydown';
		}
		this._observeAndCache(element, name, observer, useCapture);
	},
	stopObserving: function(element, name, observer, useCapture){
		if(typeof element=="object"){
			var element=element;
		}else{
			var element = $(element);
		}
		useCapture = useCapture || false;
		if (name == 'keypress' && ((navigator.appVersion.indexOf('AppleWebKit') > 0) || element.detachEvent)){
			name = 'keydown';
		}
		if (element.removeEventListener){
			element.removeEventListener(name, observer, useCapture);
		}
		else if(element.detachEvent){
			element.detachEvent('on' + name, observer);
		}
	}
}
);
Object.prototype.attachEvent=function(){
	Event.observe(this,arguments[0].replace(/on/gi,""),arguments[1],false);
};
Object.prototype.detachEvent=function(){
	Event.stopObserving(this,arguments[0].replace(/on/gi,""),arguments[1],false);
};
/****事件捕获,兼容浏览器****/
function setCapture(obj) {
	if(window.captureEvents){
		window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP);
	}
	else{
		obj.setCapture();
	}
}
function releaseCapture (obj) {
	if(window.captureEvents){
		window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP);
	}
	else {
		obj.releaseCapture();
	}
}