/**
 * The routing request performs a request after receiving both from and to coordinates via ajax calls.
 */
naviki.main.RoutingRequest = function(config) {

	this.routingTargetPage = config['routingTargetPage'];
	this.layout            = config['layout'];
	this.targetUrl         = config['targetUrl'];
	this.uid			   = config['uid'];
	this.cid     		   = config['cid'];
	this.inputfieldsDivId  = config['inputfields'];
	this.deletelinksDivId  = config['deleteLinks'];
	this.obj               = config['obj'];
	this.containerDivId    = config['container'];
	this.optionsDivId      = config['options'];
	this.radioOptions      = config['radioOptions'];
	this.checkboxOptions   = config['checkboxOptions'];
	this.spinnerDivId      = config['spinner'];
	this.lpUID             = config['lpUID'];
	this.RoutingRequest    = this;
	this.button            = this.setButton();
	this.loadedKml         = null;
	this.dialog;
	this.maxEntry;

	if(parseInt(config['visible'])==0){
		this.hideRoutingRequest();
	}
	
	if(naviki.Util.routingOptions == 0){
		document.getElementsByName(this.checkboxOptions)[0].style.display = "none";
	}
	
	// check, if we come frome startpage or 'hamburg.de'
	var from    = "";
	var to      = "";
	var type    = "";
	var option  = "";
	var request = false;
	
	if (config['request'] == 1) {
		from    = config['from'];
		to      = config['to'];
	}else{
		var search = window.location.hash;
		search = search.substr(1);
		search = search.split("&");
		
		for(var i=0;i<search.length;i++){
			if(search[i].indexOf("from=")>=0){
				from = unescape(search[0].substr(search[0].indexOf("from=")+5));
			}else if(search[i].indexOf("to=")>=0){
				to = unescape(search[1].substr(search[1].indexOf("to=")+3));
			}else if(search[i].indexOf("type=")>=0){
				type = unescape(search[2].substr(search[2].indexOf("type=")+5));
			}else if(search[i].indexOf("option=")>=0){
				option = unescape(search[3].substr(search[3].indexOf("option=")+7));
			}
		}
		
		window.location.hash = "";
	}
	
	if(from!="" && to!=""){
		request = true;
	}
	
	switch(parseInt(this.layout)){
		case 1:
			this.maxEntry = 19;
			this.addEntry(from,"");
			this.addEntry(to,"");
			break;
		default:
			this.maxEntry = 2;
			this.addEntryStandardSide(from,"");
			this.addEntryStandardSide(to,"");
			break;
	}
	
	if(request==true){

		if(this.routingTargetPage != ""){
			this.requestToNewPage();
		}
		
		var radiobuttons = document.getElementsByName(this.radioOptions);
		for(var i=0; i<radiobuttons.length; i++){
			if(radiobuttons[i].value == type){
				radiobuttons[i].checked = true;
			}
		}				
			
		var checkbox = document.getElementsByName(this.checkboxOptions)[0];
		if(option=="true"){
			checkbox.checked=true;
		}else{
			checkbox.checked=false;
		}

		this.RoutingRequest  = this;
		this.request();				
	}

	eventMgr.moveRoutingMarker.subscribe(this.moveRoutingMarker, this);
	eventMgr.updateRoutingInputs.subscribe(this.updateRoutingInputs, this);
	eventMgr.clearRoutingRequest.subscribe(this.clearRoutingRequest,this);
	eventMgr.showRoutingRequest.subscribe(this.showRoutingRequest, this);
};


naviki.main.RoutingRequest.prototype.showRoutingRequest = function(type, e, me){
	var content = document.getElementById("nui-ce-id-"+me.uid);
	YAHOO.util.Dom.setStyle(content,"display","");		
};

naviki.main.RoutingRequest.prototype.hideRoutingRequest = function(){
	var content = document.getElementById("nui-ce-id-"+this.uid);
	YAHOO.util.Dom.setStyle(content,"display","none");	
};

naviki.main.RoutingRequest.prototype.clearRoutingRequest = function(type, e, me){
	if(me.loadedKml!=null){
		eventMgr.removeWayOverlay.fire(me.loadedKml);
	}

	var inputfieldsDiv = document.getElementById(me.inputfieldsDivId);
	var inputfields    = inputfieldsDiv.getElementsByTagName("input");
	
	for(var i=0;i<inputfields.length;i++){
		if(i<2){
			me.clearcoord(i);
			me.clearDst(i);
		}else{
			me.deleteDst(i);
		}
	}
};

