
/**
 * @requires core/Control.js
 */

/**
 * Class: OpenLayers.Control.Info
 *
 * Inherits from:
 *  - <OpenLayers.Control>
 */
eGV.Control.InfoCustom = OpenLayers.Class(eGV.Control.Info,{
      
    /**
    * APIProperty: mapTab
    * {Integer} index for tab showing the map, used for center element in map whent map tab is not active
    */
    mapTab: null,
    

		drawResults: function(XHR,index, connIndex){
			
			var connection = this.map.connections[connIndex];
			var liString = "liInfoStructure_"+index.toString();
			var liElement = document.getElementById(liString);
			
			
			//var data = eval('(' + XHR.responseText + ')');
			var olJSON = new OpenLayers.Format.JSON();		    
			response = XHR.responseText.replace(/\\\'/g,"'");
			response = response.replace(new RegExp( "\\n", "g" ), "");
			response = response.replace(new RegExp( "\\r", "g" ), "<br />")
			var data = olJSON.read(response);
	
	        if (data==null) 
			{
					liElement.parentNode.removeChild(liElement);
					this.nothingFound[index]=0;		
	        } 
			else 
			{
				  	var divMain = document.createElement("div");
		            divMain.className = "egvControlInfoDiv";
					
					
					if (data.length == 0){			
						liElement.parentNode.removeChild(liElement);						
						this.nothingFound[index]=0;	
						this.checkNothingFound();		
						return 0;			
					}else{
						this.nothingFound[index]=1;	
					}
					
											
					//Main list			
					tableInfo = document.createElement("table");
			        tableInfo.width = "100%";
		            tableInfo.cellpadding = "0";
		            tableInfo.cellspacing = "0";
		            tableInfo.className = "egvControlInfoDiv";
		            
					tbodyInfo = document.createElement("tbody");

                    var divInfoTitle;

					// iterating thru layers requested
					for (var i = 0, len = data.length; i < len; i++) {
		
							var nameLayer = (data[i].layer!="") ? data[i].layer : connection.layers[0].name;
							var layer = connection.getLayerByName(nameLayer);
							trInfo = document.createElement("tr");
							tdInfoTitle = document.createElement("td");
							tdInfoTitle.colSpan = "2";
							divInfoTitle = document.createElement("div");
							divInfoTitle.className = "egvControlInfoDivLayerTitle";
							
							var txtInfoTitle = data[i].layer;
							
							if(layer!=null)
							{
								txtInfoTitle=(layer.title!="") ? layer.title : data[i].layer;
							}
							divInfoTitle.appendChild(document.createTextNode(txtInfoTitle));
							tdInfoTitle.appendChild(divInfoTitle);
							trInfo.appendChild(tdInfoTitle);
							tbodyInfo.appendChild(trInfo);

							if (data[i].type == "html") {
						 		trInfoHTML = document.createElement("tr");
								tdInfoHTML = document.createElement("td");
								tdInfoHTML.colspan = 2;
								divInfoHTML = document.createElement("div");
								divInfoHTML.className = "egvControlInfoDivLayerHTML";
								var htmlText = data[i].fields[0].replace(/<a/g,"<a target=blank");
								divInfoHTML.innerHTML = htmlText;
								tdInfoHTML.appendChild(divInfoHTML);
								trInfoHTML.appendChild(tdInfoHTML);
								tbodyInfo.appendChild(trInfoHTML);
							}
							else {
							//info fields
							var field;
							var visible;
							var islink;
							
							for (var j = 0, dataLen = data[i].fields.length; j < dataLen; j++) {
							
								field = null;
								visible = true;
								islink = false;
								
								if (layer.fieldList != null) {
									field = layer.fieldList.getFieldByName(data[i].fields[j].name);
									if (field != null) {
										visible = field.visible;
									}
								}
								if (this.viewall == false && field == null) 
									visible = false;
								if (field != null) {
									if (data[i].fields[j].value == "" && field.ommitEmpty == true) 
										visible = false;
								}
								if (visible == true) {
									trInfoField = document.createElement("tr");
									//trInfoField.vAlign = "left";
									
									tdInfoFieldTitle = document.createElement("td");
									divInfoFieldTitle = document.createElement("div");
									divInfoFieldTitle.className = "egvControlInfoDivLayerFieldTitle";
									txtInfoFieldTitle = (field != null) ? field.alias : data[i].fields[j].name;
									divInfoFieldTitle.appendChild(document.createTextNode(txtInfoFieldTitle));
									// quan les layers tinguin fieldlist s'han de canviar aquestes dues l?nies.
									
									
									tdInfoFieldTitle.appendChild(divInfoFieldTitle);
									
									tdInfoFieldValue = document.createElement("td");
									divInfoFieldValue = document.createElement("div");
									divInfoFieldValue.className = "egvControlInfoDivLayerFieldValue";
									
									
									if(field.wrapper)
									{	
										aInfoFieldLink = document.createElement("a");
										aInfoFieldLink.className = "egvControlInfoLink";									
										aInfoFieldLink.href = "javascript:"+field.wrapper.replace("%s","\""+data[i].fields[j].value+"\"");										
										var txtLinkCaption = (field.linkCaption) ? field.linkCaption : eGV.Lang.translate("info_seelink") + field.alias.toLowerCase();
										aInfoLinkCaption = document.createTextNode(txtLinkCaption);
										aInfoFieldLink.appendChild(aInfoLinkCaption);
										divInfoFieldValue.appendChild(aInfoFieldLink);
									}
									else if(((String(data[i].fields[j].value).toLowerCase().indexOf("http://"))==0)||(String(data[i].fields[j].value).toLowerCase().indexOf("www")==0)||(String(data[i].fields[j].value).toLowerCase().indexOf("https://")==0))
									{
										
										aInfoFieldLink = document.createElement("a");
										aInfoFieldLink.className = "egvControlInfoLink";
										if ((data[i].fields[j].value.toLowerCase().indexOf("www")==0))
										{
											aInfoFieldLink.href = "http://"+data[i].fields[j].value;
				
										}
										else
										{
											aInfoFieldLink.href = data[i].fields[j].value;
										}

										
										aInfoFieldLink.target = (field.target) ? field.target : "_blank";
										var txtLinkCaption = (field.linkCaption) ? field.linkCaption : eGV.Lang.translate("info_seelink") + field.alias.toLowerCase();
										aInfoLinkCaption = document.createTextNode(txtLinkCaption);
										aInfoFieldLink.appendChild(aInfoLinkCaption);
										divInfoFieldValue.appendChild(aInfoFieldLink);
										
									}
									else 
									{
										divInfoFieldValue.appendChild(document.createTextNode(data[i].fields[j].value));
									}
		
									tdInfoFieldValue.appendChild(divInfoFieldValue);
									
									trInfoField.appendChild(tdInfoFieldTitle);
									trInfoField.appendChild(tdInfoFieldValue);
									
									tbodyInfo.appendChild(trInfoField);
								}
								
							}
							var extent = data[i].extent.split(',');
							if (extent.length == 4)
							{
								trInfoCenter = document.createElement("tr");
								//trInfoCenter.valign = "bottom";						
								tdInfoCenter = document.createElement("td");
								tdInfoCenter.colSpan = 2;
								divInfoCenter = document.createElement("div");
								divInfoCenter.className = "egvControlInfoDivCenterInMap";
								var a  = document.createElement("a");
								
								var textNode = document.createTextNode(eGV.Lang.translate("info_centerelement"));
								a.appendChild(textNode);
								divInfoCenter.appendChild(a);
								//divInfoCenter.innerHTML = "<a href='javascript:void(0);' onclick = 'eGV.maps[0].zoomToExtent("+olExtent.toBBOX()+")'>"+eGV.Lang.translate("info_centerelement")+"</a>";
								tdInfoCenter.appendChild(divInfoCenter);
								trInfoCenter.appendChild(tdInfoCenter);
								tbodyInfo.appendChild(trInfoCenter);
								
								//register events
								OpenLayers.Event.observe(divInfoCenter, "click", OpenLayers.Function.bindAsEventListener(this.centerMap,{"extent":extent, "map":this.map, "mapTab":this.mapTab}) );
							}
						}
						tableInfo.appendChild(tbodyInfo);
						
						//sets news values	
						divMain.appendChild(tableInfo);
						liElement.removeChild(liElement.firstChild);
						liElement.className = "egvControlInfoLoadedLi";
						liElement.appendChild(divMain);
					}		
		           
		        }
	          
			this.checkNothingFound();		
		},
		centerMap: function(e)
		{
			if (this.mapTab != null){
				showTab(this.mapTab);
			}
			var olExtent = new OpenLayers.Bounds(parseInt(this.extent[0]),parseInt(this.extent[1]),parseInt(this.extent[2]),parseInt(this.extent[3]));
			this.map.zoomToExtent(olExtent);
			
		},
	
		
    CLASS_NAME: "eGV.Control.Info"
});
