
/*
++ + + + + + + + + + + + + + + + + + + + + + + + ++
++                                               ++
++  Author : Rong                                ++
++  Date   : 2007-12-20                          ++
++  E-mail : Lv-Lirong@163.com                   ++
++  所有函数在IE6,7和FireFox2下测试通过             ++
++                                               ++
++ + + + + + + + + + + + + + + + + + + + + + + + ++
*/
var URL   = 'http://'+document.location.hostname+'/';
var INDEX = 'index.html';
var A     = '&';
var B     = '=';
var EXT   = '.html';
var Ka    = navigator.userAgent.toLowerCase();
var rt    = Ka.indexOf("opera") != -1;
var r     = Ka.indexOf("msie")  != -1&&(document.all&&!rt);

var cursorLeftImg  = new Image();
cursorLeftImg.src  = URL + 'images/default/left.cur';
var cursorRightImg = new Image();
cursorRightImg.src = URL + 'images/default/right.cur';

function $(_id){return document.getElementById(_id);}

/**
++ date     : 2008-03-13 By Rong lv-lirong#163.com
++ Name     : getObjByStr(objStr)
++ Function : 根据传入字符串取得对象的字符串，使用时eval该字符串就得到该对象
++ Param    : @string objStr  : 要取得的对象的模拟路径
                 oId/div|1/ul|0/li|3  : 第一个为容器的ID(oId),后面全部为HTML标签，以/分隔，|表示要取得的对象在父对象的偏移量
			     例子返回对象 : ID为oId的第二个div里第一个ul里的第四个li 对象
*/
function getObjByStr(objStr)
{
	var s   = objStr.split(',');
	var arr = new Array();
	for(var i = 0 , tMax = s.length; i < tMax; i++)
	{
	    var tmp = s[i].split('/');
	    var o   = new Array();
	    obj = "document.getElementById('"+tmp[0]+"')";
	    for(var j = 1; j < tmp.length; j++)
	    {
	        o[j] = new Array();
		    temp = tmp[j].split('|');
		    o[j][0] = temp[0];
		    o[j][1] = temp[1];
			temp.length = 0;
		    obj += ".getElementsByTagName('"+o[j][0]+"')["+o[j][1]+"]";
	     }
		 arr[i] = obj;
    }
	objStr      = null;
	obj         = null;
	s.length    = 0;
	tmp.length  = 0;
	o.length    = 0;
	return arr.join('|');
}

/**
++ 修改自Gmail的事件注册函数
++ addEvent('注册的对象','触发注册的事件','要注册的事件的函数名 ');
*/
function addEvent(obj,evt,fun)
{
	if(r)
	{
		obj.attachEvent("on"+evt,fun);
	}else{
		obj.addEventListener(evt,fun,false);
	}
}



//------------------------  1  --------------------
/**
++ update   : 2007-12-13 By Rong
++ Name     : getCurrentSrtle
++ Function : 取得对像当前外联CSS选择器的属性
++ Param    : @object obj  : 所要操作对象;
              @string prop : 所要取得的CSS的属性名
++ use      : getCurrentStyle ( this , 'width');
*/
function getCurrentStyle (obj, prop)
{
	if (obj.currentStyle)
    {
		return obj.currentStyle[prop];
	}else if (window.getComputedStyle)
	  {
	  		prop = prop.replace (/([A-Z])/g, "-$1");
			prop = prop.toLowerCase ();
			return window.getComputedStyle (obj, "").getPropertyValue(prop);
    	}
    return null;
}