naviki.main.RoutingRequest.prototype.addEntryStandardSide = function(value, coord){
		
	var template       = naviki.Template.getSubpart("###TEMPLATE_ROUTING_REQUEST_ENTRY_STANDARDSIDE###");
	var inputfieldsDiv = document.getElementById(this.inputfieldsDivId);
	var pos            = inputfieldsDiv.childNodes.length;
	var sa             = new Object();
	var input;
	
	if(pos<this.maxEntry){	

		sa['###DESTINATION_INPUT_NAME###']        = this.inputfieldsDivId + "[" + pos + "][dd][input]";
		sa['###DESTINATION_INPUT_VALUE###']       = value;
		sa['###DESTINATION_INPUT_TABINDEX###']    = pos+1;
		sa['###DESTINATION_INPUT_ONKEYUP###']     = "javascript:"+this.obj+".checkenter(event);"+this.obj+".clearcoord("+pos+");";
		sa['###DESTINATION_COORDINATES_NAME###']  = this.inputfieldsDivId + "[" + pos + "][dd][coord]";
		sa['###DESTINATION_COORDINATES_VALUE###'] = coord;	
		sa['###DRAG_OBJ_LABEL_ID###']             = this.inputfieldsDivId + "[" + pos + "][dd][label]";
	
		input           = document.createElement("div");
		input.innerHTML = naviki.Template.substituteMarkerArray(template, sa);
		inputfieldsDiv.appendChild(input);	
		
		this.updateLabels();
		this.updateContextMenu();
	}
};

naviki.main.RoutingRequest.prototype.addEntry = function(value, coord){

	var inputfieldsDiv = document.getElementById(this.inputfieldsDivId);
	var deletelinksDiv = document.getElementById(this.deletelinksDivId);
	var pos            = inputfieldsDiv.childNodes.length;
	var template       = naviki.Template.getSubpart("###TEMPLATE_ROUTING_REQUEST_ENTRY###");
	var sa             = new Object();
	var dd;	
	var element;
	var offset;

	//check id
	element = document.getElementById(this.inputfieldsDivId + "[" + pos + "][dd]");
	if(element!=null){
		do{
			pos++;
			element = document.getElementById(this.inputfieldsDivId + "[" + pos + "][dd]");
		}while(element!=null);		
	}
	
	offset = 2850 + ((pos+1)*30);
	
	if((pos)<this.maxEntry){	
		
		sa['###OFFSET###']                        = offset;
		sa['###DESTINATION_INPUT_NAME###']        = this.inputfieldsDivId + "[" + pos + "][dd][input]";
		sa['###DESTINATION_INPUT_VALUE###']       = value;
		sa['###DESTINATION_INPUT_TABINDEX###']    = pos;
		sa['###DESTINATION_INPUT_ONKEYUP###']     = "javascript:"+this.obj+".checkenter(event);"+this.obj+".clearcoord("+pos+");";
		sa['###DESTINATION_COORDINATES_NAME###']  = this.inputfieldsDivId + "[" + pos + "][dd][coord]";
		sa['###DESTINATION_COORDINATES_VALUE###'] = coord;
		sa['###DRAG_OBJ_HANDLE_ID###']            = this.inputfieldsDivId + "[" + pos + "][dd][handle]";
		sa['###DRAG_OBJ_LABEL_ID###']             = this.inputfieldsDivId + "[" + pos + "][dd][label]";
		sa['###DRAG_OBJ_ID###']                   = this.inputfieldsDivId + "[" + pos + "][dd][obj]";
		
		var input       = document.createElement("div");
		input.id        = this.inputfieldsDivId + "[" + pos + "][dd]";
		input.innerHTML = naviki.Template.substituteMarkerArray(template, sa);
		inputfieldsDiv.appendChild(input);
		
		dd = new naviki.main.RoutingRequest.dd(this.inputfieldsDivId + "[" + pos + "][dd]");
		dd.setHandleElId(this.inputfieldsDivId + "[" + pos + "][dd][handle]");
		
		var deletelink = document.createElement("div");
		template       = naviki.Template.getSubpart("###TEMPLATE_ROUTING_REQUEST_DELETE###");
		
		deletelink.innerHTML = naviki.Template.substituteMarkerArray(template, sa);
		deletelinksDiv.appendChild(deletelink);
		
		YAHOO.util.Dom.setStyle(input, "height", "40px");
		YAHOO.util.Dom.setStyle(deletelink, "height", "19px");
		YAHOO.util.Dom.setStyle(deletelink, "margin-top", "21px");
		YAHOO.util.Dom.setStyle(deletelink, "margin-left", "10px");
		
		this.updateLabels();
		this.updateDeleteLinks();
		this.updateContextMenu();

	}else{
		this.showDialog(naviki.Lang.getLL('routing_request_attention'),naviki.Lang.getLL('routing_request_maximum_number_is_reached'));
	}
};

