﻿// JScript File

//Debug.js
var __ISDEBUG=true;
function Debug_Todo(msg)
{
	if(!__ISDEBUG)return;
	throw(new Error(msg+"\r\n"+Debug_Todo.caller));
}

// Frame_GetContentWindow.js
function Frame_GetContentWindow(frame)
{
	if(frame.contentWindow)
		return frame.contentWindow;
	
	if(frame.contentDocument)
	{
		if(frame.contentDocument.parentWindow)
			return frame.contentDocument.parentWindow;
	}
	
	var win;
	if(frame.id)
	{
		win=window.frames[frame.id];
		if(win)return win;
	}
	
	var len=window.frames.length;
	for(var i=0;i<len;i++)
	{
		win=window.frames[i];
		//alert(win.name);
		if(win.frameElement==frame)
			return win;
		if(win.document==frame.contentDocument)
			return win;
	}
	
	Debug_Todo("//TODO:frame contentWindow not found?");
}


//Window_GetElement.js
function Window_GetElement(win,id,throwIfNotFound)
{
	var el=win.document.getElementById(id);
	if(el)
		return el;
	var coll=win.document.getElementsByName(id);
	if(coll.length>0)
		return coll.item(0);
	if(throwIfNotFound)
	{
		if(__ISDEBUG)
			alert("element '"+id+"' not found");
		throw(new Error("element '"+id+"' not found"));
	}
	return null;
}

//Window_GetDialogArguments.js
function Window_GetDialogArguments(win)
{
	var top=win.top;
	if(top.dialogArguments)
		return top.dialogArguments;
	var opener=top.opener;
	if(opener==null)
		return top.document.$__dialog_arguments;
	return opener.document.__dialog_arguments;
}

//BrowserType.js
var _Browser_TypeInfo=null;
function Browser__InitType()
{
	if(_Browser_TypeInfo!=null)return;
	var info={};
	info.ua = navigator.userAgent.toLowerCase(),
	info.isOpera = (info.ua.indexOf("opera") > -1),
	info.isSafari = (info.ua.indexOf("safari") > -1),
	info.isGecko = (!info.isOpera&&!info.isSafari&&info.ua.indexOf("gecko") > -1),
	//TODO:how about the IE in Mac ?
	info.isWinIE = (!info.isOpera&&info.ua.indexOf("msie") > -1); 
	_Browser_TypeInfo=info;
}

Browser__InitType();

function Browser_IsWinIE()
{
	return _Browser_TypeInfo.isWinIE;
}
function Browser_IsGecko()
{
	return _Browser_TypeInfo.isGecko;
}
function Browser_IsOpera()
{
	return _Browser_TypeInfo.isOpera;
}
function Browser_IsSafari()
{
	return _Browser_TypeInfo.isSafari;
}

function Browser_UseIESelection()
{
	return _Browser_TypeInfo.isWinIE;//||_Browser_TypeInfo.isOpera;
}

function Browser_IsCSS1Compat()
{
	return window.document.compatMode=="CSS1Compat";
}


//Element_Contains.js
function Element_Contains(element,node)
{
	if(!Browser_IsOpera())
	{
		if(element.contains)
			return element.contains(node);
	}
	for(;node!=null;node=node.parentNode)
	{
		if(element==node)return true;
	}
	return false;
}

//Element_RuntimeStyle.js
//TODO:there's some problem to get/set the style.border because the IE will translate it to border-left/top/right/bottom !

function Element_GetStyle(element,stylename)
{
	if(stylename=="cssText")
		return Element_GetCssText(element);
	if(element.__proxy)
		return element.__proxy.GetStyle(element,stylename);
	return Element_GetStyle_Core(element,stylename)
}
function Element_GetStyle_Core(element,stylename)
{
	if(element.__styles)srcVal=element.__styles[stylename];//undefined or null or string
	var srcVal;//undefined
	//if not set runtime value
	if(srcVal==null)
		return element.style[stylename]||"";
	return srcVal||"";

}
function Element_SetStyle(element,stylename,value)
{
	if(stylename=="cssText")
		return Element_SetCssText(element,value)
	if(element.__proxy)
		return element.__proxy.SetStyle(element,stylename,value);
	Element_SetStyle_Core(element,stylename,value)
}
function Element_SetStyle_Core(element,stylename,value)
{
	if(value==null)value="";else value=String(value);
	var srcVal;//undefined
	if(element.__styles)srcVal=element.__styles[stylename];//undefined or null or string
	if(value=="")//remove..
	{
		//if not set runtime value
		if(srcVal==null)
		{
			element.style[stylename]="";
			return;
		}
		element.__styles[stylename]="";
	}
	else
	{
		//if not set runtime value
		if(srcVal==null)
		{
			element.style[stylename]=value;
			return;
		}
		element.__styles[stylename]=value;
	}

}