//--------------------------   2   -----------------
/**
++ update   : 2007-12-27
++ Author   : Rong
++ Name     : showContent
++ Function : 显示隐藏区域,把结果保存到cookie
++ Param    : @object content   : 所要隐藏的对象元素
              @object ctrl      : 发出控制的对象元素
			  @string openText  : 开始时所显示的文字
			  @string closeText : 关闭时所显示的文字
			  @string openMenu  : 所要保存的cookie的名称,当ctrl有值时比填
++ use      : showContent('newsContent','showNews','查看新闻内容','关闭新闻内容','cookieNewsShow')
*/
function showContent(content,ctrl,openText,closeText,openMenu) {
	if (content.style.display == '') {
		content.style.display = 'none';
		if (ctrl != '' && ctrl != 'undefined') {ctrl.innerHTML = openText;}
		creatCookie(openMenu, '0');
	} else {
		content.style.display = '';
		if (ctrl != '' && ctrl != 'undefined') {ctrl.innerHTML = closeText;}
		creatCookie(openMenu, '1');
	}
}

//----------------------------   3   ------------------
/**
++ update   : 2007-12-28
++ Author   : Rong
++ Name     : getPosition
++ Function : 获取元素相对文档的绝对位置,返回对象类型，{x:left,y:top}分别代表X轴和Y轴
++ Param    : @object e : 所要操作的对象
++ use      : getPosition('oDiv');
*/
function getPosition(e){
    var left = 0;
    var top  = 0;
    while (e.offsetParent){
        left += e.offsetLeft;
        top  += e.offsetTop;
        e     = e.offsetParent;
    }

    left += e.offsetLeft;
    top  += e.offsetTop;

    return {x:left, y:top};

}

//----------------------------   4   ---------------------------------
/**
++ update   : 2007-12-28
++ Author   : Rong
++ Name     : mouseCoords
++ Function : 获取鼠标相对文档的绝对位置,返回对象类型，{x:left,y:top}分别代表X轴和Y轴
++ Param    : @event ev  : 所触发的事件类型
++ use      : mouseCoords(event||window.event)
*/
function mouseCoords(ev){
	doc = document.documentElement ? document.documentElement : document.body;
    if(ev.pageX || ev.pageY){
        return {x:ev.pageX, y:ev.pageY};
    }else
    return {
        x:ev.clientX + doc.scrollLeft - doc.clientLeft,
        y:ev.clientY + doc.scrollTop  - doc.clientTop
    };
}

//----------------------------    5   --------------------------------------
/**
++ update   : 2007-12-28
++ Author   : Rong
++ Name     : getMouseOffset
++ Function : 获取鼠标相对文档的相对位置,返回对象类型，{x:left,y:top}分别代表相对该元素鼠标的偏移量的x轴和Y轴
++ Param    : @object target : 所要操作的对象
              @event ev      : 所触发的事件类型
++ use      : getMouseOffset('oDiv', event||window.event)
*/
function getMouseOffset(target, ev){
    ev = ev || window.event;

    var elementPos = getPosition(target);
    mousePos   = mouseCoords(ev);
    return {x:mousePos.x - elementPos.x, y:mousePos.y - elementPos.y};
}

//-----------------------------   6   ---------------------------------
/*
   判断浏览器类型
   收集得来

   IE FF SF CM GC
*/
function getOs()
{
    var OsObject = "";
   if(navigator.userAgent.indexOf("MSIE")>0) {
        return "IE";
   }
   if(isFirefox=navigator.userAgent.indexOf("Firefox")>0){
        return "FF";
   }
   if(isSafari=navigator.userAgent.indexOf("Safari")>0) {
        return "SF";
   }
   if(isCamino=navigator.userAgent.indexOf("Camino")>0){
        return "CM";
   }
   if(isMozilla=navigator.userAgent.indexOf("Gecko/")>0){
        return "GC";
   }

}

//复制URL地址
function setCopy(_sTxt){
	if(navigator.userAgent.toLowerCase().indexOf('ie') > -1) {
		clipboardData.setData('Text',_sTxt);
		alert ("网址“"+_sTxt+"”\n已经复制到您的剪贴板中\n您可以使用Ctrl+V快捷键粘贴到需要的地方");
	} else {
		prompt("请复制网站地址:",_sTxt);
	}
}

//加入收藏
function addBookmark(site, url){
	if(navigator.userAgent.toLowerCase().indexOf('ie') > -1) {
		window.external.addFavorite(url,site)
	} else if (navigator.userAgent.toLowerCase().indexOf('opera') > -1) {
		alert ("请使用Ctrl+T将本页加入收藏夹");
	} else {
		alert ("请使用Ctrl+D将本页加入收藏夹");
	}
}