naviki.main.RoutingRequest.prototype.updateHandleImg = function(){

	var inputfields = document.getElementById(this.inputfieldsDivId);
	var handles = YAHOO.util.Dom.getElementsByClassName("tx-naviki-pi-routing-request-dd-handle","div",inputfields);
	var index   = 1;
	
	for(var i=0;i<handles.length;i++){
		offset = 2850 + ((index)*30);
		bg     = "url('/typo3conf/ext/naviki/fileadmin/img/sprite.gif') no-repeat scroll 0 -"+offset+"px transparent";
		YAHOO.util.Dom.setStyle(handles[i],"background",bg);
		index++;
	}
};

naviki.main.RoutingRequest.prototype.updateLabels = function(){

	var inputfieldsDiv = document.getElementById(this.inputfieldsDivId);
	var label          = inputfieldsDiv.getElementsByTagName("label");

	for(var i=0;i<label.length;i++){
		if(i==0){
			label[i].innerHTML = naviki.Lang.getLL('start');
		}
		else if(i<(label.length-1)){
			label[i].innerHTML = "VIA";
		}
		else{
			label[i].innerHTML = naviki.Lang.getLL('destination');
		}
	}
};

naviki.main.RoutingRequest.prototype.updateDeleteLinks = function(){
	
	var deletelinksDiv = document.getElementById(this.deletelinksDivId);
	var anker          = deletelinksDiv.getElementsByTagName("a");	

	for(var i=0;i<anker.length;i++){
		if(anker.length<3){
			deletelinksDiv.style.display = "none";
			break;
		}else{
			deletelinksDiv.style.display = "";
			anker[i].href = "javascript:"+this.obj+".deleteDst("+i+");";
		}
	}
};

naviki.main.RoutingRequest.prototype.updateTabindex = function(){

	var inputfieldsDiv = document.getElementById(this.inputfieldsDivId);
	var inputfields    = inputfieldsDiv.getElementsByTagName("input");
	var index          = 1;
	
	for(var i=0;i<inputfields.length;i++){
		if(inputfields[i].type != "hidden"){
			YAHOO.util.Dom.setAttribute(inputfields[i] , "tabindex" , index); 
			index++;
		}
	}
};

naviki.main.RoutingRequest.prototype.updateMarker = function(){

	var inputfieldsDiv = document.getElementById(this.inputfieldsDivId);
	var inputfields    = inputfieldsDiv.getElementsByTagName("input");
	var coord          = "";
	
	for(var i=0;i<inputfields.length;i++){
		if(inputfields[i].type == "hidden"){
			if(inputfields[i].value!=""){
				coord += inputfields[i].value + ";";
			}else{
				coord += "null;";
			}
		}
	}
	
	if(coord.length>0){
		coord = coord.substr(0,coord.length-1);
	}

	eventMgr.addRoutingMarker.fire(coord);
};

