var orionUrl = new Orion().requestHandler;
function orionGetEvents(type, scale, countyno, selectcolumns, minx, miny, maxx, maxy, responseFunc) {
    asynchronousGet("orion-getevents.xml", 
		   function(xml) {
			xml = xml.replace("#type", type, "g");
			xml = xml.replace("#scale", scale, "g");
			xml = xml.replace("#countyno", countyno, "g");
			xml = xml.replace("#selectcolumns", selectcolumns, "g");
			xml = xml.replace("#minx", minx, "g");
			xml = xml.replace("#miny", miny, "g");
			xml = xml.replace("#maxx", maxx, "g");
			xml = xml.replace("#maxy", maxy, "g");
			responseFunc(xml);
		   });

}

function orionGetStandardData(plugin, table, selectcolumns, filter, orderby, responseFunc) {    
    asynchronousGet("orion-getstandarddata.xml", 
		   function(xml) {		   
			xml = xml.replace("#plugin", plugin, "g");
		    xml = xml.replace("#table", table, "g");
		    xml = xml.replace("#selectcolumns", selectcolumns, "g");
			xml = xml.replace("#filter", filter, "g");
			xml = xml.replace("#orderby", orderby, "g");
			
			responseFunc(xml);
		   });

}


function orionGetGenericWKT(table, cols, where, responseFunc) {    
    asynchronousGet("orion-genericWKT.xml", 
		   function(xml) {		   
		   xml = xml.replace("#table", table, "g");
		   xml = xml.replace("#cols", cols, "g");
			xml = xml.replace("#where", where, "g");
			responseFunc(xml);
		   });

}

function asynchronousGet(url, responseFunc) {
    var oXMLHttpRequest;
		
    if (window.XMLHttpRequest) {
	oXMLHttpRequest = new XMLHttpRequest();
	if(oXMLHttpRequest.overrideMimeType) {
	    oXMLHttpRequest.overrideMimeType('text/xml');
	}
    } else if (window.ActiveXObject) {
	try {
	    oXMLHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
	} catch(e) {
	    oXMLHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
	}
    }

    oXMLHttpRequest.open("GET", url, true);
    oXMLHttpRequest.onreadystatechange = function() { 
	if (oXMLHttpRequest.readyState == 4 && oXMLHttpRequest.status == 200) {
	    responseFunc(oXMLHttpRequest.responseText);
	} 
    } 
    oXMLHttpRequest.setRequestHeader ("Content-Type", "text/xml");
    oXMLHttpRequest.send(null);
}

function asynchronousPost(url, xml, responseFunc) {
    var oXMLHttpRequest;
		
    if (window.XMLHttpRequest) {
	oXMLHttpRequest = new XMLHttpRequest();
	if(oXMLHttpRequest.overrideMimeType) {
	    oXMLHttpRequest.overrideMimeType('text/xml');
	}
    } else if (window.ActiveXObject) {
	try {
	    oXMLHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
	} catch(e) {
	    oXMLHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
	}
    }

    oXMLHttpRequest.open("POST", url, true);
    oXMLHttpRequest.onreadystatechange = function() { 
	if (oXMLHttpRequest.readyState == 4 && oXMLHttpRequest.status == 200) {
	    responseFunc(oXMLHttpRequest.responseText);
	} 
    } 
    oXMLHttpRequest.setRequestHeader ("Content-Type", "text/xml");
    oXMLHttpRequest.send(xml);
}

function loadXml(xml) {
    var xmlDoc;
    
    if (window.ActiveXObject) {
	// Microsoft Internet Explorer
	xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
	xmlDoc.async = false;
	xmlDoc.loadXML(xml);
    } else {
	// All other browsers
	var parser = new DOMParser();
	xmlDoc = parser.parseFromString(xml, "text/xml");
    }
    return xmlDoc;
}

//added by Ingemar Nilsson
function clearNavigation(parent) {
    if (parent != null){
        parent.innerHTML = '';        
    }
}

