///
jQuery.noConflict();
///Cookie
var Cookie = new Object();
		Cookie.setCookie = function(name,value,option) {		
			var str = name + "=" + escape(value);
			if(option){				
				if(option.expireDays){				
					var date = new Date();
					var ms = (option.expireDays)*24*3600*1000;
					date.setTime(date.getTime() + ms);
					str += ";expires=" + date.toGMTString();					
				}
				if(option.path) str += ";path=" + option.path;
				if(option.domain) str += ";domain=" + option.domain;
				if(option.secure) str += ";true";
			}
			document.cookie = str;
		}
		Cookie.getCookie = function(name) {
			var cookieArray = document.cookie.split(";");	
			for(var i=0; i<cookieArray.length; i++){
				var arr = cookieArray[i].split("=");				
				if(arr[0] == " "+name || arr[0] == name ) return unescape(arr[1]);
			}
			return "";
		}
		Cookie.delCookie = function(name) {
			this.setCookie(name,"",{expireDays:-1});
		}    
///     
var ctx = "";
jQuery(document).ready(function() {
	if(!!jQuery("#ctx").size())
	ctx = jQuery("ctx").val();
	
	//RSS璁㈤槄
	jQuery("#rssSubscribe").click(function() {
		var url = location.href.gsub("gailan","rss");
		window.open(url,"_blank");		
		return false;
	});
})
function getPageSize() {
	var xScroll, yScroll;
	if (window.innerHeight && window.scrollMaxY) {
		xScroll = top.document.body.scrollWidth;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else {
		if (top.document.body.scrollHeight > top.document.body.offsetHeight) {
			xScroll = top.document.body.scrollWidth;
			yScroll = top.document.body.scrollHeight;
		} else {
			xScroll = top.document.body.offsetWidth;
			yScroll = top.document.body.offsetHeight;
		}
	}

	var windowWidth, windowHeight;
	if (self.innerHeight) {
		windowWidth = self.innerWidth;
		windowHeight = self.innerHeight;
	} else {
		if (top.document.documentElement && top.document.documentElement.clientHeight) {
			windowWidth = top.document.documentElement.clientWidth;
			windowHeight = top.document.documentElement.clientHeight;
		} else {
			if (top.document.body) {
				windowWidth = top.document.body.clientWidth;
				windowHeight = top.document.body.clientHeight;
			}
		}
	}

	if (yScroll < windowHeight) {
		pageHeight = windowHeight;
	} else {
		pageHeight = yScroll;
	}
	if (xScroll < windowWidth) {
		pageWidth = windowWidth;
	} else {
		pageWidth = xScroll;
	}
	var cdivleft = pageWidth / 2 - 300;
	var arrayPageSize = new Array(pageWidth, pageHeight, cdivleft);
	return arrayPageSize;
}
function opendivwin() {
	var bdiv = document.getElementById("pageLoading_wait");
	if (!document.getElementById("pageLoading_wait"))
		bdiv = top.document.getElementById("pageLoading_wait");
	var cdiv = document.getElementById("con_div");
	if (!document.getElementById("con_div"))
		cdiv = top.document.getElementById("con_div");
	var alertDiv = document.getElementById("con_div_alert");
	if (!alertDiv)
		alertDiv = top.document.getElementById("con_div_alert");	
	/*	if (bdiv.style.display != "" && cdiv.style.display != "") {
		bdiv.style.display = "";
		cdiv.style.display = "";
		bdiv.style.width = getPageSize()[0] + "px";
		bdiv.style.height = getPageSize()[1] + "px";
		bdiv.style.background = "#dddddd";
	}
*/	
	
	if(bdiv && bdiv.style.display != "")
	{
		bdiv.style.display = "";
		bdiv.style.width = getPageSize()[0] + "px";
		bdiv.style.height = getPageSize()[1] + "px";
		bdiv.style.background = "#dddddd";
	}
	if(cdiv && cdiv.style.display != "")
	{
		cdiv.style.display = "";
		cdiv.style.left = getPageSize()[2] + 180 + "px";
	}
	
	if(alertDiv && alertDiv.style.display != "")
	{
		alertDiv.style.display = "";
		alertDiv.style.left = getPageSize()[2] + 180 + "px";
	}
}

function MM_findObj(n, d) { // v4.01
	var p, i, x;
	if (!d)
		d = document;
	if ((p = n.indexOf("?")) > 0 && parent.frames.length) {
		d = parent.frames[n.substring(p + 1)].document;
		n = n.substring(0, p);
	}
	if (!(x = d[n]) && d.all)
		x = d.all[n];
	for (i = 0; !x && i < d.forms.length; i++)
		x = d.forms[i][n];
	for (i = 0; !x && d.layers && i < d.layers.length; i++)
		x = MM_findObj(n, d.layers[i].document);
	if (!x && d.getElementById)
		x = d.getElementById(n);
	return x;
}

function MM_showHideLayers() { // v6.0
	var i, p, v, obj, args = MM_showHideLayers.arguments;
	for (i = 0; i < (args.length - 2); i += 3)
		if ((obj = MM_findObj(args[i])) != null) {
			v = args[i + 2];
			if (obj.style) {
				obj = obj.style;
				v = (v == 'show') ? 'visible' : (v == 'hide') ? 'hidden' : v;
			}
			obj.visibility = v;
		}

	if (arguments[2] == 'show') {
		var n = arguments[3];
		// alert($("link"+n));
		// alert($("link"+n).viewportOffset().left);
	}
}
function _showDiv(m, n) {

	for ( var i = 1; i <= n; i++) {

		getObject('Layer' + i).style.display = 'none';
	}
	getObject('Layer' + m).style.display = '';
}
function _hideDiv(n) {

	getObject('Layer' + n).style.display = 'none';
}

function MM_preloadImages() { // v3.0
	var d = document;
	if (d.images) {
		if (!d.MM_p)
			d.MM_p = new Array();
		var i, j = d.MM_p.length, a = MM_preloadImages.arguments;
		for (i = 0; i < a.length; i++)
			if (a[i].indexOf("#") != 0) {
				d.MM_p[j] = new Image;
				d.MM_p[j++].src = a[i];
			}
	}
}

function MM_nbGroup(event, grpName) { // v6.0
	var i, img, nbArr, args = MM_nbGroup.arguments;
	if (event == "init" && args.length > 2) {
		if ((img = MM_findObj(args[2])) != null && !img.MM_init) {
			img.MM_init = true;
			img.MM_up = args[3];
			img.MM_dn = img.src;
			if ((nbArr = document[grpName]) == null)
				nbArr = document[grpName] = new Array();
			nbArr[nbArr.length] = img;
			for (i = 4; i < args.length - 1; i += 2)
				if ((img = MM_findObj(args[i])) != null) {
					if (!img.MM_up)
						img.MM_up = img.src;
					img.src = img.MM_dn = args[i + 1];
					nbArr[nbArr.length] = img;
				}
		}
	} else if (event == "over") {
		document.MM_nbOver = nbArr = new Array();
		for (i = 1; i < args.length - 1; i += 3)
			if ((img = MM_findObj(args[i])) != null) {
				if (!img.MM_up)
					img.MM_up = img.src;
				img.src = (img.MM_dn && args[i + 2]) ? args[i + 2]
						: ((args[i + 1]) ? args[i + 1] : img.MM_up);
				nbArr[nbArr.length] = img;
			}
	} else if (event == "out") {
		for (i = 0; i < document.MM_nbOver.length; i++) {
			img = document.MM_nbOver[i];
			img.src = (img.MM_dn) ? img.MM_dn : img.MM_up;
		}
	} else if (event == "down") {
		nbArr = document[grpName];
		if (nbArr)
			for (i = 0; i < nbArr.length; i++) {
				img = nbArr[i];
				img.src = img.MM_up;
				img.MM_dn = 0;
			}
		document[grpName] = nbArr = new Array();
		for (i = 2; i < args.length - 1; i += 2)
			if ((img = MM_findObj(args[i])) != null) {
				if (!img.MM_up)
					img.MM_up = img.src;
				img.src = img.MM_dn = (args[i + 1]) ? args[i + 1] : img.MM_up;
				nbArr[nbArr.length] = img;
			}
	}
}// JavaScript Document

// 缁嗙紗鐩稿叧TAB灞�
function showDiv(m, count) {
	var strPic1 = 'url('+ ctx + '/images/de_img2.gif)';
	var strPic2 = 'url('+ ctx + '/images/de_img3.gif)';
	for ( var i = 1; i <= count; i++) {
		getObject('tagbg' + i).style.background = strPic2;
		getObject('doc' + i).style.display = 'none';
		getObject('tagbg' + i).className = "sfont";
	}
	getObject('tagbg' + m).style.background = strPic1;
	getObject('doc' + m).style.display = '';
	getObject('tagbg' + m).className = "boldfont";
	
	// 瀵瑰叧閿瘝妫�绱�傛湁闂銆�
	var divid = "reldry" + m;
	var doct = m - 1;
	// alert("divid:"+divid);
	var Test = window.document.getElementById(divid).innerHTML;
	var keyword2 = document.getElementById("kw2_rel");
	// alert(typeof(Test)+"content:"+Test+";");
	// var a = "loading鈥︹��";
	if(ctx != "" || ctx != null)
   	var url = ctx + "/" + "reldry.do";
  	 else
   	var url = "reldry.do";	
	if (Test != "") {
		// alert("1");
		new Ajax.Updater( {
			success :'reldry' + m
		}, url, {
			parameters : {
				caption :keyword2.value,
				relation :'or',
				dt :doct
			}
		});
	}
}
// 棣栭〉鐩稿叧TAB灞�
function showDiv_index(m, count, ind_doc_id, ind_lib_id, ind_dt_id, listlength) {
	// alert(ind_doc_id+";"+ind_lib_id+";"+ind_dt_id);
	var strPic1 = '';
	var strPic2 = '';
	var j = listlength;
	for ( var i = 1; i <= count; i++) {
		getObject('tagbg' + j + i).style.background = strPic2;
		getObject('doc' + j + i).style.display = 'none';
		getObject('tagbg' + j + i).className = "sfont1";
	}

	getObject('tagbg' + m).style.background = strPic1;
	getObject('doc' + m).style.display = '';
	getObject('tagbg' + m).className = "boldfont1";
	// alert(ind_doc_id+";"+ind_lib_id+";"+ind_dt_id);
	// alert("m:"+m+"--count:"+count);
	// 瀵瑰叧閿瘝妫�绱�傛湁闂銆�
	var divid = "reldry" + m;
	var doct = m - 1;
	// alert("divid:"+divid);
	var Test = window.document.getElementById(divid).innerHTML;
	// var keyword2 = document.getElementById("kw2_rel");
	// alert(typeof(Test)+"content:"+Test+";");
	// var a = "loading鈥︹�� ";if(Test == '<IMG
	// src="http://10.92.32.196:8080/nwk-chn/images/loading.gif"></IMG>')
	if (Test != "") {
		// alert("2");
		new Ajax.Updater( {
			success :'reldry' + m
		}, "indexreldry.do", {
			parameters : {
				docId :ind_doc_id,
				libId :ind_lib_id,
				relation :'and',
				dt :ind_dt_id,
				index_reldry :'index_reldry'
			},
			method :'get'
		});
		// new
		// Ajax.Updater({success:'reldry'+m},"reldry.do",{parameters:{caption:keyword2.value,relation:'or',dt:doct}});
	}
}
// 鎺掕姒滈〉闈㈢浉鍏砊AB灞�
function showDiv_rank(m, count, caption, ind_dt_id, listlength, type) {
	// alert(caption+";"+listlength+";type="+type);
	var strPic1 = '';
	var strPic2 = '';
	var j = listlength;
	for ( var i = 1; i <= count; i++) {
		// alert('111-tagbg'+type+j+i);
		getObject('tagbg' + type + j + i).style.background = strPic2;
		getObject('doc' + type + j + i).style.display = 'none';
		getObject('tagbg' + type + j + i).className = "sfont1";
	}
	// alert('222-tagbg'+m);
	getObject('tagbg' + m).style.background = strPic1;
	getObject('doc' + m).style.display = '';
	getObject('tagbg' + m).className = "boldfont1";
	// alert(ind_doc_id+";"+ind_lib_id+";"+ind_dt_id);
	// alert("m:"+m+"--count:"+count);
	// 瀵瑰叧閿瘝妫�绱�傛湁闂銆�
	var divid = "reldry" + m;
	// alert(divid);
	// alert("divid:"+divid);
	var Test = window.document.getElementById(divid).innerHTML;
	// var keyword2 = document.getElementById("kw2_rel");
	// alert(typeof(Test)+"content:"+Test+";");
	// var a = "loading鈥︹�� ";if(Test == '<IMG
	// src="http://10.92.32.196:8080/nwk-chn/images/loading.gif"></IMG>')
	if (Test != "") {
		// alert("2");
		// new
		// Ajax.Updater({success:'reldry'+m},"indexreldry.do",{parameters:{docId:ind_doc_id,libId:ind_lib_id,relation:'and',dt:ind_dt_id,index_reldry:'index_reldry'},method:'get'});
		new Ajax.Updater( {
			success :'reldry' + m
		}, "reldry.do", {
			parameters : {
				caption :caption,
				relation :'or',
				dt :ind_dt_id,
				rank_reldry :'rank_reldry'
			}
		});
	}

}

function getObject(objectId) {
	if (document.getElementById && document.getElementById(objectId)) {
		// W3C DOM
		return document.getElementById(objectId);
	} else if (document.all && document.all(objectId)) {
		// MSIE 4 DOM
		return document.all(objectId);
	} else if (document.layers && document.layers[objectId]) {
		// NN 4 DOM.. note: this won't find nested layers
		return document.layers[objectId];
	} else {
		return null;
	}
}

// 锟斤拷锟斤拷锟侥憋拷锟斤拷转锟斤拷
function showMenu1(n, c) {
	var tdPic1 = 'url('+ ctx + '/images/detail_td_bg.jpg)';
	var tdPic2 = 'url('+ ctx + '/images/menubg_b.jpg)';

	for ( var f = 1; f <= c; f++) {
		if(getObject('menubg' + f))
			getObject('menubg' + f).style.background = tdPic2;
		if(getObject('menufont' + f))
			getObject('menufont' + f).className = "menufont";
	}
	if(getObject('menubg' + f))
		getObject('menubg' + n).style.background = tdPic1;
	if(getObject('menufont' + f))
		getObject('menufont' + n).className = "menufontblod";

}
function getCookie(sName)
{
  // cookies are separated by semicolons
  var aCookie = document.cookie.split("; ");
  for (var i=0; i < aCookie.length; i++)
  {
    // a name/value pair (a crumb) is separated by an equal sign
    var aCrumb = aCookie[i].split("=");
    if (sName == aCrumb[0]) 
      return unescape(aCrumb[1]);
  }

  // a cookie with the requested name does not exist
  return null;
}
// use: setCookie("ggg", n);
function setCookie(sName,sValue,isSession,path)
{
	var today = new Date();
    //var expiry = new Date(today.getTime() + 3*365 * 24 * 60 * 60 * 1000); // plus 3 year
    if (sValue != null && sValue != "")
    {
       var ck=sName + "=" + escape(sValue)+( ( path ) ? ';path=' + path : '' );
    //   alert("ck"+ck);
       if(!isSession)
       {
           var today = new Date();
         // var expiry = new Date(today.getTime() + 3*365 * 24 * 60 * 60 * 1000); // plus 3 year
    
           //ck+= "; expires=" + expiry.toGMTString();
           ck+="";
       }
       document.cookie=ck;
     }
}

function changefontcolor(n){
	var fc = document.getElementById("fontc"+n);
	fc.style.color="#ff0000";
	
	setCookie_color("menucolor",n);
}
function getCookie_color(sName)
{
  var aCookie = document.cookie.split("; ");
  for (var i=0; i < aCookie.length; i++)
  {
    var aCrumb = aCookie[i].split("=");
    if (sName == aCrumb[0]) 
      return unescape(aCrumb[1]);
  }
  return null;
}
 // use: setCookie("ggg", n);
function setCookie_color(sName,sValue,isSession)
{
    var today = new Date();
    if (sValue != null && sValue != "")
    {
       var ck=sName + "=" + escape(sValue);
       
       if(!isSession)
       {
           var today = new Date();
           ck+="";
       }
       document.cookie=ck;
     }
}


// 锟斤拷锟斤拷锟侥憋拷锟斤拷转锟斤拷
function showMenu(n) {
	var len = jQuery(".menutable").find("td").size();
	for ( var i = 1; i <= len; i++) {
			if(getObject('menubg' + i))
				getObject('menubg' + i).className = "allimg menubgimgb";
			if(getObject('menufont' + i))
				getObject('menufont' + i).className = "menufont";
		}
		if(getObject('menubg' + n))
			getObject('menubg' + n).className = "allimg menubgimga";
		if(getObject('menufont' + n))
			getObject('menufont' + n).className = "menufontblod";
		setCookie("menu",n,"","/");
	}

// 乇锟�
function TRS_display_search() {
	var targetText = document.getElementById("searchDiv");
	var targetDiv = document.getElementById("search");
	var oDocTypeForAll = document.getElementById("idDocTypeForAll");
	// alert(targetDiv.style.display);
	// alert(targetText.innerText);
	if ("object" == typeof (targetText)) {

		if (targetDiv.style.display != "block") {
			targetDiv.style.display = "block";
			targetText.innerHTML = "关闭";
			document.getElementById("gailan_doctype").style.display = "none";
			// alert("after:"+targetText.innerText);
		} else {
			targetDiv.style.display = "none";
			targetText.innerHTML = "打开";
			document.getElementById("gailan_doctype").style.display = "block";
		}
	}
	var quicksear = targetDiv.style.display;
	SetCookie_condition("quicksearDisplay", quicksear);
	initSuggest();
	// setCookie("quicksearDisplay", quicksear, null);
}
function TRS_display_condition() {
	var targetText = document.getElementById("conditionDiv");
	var targetDiv = document.getElementById("condWord");
	if ("object" == typeof (targetText)) {
		if (targetDiv.style.display != 'block') {
			targetDiv.style.display = 'block';
			targetText.innerHTML = '关闭';
		} else {
			targetDiv.style.display = 'none';
			targetText.innerHTML = '打开';
		}
	}
}

// 锟斤拷锟斤拷锟斤拷锟阶拷锟�
function treeChange(n) {
	getObject("treeimg1").src = n;
	var changtime = document.getElementById("selTree");
	if (changtime.options[0].selected) {
		getObject("timeId").style.display = "";
		getObject("treeimg1").src = n;
	} else {
		getObject("timeId").style.display = "none";
	}
}

// setSort(this.value)
function setSort(n) {

	$('treeByCat').toggle();
	$('selWeek').toggle();
	$('treeByTime').toggle();

}
function showCatTree() {
	$('treetag').className = 'tree_tag_top';
	$('treetag1').className = 'tree_tag_top2';
	$('treeByCat').style.display = "";
	$('treeByTime').style.display = "none";
}
function showWeekTree() {
	$('treetag').className = 'tree_tag_top2';
	$('treetag1').className = 'tree_tag_top';
	$('treeByTime').style.display = "";
	$('treeByCat').style.display = "none";			
}
// setWeek(this.value)
function setWeek(n) {
	/*
	 * if(n==1) { $('secondWeekTree').style.display="";
	 * $('firstWeekTree').style.display="none";
	 * $('thirdWeekTree').style.display="none";
	 * $('fourthWeekTree').style.display="none" }
	 */
	if (n == 0) {
		$('firstWeekTree').style.display = "";
		// $('secondWeekTree').style.display="none";
		$('thirdWeekTree').style.display = "none";
		$('fourthWeekTree').style.display = "none";
		$('weeklink')
				.update(
						"<font color='red' style='font-size:18;; '>1~2</font>&nbsp;&nbsp;|&nbsp;&nbsp;<a href='javascript:setWeek(2)' >3</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href='javascript:setWeek(3)' >4</a>");
		showTree(0);
	}
	if (n == 2) {
		$('thirdWeekTree').style.display = "";
		$('firstWeekTree').style.display = "none";
		// $('secondWeekTree').style.display="none";
		$('fourthWeekTree').style.display = "none";
		$('weeklink')
				.update(
						"<a href='javascript:setWeek(0)' >1~2</a>&nbsp;&nbsp;|&nbsp;&nbsp;<font color='red' style='font-size:18;'>3</font>&nbsp;&nbsp;|&nbsp;&nbsp;<a href='javascript:setWeek(3)' >4</a>");
		showTree(2);
	}
	if (n == 3) {
		$('fourthWeekTree').style.display = "";
		$('thirdWeekTree').style.display = "none";
		$('firstWeekTree').style.display = "none";
		// $('secondWeekTree').style.display="none";
		$('weeklink')
				.update(
						"<a href='javascript:setWeek(0)' >1~2</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href='javascript:setWeek(2)' >3</a>&nbsp;&nbsp;|&nbsp;&nbsp;<font color='red' style='font-size:18;'>4</font>");
		showTree(3);
	}
}

function changbg_deep(n) {
	var bgimg = document.getElementById("tagbg" + n);
	if (bgimg.background == ctx + "/images/de_img2.gif") {
		bgimg.background = ctx + "/images/de_img2.gif";
	} else {
		bgimg.background = ctx + "/images/de_img4.gif";
	}
}

function changbg(n) {
	var bgimg = document.getElementById("tagbg" + n);
	if (bgimg.background == ctx + "/images/de_img2.gif") {
		bgimg.background = ctx + "/images/de_img2.gif";
	} else {
		bgimg.background = ctx + "/images/de_img3.gif";
	}
}
// 棣栭〉鎺у埗div鐨勯珮搴�
function tabheight() {
	e = document.getElementById("bottomtab").offsetHeight - 10;
	document.getElementById("all1").height = e;
	document.getElementById("all2").height = e;
	document.getElementById("all3").height = e;
}

function Object_Onclick(imgid, movedivid) {

	if (document.activeElement.id != imgid) {
		document.getElementById(movedivid).style.display = 'none';
	}
}



// 涓嬫媺鑿滃崟杞崲灞傜殑鏂规硶灞曠ず
function uldis(m) {
	if (jQuery("#" + m) != "null") {
		jQuery("#" + m).slideDown("1000");
	}
}
function valuediv(n, t, m, y) {
	if (t == "selectDate") {
		window.document.getElementById("selectDate_hide").value = y;
	} else if (t == "pagecount") {
		window.document.getElementById("pagecount").value = y;
	} else if (t == "FlowselectDate") {
		window.document.getElementById("FlowselectDate_hide").value = y;
	} else {
		window.document.getElementById("idTextfield").value = y;
	}
	if (jQuery(n) != "null") {
		jQuery("#" + t).attr("value", jQuery("#" + n).html());
		jQuery("#" + m).hide();
	}
}
function selectdiv(event) {
	var srcdiv = function(_event){
		var event = window.event || _event;
		return event.srcElement || event.target;
	}
	if (srcdiv(event) != document.getElementById("ulspan")||srcdiv(event) != document.getElementById("ulpage")||srcdiv(event) != document.getElementById("ulword") ) {
		Element.hide("uldiv");
		Element.hide("uldiv1");
		Element.hide("uldiv2");
	}
}
Event.observe(document, 'click', selectdiv);

//鍒楄〃鍜岀煩闃靛垏鎹㈢殑鍗曢�夋鎸夐挳浜嬩欢            
function check() {
	
	var url = document.URL;

	if (document.getElementsByName("radiobutton")[0].checked) {
		url = url.gsub('&dm=[01]','');
		url = url.gsub('dm=[01]','');		
		url += "&dm=0";
		location = url;
	}
	if (document.getElementsByName("radiobutton")[1].checked) {
		url = url.gsub('&dm=[01]','');
		url = url.gsub('dm=[01]','');			
		url += "&dm=1";
		location = url;
	}
}
//鍐呭瓨娉勬紡澶勭悊
/*
if (window.attachEvent) {
			var events = ['data','onmouseover','onmouseout','onmousedown','onmouseup','ondblclick','onclick','onselectstart','oncontextmenu']; 
			window.attachEvent("onunload", function(){
				var elements = document.all;
				for(var i = 0 ; i < elements.length; i ++){
					var curElement = elements[i];
					for(var j = 0 ; j < events.length; j ++){  
						curElement[events[j]] = null; 
					} 
				}				
				if(window.ajaxArray){
					for(var j = 0 ; j < ajaxArray.length ; j ++){
						try{
							ajaxArray[j].abort();
						}catch(e){
							alert(e.message);
						}
					}
				}				
				CollectGarbage();
			});
		}
		
//
*/		
//jQuery plugins ajax manager
/**
 * @author alexander.farkas
 * 
 * @version 2.2
 */
(function($){
	
	$.manageAjax = (function(){
		var cache 			= {},
			queues			= {},
			presets 		= {},
			activeRequest 	= {},
			allRequests 	= {},
			defaults 		= {
						queue: true, //clear
						maxRequests: 1,
						abortOld: false,
						preventDoubbleRequests: true,
						cacheResponse: false,
						complete: function(){},
						error: function(ahr, status){
							var opts = this;
							if(status &&  status.indexOf('error') != -1){
								setTimeout(function(){
									var errStr = status +': ';
									if(ahr.status){
										errStr += 'status: '+ ahr.status +' | ';
									}
									errStr += 'URL: '+ opts.url;
									throw new Error(errStr);
								}, 1);
							}
						},
						success: function(){},
						abort: function(){}
				}
		;
		
		function create(name, settings){
			var publicMethods = {};
			presets[name] = presets[name] ||
				{};
			
			$.extend(true, presets[name], $.ajaxSettings, defaults, settings);
			if(!allRequests[name]){
				allRequests[name] 	= {};
				activeRequest[name] = {};
				activeRequest[name].queue = [];
				queues[name] 		= [];
			}
			$.each($.manageAjax, function(fnName, fn){
				if($.isFunction(fn) && fnName.indexOf('_') !== 0){
					publicMethods[fnName] = function(param){
						fn(name, param);
					};
				}
			});
			return publicMethods;
		}
		
		function complete(opts, args){
			
			if(args[1] == 'success'){
				opts.success.apply(opts, [args[0].successData, args[1]]);
				if (opts.global) {
					$.event.trigger("ajaxSuccess", args);
				}
			}
			
			if(args[1] === 'abort'){
				opts.abort.apply(opts, args);
				if(opts.global){
					$.active--;
					$.event.trigger("ajaxAbort", args);
				}
			}
			
			opts.complete.apply(opts, args);
			
			if (opts.global) {
				$.event.trigger("ajaxComplete", args);
			}
			
			if (opts.global && ! $.active){
				$.event.trigger("ajaxStop");
			}
			//args[0] = null; 
		}
		
		function proxy(oldFn, fn){
			return function(xhr, s, e){
				fn.call(this, xhr, s, e);
				oldFn.call(this, xhr, s, e);
				xhr = null;
				e = null;
			};
		}
		
					
		function callQueueFn(name){
			var q = queues[name];
			if(q && q.length){
				var fn = q.shift();
				if(fn){
					fn();
				}
			}
		}

		
		function add(name, opts){
			if(!presets[name]){
				create(name, opts);
			}
			opts = $.extend({}, presets[name], opts);
			//aliases
			var allR 	= allRequests[name],
				activeR = activeRequest[name],
				queue	= queues[name];
			
			var id 			= opts.type +'_'+ opts.url.replace(/\./g, '_'),
				oldComplete = opts.complete,
				ajaxFn 		= function(){
								activeR[id] = {
									xhr: $.ajax(opts),
									ajaxManagerOpts: opts
								};
								activeR.queue.push(id);
								return id;
							}
				;
				
			if(opts.data){
				id += (typeof opts.data == 'string') ? opts.data : $.param(opts.data);
			}
			
			if(opts.preventDoubbleRequests && allRequests[name][id]){
				return false;
			}
			
			allR[id] = true;
			
			opts.complete = function(xhr, s, e){
				if(opts.abortOld){
					$.each(activeR.queue, function(i, activeID){
						if(activeID == id){
							return false;
						}
						abort(name, activeID);
						return activeID;
					});
				}
				oldComplete.call(this, xhr, s, e);
				//stop memory leak
				if(activeRequest[name][id]){
					if(activeRequest[name][id] && activeRequest[name][id].xhr){
						activeRequest[name][id].xhr = null;
					} 
					activeRequest[name][id] = null;
				}
				xhr = null;
				activeRequest[name].queue = $.grep(activeRequest[name].queue, function(qid){
					return (qid !== id);
				});
				allR[id] = false;
				e = null;
				delete activeRequest[name][id];
			};
			
			if(cache[id]){
				ajaxFn = function(){
					activeR.queue.push(id);
					complete(opts, cache[id]);
					return id;
				};
			} else if(opts.cacheResponse){
				 opts.complete = proxy(opts.complete, function(xhr, s){
					if( s !== "success" && s !== "notmodified" ){
						return false;
					}
					cache[id][0].responseXML 	= xhr.responseXML;
					cache[id][0].responseText 	= xhr.responseText;
					cache[id][1] 				= s;
					//stop memory leak
					xhr = null;
					return id; //strict
				});
				
				opts.success = proxy(opts.success, function(data, s){
					cache[id] = [{
						successData: data,
						ajaxManagerOpts: opts
					}, s];
					data = null;
				});
			}
			
			ajaxFn.ajaxID = id;
			
			if(opts.queue){
				opts.complete = proxy(opts.complete, function(){
					
					callQueueFn(name);
				});
				 
				if(opts.queue === 'clear'){
					queue = clear(name);
				}
				
				queue.push(ajaxFn);
				
				if(activeR.queue.length < opts.maxRequests){
					callQueueFn(name); 
				}
				return id;
			}
			return ajaxFn();
		}
		
		function clear(name, shouldAbort){
			$.each(queues[name], function(i, fn){
				allRequests[name][fn.ajaxID] = false;
			});
			queues[name] = [];
			
			if(shouldAbort){
				abort(name);
			}
			return queues[name];
		}
		
		function getXHR(name, id){
			var ar = activeRequest[name];
			if(!ar || !allRequests[name][id]){
				return false;
			}
			if(ar[id]){
				return ar[id].xhr;
			}
			var queue = queues[name],
				xhrFn;
			$.each(queue, function(i, fn){
				if(fn.ajaxID == id){
					xhrFn = [fn, i];
					return false;
				}
				return xhrFn;
			});
			return xhrFn;
		}
		
		function abort(name, id){
			var ar = activeRequest[name];
			if(!ar){
				return false;
			}
			function abortID(qid){
				if(qid !== 'queue' && ar[qid] && typeof ar[qid].xhr !== 'unedfiend' && typeof ar[qid].xhr.abort !== 'unedfiend'){
					ar[qid].xhr.abort();
					complete(ar[qid].ajaxManagerOpts, [ar[qid].xhr, 'abort']);
				}
				return null;
			}
			if(id){
				return abortID(id);
			}
			return $.each(ar, abortID);
		}
		
		function unload(){
			$.each(presets, function(name){
				clear(name, true);
			});
			cache = {};
		}
		
		return {
			defaults: 		defaults,
			add: 			add,
			create: 		create,
			cache: 			cache,
			abort: 			abort,
			clear: 			clear,
			getXHR: 		getXHR,
			_activeRequest: activeRequest,
			_complete: 		complete,
			_allRequests: 	allRequests,
			_unload: 		unload
		};
	})();
	//stop memory leaks
	$(window).unload($.manageAjax._unload);
})(jQuery);

/////////////////////////////////
//floatdiv 中 testover testout 预先声明
function testOver() {}
function testOut() {}	

