if( document.implementation.hasFeature("XPath", "3.0") ){
	if( typeof XMLDocument == "undefined" ){ XMLDocument = Document; }
  XMLDocument.prototype.selectNodes = function(cXPathString, xNode){
    if( !xNode ) { xNode = this; } 
		var oNSResolver = this.createNSResolver(this.documentElement)
		var aItems = this.evaluate(cXPathString, xNode, oNSResolver, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null)
		var aResult = [];
		for( var i = 0; i < aItems.snapshotLength; i++){aResult[i] =  aItems.snapshotItem(i);	}
		return aResult;
	}
	XMLDocument.prototype.selectSingleNode = function(cXPathString, xNode){
		if( !xNode ) { xNode = this; } 
		var xItems = this.selectNodes(cXPathString, xNode);
		if( xItems.length > 0 ){return xItems[0];	}
		else{return null;	}
	}
	Element.prototype.selectNodes = function(cXPathString){
		if(this.ownerDocument.selectNodes){	return this.ownerDocument.selectNodes(cXPathString, this);}
		else{throw "For XML Elements Only";}
	}
	Element.prototype.selectSingleNode = function(cXPathString){	
		if(this.ownerDocument.selectSingleNode){return this.ownerDocument.selectSingleNode(cXPathString, this);	}
		else{throw "For XML Elements Only";}
	}
}

function getDomAdapter()
{
	var adapter = '';
	if ('undefined' != typeof ActiveXObject) {
		adapter = 'MS';
	} else if ('undefined' != typeof document
		&& document.implementation
		&& document.implementation.createDocument
		&& 'undefined' != typeof DOMParser)
	{
		adapter = 'default';
	}
	switch (adapter) {
		case 'MS':
			return new (function () {
				this.createDocument = function () {
					var names = ["Msxml2.DOMDocument.6.0",
						"Msxml2.DOMDocument.3.0", "MSXML2.DOMDocument",
						"MSXML.DOMDocument", "Microsoft.XMLDOM"];
					for (var key in names) {
						try {
							return new ActiveXObject(names[key]);
						} catch (e) {}
					}
					throw new Error('Unable to create DOMDocument');
				};
				this.serialize = function (doc) {
					return doc.xml;
				};
				this.parseXml = function (xml) {
					var doc = this.createDocument();
					if (!doc.loadXML(xml)) {
						throw new Error('Parse error');
					}
					return doc;
				};
			})();
		case 'default':
			return new (function () {
				this.createDocument = function () {
					return document.implementation.createDocument("", "", null);
				};
				this.serialize = function (doc) {
					return new XMLSerializer().serializeToString(doc);
				};
				this.parseXml = function (xml) {
					var doc = new DOMParser().parseFromString(xml, "text/xml");
					if ("parsererror" == doc.documentElement.nodeName) {
						throw new Error('Parse error');
					}
					return doc;
				};
			})();
		default:
			throw new Error('Unable to select the DOM adapter');
	}
};

function getElementValue (node, elementName) {
	if (navigator.appName == "Microsoft Internet Explorer") {
		elementName = elementName.toUpperCase();
	}
	var elementValue = node.getElementsByTagName(elementName)[0].childNodes[0].nodeValue;
	return elementValue;
}
				
function xPath (xmlDoc, xQuery) {
	if (navigator.appName == "Microsoft Internet Explorer") {
		xQuery = xQuery.toUpperCase();
	}
	return xmlDoc.selectNodes (xQuery);
}
        		
function changeAudio (fullMedia, preview) {
	var timestamp = new Date();
	timestamp = Date.parse(timestamp);
	document.getElementById ('bigImage').style.display = "none";
	if (navigator.appName == "Microsoft Internet Explorer") {
		var bigPlayer = document.getElementById ("big_player_ie");
		if (bigPlayer == null) {
			return;
		}
		var movie = bigPlayer.movie;
		movie = movie.substring (0, movie.indexOf ("big_player.swf?") + 15) + 'file=' + fullMedia + '&image=' + preview + '&p=' + timestamp;
		bigPlayer.movie = movie;
	} else if (navigator.appVersion.indexOf ("Safari") != -1) {
		var bigPlayer = document.getElementById ("big_player_ie");
		var movie = document.getElementById('movie').value;
		movie = movie.substring (0, movie.indexOf ("big_player.swf?") + 15) + 'file=' + fullMedia + '&image=' + preview + '&p=' + timestamp;
		document.getElementById('movie').value = movie;
		var dump = bigPlayer.innerHTML;
		bigPlayer.innerHTML = "";

		bigPlayer.innerHTML = dump;
	} else {
		var bigPlayer = document.getElementById ("big_player");
		bigPlayer.data = bigPlayer.data.substring (0, bigPlayer.data.indexOf ("big_player.swf?") + 15) + 'file=' + fullMedia + '&image=' + preview + '&p=' + timestamp;
	}
	document.getElementById ("big_player_div").style.display = "inline";
}

