var xmlResultSearchAsYouType = null;

function make_pattern(search_string) 
{ 
    // escape meta characters 
    search_string = search_string.replace(/([|()[{.+*?^$\\])/g,"\\$1"); 
    search_string = search_string.replace(new RegExp(accented['A'], "g"),"a");
    search_string = search_string.replace(new RegExp(accented['B'], "g"),"b");
    search_string = search_string.replace(new RegExp(accented['C'], "g"),"c");
    search_string = search_string.replace(new RegExp(accented['D'], "g"),"d");
    search_string = search_string.replace(new RegExp(accented['E'], "g"),"e");
    search_string = search_string.replace(new RegExp(accented['F'], "g"),"f");
    search_string = search_string.replace(new RegExp(accented['G'], "g"),"g");
    search_string = search_string.replace(new RegExp(accented['H'], "g"),"h");
    search_string = search_string.replace(new RegExp(accented['I'], "g"),"i");
    search_string = search_string.replace(new RegExp(accented['J'], "g"),"j");
    search_string = search_string.replace(new RegExp(accented['K'], "g"),"k");
    search_string = search_string.replace(new RegExp(accented['L'], "g"),"l");
    search_string = search_string.replace(new RegExp(accented['M'], "g"),"m");
    search_string = search_string.replace(new RegExp(accented['N'], "g"),"n");
    search_string = search_string.replace(new RegExp(accented['O'], "g"),"o");
    search_string = search_string.replace(new RegExp(accented['P'], "g"),"p");
    search_string = search_string.replace(new RegExp(accented['Q'], "g"),"q");
    search_string = search_string.replace(new RegExp(accented['R'], "g"),"r");
    search_string = search_string.replace(new RegExp(accented['S'], "g"),"s");
    search_string = search_string.replace(new RegExp(accented['T'], "g"),"t");
    search_string = search_string.replace(new RegExp(accented['U'], "g"),"u");
    search_string = search_string.replace(new RegExp(accented['V'], "g"),"v");
    search_string = search_string.replace(new RegExp(accented['W'], "g"),"w");
    search_string = search_string.replace(new RegExp(accented['X'], "g"),"x");
    search_string = search_string.replace(new RegExp(accented['Y'], "g"),"y");
    search_string = search_string.replace(new RegExp(accented['Z'], "g"),"z");
    
    // split into words 
    var words = search_string.split(/\s+/); 
 
    // replace characters by their compositors 
    var accent_replacer = function(chr) { 
        return accented[chr.toUpperCase()] || chr; 
    } 
    for (var i = 0; i < words.length; i++) { 
        words[i] = '(^|[\\s.,;!?Ąż])+' + words[i].replace(/\S/g,accent_replacer) + '.*'; 
    } 
 
    // join 
    var regexp = words.join("");
        
    return new RegExp(regexp); 
} 

var accented = 
{ 
    'A': '[Aa\xaa\xc0-\xc5\xe0-\xe5\u0100-\u0105\u01cd\u01ce\u0200-\u0203\u0226\u0227\u1d2c\u1d43\u1e00\u1e01\u1e9a\u1ea0-\u1ea3\u2090\u2100\u2101\u213b\u249c\u24b6\u24d0\u3371-\u3374\u3380-\u3384\u3388\u3389\u33a9-\u33af\u33c2\u33ca\u33df\u33ff\uff21\uff41]', 
    'B': '[Bb\u1d2e\u1d47\u1e02-\u1e07\u212c\u249d\u24b7\u24d1\u3374\u3385-\u3387\u33c3\u33c8\u33d4\u33dd\uff22\uff42]', 
    'C': '[Cc\xc7\xe7\u0106-\u010d\u1d9c\u2100\u2102\u2103\u2105\u2106\u212d\u216d\u217d\u249e\u24b8\u24d2\u3376\u3388\u3389\u339d\u33a0\u33a4\u33c4-\u33c7\uff23\uff43]', 
    'D': '[Dd\u010e\u010f\u01c4-\u01c6\u01f1-\u01f3\u1d30\u1d48\u1e0a-\u1e13\u2145\u2146\u216e\u217e\u249f\u24b9\u24d3\u32cf\u3372\u3377-\u3379\u3397\u33ad-\u33af\u33c5\u33c8\uff24\uff44]', 
    'E': '[Ee\xc8-\xcb\xe8-\xeb\u0112-\u011b\u0204-\u0207\u0228\u0229\u1d31\u1d49\u1e18-\u1e1b\u1eb8-\u1ebd\u2091\u2121\u212f\u2130\u2147\u24a0\u24ba\u24d4\u3250\u32cd\u32ce\uff25\uff45]', 
    'F': '[Ff\u1da0\u1e1e\u1e1f\u2109\u2131\u213b\u24a1\u24bb\u24d5\u338a-\u338c\u3399\ufb00-\ufb04\uff26\uff46]', 
    'G': '[Gg\u011c-\u0123\u01e6\u01e7\u01f4\u01f5\u1d33\u1d4d\u1e20\u1e21\u210a\u24a2\u24bc\u24d6\u32cc\u32cd\u3387\u338d-\u338f\u3393\u33ac\u33c6\u33c9\u33d2\u33ff\uff27\uff47]', 
    'H': '[Hh\u0124\u0125\u021e\u021f\u02b0\u1d34\u1e22-\u1e2b\u1e96\u210b-\u210e\u24a3\u24bd\u24d7\u32cc\u3371\u3390-\u3394\u33ca\u33cb\u33d7\uff28\uff48]', 
    'I': '[Ii\xcc-\xcf\xec-\xef\u0128-\u0130\u0132\u0133\u01cf\u01d0\u0208-\u020b\u1d35\u1d62\u1e2c\u1e2d\u1ec8-\u1ecb\u2071\u2110\u2111\u2139\u2148\u2160-\u2163\u2165-\u2168\u216a\u216b\u2170-\u2173\u2175-\u2178\u217a\u217b\u24a4\u24be\u24d8\u337a\u33cc\u33d5\ufb01\ufb03\uff29\uff49]', 
    'J': '[Jj\u0132-\u0135\u01c7-\u01cc\u01f0\u02b2\u1d36\u2149\u24a5\u24bf\u24d9\u2c7c\uff2a\uff4a]', 
    'K': '[Kk\u0136\u0137\u01e8\u01e9\u1d37\u1d4f\u1e30-\u1e35\u212a\u24a6\u24c0\u24da\u3384\u3385\u3389\u338f\u3391\u3398\u339e\u33a2\u33a6\u33aa\u33b8\u33be\u33c0\u33c6\u33cd-\u33cf\uff2b\uff4b]', 
    'L': '[Ll\u0139-\u0140\u01c7-\u01c9\u02e1\u1d38\u1e36\u1e37\u1e3a-\u1e3d\u2112\u2113\u2121\u216c\u217c\u24a7\u24c1\u24db\u32cf\u3388\u3389\u33d0-\u33d3\u33d5\u33d6\u33ff\ufb02\ufb04\uff2c\uff4c]', 
    'M': '[Mm\u1d39\u1d50\u1e3e-\u1e43\u2120\u2122\u2133\u216f\u217f\u24a8\u24c2\u24dc\u3377-\u3379\u3383\u3386\u338e\u3392\u3396\u3399-\u33a8\u33ab\u33b3\u33b7\u33b9\u33bd\u33bf\u33c1\u33c2\u33ce\u33d0\u33d4-\u33d6\u33d8\u33d9\u33de\u33df\uff2d\uff4d]', 
    'N': '[Nn\xd1\xf1\u0143-\u0149\u01ca-\u01cc\u01f8\u01f9\u1d3a\u1e44-\u1e4b\u207f\u2115\u2116\u24a9\u24c3\u24dd\u3381\u338b\u339a\u33b1\u33b5\u33bb\u33cc\u33d1\uff2e\uff4e]', 
    'O': '[Oo\xba\xd2-\xd6\xf2-\xf6\u014c-\u0151\u01a0\u01a1\u01d1\u01d2\u01ea\u01eb\u020c-\u020f\u022e\u022f\u1d3c\u1d52\u1ecc-\u1ecf\u2092\u2105\u2116\u2134\u24aa\u24c4\u24de\u3375\u33c7\u33d2\u33d6\uff2f\uff4f]', 
    'P': '[Pp\u1d3e\u1d56\u1e54-\u1e57\u2119\u24ab\u24c5\u24df\u3250\u3371\u3376\u3380\u338a\u33a9-\u33ac\u33b0\u33b4\u33ba\u33cb\u33d7-\u33da\uff30\uff50]', 
    'Q': '[Qq\u211a\u24ac\u24c6\u24e0\u33c3\uff31\uff51]', 
    'R': '[Rr\u0154-\u0159\u0210-\u0213\u02b3\u1d3f\u1d63\u1e58-\u1e5b\u1e5e\u1e5f\u20a8\u211b-\u211d\u24ad\u24c7\u24e1\u32cd\u3374\u33ad-\u33af\u33da\u33db\uff32\uff52]', 
    'S': '[Ss\u015a-\u0161\u017f\u0218\u0219\u02e2\u1e60-\u1e63\u20a8\u2101\u2120\u24ae\u24c8\u24e2\u33a7\u33a8\u33ae-\u33b3\u33db\u33dc\ufb06\uff33\uff53]', 
    'T': '[Tt\u0162-\u0165\u021a\u021b\u1d40\u1d57\u1e6a-\u1e71\u1e97\u2121\u2122\u24af\u24c9\u24e3\u3250\u32cf\u3394\u33cf\ufb05\ufb06\uff34\uff54]', 
    'U': '[Uu\xd9-\xdc\xf9-\xfc\u0168-\u0173\u01af\u01b0\u01d3\u01d4\u0214-\u0217\u1d41\u1d58\u1d64\u1e72-\u1e77\u1ee4-\u1ee7\u2106\u24b0\u24ca\u24e4\u3373\u337a\uff35\uff55]', 
    'V': '[Vv\u1d5b\u1d65\u1e7c-\u1e7f\u2163-\u2167\u2173-\u2177\u24b1\u24cb\u24e5\u2c7d\u32ce\u3375\u33b4-\u33b9\u33dc\u33de\uff36\uff56]', 
    'W': '[Ww\u0174\u0175\u02b7\u1d42\u1e80-\u1e89\u1e98\u24b2\u24cc\u24e6\u33ba-\u33bf\u33dd\uff37\uff57]', 
    'X': '[Xx\u02e3\u1e8a-\u1e8d\u2093\u213b\u2168-\u216b\u2178-\u217b\u24b3\u24cd\u24e7\u33d3\uff38\uff58]', 
    'Y': '[Yy\xdd\xfd\xff\u0176-\u0178\u0232\u0233\u02b8\u1e8e\u1e8f\u1e99\u1ef2-\u1ef9\u24b4\u24ce\u24e8\u33c9\uff39\uff59]', 
    'Z': '[Zz\u0179-\u017e\u01f1-\u01f3\u1dbb\u1e90-\u1e95\u2124\u2128\u24b5\u24cf\u24e9\u3390-\u3394\uff3a\uff5a]' 
}; 

String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}

function getNodeAttributeValue(node, name)
{
	var result = null;
	
	if ( (node) && (name) )
	{
		var found = false;
		
		var attributes = node.attributes;
		for(var i=0;i<attributes.length && !found;i++)
		{
			var attribute = attributes[i];
			if (attribute.nodeName == name)
			{
				found = true;
				result = attribute.nodeValue;
			}
		}
	}
	
	return result;
}

function getChildNode(parent, name)
{
	var result = null;
	
	if ( (parent) && (name) )
	{
		var found = false;
		
		var childNodes = parent.childNodes;
		for(var i=0;i<childNodes.length && !found;i++)
		{
			var childNode = childNodes[i];
			if ( (childNode.nodeType == 1) && (childNode.nodeName == name) )
			{
				// nodeType == 1, ELEMENT_NODE 
				found = true;
				result = childNode;
			}
		}
	}
	
	return result;
}

function getChildNodeValue(parent, name)
{
	var result = null;
	
	var childNode = getChildNode(parent, name);
	if (childNode)
	{
		result = childNode.firstChild.nodeValue;
	}
	
	return result;
}

function searchResultElement(title, text, link, image, alt, poblacion)
{
	this.title = title;
	this.text = text;
	this.link = link;
	this.image = image;
	this.alt = alt;
	this.poblacion = poblacion
	
	return this;
}
function preloadXML(urlXml)
{
	if(xmlResultSearchAsYouType==null){ 
		var ajaxCallSayt = new AjaxCall('GET', false); 
		var completeCallSayt = new CompleteCall(loadXmlSearchAsYouType); 
		ajaxCallSayt.execute(urlXml, completeCallSayt, true); 
	} 
}

function performSearchAsYouType(fieldName, resultClose, resultPopup, urlXml, tituloEventos, tituloDirector, piePre, piePost, maxResults, maxDirectorResults, textoNoResults1, textoNoResults2, pieNoResults, imgDefault)
{
	var field = document.getElementById(fieldName);
	if (field)
	{
		if(xmlResultSearchAsYouType==null){
			var ajaxCallSayt = new AjaxCall('GET', false);
			var completeCallSayt = new CompleteCall(loadXmlSearchAsYouType);
			ajaxCallSayt.execute(urlXml, completeCallSayt, true);
		}
		writeSearchAsYouTypeResults(resultClose, resultPopup, field, tituloEventos, tituloDirector, piePre, piePost, maxResults, maxDirectorResults, textoNoResults1, textoNoResults2, pieNoResults, imgDefault);		
	}
}
function loadXmlSearchAsYouType(response)
{
	xmlResultSearchAsYouType = response;
}
function writeSearchAsYouTypeResults(resultClose, resultNode, field, tituloEventos, tituloDirector, piePre, piePost, maxResults, maxDirectorResults, textoNoResults1, textoNoResults2, pieNoResults, imgDefault)
{
	var response = xmlResultSearchAsYouType;
	var html = '';
	
	var results = new Array();
	
	var numResults = 0;
	
	var query = field.value.trim();
	if (query.length > 0)
	{		
		var rexp = make_pattern(query);
		
		var espectaculos = response;
		
		if (espectaculos)
		{
			var espectaculoList = espectaculos.getElementsByTagName('e');
			if (espectaculoList)
			{
				for(var i=0;i<espectaculoList.length && numResults<maxResults;i++)
				{
					var espectaculo = espectaculoList[i];
					
					if (numResults < maxResults)
					{
						var titulo = getChildNodeValue(espectaculo, 't');
						
						if (titulo.match(rexp))
						{
							var texto = getChildNodeValue(espectaculo, 'te');
							var link = getNodeAttributeValue(espectaculo, 'l');
							var imagen = getNodeAttributeValue(espectaculo, 'i');
							var alt = titulo;
							var poblacion = getNodeAttributeValue(espectaculo, 'p');
							
							var resultElement = new searchResultElement(titulo, texto, link, imagen, alt, poblacion);
							results[results.length] = resultElement;	
							
							numResults++;
						}
					}					
				}				
			}
		}

		var textoPie = pieNoResults;
		
		html += '<h3>' + tituloEventos + '</h3>\n';
		if (results.length > 0)
		{
			html += '<ul>\n';
			
			for(var i=0;i<results.length;i++)
			{
				html += '<li><a href="' + results[i].link + '">';
				if (results[i].image != '')
				{
					html += '<img src="' + results[i].image + '" alt="' + results[i].alt + '" />';
				}else{
					html += '<img src="' + imgDefault +'" alt="image" />';
				}
				html += '<span>' + results[i].title;
				if (results[i].poblacion != '')
				{
					html += ' - ' + results[i].poblacion;
				}
				html += '</span>' + results[i].text + '</a></li>\n';
			}
			
			html += '</ul>\n';
			
			textoPie = '';
			if ((piePre) && (piePre.length > 0))
			{
				textoPie += piePre + ' ';
			}
			
			textoPie += '"' + query + '"';
			
			if ((piePost) && (piePost.length > 0))
			{
				textoPie += ' ' + piePost;
			}
		}
		else
		{
			html += '<p class="noresults"><span>' + textoNoResults1 + ' "' + query + '"</span>' + textoNoResults2 + '</p>\n'
		}
		
		html += '<div class="pie"><a href="#" onclick="javascript:submitBuscar();return false;"><span>' + textoPie + '</span></a></div>\n';
	}	
			
	var div = document.getElementById(resultNode);
	if (div)
	{ 
		div.innerHTML = html;
		
		if (html == '')
		{
			div.style.display = 'none';
			
			var close = document.getElementById(resultClose);
			if (close)
			{
				close.style.display = 'none';
			}			
		}
		else
		{
			div.style.display = 'block';
			
			var close = document.getElementById(resultClose);
			if (close)
			{
				close.style.display = 'inline';
			}			
		}
	}
	
	//Urchin
	urchinTracker("/nav/searchAsYouType.html?search="+query);
}

function closeSearchAsYouTypeResults(resultClose, resultNode, searchField) 
{
	var close = document.getElementById(resultClose);
	if (close)
	{
		close.style.display = 'none';
	}
	
	var div = document.getElementById(resultNode);
	if (div)
	{
		div.innerHTML = '';
		
		div.style.display = 'none';
	}
	
	var field = document.getElementById(searchField);
	if (field)
	{
		field.value = '';
		field.onblur();
	}
} 