/* + + + + + + + + + + + + + + + + + + +以下为Cookie操作部分 + + + + + + + + + + + + + + + + + + + + */
/**
++ update   : 2008-01-02
++ Author   : Rong
++ Name     : creatCookie
++ Function : 建立cookie
++ Param    : @string cookieName  : cookie名
              @string cookieValue : cookie值
			  @Number time        :cookie保存时间，单位:分钟
++ use      : creatCookie('menu_1','1',30)
*/
function creatCookie(cookieName , cookieValue , time){
	var expires = function(){ //Cookie保留时间
		var mydate = new Date();
		mydate.setTime(mydate.getTime + parseInt(time)*60*1000);
		return mydate.toGMTString();
	}
	document.cookie = cookieName + "=" + cookieValue + ";expires=" + expires;
}

/**
++ update   : 2008-01-02
++ Author   : Rong
++ Name     : getCookieValue
++ Function : 根据偏移量获得Cookie解码后的值
++ Param    : @string offset  : cookie偏移量
++ use      : getCookieValue(1)
*/
function getCookieValue(offset) {
	var endstr = document.cookie.indexOf (";", offset);
	if (endstr == -1)
	endstr = document.cookie.length;
	return unescape(document.cookie.substring(offset, endstr));
}

/**
++ update   : 2008-01-02
++ Author   : Rong
++ Name     : getCookie
++ Function : 根据Cookie名获得Cookie解码后的值
++ Param    : @string cookieName  : cookie名
++ use      : getCookie('menu_1')
*/
function getCookie(cookieName) {
	var arg = cookieName + "=";
	var alen = arg.length;
	var clen = document.cookie.length;
	var i = 0;
	while (i < clen)
	{
		var j = i + alen;
		if (document.cookie.substring(i, j) == arg)
		return getCookieValue (j);
		i = document.cookie.indexOf(" ", i) + 1;
		if (i == 0) break;
	}
	return null;
}

/**
++ update   : 2007-12-28
++ Author   : Rong
++ Name     : delCookie
++ Function : 删除cookie
++ Param    : @string cookie cookieName  : cookie名
              @string cookie cookieValue : cookie值
++ use      : delCookie(cookieName,cookieValue)
*/
function delCookie(cookieName,cookieValue){
	document.cookie = cookieName + "=" + escape(cookieValue) + ";expires=Fri, 31 Dec 1999 23:59:59 GMT;";
}

/* + + + + + + + + + + + + + + + + + + + Cookie操作部分结束 + + + + + + + + + + + + + + + + + + + + */


/* + + + + + + + + + + + + + + + + + + + 数组操作部分 + + + + + + + + + + + + + + + + + + + + */

/**
++  方法:Array.add(dx,val)
++  功能:插入数组元素.
++  参数:dx插入元素的下标.val插入元素的值
++  返回:在原数组上修改数组
++  使用：a = ['1','2','3','4','5'];
++        alert("elements: "+a+"\nLength: "+a.length);
++        a.add(3,'a'); //删除下标为0的元素
++        alert("elements: "+a+"\nLength: "+a.length);
*/

Array.prototype.add=function(dx,val)
{
    if(isNaN(dx)||dx > this.length){return false;}
	this.length += 1;
    for(var i = this.length - 1; i > 0; i--)
    {
        if(i >= dx)
        {
		    this[i] = this[i-1];
        }
    }
	this[dx] = val;
}

/**
++  方法:Array.remove(dx)
++  功能:删除数组元素.
++  参数:dx删除元素的下标.
++  返回:在原数组上修改数组
++
++  使用：a = ['1','2','3','4','5'];
++        alert("elements: "+a+"\nLength: "+a.length);
++        a.remove(0); //删除下标为0的元素
++        alert("elements: "+a+"\nLength: "+a.length);
*/

