var ua = navigator.userAgent;

var aBrowser = new Array();
aBrowser['MSIE'] = (navigator.appName == "Microsoft Internet Explorer");
aBrowser['MSIE5'] = this.isMSIE && (ua.indexOf('MSIE 5') != -1);
aBrowser['MSIE5_0'] = this.isMSIE && (ua.indexOf('MSIE 5.0') != -1);
aBrowser['Gecko'] = ua.indexOf('Gecko') != -1;
aBrowser['Gecko18'] = ua.indexOf('Gecko') != -1 && ua.indexOf('rv:1.8') != -1;
aBrowser['Safari'] = ua.indexOf('Safari') != -1;
aBrowser['Opera'] = ua.indexOf('Opera') != -1;
aBrowser['Mac'] = ua.indexOf('Mac') != -1;
aBrowser['NS7'] = ua.indexOf('Netscape/7') != -1;
aBrowser['NS71'] = ua.indexOf('Netscape/7.1') != -1;

// Fake MSIE on Opera and if Opera fakes IE, Gecko or Safari cancel those
if (aBrowser['Opera']) {
	aBrowser['MSIE'] = true;
	aBrowser['Gecko'] = false;
	aBrowser['Safari'] =  false;
}

var URL = {
	location : function( url, newpage )
	{
		if (newpage==1) {
			window.open(url, "_new");
		} else {
			document.location=url;
		}
	},
	
	getParam : function( strParamName )
	{
		var strReturn = "";
		var strHref = window.location.href;
		if ( strHref.indexOf("?") > -1 )
		{
			var strQueryString = strHref.substr(strHref.indexOf("?")).toLowerCase();
			var aQueryString = strQueryString.split("&");
			for ( var iParam = 0; iParam < aQueryString.length; iParam++ )
			{
				if ( aQueryString[iParam].indexOf(strParamName + "=") > -1 )
				{
					var aParam = aQueryString[iParam].split("=");
					strReturn = aParam[1];
					break;
				}
			}
		}
		return strReturn;
	}
}
var Style = {
	setAttribute : function( obj, attrib, value )
		{
			if( obj.style.setAttribute )
			{
				obj.style.setAttribute( attrib, value );
			} else
			{
				obj.style[ attrib ] = value;
			}
		},
	
	getAttribute : function( obj, attrib )
		{
			var value;
			if( obj.style.getAttribute )
			{
				value = obj.style.getAttribute( attrib );
			} else
			{
				value = obj.style[ attrib ];
			}
			return value;
		},
	
	removeAttribute : function( obj, attrib )
		{
			if( obj.style.removeAttribute )
			{
				obj.style.removeAttribute( attrib );
			} else                                                            
			{
				obj.style[ attrib ] = null;
			}
		},
	/**
	* befejezetlen
	*/
	getBoxAttribute : function ( obj, attrib )
		{
			var rec = [ 0, 0, 0, 0 ];
			var p = Style.getAttribute( obj, attrib );
			if( p )
			{
				var ap = p.split( ' ' );
				for( i = 0; i < ap.length; i++ )
				{
				}
			}
		}
}