function Element_GetRuntimeStyle(element,stylename)
{
	if(stylename=="cssText")
		return Element_GetRuntimeCssText(element);
	if(element.__proxy)
		return element.__proxy.GetRuntimeStyle(element,stylename);
	return Element_GetRuntimeStyle_Core(element,stylename);
}
function Element_GetRuntimeStyle_Core(element,stylename)
{
	var srcVal;//undefined
	if(element.__styles)srcVal=element.__styles[stylename];//undefined or null or string
	//if not set runtime value
	if(srcVal==null)return "";
	//the attribute should not be blank
	return element.style[stylename]||"";
}
function Element_SetRuntimeStyle(element,stylename,value)
{
	if(stylename=="border" && Browser_IsWinIE())
	{
		Element_SetRuntimeStyle(element,"borderTop",value);
		Element_SetRuntimeStyle(element,"borderLeft",value);
		Element_SetRuntimeStyle(element,"borderRight",value);
		Element_SetRuntimeStyle(element,"borderBottom",value);
		return;
	}
	if(stylename=="cssText")
		return Element_SetRuntimeCssText(element,value)
	if(element.__proxy)
		return element.__proxy.SetRuntimeStyle(element,stylename);
	return Element_SetRuntimeStyle_Core(element,stylename,value)
}
function Element_SetRuntimeStyle_Core(element,stylename,value)
{
	if(value==null)value="";else value=String(value);
	var srcVal;//undefined
	if(element.__styles)srcVal=element.__styles[stylename];//undefined or null or string
	if(value=="")//remove..
	{
		//if not set runtime value
		if(srcVal==null)return;
		delete element.__styles[stylename];
		//restore the src value
		//if src value is not set
		if(srcVal=="")
			element.style[stylename]="";
		else
			element.style[stylename]=srcVal;
	}
	else
	{
		//if not set runtime value
		if(srcVal==null)
		{
			if(element.__styles==null)element.__styles={};
			element.__styles[stylename]=element.style[stylename]||"";
		}
		element.style[stylename]=value;
	}

}

//String_Trim.js
function String_Trim(str)
{
	if(str==null)return "";
	str=String(str);
	return str.replace(/^\s+/,"").replace(/\s+$/,"");
}

// Форматирование HTML
function FormatHtml(win, tx)
{
	var	p1 = win.location.href.indexOf(win.location.host)+win.location.host.length;
	var	rp = new RegExp(win.location.href.substring(0,p1),"gim")
	// удаляем абсолютные ссылки
	var	tx	= tx.replace(rp,"");
	var   tx1 = "";
	// понижаем регистр тегов
	var b=0;
	for (var i=0;i<tx.length;i++)
	{
		var c = tx.charAt(i);
		if (c=='<') b=1;
		if (c=='>') b=0;
		if (b==1) tx1 += c.toLowerCase(); else tx1+=c;
	}
	// проставляем атрибутам кавычки
	tx1 = tx1.replace(new RegExp("(<\\S+\\s+)(\\w+)(=)([A-Za-z0-9_:]+)","gim"),"$1$2$3\"$4\"");
	// Проставляем правильные BR
	tx1 = tx1.replace(new RegExp("<br>","gim"),"<br />");
	// Закрываем IMG
	tx1 = tx1.replace(new RegExp("(<img )([^>]+)(>)","gim"),"$1$2 /$3");

	return tx1;
}

function IndentHtmlCode(html)
{
	var indent=0;
	var indents=["","\t","\t\t","\t\t\t\t","\t\t\t\t\t","\t\t\t\t\t\t","\t\t\t\t\t\t\t"];
	html=html.replace(/\r\n/g,'').replace(/\<\/?[a-z]+/ig,function(str,pos,raw)
	{
		var retval = "\r\n"+indents[Math.min(indents.length-1,indent)]+str;
		if(str.charAt(1)=='/')
			indent--
		else if (str.toLowerCase()!="<br")
			indent++
		if(indent<0)indent=0;
		return retval;
	});
	html=html.replace(/^(\r\n)+/g,'')
	html=HtmlEncode(html)
	html=html.replace(/\r\n/g,"<br />");
	//TODO: the firefox don't use this ????
	html=html.replace(/\t/g,"&nbsp;");
	return html;
}

