var elementList = new Array();

function getFormElementList(formName)
{
	getElementListSingle(document.forms[formName]);
	if (document.all) 
	{
	    attachWindowEvent();
	}
	disableFormDoubleSubmit(formName);
}

function getElementList()
{
	getElementListSingle(document.forms[0]);
	attachWindowEvent();
	disableDoubleSubmit();
}

function getElementListSingle(obj)
{
	var el = obj.children; //For Internet explorer
	if (el == null)
	{
	    el = obj.childNodes; //For Firefox
	}
	for (var i=0; i<el.length; i++) {
		var e = el[i];
		var t = elementList[e.name];
		if(e != undefined && e.type==""  && e.tagName != "A" ) {
			continue;
		}
		if(e.id != undefined && e.id != "")
		{
			if(elementList[e.id] == undefined)
			{
				elementList[e.id] = e;
			}
			
		}
		if(e.name != undefined && e.name != "")
		{
			if (t == undefined)
				elementList[e.name] = e;
			else {
				if (t.length == undefined || t.type=="select-one" || t.type=="select-multiple") {
					a = new Array();
					a[0] = t;
					a[1] = e;
					elementList[e.name] = a; 
				}
				else {				
					t[t.length] = e;				
				}
			}
		}
		elementList[i] = e;
		getElementListSingle(e);
	}
}

function attachWindowEvent()
{
    if(window.onunload==null)
        window.onunload = releaseMem;
}

function releaseMem()
{
    var objs;
    if(document.forms[0]){
    	objs = document.forms[0].elements;
        for(var i=objs.length-1;i>=0;i--)
        {
            releaseMemSingle(objs[i]);
        }
        objs = null;
    }
    
    objs = document.links;
    for(var i=objs.length-1;i>=0;i--)
    {
        releaseMemSingle(objs[i]);
    }
	objs = null;
	
	releaseMemSingle4Js(defaultname);
	delete defaultname;
	defaultname = null;
	releaseMemSingle4Js(elementList);
	delete elementList;
	elementList = null;
	window.onload = null;
	window.onunload = null;
}

function releaseMemSingle(obj)
{
    if(obj==null)
        return;

    if("clearAttributes" in obj)
    {
        obj.clearAttributes();
    }
    
	if(obj.onclick != undefined)
	{
	    if(obj.detachEvent)  //for ie
	    {
		    obj.detachEvent('onclick', obj.onclick);
		}
	    else
	    {
	        obj.removeEventListener("onclick", obj.onclick, false);
	    }
	}
	if(obj.onchange != undefined)
	{
	    if(obj.detachEvent)  //for ie
	    {
		    obj.detachEvent('onchange', obj.onchange);
		}
	    else
	    {
	        obj.removeEventListener("onchange", obj.onchange, false);
	    }
	}	
}

function releaseMemSingle4Js(obj)
{
    if(obj==null || obj.constructor==null || obj instanceof Function)
        return;
    delete obj.parentEntity;
    if(obj instanceof Array)
    {
        for(var i=obj.length-1;i>=0;i--)
        {
            releaseMemSingle4Js(obj[i]);
            delete obj[i];
        }
    }
    else if(obj instanceof Object)
    {
        for(var e in obj)
        {
            releaseMemSingle4Js(obj[e]);
            delete obj[e];
        }
    }
    delete obj;
}
function releaseMemoryForObjectNonRecursive(obj)
{
    if(obj==null || obj.constructor==null)
        return;
    for(var e in obj)
    {
        obj[e] = null;
    }
	delete obj;
    obj = null;
}

function lookupFrame(frameName, _frames) {
	if (_frames == undefined || _frames.length == 0) {
		return undefined;
	}
	for (var i=0; i<_frames.length; i++) {
		if (frameName == _frames[i].name) {
			return _frames[i];
		}
		else {
			var _iframe = lookupFrame(frameName, _frames[i].frames)
			if (_iframe != undefined) {
				return _iframe;
			}
		}
	}
	return undefined;
}
	
function disableDoubleSubmit() {
	document.forms[0]._submit=document.forms[0].submit;
	document.forms[0].submit=function() {
		if (document.activeElement != undefined && document.activeElement.type != 'button') {
			document.forms[0]._submit();	
			return;
		}
		if (document.forms[0].target == "_self") {
			if (document.forms[0].enableSubmited != false) {
				document.forms[0].enableSubmited = false;
				document.forms[0]._submit();	
			}
			else {
				alert('\u6570\u636e\u63d0\u4ea4\u4e2d........\u8bf7\u8010\u5fc3\u7b49\u5f85!');	
			}
		}
		else if (document.forms[0].target == "_parent") {
			if (parent.document.enableSubmited != false) {
				parent.document.enableSubmited = false;
				document.forms[0]._submit();	
			}
			else {
				alert('\u6570\u636e\u63d0\u4ea4\u4e2d........\u8bf7\u8010\u5fc3\u7b49\u5f85!');	
			}
		}
		else {
			frame = lookupFrame(document.forms[0].target, window.top.frames);
			if (frame != undefined) {
				if (frame.document.enableSubmited != false) {
					frame.document.enableSubmited = false;
					document.forms[0]._submit();	
				}
				else {
					alert('\u6570\u636e\u63d0\u4ea4\u4e2d........\u8bf7\u8010\u5fc3\u7b49\u5f85!');	
				}
			}
			else {
				document.forms[0]._submit();
			}
		}
	}
}

function disableFormDoubleSubmit(formName) {
    var myForm = document.forms[formName];
	myForm._submit=myForm.submit;
	myForm.submit=function() {
		if (document.activeElement != undefined && document.activeElement.type != undefined && document.activeElement.type != 'button') {
			myForm._submit();	
			return;
		}
		if (myForm.target == "_self") {
		
			if (myForm.enableSubmited != false) {
				myForm.enableSubmited = false;
				myForm._submit();	
			}
			else {
				alert('\u6570\u636e\u63d0\u4ea4\u4e2d........\u8bf7\u8010\u5fc3\u7b49\u5f85!');
			}
		}
		else if (myForm.target == "_parent") {
			
			if (parent.document.enableSubmited != false) {
				parent.document.enableSubmited = false;
				myForm._submit();	
			}
			else {
				alert('\u6570\u636e\u63d0\u4ea4\u4e2d........\u8bf7\u8010\u5fc3\u7b49\u5f85!');	
			}
		}
		else {
			
			frame = lookupFrame(myForm.target, window.top.frames);
			if (frame != undefined) {
				if (frame.document.enableSubmited != false) {
					frame.document.enableSubmited = false;
				
					myForm._submit();	
					
				}
				else {
					alert('\u6570\u636e\u63d0\u4ea4\u4e2d........\u8bf7\u8010\u5fc3\u7b49\u5f85!');	
				}
			}
			else {
				myForm._submit();
			}
		}
	}
}