naviki.main.RoutingRequest.prototype.updateContextMenu = function(){
	
	var inputfieldsDiv = document.getElementById(this.inputfieldsDivId);
	var tmp            = inputfieldsDiv.getElementsByTagName("input");
	var inputfields    = new Array();
	var links          = "";
	
	for(var i=0;i<tmp.length;i++){
		if(tmp[i].type != "hidden"){
			inputfields.push(tmp[i]);
		}
	}
	
	if(inputfields.length>=2){

		if(inputfields[0].value!="" && inputfields[1].value==""){
			links = "<a href='javascript:"+this.obj+".addDestination(1,###LAT###,###LNG###)'><div>&nbsp;"+ naviki.Lang.getLL('addRouteTo2') +"&nbsp;</div></a>";
		}
		else if(inputfields[0].value=="" && inputfields[1].value!=""){
			links = "<a href='javascript:"+this.obj+".addDestination(0,###LAT###,###LNG###)'><div>&nbsp;"+ naviki.Lang.getLL('addRouteFrom') +"&nbsp;</div></a>";
		}
		else if(inputfields[0].value!="" && inputfields[1].value!=""){
			if(this.maxEntry>2){
				links = "<a href='javascript:"+this.obj+".addDestination(-1,###LAT###,###LNG###)' ><div>&nbsp;"+ naviki.Lang.getLL('addRouteTo1') +"&nbsp;</div></a>";
			}else{
				links = "";
			}
		}		
		else{
			links = "<a href='javascript:"+this.obj+".addDestination(0,###LAT###,###LNG###)'><div>&nbsp;"+ naviki.Lang.getLL('addRouteFrom') +"&nbsp;</div></a>" +
					"<a href='javascript:"+this.obj+".addDestination(1,###LAT###,###LNG###)'><div>&nbsp;"+ naviki.Lang.getLL('addRouteTo2') +"&nbsp;</div></a>";		
		}
		
		eventMgr.updateContextMenu.fire("RoutingRequest",links);	
	}
};

naviki.main.RoutingRequest.prototype.clearcoord = function(pos){

	var inputfieldsDiv;
	var inputfields;
	
	inputfieldsDiv = document.getElementById(this.inputfieldsDivId);
	inputfields    = inputfieldsDiv.childNodes[pos].getElementsByTagName("input");
	
	if(inputfields[1].value!=""){
		inputfields[1].value = "";
		this.updateMarker();
	}

	if(inputfields[0].value==""){
		this.updateContextMenu();
	}	
};

naviki.main.RoutingRequest.prototype.clearDst = function(pos){
	
	var inputfieldsDiv = document.getElementById(this.inputfieldsDivId);
	var inputfields    = inputfieldsDiv.childNodes[pos].getElementsByTagName("input");
	
	for(var i=0;i<inputfields.length;i++){
		inputfields[i].value = "";
	}
	
	this.updateMarker();
	this.updateContextMenu();
};

naviki.main.RoutingRequest.prototype.deleteDst = function(pos){
	
	var inputfieldsDiv = document.getElementById(this.inputfieldsDivId);
	var childInput     = inputfieldsDiv.childNodes[pos];

	var deletelinksDiv = document.getElementById(this.deletelinksDivId);
	var childDelete    = deletelinksDiv.childNodes[pos];
	
	inputfieldsDiv.removeChild(childInput);
	deletelinksDiv.removeChild(childDelete);

	this.updateLabels();
	this.updateDeleteLinks();
	this.updateHandleImg();
	this.updateTabindex();
	this.updateMarker();
	this.updateContextMenu();
};

naviki.main.RoutingRequest.prototype.setButton = function(){

	var button = new YAHOO.widget.Button({
		id       : this.containerDivId+"[requestbutton]",
		type     : "button",
		label    : naviki.Lang.getLL('routing_request_button_label'),
		container: this.containerDivId
	});
	
	button.RoutingRequest = this;
	
	if(this.routingTargetPage == ""){
		button.set("onclick",{fn:this.request,obj:this});
	}else{
		button.set("onclick",{fn:this.requestToNewPage,obj:this});
	}

	return button;
};

naviki.main.RoutingRequest.prototype.enableInputs = function(){
	
	// enable inputfields
	var inputfieldsDiv = document.getElementById(this.inputfieldsDivId);
	var inputfields    = inputfieldsDiv.getElementsByTagName("input");
	
	for(var i=0;i<inputfields.length;i++){
		inputfields[i].removeAttribute("disabled");
	}
	
	// enable deletelinks
	this.updateDeleteLinks();
	
	// enable options
	var optionsDiv = document.getElementById(this.optionsDivId);
	var options    = optionsDiv.getElementsByTagName("input");
	
	for(var k=0;k<options.length;k++){
		options[k].removeAttribute("disabled");
	}

	// enable add routingfield
	var add = optionsDiv.getElementsByTagName("a");
	if(add.length>0){
		YAHOO.util.Dom.setAttribute(add[0], "href", "javascript:"+this.obj+".addEntry('','');" );
	}
	
	// enable drag&drop
	eventMgr.enableDD.fire();
	
	// enable request button
	this.button.set("onclick",{fn:this.request,obj:this});
	
	// enable dragging marker in google earth
	eventMgr.enableDraggingMarker.fire();	
	
	// hide spinner
	document.getElementById(this.spinnerDivId).style.visibility = "hidden";	
};