function HtmlEncode(html)
{
	var div=document.createElement("DIV");
	var tn=document.createTextNode(html);
	div.appendChild(tn);
	return div.innerHTML;
}

//String_HtmlEncode.js
function String_HtmlEncode(html,_br,_nbsp)
{
	if(html==null)return "";
	html = html.replace(/&/g, "&amp;");
	html = html.replace(/</g, "&lt;");
	html = html.replace(/>/g, "&gt;");
	html = html.replace( /'/g, "&#39;" ) ;
	html = html.replace(/\x22/g, "&quot;");
	

	if(_br)
	{
		html=html.replace(/\r/g,"").replace(/\n/g,"<br/>");
	}
	if(_nbsp)
	{
		html = html.replace(/\s/g, "&nbsp;");
	}
	
	return html;
}
function String_AttributeEncode(html)
{
	if(html ==null)return "";
	html = html.replace(/&/g, "&amp;");
	html = html.replace(/</g, "&lt;");
	html = html.replace(/>/g, "&gt;");
	html = html.replace( /'/g, "&#39;" ) ;
	html = html.replace(/\x22/g, "&quot;");
	return html;
}

//TextNode_GetValue.js
function TextNode_GetValue(node)
{
	if(!Browser_IsGecko())
		return node.nodeValue;
	
	var text=node.nodeValue;
	return text.replace(/([\t\ \r\n])[\t\ \r\n]+/g," ");
}


//Element_InnerText.js
function Element_SetInnerText(element,text)
{
	text=String(text)
	if(Browser_IsWinIE())
	{
		element.innerText=text;
	}
	else
	{
		var arr=String(text).replace(/\r/g,'').split("\n");
		element.innerHTML=String_HtmlEncode(text,true,true);
	}
}

function Element_GetInnerText(element)
{
	if(Browser_IsWinIE())
		return element.innerText;
	
	/*
	
	do not use the textContent , it include comment! and scripts !
	var text=element.textContent;
	if(typeof(text)=="string")
		return alert(text)||text;
	
	the opera suppoer innerText , but the innerText has same problem too!
		
	*/
	
	var html=Element_GetInnerText$GetTextFromNodes(element);
	html=html.replace(/\xA0/g," ");
	return html;
}
function Element_GetInnerText$GetTextFromNodes(element)
{
	var sb=[];
	Fill(element);
	function Fill(node)
	{
		var nodes=node.childNodes;
		var len=nodes.length;
		for(var i=0;i<len;i++)
		{
			var child=nodes.item(i);
			var nodetype=child.nodeType;
			if(nodetype==3)
			{
				sb.push(TextNode_GetValue(child));
			}
			else if(nodetype==1)
			{
				var name=child.nodeName;
				if(name=="BR"||name=="HR")
				{
					sb.push("\r\n");
				}
				else if(name=="P")
				{
					sb.push("\r\n");
					Fill(child);
					sb.push("\r\n");
				}
				else if(name=="SCRIPT"){}
				else
				{
					Fill(child);
				}
			}
			
		}
	}
	return sb.join("");
}

//Event_Attach.js
function Event_Attach(obj,name,handler)
{
	if(obj.attachEvent)
	{
		if(name.substr(0,2)!="on")name="on"+name;
		obj.attachEvent(name,handler);
	}
	else
	{
		if(name.substr(0,2)=="on")name=name.substring(2);
		obj.addEventListener(name,handler,false);
	}
}

//Event_FindEvent.js
function Event_FindEvent(_evt)
{
	if(_evt&&_evt.preventDefault)
		return _evt;
	
	if(Browser_IsGecko())
	{
		return Event_FindEvent$FindEventFromCallers()
	}
	else
	{
		//IE,Opera
		//Safari?
		if(window.event)return window.event;
		return Event_FindEvent$FindEventFromWindows();
	}
	
	return null;
}

function Event_FindEvent$FindEventFromCallers()
{
	//search the event by caller:
	var func=Event_GetEvent.caller;
	//limit to 100 to pevent recursive..
	for(var i=0;i<100;i++)
	{
		if(!func)break;
		var _evt=func.arguments[0];
		if(_evt&&_evt.preventDefault)return _evt;
		func=func.caller;
	}
}
function Event_FindEvent$FindEventFromWindows()
{
	var arr=[];
	return FindRecursive(window)
	function FindRecursive(win)
	{
		if(win==null)return null;
		if(win.event)return win.event;
		if(Array_Contains(arr,win))return null;
		arr.push(win);

		var winlist=[];
		if(win.parent!=win)winlist.push(win.parent);
		if(win.top!=win.parent)winlist.push(win.top);
		if(win.opener)winlist.push(win.opener);
		for(var i=0;i<win.frames.length;i++)
			winlist.push(win.frames[i]);
		
		for(var i=0;i<winlist.length;i++)
		{
			try
			{
				var _evt=FindRecursive(winlist[i]);
				if(_evt)return _evt;
			}
			catch(x)
			{
			}
		}
		return null;
	}
}

//Event_GetEvent.js
function Event_GetEvent(_evt)
{
	_evt=Event_FindEvent(_evt);

	if(_evt==null)
		Debug_Todo("//TODO: event not found? throw error ?");
		
	return _evt;
}

//Event_Operation.js
function Event_PreventDefault(_evt)
{
	_evt=Event_GetEvent(_evt);
	_evt.returnValue=false;
	if(_evt.preventDefault)_evt.preventDefault();
}

function Event_CancelBubble(_evt)
{
	_evt=Event_GetEvent(_evt);
	_evt.cancelBubble=true;
	if(_evt.stopPropagation)_evt.stopPropagation();
	return false;
}

function Event_CancelEvent(_evt)
{
	_evt=Event_GetEvent(_evt);
	Event_PreventDefault(_evt);
	return Event_CancelBubble(_evt);
}

//Event_GetX.js
function Event_GetSrcElement(_evt)
{
	_evt=Event_GetEvent(_evt);
	if(_evt.srcElement)return _evt.srcElement;
	if(_evt.target)return _evt.target;
	Debug_Todo("//TODO: srcElement not found? throw error ?");
	return null;
}

//TODO:verify the relatedTarget
function Event_GetFromElement(_evt)
{
	_evt=Event_GetEvent(_evt);
	if(_evt.fromElement)return _evt.fromElement;
	if(_evt.relatedTarget)return _evt.relatedTarget;
	return null;
}
//TODO:verify the relatedTarget
function Event_GetToElement(_evt)
{
	_evt=Event_GetEvent(_evt);
	if(_evt.toElement)return _evt.toElement;
	if(_evt.relatedTarget)return _evt.relatedTarget;
	return null;
}




function Event_GetKeyCode(_evt)
{
	_evt=Event_GetEvent(_evt);
	return _evt.keyCode;
}
function Event_GetClientX(_evt)
{
	_evt=Event_GetEvent(_evt);
	return _evt.clientX;
}
function Event_GetClientY(_evt)
{
	_evt=Event_GetEvent(_evt);
	return _evt.clientY;
}
function Event_GetOffsetX(_evt)
{
	_evt=Event_GetEvent(_evt);
	return _evt.offsetX;
}
function Event_GetOffsetY(_evt)
{
	_evt=Event_GetEvent(_evt);
	return _evt.offsetY;
}




function Event_IsLeftButton(_evt)
{
	_evt=Event_GetEvent(_evt);
	if(Browser_IsWinIE())return _evt.button==1;
	if(Browser_IsGecko())return _evt.button==0;
	//TODO: How about other browsers?
	return _evt.button==0;
}
function Event_IsCtrlKey(_evt)
{
	_evt=Event_GetEvent(_evt);
	return _evt.ctrlKey;
}
function Event_IsAltKey(_evt)
{
	_evt=Event_GetEvent(_evt);
	return _evt.altKey;
}
function Event_IsShiftKey(_evt)
{
	_evt=Event_GetEvent(_evt);
	return _evt.shiftKey;
}

//Window_CreateSelectionRange.js
function Window_CreateSelectionRange(win)
{
	var range;
	if(Browser_UseIESelection())
	{
		var sel=win.document.selection;
		if(sel.type=="None"||sel.type=="Text")
		{
			range=sel.createRange();
		}
		else
		{
			range=document.body.createTextRange();
			range.moveToElement(sel.createRange().item(0));
		}
	}
	else
	{
		var sel=win.getSelection();
		if(sel.rangeCount==0)
		{
			range=win.document.createRange();
		}
		else
		{
			range=sel.getRangeAt(0).cloneRange();
		}
	}
	range.window=win;
	return range;
}

//Element_RuntimeAttribute.js
// the get attribute never return null . if no such attribute , it will return empty string

function Element_GetAttribute(element,attrname)
{
	if(attrname.toLowerCase()=="style")
		return Element_GetCssText(element);
	if(element.__proxy)
		return element.__proxy.GetAttribute(element,attrname);
	return Element_GetAttribute_Core(element,attrname)
}
function Element_GetAttribute_Core(element,attrname)
{
	var srcVal;//undefined
	if(element.__attributes)srcVal=element.__attributes[attrname.toLowerCase()];//undefined or null or string
	//if not set runtime value
	if(srcVal==null)
		return String(element.getAttribute(attrname)||"");
	return srcVal||"";
}
function Element_SetAttribute(element,attrname,value)
{
	if(attrname.toLowerCase()=="style")
		return Element_SetCssText(element,value);
	if(element.__proxy)
		return element.__proxy.SetAttribute(element,attrname,value);
	return Element_SetAttribute_Core(element,attrname,value)
}
function Element_SetAttribute_Core(element,attrname,value)
{
	if(value==null)value="";else value=String(value);
	var srcVal;//undefined
	if(element.__attributes)srcVal=element.__attributes[attrname.toLowerCase()];//undefined or null or string
	if(value=="")//remove..
	{
		//if not set runtime value
		if(srcVal==null)
		{
			element.removeAttribute(attrname);
			return;
		}
		element.__attributes[attrname.toLowerCase()]="";
	}
	else
	{
		//if not set runtime value
		if(srcVal==null)
		{
			element.setAttribute(attrname,value);
			return;
		}
		element.__attributes[attrname.toLowerCase()]=value;
	}
}

function Element_GetRuntimeAttribute(element,attrname)
{
	if(attrname.toLowerCase()=="style")
		return Element_GetRuntimeCssText(element);
	if(element.__proxy)
		return element.__proxy.GetRuntimeAttribute(element,attrname);
	return Element_GetRuntimeAttribute_Core(element,attrname)
}
function Element_GetRuntimeAttribute_Core(element,attrname)
{
	var srcVal;//undefined
	if(element.__attributes)srcVal=element.__attributes[attrname.toLowerCase()];//undefined or null or string
	//if not set runtime value
	if(srcVal==null)return "";
	//the attribute should not be blank
	return String(element.getAttribute(attrname)||"");
}
function Element_SetRuntimeAttribute(element,attrname,value)
{
	if(attrname.toLowerCase()=="style")
		return Element_SetRuntimeCssText(element,value);
	if(element.__proxy)
		return element.__proxy.SetRuntimeAttribute(element,attrname);
	return Element_SetRuntimeAttribute_Core(element,attrname,value)
}
function Element_SetRuntimeAttribute_Core(element,attrname,value)
{
	if(value==null)value="";else value=String(value);
	var srcVal;//undefined
	if(element.__attributes)srcVal=element.__attributes[attrname.toLowerCase()];//undefined or null or string
	if(value=="")//remove..
	{
		//if not set runtime value
		if(srcVal==null)return;
		delete element.__attributes[attrname.toLowerCase()];
		//restore the src value
		//if src value is not set
		if(srcVal=="")
			element.removeAttribute(attrname);
		else
			element.setAttribute(attrname,srcVal);
	}
	else
	{
		//if not set runtime value
		if(srcVal==null)
		{
			if(element.__attributes==null)element.__attributes={};
			element.__attributes[attrname.toLowerCase()]=String(element.getAttribute(attrname)||"");
		}
		element.setAttribute(attrname,value);
	}
}

//Window_Focus.js
function Window_Focus(win)
{
	try{win.focus()}catch(x){}
}


//Window_ShowDialog.js
function Window_ShowDialog(win,handler,url,args,feature)
{
	if(Browser_IsWinIE())
	{
		var res=win.showModalDialog(url,args,feature);
		if(handler)
		{
			win.setTimeout(function CallHandler(){
				//alert(handler);
				handler(res);
			},1);
		}
		return;
	}
	Window_OpenAsDialog(win,handler,url,args,feature);
}

function Window_OpenAsDialog(win,handler,url,args,feature)
{
	var _undefined;
	win.document.__dialog_arguments=args;
	win.document.$__dialog_returnvalue=_undefined;
	feature=String_ToOpenWindowOption(feature);
	var newwin=win.open(url,"dialog"+(new Date().getTime()%10000),feature);
	newwin.document.$__dialog_arguments=args
	Window_Focus(newwin);
	
	if(feature.indexOf("center")!=-1)
	{
		//..
	}
	
	var intervalid=setInterval(CheckNewWindow,100);
	
	function OnReturn(val)
	{
		clearInterval(intervalid);
		if(handler)
		{
			handler(val);
		}
	}
	function CheckNewWindow()
	{
		if(newwin.closed)
		{
			return OnReturn();
		}
		if(newwin.document==null)
		{
			return OnReturn();
		}
	
		if(typeof(newwin.document.__dialog_returnvalue)!="undefined")
		{
			return OnReturn(newwin.document.__dialog_returnvalue);
		}
		if(typeof(win.document.$__dialog_returnvalue)!="undefined")
		{
			return OnReturn(win.document.$__dialog_returnvalue);
		}
		
		Window_Focus(newwin);

	}
}

function String_ToOpenWindowOption(dialogOption)
{
	//dialogWidth:640px;dialogHeight:480px;help:0;status:0;resizable:1
	if(!dialogOption)return null;
	var sb=[];
	var parts=dialogOption.split(";");
	for(var i=0;i<parts.length;i++)
	{
		var pair=parts[i].split(":");
		if(pair.length!=2)
		{
			sb.push(parts[i]);
			sb.push(",");
			continue;
		}
		var name=String_Trim(pair[0]).toLowerCase();
		var val=String_Trim(pair[1]);
		if(name.substr(0,6)=="dialog")
		{
			sb.push(name.substring(6));
			sb.push("=");
			sb.push(parseInt(val));
			sb.push(",");
		}
		else
		{
			sb.push(name);
			sb.push("=");
			sb.push(val);
			sb.push(",");
		}
	}
	return sb.join("");
}

//Window_GetSelectionElement.js
function Window_GetSelectionNode(win)
{
	var node=Window_GetSelectionNode_Core(win);
	if(node==win.document.body)
		return null;
	if(!Element_Contains(win.document.body,node))
		return null;
	return node;
}
function Window_GetSelectionNode_Core(win)
{
	var sel;
	if(Browser_UseIESelection())
	{
		sel=win.document.selection;
		if(sel.type=="None"||sel.type=="Text")
			return sel.createRange().parentElement();
		return sel.createRange().item(0);
	}

	var sel=win.getSelection();
	if(sel.isCollapsed)
		return sel.anchorNode;

	//select text cross nodes
	if(sel.anchorNode==sel.focusNode)
		return sel.anchorNode;

	var p=sel.anchorNode;
	var cs=p.childNodes;
	for(var i=0;i<cs.length;i++)
	{
		var c=cs.item(i);
		if(sel.containsNode(c,true))
		{
			if(i!=0&&sel.containsNode(cs.item(i-1),false))
				continue;
			if(i<cs.length-1&&sel.containsNode(cs.item(i+1),false))
				continue;
			return c;
		}
	}

	if(sel.rangeCount==1)
		return Range_GetParentNode(Window_CreateSelectionRange(win));
	if(!Element_Contains(win.document.body,sel.anchorNode))
		return null;
	return Element_GetSameParent(sel.anchorNode,sel.focusNode)
}
function Window_GetSelectionElement(win)
{
	var node=Window_GetSelectionNode(win);
	if(node==null)
		return null;
	if(node.nodeType==1)
		return node;
	return node.parentNode;
}

//Element_RemoveNode.js
function Element_RemoveNode(element,delall)
{
	if(element.removeNode)
	{
		element.removeNode(delall);
		return;
	}
	
	var p=element.parentNode;
	if(!p)return;
	if(delall)
	{
		p.removeChild(element);
		return;
	}
	while(true)
	{
		var c=element.firstChild;
		if(!c)
			break;
		p.insertBefore(c,element);
	}
	p.removeChild(element);
}


//Window_InsertElement.js
function Window_InsertElement(win,element)
{
	var span;
	if(Browser_UseIESelection())
	{
		var sel=win.document.selection;
		if(sel.type=="Control")
		{
			var coll=win.document.selection.createRange();
			var firstnode=coll.item(0);
			span=win.document.createElement("SPAN");
			firstnode.parentNode.insertBefore(span,firstnode);
			for(var i=0;i<coll.length;i++)
			{
				Element_RemoveNode(coll.item(i),true);
			}
		}
		else
		{
			var range=sel.createRange();
			var spanname="span"+(new Date().getTime());
			var spancode="<span id="+spanname+"></span>";
			range.pasteHTML(spancode);
			span=Window_GetElement(win,spanname,true);
		}
		span.appendChild(element);
		Element_RemoveNode(span,false);
	}
	else
	{
		var sel=win.getSelection();
		var range=sel.getRangeAt(0);
		range.deleteContents();
		range.insertNode(element);
	}
}	