var Elem = {
	create : function( tag, attributes, child )
		{
			attribs = attributes || {};
			if( aBrowser['MSIE'] == true )
			{
				var attr = "";
				if( attribs['name'] )		attr += " name=\""+attribs['name']+"\" ";
				if( attribs['checked'] )	attr += " checked=\"checked\" ";
				if( attribs['selected'] )	attr += " selected=\"selected\" ";
				attribs['name'] = null;
				attribs['checked'] = null;
				attribs['selected'] = null;
				if( attr != '' )
					var oObj = document.createElement( "<"+tag+attr+"></"+tag+">" );
				
			}
			if( ! oObj )
				var oObj = document.createElement( tag );
			for( key in attribs )
			{
				if( attribs[ key ] != null )
				{
					Elem.setAttribute( oObj, key, attribs[ key ] );
				}
			}
			if( child )
			{
				var argv = Elem.create.arguments;
				var argc = argv.length;
				if( argc > 3 )
				{
					for( var i = 2; i < argc; i++ )
					{
						oObj.appendChild( argv[i] );
					}
				} else
				{
					if( typeof( child ) == "string" )
					{
						oObj.innerHTML = child;
					} else
					{
						oObj.appendChild( child );
					}
				}
			}
			return oObj;
		},
	/**
	* Az eseménykezelő függvény paraméterlistájában event-el kell hivatkozni az aktuális eseményre
	*/
	setAttribute : function( obj, attrib, value )
		{
			if( attrib.substr( 0, 2 ) == "on" )
			{
				var evh = "var event = e || window.event; " + value;
				var func = new Function( "e", evh );

				obj.setAttribute( attrib, value );
				obj[ attrib ] = func;
/*
				if( aBrowser['MSIE'] == true )
				{
					obj.setAttribute( attrib, func );
				} else {
					obj.setAttribute( attrib, value );
				}
*/
				return;
			}
			if( aBrowser['MSIE'] == true )
			{
				switch( attrib.toLowerCase() )
				{
					case "name":
					case "selected":
						alert( "Utólag nem módosítható a(z) " + attrib + " attribútum" );
						return false;
						break;
				}
			}
			switch( attrib.toLowerCase() )
			{
				case "class":
				case "classname":
					obj.setAttribute( "class", value );
					obj.setAttribute( "className", value );
					break;
				case "innertext":
				case "textcontent":
					if( obj.innerText )
					{
						obj.setAttribute( "innertext", value );
					} else {
						obj.setAttribute( "textcontent", value );
					}
					break;
				case "style":
					for( sa in value )
					{
						Style.setAttribute( obj, sa, value[sa] );
					}
					break;
				default:
					obj.setAttribute( attrib, value );
			}
			if( value == "" )
			{
				Elem.removeAttribute( obj, attrib );
			}
		},
	
	getAttribute : function( obj, attrib, s )
		{
			var style = s || attrib;
			
			if( attrib.toLowerCase() == "class" ||
				attrib.toLowerCase() == "classname"
			)
			{
				var val = obj[ "class" ] || obj[ "className" ];
				return val;
			} else
			{
				var val = "";
				 if( obj[ attrib ] )
					 val = obj[ attrib ];
				 else if( obj.style )
					 val = eval( "obj.style." + style );
				 return typeof( val ) != "undefined" ? val : "";
			}
		},

	removeAttribute : function( obj, attrib )
		{
			obj[ attrib ] = '';
			if( obj.removeAttribute )
			{
				try {
					obj.removeAttribute( attrib );
				}
				catch( e )
				{
					alert( arraytoString( e ) );
				}
			}
		},
	
	cloneNode : function( obj, deep )
		{
			var clonedeep = deep || true;
			var clone = null;
			
			if( aBrowser['MSIE'] == true )
			{
				clone = obj.cloneNode( clonedeep );
			} else if( aBrowser['Gecko'] == true )
			{
				// create the serializer object
				var stringMaker	= new XMLSerializer();
				
				// convert the xmlDocument object to a string
				var xmlString	= stringMaker.serializeToString( obj );
				
				// display the string
	//			var oParser = new DOMParser;
	//			clone = oParser.parseFromString( xmlString, "text/xml" );
	
				oParent = document.createElement( 'div' );
				oParent.innerHTML = xmlString;
				clone = oParent.firstChild;
			}
			return clone;
		},
	
	findParent : function( obj, attrib, value )
		{
			while( obj && obj.parentNode && ! Elem.checkObject( obj, attrib, value ) )
			{
				obj = obj.parentNode;
			}
			if( ! obj || ! obj.parentNode  ) return false;
			return obj;
		},
	
	getParent : function( node )
		{
/*
			alert( node.nodeType );
			if (node.nodeType == 1)
				return node;
*/	
			// Find parent node that is a element
			while( node.parentNode != null && node.parentNode.nodeType != 1 )
				node = node.parentNode;
	
			return node.parentNode;
		},

	fromString : function( string )
		{
			if( string == "" ) return null;
			var placeholder = Elem.create( 'div' );
			placeholder.innerHTML = string;
			var fragment = placeholder.firstChild;
			return fragment;
		},

	toString : function( obj )
		{
			if( typeof( obj ) != "object" ) return "";
			
			var str = "";
			if( aBrowser['MSIE'] == true )
			{
				str = obj.outerHTML;
			} else
			{
				if( obj.parentNode )
				{
					var placeholder = Elem.create( 'div' );
					var dummy = Elem.create( 'div' );
					obj.parentNode.replaceChild( dummy, obj );
					placeholder.appendChild( obj );
					str = placeholder.innerHTML;
					dummy.parentNode.replaceChild( obj, dummy );
				} else {
					var placeholder = Elem.create( 'div' );
					placeholder.appendChild( obj );
					str = placeholder.innerHTML;
				}
				
			}
			return str;
		},

	innerText : function( obj )
		{
			if( aBrowser['MSIE'] == true )
			{
				str = obj.innerText;
			} else
			{
				str = obj.textContent;
			}
			return str;
		},
	setContent : function( obj, content )
		{
			while( obj.firstChild )
			{
				obj.removeChild( obj.firstChild );
			}
			if( content )
			{
				if( typeof( content ) == "string" )
					obj.innerHTML = content;
				else
					obj.appendChild( content );
			}
		},
	getSameNodesBefore : function( obj, a, v )
		{
			var attrib = a || 'nodeName';
			var value = v || Elem.getAttribute( obj, attrib );
			var nodes = new Array();
			while( obj.previousSibling )
			{
				if( Elem.getAttribute( obj.previousSibling, attrib ) == value )
					nodes[ nodes.length ] = obj.previousSibling;
				obj = obj.previousSibling;
			}
			return nodes;
		},
	checkObject : function( obj, attrib, value )
		{
			if( ! obj ) return false;
			if( value instanceof RegExp )
			{
				if( value.exec( Elem.getAttribute( obj, attrib ) ) )
				{
					return true;
				}
			} else if( typeof( attrib ) == 'function' )
			{
				return attrib( obj );
			} else if( Elem.getAttribute( obj, attrib ) == value )
			{
				return true;
			}
			return false;
		},
	nextSibling : function( obj, attrib, value )
		{
			if( ! obj ) return null;
			while( obj.nextSibling )
			{
				if( Elem.checkObject( obj.nextSibling, attrib, value ) )
				{
					return obj.nextSibling;
				}
				obj = obj.nextSibling;
			}
			return null;
		},
	previousSibling : function( obj, attrib, value )
		{
			if( ! obj ) return null;
			while( obj.previousSibling )
			{
				if( Elem.checkObject( obj.previousSibling, attrib, value ) )
				{
					return obj.previousSibling;
				}
				obj = obj.previousSibling;
			}
			return null;
		},
	firstSibling : function( obj, attrib, value )
		{
			if( ! obj ) return null;
			if( Elem.checkObject( obj.parentNode.firstChild, attrib, value ) ) return obj.parentNode.firstChild;
			else return Elem.nextSibling( obj.parentNode.firstChild, attrib, value );
		},
	lastSibling : function( obj, attrib, value )
		{
			if( ! obj ) return null;
			if( Elem.checkObject( obj.parentNode.lastChild, attrib, value ) ) return obj.parentNode.lastChild;
			else return Elem.previousSibling( obj.parentNode.lastChild, attrib, value );
		},
	findChild : function( obj, attrib, value )
		{
			if( ! obj ) return null;
			if( Elem.checkObject( obj, attrib, value ) ) return obj;
			for( var i = 0; i < obj.childNodes.length; i++ )
			{
				var fobj = Elem.findChild( obj.childNodes[ i ], attrib, value );
				if( fobj ) return fobj;
			}
			return null;
		},
	foreach : function( obj, todo, attrib, value )
		{
			if( ! obj ) return null;
			if( Elem.checkObject( obj, attrib, value ) ) 
				return todo( obj );
			for( var i = 0; i < obj.childNodes.length; i++ )
			{
				Elem.foreach( obj.childNodes[ i ], todo, attrib, value );
			}
		}
};