naviki.main.RoutingRequest.prototype.disableInputs = function(){

	// diable inputfields
	var inputfieldsDiv = document.getElementById(this.inputfieldsDivId);
	var inputfields    = inputfieldsDiv.getElementsByTagName("input");
	
	for(var i=0;i<inputfields.length;i++){
		YAHOO.util.Dom.setAttribute(inputfields[i], "disabled", "" ); 
	}
	
	// disable deletelinks
	var deletelinksDiv = document.getElementById(this.deletelinksDivId);
	var anker          = deletelinksDiv.getElementsByTagName("a");	

	for(var j=0;j<anker.length;j++){
		anker[j].removeAttribute("href");
	}	
	
	// disable options
	var optionsDiv = document.getElementById(this.optionsDivId);
	var options    = optionsDiv.getElementsByTagName("input");
	
	for(var k=0;k<options.length;k++){
		YAHOO.util.Dom.setAttribute(options[k], "disabled", "" ); 
	}

	// disable add routingfield
	var add = optionsDiv.getElementsByTagName("a");
	if(add.length>0){
		add[0].removeAttribute("href");
	}
	
	// disable drag&drop
	eventMgr.disableDD.fire();
	
	// disable request button
	this.button.set("onclick",{});
	
	// disable dragging marker
	eventMgr.disableDraggingMarker.fire();		
	
	// show spinner
	document.getElementById(this.spinnerDivId).style.visibility = "visible";
};

naviki.main.RoutingRequest.prototype.checkInputs = function(){
	
	var inputfieldsDiv = document.getElementById(this.inputfieldsDivId);
	var inputfields    = inputfieldsDiv.childNodes;
	var check          = 1;
	
	for(var i=0;i<inputfields.length;i++){
		value = inputfields[i].getElementsByTagName("input")[0].value;
		if(value==""){
			check = -1;
			break;
		}
	}
	
	return check;
};

naviki.main.RoutingRequest.prototype.checkenter = function(e){

	var e     = e || window.event;
 	var key   = e.keyCode || e.which || e.charCode, Shift = e.shiftKey;

 	var inputfieldsDiv = document.getElementById(this.inputfieldsDivId);
 	var inputfields    = inputfieldsDiv.childNodes;
 	
  	if(key == 13){
 		if(this.routingTargetPage == "") {
			this.request();
 		}
 		else{
 			this.requestToNewPage();
  		}
 	}
};

naviki.main.RoutingRequest.prototype.requestToNewPage = function() {

	this.RoutingRequest.disableInputs();
	
	if(this.RoutingRequest.checkInputs()>0){
		
		var type   = "";
		var option = "";
		var from   = "";
		var to     = "";
		
		var inputfieldsDiv = document.getElementById(this.RoutingRequest.inputfieldsDivId);
		var inputfields    = inputfieldsDiv.childNodes;
		
		from = inputfields[0].getElementsByTagName("input")[0].value;
		to   = inputfields[1].getElementsByTagName("input")[0].value;
		
		var radiobuttons = document.getElementsByName(this.RoutingRequest.radioOptions);
		for(var i=0; i<radiobuttons.length; i++){
			if(radiobuttons[i].checked==true){
				type = radiobuttons[i].value;
			}
		}
		
		var checkbox = document.getElementsByName(this.RoutingRequest.checkboxOptions)[0];
		if(checkbox.checked==true){
			option="true";
		}else{
			option="false";
		}
		
		var address = "http://" + window.location.host + "/" + this.RoutingRequest.targetUrl + "#from=" + escape(from) + "&to=" + escape(to) + "&type=" + escape(type) + "&option=" + escape(option);
		window.location.replace(address);		
	}else{
		
		this.RoutingRequest.showDialog(naviki.Lang.getLL('routing_request_attention'),naviki.Lang.getLL('routing_request_empty_inputfields'));
	}
};


