var ajaxFactory =
{
    counter: 0,

    createAjax : function ()
    {
        //  创建XMLHttpRequset对象 
        var ajaxObj = new Object();
        
        //默认Loading图标
        ajaxObj.icon = 'images/ajax-loader.gif';
        
        if  (window.ActiveXObject)
        {
            ajaxObj.req = new ActiveXObject("Microsoft.XMLHTTP");
        }
        else
        {
            ajaxObj.req = new XMLHttpRequest();
        }
        
        ajaxObj.go = function(url, method, data)
        {
	        ajaxObj.req.onreadystatechange = function()
	        {
	            var tt = ajaxObj.req.readyState;
		        if (ajaxObj.req.readyState == 4)
		        {
		            //清除Loading图标
		            AjaxPool.RemoveLoadIcon(ajaxObj.elementLoad)
		            
			        if (ajaxObj.req.status == 200)
			        {
				        (method=="POST") ? ajaxObj.callBack(ajaxObj) : ajaxObj.callBack(ajaxObj,data);
			        }
			        else
			        {
			            ajaxObj.callBackFaild(ajaxObj);
			        }
		        }
	        }
        	
        	//加载Loading图标
        	AjaxPool.AddOnLoadIcon(ajaxObj);
        	
        	//添加url随机?
        	//避免浏览器缓?
        	url = AjaxPool.UrlRandom(url);
        	
	        if (method=="POST")
	        {
		        ajaxObj.req.open("POST", url, true);
		        ajaxObj.req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		        ajaxObj.req.send(data);
	        }
	        else
	        {		
		        ajaxObj.req.open("GET", url, true);
		        ajaxObj.req.setRequestHeader("Content-Type","text/xml") 
		        ajaxObj.req.send(null);
	        }
        }
        
        return ajaxObj;
    },

    activateAjax : function(ajaxObj)
    {   
        ajaxObj.activated = true;
    },

    passivateAjax : function (ajaxObj)
    {
        //  重置XMLHttpRequset对象 
        ajaxObj.callBack = {};
        ajaxObj.callBackFaild = {};
        ajaxObj.req.onreadystatechange = {} ;
        ajaxObj.req.abort();
        ajaxObj.elementLoad = null;
    },
    
    destroyAjax : function(ajaxObj)
    {
        ajaxObj.destroyed = true;
    }
}

function AjaxPool(factory)
{
	this._factory = factory;
	this._idlePool = []; 
	this._activePool = []; 
}

AjaxPool.prototype.borrowAjax = function(callBack, callBackFaild)
{
	var object = null;
	var idlePool = this._idlePool;
	var factory = this._factory;
	if (idlePool.length > 0)
	{
		object = idlePool.pop();
	}
	else
	{
		object = factory.createAjax();
	}
	
	if (object != null)
	{
		object.callBack = callBack;
		object.callBackFaild = callBackFaild;

		this._activePool.push(object);
		if (factory.activateAjax)
		{
			factory.activateAjax(object);
		}
	}
	return object;
}

AjaxPool.prototype.returnAjax = function (ajaxObject)
{
	function indexOf(array, object)
	{
		for (var i = 0; i < array.length; i++)
		{
			if (array[i] == ajaxObject) return i;
		}
		return -1;
	}
	
	if (ajaxObject != null)
	{
		var activePool = this._activePool;
		var factory = this._factory;
	
		var i = indexOf(activePool, ajaxObject);
		if (i < 0) return;
		
		if (factory.passivateAjax)
		{
			factory.passivateAjax(ajaxObject);
		}
		
		activePool.splice(i, 1);
		this._idlePool.push(ajaxObject);
	}
}

AjaxPool.prototype.getNumActive = function()
{
	return this._activePool.length;
}

AjaxPool.prototype.getNumIdle = function()
{
	return this._idlePool.length;
}

AjaxPool.prototype.destroy = function()
{
	var factory = this._factory;
	
	var activePool = this._activePool;
	for (var i = 0; i < activePool.length; i++)
	{
		this._destroyObject(activePool[i]);
	}
	
	var idlePool = this._idlePool;
	for (var i = 0; i < idlePool.length; i++)
	{
		this._destroyObject(idlePool[i]);
	}
	
	this._idlePool = null; 
	this._activePool = null; 
	this._poolableObjectFactory = null;

}