function createNavigation(parent, element, x, y, text, scale) {
    if (parent != null) {
	var li = document.createElement(element);
	li.innerHTML = text;
	parent.appendChild(li);	
	scale = scale ? scale : "25000";	
	// One for IE and one for the rest
	li.setAttribute("className", "spatialLink");
	li.setAttribute("class", "spatialLink");
	//li.onclick = new Function("evt", "map.setMapCenter(" + y + "," + x + ");"); 
	li.onclick = new Function("evt", "map.setArea(" + y + "," + x + "," + scale + ");"); 
	li.title = "Klicka för centrera kartan över det här objektet";
    }
}




function createGeneric2(plugin, table, selectcolumns, filter, orderby, rowName, parseCoordFunc, parseDescrFunc, layerId, parent, element, updatingText, zoomToScale, zoomToLayer) {		
	var lyr = map.getObjectLayerById(layerId);	
	
	if (lyr){
		clearNavigation(parent);
		
		 if (updatingText)
			updatingText.style.display = 'inline';
			
		lyr.removeGeoObjects();
		orionGetStandardData(
		 plugin,
		 table,
		 selectcolumns,
		 filter,
		 orderby,
		 function(message) {
		     asynchronousPost
			(orionUrl, message,
			 function(response) {
			     var xmlDoc = loadXml(response);
			     if (!xmlDoc.documentElement)
			         return;
			     var rows = xmlDoc.documentElement.getElementsByTagName(rowName);
			     for (i = 0; i < rows.length; i++) {
			         var row = rows.item(i);
			         var coord = parseCoordFunc(row);
			         var descr = parseDescrFunc(row);
			         if (!(isNaN(coord.ew) || isNaN(coord.ns))) {
			             var id = layerId + i;
			             var geoObj = map.createGeoObject(coord.ew, coord.ns, id, layerId, "point", null);
			             setCustomGeoObjectInfoboxTimeout(geoObj);
			             if (descr.tooltip)
			                 geoObj.setAttribute("info", descr.tooltip);
			             if (descr.imageUrl)
			                 geoObj.setAttribute("image", descr.imageUrl);
			             var d = new Date();
			             d.setISO8601(getElementValue(row, "StartTime"));
			             if (d > new Date())
			                 geoObj.setAttribute("started", "false");
			             else
			                 geoObj.setAttribute("started", "true");
			             if (descr[RP_SELECTABLE_OBJ]) {
			                 geoObj.setAttribute(RP_SELECTABLE_NAME, RP_SELECTABLE_VALUE);
			                 geoObj[RP_SELECTABLE_NAME] = RP_SELECTABLE_VALUE;
			                 geoObj[RP_SELECTABLE_OBJ] = descr[RP_SELECTABLE_OBJ];
			             }
			             //geoObj.activate();								
			             createNavigation(parent, element, coord.ns, coord.ew, descr.name, zoomToScale);
			         }
			     }

			     if (zoomToLayer)
			         map.zoomToObjects(map.getLayerById(layerId).getGeoObjectArray(), 100);

			     //TODO: must refresh like this to preserve layer ordering... 
			     var arr = map.getObjectLayers();
			     var len = arr.length;
			     for (var i = len - 1; i >= 0; i--) {
			         arr[i].draw();
			     }
			     //lyr.draw(); 
			     //lyr.refresh(true);
			     //lyr.refresh(false);				
			     //map.refreshObjects();
			     //map.refresh();				
			     if (updatingText)
			         updatingText.style.display = 'none';

			 }
			 );
		 });
		 
	    
	}
	
}


function replaceStr(str, oldStr, newStr){
	if (!str){
		return str;
	}else{
		while(str.indexOf(oldStr) >= 0)
			str = str.replace(oldStr, newStr);
		return str;
	}
}

function getElementValue(item, name, allowMarkup) {
    var result = '';
    try {
	result = item.getElementsByTagName(name).item(0).childNodes[0].data;
	if (result && !allowMarkup){
	    result = htmlMarkup2Text(result);
	}
    } catch (e) {
	// Keep going.  We just return empty string
    }
    return result;
}

function orionLineBreakText(sIn){    
    if (isIe6 || isIe7){
        return lineBreakText(sIn, 35, 45, '<br />'); //in map.js
        //return sIn;
    }else{
        return sIn;
    }
}