function changeVideo (idMedia) {
	var timestamp = new Date();
	timestamp = Date.parse(timestamp);
	document.getElementById ('bigImage').style.display = "none";
	if (navigator.appVersion.indexOf ("Chrome") != -1) {
	  var bigPlayer = document.getElementById("big_player");
	   if (bigPlayer == null) {
            return;
	   }
       var movie = document.getElementById('movie').value;
       movie = movie.substring (0, movie.indexOf ("big_player.swf?") + 15) + 'id=' + idMedia + '&p=' + timestamp;
       if(bigPlayer.attributes.length >= 4){
           for(var i=0; i < bigPlayer.attributes.length; i++){
                if(bigPlayer.attributes[i].name == "data"){
                    bigPlayer.attributes[i].nodeValue = movie;
                }
           }   
        }
      if (window.DOMParser)
	  {
		  parser=new DOMParser();
		  var xmlDoc = parser.parseFromString(document.getElementById("big_player").innerHTML,"text/xml");
	      var paramList = xmlDoc.getElementsByTagName("param");
	      for(var i = 0 ; i < paramList.length ; i++){
	          if(paramList[i].attributes[1].value == "movie"){
	               paramList[i].attributes[0].value = movie;
	          }
	      }
	     document.getElementById("big_player").innerHTML = new XMLSerializer().serializeToString(xmlDoc);
	  }
	} else
  if (navigator.appName == "Microsoft Internet Explorer") {	
		var bigPlayer = document.getElementById ("big_player_ie");
		if (bigPlayer == null) {
			return;
		}
		var movie = bigPlayer.movie;
		movie = movie.substring (0, movie.indexOf ("big_player.swf?") + 15) + 'id=' + idMedia + '&p=' + timestamp;
		bigPlayer.movie = movie;
	} else if (navigator.appVersion.indexOf ("Safari") != -1) {
		var bigPlayer = document.getElementById ("big_player_ie");
		var movie = document.getElementById('movie').value;
		movie = movie.substring (0, movie.indexOf ("big_player.swf?") + 15) + 'id=' + idMedia + '&p=' + timestamp;
		document.getElementById('movie').value = movie;
		var dump = bigPlayer.innerHTML;
		bigPlayer.innerHTML = "";
		bigPlayer.innerHTML = dump;
	} else {
		var bigPlayer = document.getElementById ("big_player");
		bigPlayer.data = bigPlayer.data.substring (0, bigPlayer.data.indexOf ("big_player.swf?") + 15) + 'id=' + idMedia + '&p=' + timestamp;
	}
	document.getElementById ("big_player_div").style.display = "inline";
}
				
function removeSelectionBorder () {
	var listaGaleria = document.getElementById ('listaGaleria');
	var divs = listaGaleria.getElementsByTagName ("div");
	for (i = 0; i < divs.length; i++) {
		var index = divs[i].className.indexOf ('FW_sImatgeSeleccionat'); 
		if (index != -1) {
			divs[i].className = divs[i].className.substring (0, index);
			break;
		}
	}
}

function deleteNamespace () {
	var xmlString = document.getElementById ('pdv').innerHTML;
	if (navigator.appName == "Microsoft Internet Explorer") {
		if (xmlString.indexOf ('BIG:') != -1) {
			xmlString = xmlString.replace (/BIG:/g, "").replace(/&nbsp;/g, " ");
		}
	} else {
		if (xmlString.indexOf ('big:') != -1) {
			xmlString = xmlString.replace (/big:/g, "").replace(/&nbsp;/g, " ");;
			document.getElementById ('pdv').innerHTML = xmlString;
		}
	}
	return xmlString;
}        		

function changePreview (id, previewObject) {
	if (previewObject.parentNode.className.indexOf ('FW_sImatgeSeleccionat') != -1) {
		return;
	}
	removeSelectionBorder ();						
	var xmlString = deleteNamespace ();
	var xmlDoc = getDomAdapter().parseXml(xmlString);
	var medias = xPath(xmlDoc, "//media");
	previewObject.parentNode.className += " FW_sImatgeSeleccionat";
	//Se trata de una imagen
	if (previewObject.getAttribute ("link") != null) {
		document.getElementById ("big_player_div").style.display = "none";
		document.getElementById ("bigImage").setAttribute ("href", previewObject.getAttribute ("link"));
		document.getElementById ("bigImage").setAttribute ("title", previewObject.getAttribute ("title"));
		document.getElementById ("bigImageSource").setAttribute ("src", previewObject.getAttribute ("image"));						
		document.getElementById ("bigImageSource").setAttribute ("alt", previewObject.firstChild.getAttribute ("alt"));  		
		document.getElementById ("bigImage").style.display = "inline";
		document.getElementById ("bigImageDetalleLink").setAttribute ("href", previewObject.getAttribute ("link"));
		document.getElementById ("bigImageDetalleLink").parentNode.style.display = "inline";
		document.getElementById ("descriptionMedia").firstChild.nodeValue = previewObject.getAttribute ("descripcio");
		document.getElementById ("autorMedia").innerHTML = "Autor: " + previewObject.getAttribute ("autor");
	} else {
		//Se trata de un video o un audio	
		for (i = 0; i < medias.length; i++) {
			var idMedia = getElementValue (medias[i], "identificador"); 
			if (idMedia == id) {
				var tipoMedia = getElementValue (medias [i], "tipus");
				var autor = getElementValue (medias [i], "autor");
				var descripcio = getElementValue (medias [i], "descripcio");
				var descriptionMedia = document.getElementById ("descriptionMedia");
				var autorMedia = document.getElementById ("autorMedia");
				var fullMedia = getElementValue (medias [i], "fullmedia");
				var preview = getElementValue (medias [i], "preview");
				if (tipoMedia == 'Video') {
					changeVideo (idMedia);
				} else {
					changeAudio (fullMedia, preview);
				}
				document.getElementById ("bigImageDetalleLink").parentNode.style.display = "none";
				descriptionMedia.firstChild.nodeValue = descripcio;
				autorMedia.innerHTML = "Autor: " + autor;
				break;
			}
		}
	}
}