naviki.main.RoutingRequest.prototype.request = function(){
	
	this.RoutingRequest.disableInputs();
	
	if(this.RoutingRequest.checkInputs()>0){
		
		var start  = "";
		var end    = "";
		var title  = "";
		var type   = "";
		var option = "";
		var value  = "";
		var coord  = "";		
		var data   = new Array();
		
		// determine routingrequest type
		var radiobuttons = document.getElementsByName(this.RoutingRequest.radioOptions);
		for(var i=0; i<radiobuttons.length; i++){
			if(radiobuttons[i].checked==true){
				type = radiobuttons[i].value;
			}
		}
		
		// determine routingrequest option
		var checkbox = document.getElementsByName(this.RoutingRequest.checkboxOptions)[0];
		if(checkbox.checked==true){
			option="true";
		}else{
			option="false";
		}
		
		// determine routingrequest input
		var inputfieldsDiv = document.getElementById(this.RoutingRequest.inputfieldsDivId);
		var inputfields    = inputfieldsDiv.childNodes;
		
		for(var j=0;j<inputfields.length;j++){
			
			coord = inputfields[j].getElementsByTagName("input")[1].value;
			value = inputfields[j].getElementsByTagName("input")[0].value;
			
			if(coord != "") {
				data.push(coord);
			}
			else{
				data.push(value);
			}			
		}
		
		// determine start and end point
		start = inputfields[0].getElementsByTagName("input")[0].value;
		end   = inputfields[inputfields.length-1].getElementsByTagName("input")[0].value;
		title = start + " - " + end;
		
		// build address for ajax call
		var address = "index.php?eID=tx_naviki_pi_routing_request&actionId=calcRoute";
		for (var i = 0; i < data.length; i++){
			address += "&dst["+i+"]="+encodeURI(data[i]);
		}
		address += "&type="  +encodeURI(type);
		address += "&option="+encodeURI(option);
		address += "&title=" +encodeURI(title);
		address += "&lpuid=" +encodeURI(this.RoutingRequest.lpUID);
		
		var getXML = YAHOO.util.Connect.asyncRequest("GET",address, {
			success : function(o) {
				var response = YAHOO.lang.JSON.parse(o.responseText);
				if (response['STATE'] == "ERROR") {

					//show error text
					var text   = "";
					var header = "";
					switch (parseInt(response['ERROR_CODE'])) {
						case 404:
							text   = naviki.Lang.getLL("error_routing_404");
							header = naviki.Lang.getLL("routing_request_attention");
							break;
						default:
							text   = naviki.Lang.getLL("error_routing_unknown") + 
									"\nServer-Fehlermeldung:\n" + 
									response['ERROR_TEXT'];
							header = naviki.Lang.getLL("error_way_header_default");
							break;
					}
					
					this.RoutingRequest.showDialog(header,text);
				} else {
					
					if(this.RoutingRequest.loadedKml!=null){
						eventMgr.removeWayOverlay.fire(this.RoutingRequest.loadedKml);
					}
					this.RoutingRequest.loadedKml = response['TMP_FILENAME'];

					eventMgr.addWayOverlay.fire(response['TMP_FILENAME'],response['GETOUR_FILENAME'],response['FILENAME'],0);				
					eventMgr.onHide.fire();
					eventMgr.addRoutingMarker.fire(response['MARKER']);
					
					if(response['LEGEND'].length>0){
						eventMgr.updateWayInfo.fire(response['WAYID'],start,end,response['LEGEND']);
					}else{
						eventMgr.updateWayInfo.fire(response['WAYID'],start,end);
					}
				}
				
				this.RoutingRequest.enableInputs();
				this.RoutingRequest.updateContextMenu();
			},
			failure : function(o) {
				alert("Sorry, routing request failed!\n Here is the response: " + o);
				this.RoutingRequest.enableInputs();
			},
			argument: null,
			scope   : this
		});
	}else{
		this.RoutingRequest.showDialog(naviki.Lang.getLL('routing_request_attention'),naviki.Lang.getLL('routing_request_empty_inputfields'));
	}
};