var HTML = {
	toHTML : function( string )
		{
			var dummy = Elem.create( 'div' );
//			dummy.appendChild( document.createTextNode( "&lt;u&gt;aláhúzott&lt;/u&gt;&#9;" ) );
			dummy.innerHTML = string;
			return Elem.innerText( dummy );
		},
	toStr : function( string )
		{
			var dummy = Elem.create( 'div' );
			Elem.setAttribute( dummy, "textContent", string );
//			var dummy = document.createTextNode( "<u>aláhúzott</u>&#9;" );
			return dummy.innerHTML;
		}
}
var Mouse = {
	X: function( evt ) 
	{
		if( evt.pageX )
		{
			return evt.pageX;
		} else if( evt.clientX )
		{
		   return evt.clientX + (document.documentElement.scrollLeft ?
			   document.documentElement.scrollLeft :
			   document.body.scrollLeft);
		} else return null;
	},
	
	Y: function( evt ) 
	{
		if( evt.pageY ) 
		{
			return evt.pageY;
		} else if( evt.clientY )
		{
		   return evt.clientY + (document.documentElement.scrollTop ?
			   document.documentElement.scrollTop :
			   document.body.scrollTop);
		} else return null;
	}
}
/*
var CDocument = {
	getSelection : function()
		{
			if( aBrowser['MSIE'] == true && aBrowser['Opera'] == false )
				return document.selection;
	
			return window.getSelection();
		},
		
	getRange : function()
		{
	
			var sel = this.getSelection();
			if (sel == null)
				return null;
	
			if( aBrowser['MSIE'] == true && aBrowser['Opera'] == false )
				return sel.createRange();
	
			sel = this.getSel();
			var rng = sel.getRangeAt(0);
			return rng;
		},
	
	getFocusElement : function( r ) 
		{
			if( aBrowser['MSIE'] == true && aBrowser['Opera'] == false )
			{
				var doc = document;
				var rng = r || doc.selection.createRange();
		
				var elm = rng.item ? rng.item(0) : rng.parentElement();
			} else {
				var rng = r || this.getRange();
		
				var elm = rng.commonAncestorContainer;
				//var elm = (sel && sel.anchorNode) ? sel.anchorNode : null;
		
				// Handle selection a image or other control like element such as anchors
				if (!rng.collapsed) 
				{
					// Is selection small
					if (rng.startContainer == rng.endContainer) 
					{
						if (rng.startOffset - rng.endOffset < 2) 
						{
							if (rng.startContainer.hasChildNodes())
								elm = rng.startContainer.childNodes[rng.startOffset];
						}
					}
				}
		
				// Get the element parent of the node
				elm = Elem.getParent(elm);
		
				//if (tinyMCE.selectedElement != null && tinyMCE.selectedElement.nodeName.toLowerCase() == "img")
				//	elm = tinyMCE.selectedElement;
			}
		
			return elm;
		},
		
	getSelectedHTML : function( range )
		{
			if( aBrowser['MSIE'] == true && aBrowser['Safari'] == false )
			{
				// Not realy perfect!!
		
				return range.toString();
			}
		
			var elm = document.createElement("body");
		
			if( aBrowser['Gecko'] == true )
				elm.appendChild( range.cloneContents());
			else
				elm.innerHTML = range.htmlText;
		
			return elm;
		}
};
*/