AjaxPool.prototype._destroyObject = function(ajaxObject)
{
	var factory = this._factory;
	if (factory.destroyAjax)
	{
		factory.destroyAjax(ajaxObject);
	}
}

AjaxPool.RemoveLoadIcon = function(elementLoad)
{
    if (elementLoad)
    {
        var childCount = elementLoad.childNodes.length;
        for (var i = childCount - 1; i >= 0; i--)
        {
            elementLoad.removeChild(elementLoad.childNodes[i]);
        }
    }
}

AjaxPool.AddOnLoadIcon = function(ajaxObj)
{
    if (ajaxObj.elementLoad)
    {
        var loadIcon = document.createElement('img');
        loadIcon.src = ajaxObj.icon;
        ajaxObj.elementLoad.appendChild(loadIcon);
    }
}

AjaxPool.UrlRandom = function(url)
{
    if (url.indexOf('?') == -1)
        url += '?rax=' + Math.random();
    else
        url += '&rax=' + Math.random();
    return url;
}

//计算坐标
function getPos2(el,sProp)
{
	var iPos = 0;
	while (el!=null)
	{
		iPos += el["offset" + sProp];
		el = el.offsetParent;
	}
	return iPos;
}

var SocietyMenuAjaxPool = new AjaxPool(ajaxFactory);
var actionSocietyMenu = 0;
var haveLoaded = false;
function LoadSocietyMenu(type,el)
{
    actionSocietyMenu = type;
    
    var objDiv = document.getElementById('sqSonWebSite');
    if(objDiv.style.display == null || objDiv.style.display == 'block')
	    objDiv.style.display = 'none';
	else
	{
        var x = getPos2(el,"Left") - 112;
        var y = getPos2(el,"Top") - 6;
        
        objDiv.style.top = y + "px";
        objDiv.style.left = x + "px";
        objDiv.style.display = "block";
    }
    
    if(!haveLoaded)
    {
        var url = 'http://www.meihua.info/society/actionpage/LoadChapterListForMenu.aspx';
        SocietyMenuAjaxPool.returnAjax(this.ajax);
        this.ajax = SocietyMenuAjaxPool.borrowAjax(CreateSocietyMenu, CreateSocietyMenuFailed);
        this.ajax.go(url, 'GET');
    }
    else
    {
        objDiv.style.display = 'block'
        
        for(var i=1;i<4;i++)
        {
            var menuObj = document.getElementById('sqSonWebSite_' + i);
            if(i == actionSocietyMenu)
            {
                menuObj.style.display = 'block';
            }
            else
            {
                menuObj.style.display = 'none';
            }
        }
    }
}

function CreateSocietyMenu(ajaxObj)
{
    var xmlDoc = ajaxObj.req.responseXML;
    var result = xmlDoc.selectSingleNode('MeihuaNet/Message').text;
    if (result == 'OK')
    {
        //CreateHtml
        var items = xmlDoc.selectNodes('MeihuaNet/ChapterList');
        for(var i=0;i<items.length;i++)
        {
            var menuObj = document.getElementById('sqSonWebSite_' + (i+1));
            var itemList = items[i].selectNodes('Chapter');
            var menuHtml = '<ul>';
            for(var j=0;j<itemList.length;j++)
            {
                var name = itemList[j].selectSingleNode('ChapterName').text;
                var url = itemList[j].selectSingleNode('ChapterURL').text;
                
                if(j == itemList.length-1)
                    menuHtml += '<li style=" border-bottom:none;"><a href="'+ url +'" target="_blank">'+ name +'</a></li>';
                else
                    menuHtml += '<li><a href="'+ url +'" target="_blank">'+ name +'</a></li>';
            }
            menuHtml += '</ul>';
            try
            {
                menuObj.innerHTML = menuHtml;
            }
            catch(e)
            {
                $('#sqSonWebSite_' + (i+1)).html(menuHtml);
            }
            
            if(i+1 == actionSocietyMenu)
            {
                menuObj.style.display = 'block';
            }
            else
            {
                menuObj.style.display = 'none';
            }
        }
        
        haveLoaded = true;
    }
    else
    {
        alert(result);
    }
}

function CreateSocietyMenuFailed(ajaxObj)
{
    var xmlDoc = ajaxObj.req.responseXML;
    var result = xmlDoc.selectSingleNode('MeihuaNet/Message').text;
    alert('Failed: ' + result);
}