function HTMLObjectElementWrapper(htmlObjectElement)
{
	this.htmlObjectElement = htmlObjectElement;
}

// static {

HTMLObjectElementWrapper.CreateParamElement = function(name, value)
{
	var paramElement = document.createElement('param');
	paramElement.setAttribute('name', name);
	paramElement.setAttribute('value', value);
	return paramElement;
}

HTMLObjectElementWrapper.CreateObjectElement = function(document, attributes, parameters)
{
	var objectElement = document.createElement('object');

	for(var idx in attributes)
		objectElement.setAttribute(idx, attributes[idx]);

	for(var idx in parameters)
		objectElement.appendChild(HTMLObjectElementWrapper.CreateParamElement(idx, parameters[idx]));

	return objectElement;
}

// }

// private {

HTMLObjectElementWrapper.prototype.__getParameterElement_FF = function(name)
{
	var contextNode = this.htmlObjectElement;
	return contextNode.ownerDocument.evaluate('p:param[@name = "'+ name +'"]', contextNode, new Function('return "'+ contextNode.namespaceURI +'"'), XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
}

HTMLObjectElementWrapper.prototype.__getParameterElement_MSIE = function(name)
{
	for(var i = 0, node; i < this.htmlObjectElement.childNodes.length; i++)
	{
		node = this.htmlObjectElement.childNodes.item(i);
		if(node.nodeType == 1 && node.tagName == 'PARAM' && node.getAttribute('name') == name)
			return node;
	}

	return null;
}

HTMLObjectElementWrapper.prototype.__getParameterElements_FF = function()
{
	var htmlParamElements = {};

	var contextNode = this.htmlObjectElement,
		snapshot = contextNode.ownerDocument.evaluate('p:param', contextNode, new Function('return "'+ contextNode.namespaceURI +'"'), XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
	for(var i = 0, htmlParamElement; i < snapshot.snapshotLength; i++)
	{
		htmlParamElement = snapshot.snapshotItem(i);
		htmlParamElements[htmlParamElement.getAttribute('name')] = htmlParamElement;
	}

	return htmlParamElements;
}

HTMLObjectElementWrapper.prototype.__getParameterElements_MSIE = function()
{
	/*
	 * htmlObjectElement.getElementsByTagName('param') mi vraci vsechny HTMLParamElements v dokumentu
	 */

	var htmlParamElements = [];
	for(var i = 0, node; i < this.htmlObjectElement.childNodes.length; i++)
	{
		node = this.htmlObjectElement.childNodes.item(i);
		if(node.nodeType == 1 && node.tagName == 'PARAM')
			htmlParamElements.push(node);
	}
	return htmlParamElements;
}

// }

// public {

HTMLObjectElementWrapper.prototype.getParameter = function(name)
{
	var paremElement = this.getParameterElement(name);
	return paremElement ? paremElement.getAttribute('value') : null;
}

HTMLObjectElementWrapper.prototype.getParameters = function()
{
	var parameters = {},
		paramElements = this.getParameterElements();
	for(var name in paramElements)
		parameters[name] = paramElements[name].getAttribute('value');

	return parameters;
}

HTMLObjectElementWrapper.prototype.setParameter = function(name, value)
{
	var htmlParamElement = this.getParameterElement(name);
	if(!htmlParamElement)
	{
		htmlParamElement = this.htmlObjectElement.ownerDocument.createElement('param');
		this.htmlObjectElement.appendChild(htmlParamElement);
		htmlParamElement.setAttribute('name', name);
	}
	htmlParamElement.setAttribute('value', value);
}

HTMLObjectElementWrapper.prototype.removeParameter = function(name)
{
	var htmlParamElement = this.getParameterElement(name);
	if(htmlParamElement)
		htmlParamElement.parentNode.removeChild(htmlParamElement);
}

// }

switch(BROWSER_TYPE)
{
	case BrowserType.OTHER:
		HTMLObjectElementWrapper.prototype.getParameterElement = HTMLObjectElementWrapper.prototype.__getParameterElement_FF;
		HTMLObjectElementWrapper.prototype.getParameterElements = HTMLObjectElementWrapper.prototype.__getParameterElements_FF;
		break;

	case BrowserType.MSIE:
		HTMLObjectElementWrapper.prototype.getParameterElement = HTMLObjectElementWrapper.prototype.__getParameterElement_MSIE;
		HTMLObjectElementWrapper.prototype.getParameterElements = HTMLObjectElementWrapper.prototype.__getParameterElements_MSIE;
		break;
}