naviki.main.RoutingRequest.prototype.showDialog = function(header,body){

	if(typeof this.dialog == "undefined"){
		
		var dialog_container = document.getElementById("naviki-dialogs");
		var dialogDiv = document.createElement("div");
		dialogDiv.id  = this.cid+"_dialog";
		dialog_container.appendChild(dialogDiv);
		
		this.dialog = new naviki.main.ModalDialog(
				dialogDiv.id,   
				{ 	width      : "310px",  
					fixedcenter: true,  
					visible    : false,
					modal      : true,
					draggable  : true,
					zindex     : 4,
					close      : false,  
					constraintoviewport: true
				});
		
		this.dialog.RoutingRequest = this;
	}
	
	this.dialog.setHeader(header);
	this.dialog.setBody(body);
	this.dialog.cfg.queueProperty("buttons",[{ text:naviki.Lang.getLL('dialog_ok'), handler: this.hideDialog }]);

	this.dialog.render();
	this.dialog.show();
};

naviki.main.RoutingRequest.prototype.hideDialog = function(){
	this.hide();
	this.RoutingRequest.enableInputs();
};

naviki.main.RoutingRequest.prototype.addDestination = function(pos, lat, lng){

	eventMgr.hideContextMenu.fire();

	var myObj   = this;
	var address = "index.php?eID=tx_naviki_pi_searchresults" +
				  "&actionId=reverseSearch"+
				  "&lat="+lat+
				  "&lon="+lng;

	var getXML = YAHOO.util.Connect.asyncRequest("GET", address, {
		success : function(o) {
			var location = "";
			if(o.responseXML.documentElement.getElementsByTagName("name").length == 0){
				location = lng + "," + lat;
			}else{
				location = o.responseXML.documentElement.getElementsByTagName("name")[0].firstChild.nodeValue;
			}

			var inputfieldsDiv = document.getElementById(myObj.inputfieldsDivId);
			var inputfields    = inputfieldsDiv.childNodes;
			
			switch(pos){
				case -1:
					myObj.addEntry(location,lng+","+lat);
					break;
				case 0:
					inputfields[0].getElementsByTagName("input")[0].value = location;
					inputfields[0].getElementsByTagName("input")[1].value = lng+","+lat;
					break;
				case 1:
					inputfields[1].getElementsByTagName("input")[0].value = location;
					inputfields[1].getElementsByTagName("input")[1].value = lng+","+lat;
					break;
			}
			
			myObj.updateMarker();
			myObj.updateContextMenu();
		},
		failure : function(o) {
			alert("Sorry, reverseSearch failed!\n Here is the response: " + o);
		},
		argument: null,
        scope: this
	});		
};

naviki.main.RoutingRequest.prototype.moveRoutingMarker = function(type, e, me){

	var lat = e[2];
	var lng = e[1];
	
	var inputfieldsDiv = document.getElementById(me.inputfieldsDivId);
	var inputfield     = inputfieldsDiv.childNodes[e[0]];
	
	var coord = inputfield.getElementsByTagName("input")[1];
	var	value = inputfield.getElementsByTagName("input")[0];
	
	coord.value = lng + "," + lat;
	
	var address = "index.php?eID=tx_naviki_pi_searchresults" +
	  			  "&actionId=reverseSearch"+
	  			  "&lat="+lat+
	  			  "&lon="+lng;

	var getXML = YAHOO.util.Connect.asyncRequest("GET", address, {
		success : function(o) {
			if(o.responseXML.documentElement.getElementsByTagName("name").length == 0){
				value.value = lng + "," + lat;
			}else{
				value.value = o.responseXML.documentElement.getElementsByTagName("name")[0].firstChild.nodeValue;
			}
		},
		failure : function(o) {
			value.value = lng + "," + lat;
		},
		argument: null,
		scope: this
	});	
};

naviki.main.RoutingRequest.prototype.updateRoutingInputs = function(type, e, me){

	var inputfieldsDiv = document.getElementById(me.inputfieldsDivId);
	var inputfield     = inputfieldsDiv.childNodes[e[0]];
	
	var coord = inputfield.getElementsByTagName("input")[1];
	var	value = inputfield.getElementsByTagName("input")[0];
	
	coord.value = e[1] + "," + e[2];
};