//通过遍历,重构数组.
Array.prototype.remove=function(dx)
{
    if(isNaN(dx)||dx>this.length){return false;}
    for(var i=0,n=0;i<this.length;i++)
    {
        if(this[i]!=this[dx])
        {
            this[n++]=this[i]
        }
    }
    this.length-=1
}


/**
++  方法:Array.baoremove(dx)
++  功能:删除数组元素.
++  参数:dx删除元素的下标.
++  返回:在原数组上修改数组.
++  使用：b = ['1','2','3','4','5'];
++        alert("elements: "+b+"\nLength: "+b.length);
++        b.baoremove(1); //删除下标为1的元素
++        alert("elements: "+b+"\nLength: "+b.length);
*/

//用splice来实现.
Array.prototype.baoremove = function(dx)
{
    if(isNaN(dx)||dx>this.length){return false;}
    this.splice(dx,1);
}

/* + + + + + + + + + + + + + + + + + + + 数组操作部分结束 + + + + + + + + + + + + + + + + + + + + */


/* + + + + + + + + + + + + + + + + + + + Ajax操作部分 + + + + + + + + + + + + + + + + + + + + + + */


/*
++ Ajax基础类，返回服务器端的原始数?
++ Date                        : 2008-01-03
++ Author                      : Rong
++ @param string url           : 远程调用路径
++ @param string pars          : 附加到路径的url参数
++ @param string method        : 请求方式，get或post
++ @param object obj           : 此对象为数据请求成功后数据存放的容器
++ @param boolean asynchronous : 是否异步调用,true和false
*/
function Ajax(url,pars,method,obj,asynchronous)
{
         var xmlHttp;
         if(window.ActiveXObject)
            {
                try
                {
                    xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
                }
                catch(e)
                {
                    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
                }
            }
            else if(window.XMLHttpRequest)
            {
                xmlHttp = new XMLHttpRequest();
            }

            if(method.toLowerCase() == "get")
            {
                url = url+"?"+pars;
                xmlHttp.open("GET",url,asynchronous);
                xmlHttp.send(null);
            }else{
                xmlHttp.open("POST",url,asynchronous);
                xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
                xmlHttp.send(pars);
            }

			xmlHttp.onreadystatechange = function()
            {
                if(xmlHttp.readyState == 4 && xmlHttp.status == 200)
                {
				   if('undefined' != obj && '' != obj)
				   {
					   obj.innerHTML = xmlHttp.responseText;
				   }
                }
            }
}
/* + + + + + + + + + + + + + + + + + + Ajax操作部分结束 + + + + + + + + + + + + + + + + + + + + + */

/* + + + + + + + + + + + + + + + + + + + xml操作部分 + + + + + + + + + + + + + + + + + + + + + + */

//根据传入的xml字符串流(xmlString)创建并返回XML对象(xmlObj),然后用dom解析xmlObj即可
function xml(xmlString)
{
	try
	{
        if (window.ActiveXObject)
        {
            xmlObj =new ActiveXObject("Microsoft.XMLDOM");
            xmlObj.async="false";
            xmlObj.loadXML(xmlString);
        }else{// 用于 Mozilla, Firefox, Opera, 等浏览器的代码：
           var parser=new DOMParser();
           xmlObj =parser.parseFromString(xmlString,"text/xml");
        }
     }catch(e){alert("error");}
     return xmlObj;
}

/* + + + + + + + + + + + + + + + + + + + xml操作部分结束 + + + + + + + + + + + + + + + + + + + + + */



/*
++ 多选框全选/全取消
++ Date           : 2008-12-11
++ Author         : figo
++ @param frm     ：表单对象
++ @param o       ：多选框数组id名 如 ids[]
++ @param v       ：布尔值 表示选择还是不选
++ @edit by figo 2009-01-16
*/
function checkedAll(frm,o,v)
{
	var els = frm.elements[o];
	if (els.length > 0)
	{
		for (var i = 0; i < els.length; i++)
		{
			els[i].checked = v;
		}
	}else{
	   els.checked = v;
	}
}
