
/*
 * Parameternamn som ska ignoreras vid parsning av sökformuläret.
 */
var SEARCH_FORM_IGNORE_KEYS = { tab: true, extent: true, layers: true, overview: true };

/*
 * Parametrar för paginering.
 */
RAA.searchResultCount = 0;
RAA.searchResultPage = 1;
RAA.searchResultCriteria = "";
RAA.printSLD = null; // för utskrifter
RAA.searchFormQueryString = null; // bas-qs att använda i sökning

/**
 * Hämtar värdet av aktuell querysträng. Uppdaterar värde från formuläret om sparat
 * värde ej är satt.
 */
RAA.getCurrentSearchFormQueryString = function() {
	if (RAA.searchFormQueryString == null) {
		RAA.searchFormQueryString = RAA.createSearchFormQueryString();
	}
	return RAA.searchFormQueryString;
}

/**
 * Bygg söksträng utifrån parametrar i sökformuläret.
 * Returnerad söksträng har ej inledande "?".
 * Ignorera parametrar som finns med i SEARCH_FORM_IGNORE_KEYS_LIST.
 */
RAA.createSearchFormQueryString = function() {
    var queryString = "";
    var isFirst = true;
    var searchForm = document.getElementById('searchTabForm');
    if (RAA.isSet(searchForm)) {
	    var elements = searchForm.elements;
	    if (RAA.isSet(elements)) {            
	        for (var i = 0; i < elements.length; i++) {
	            var name = elements.item(i).name;
	            var value = elements.item(i).value;
	            if (RAA.isSet(name) && !SEARCH_FORM_IGNORE_KEYS[name]) {                
	                if (elements.item(i).type == 'checkbox') {
	                    // använd värde för checked isf value
	                    value = elements.item(i).checked;
	                }                 
	                if (RAA.isSet(value)) {
	                    value = encodeURI(value);
	                    if (isFirst) {
	                        isFirst = false;
	                    } else {
	                        queryString += '&';
	                    }                
                        queryString += name + '=' + value;

                        if (name == 'use_extent'  
                            && value == 'true' 
                            && !elements.item(i).disabled) {
                            queryString += encodeURI('&extent=' + RAA.getMapExtentString());
                        }
	                }                
	            }
	        }
	    }  
    }
    return queryString;
}

/**
 * Bygg söksträng utifrån parametrar i sökformuläret samt parameter för 
 * paginering i sökresultatet.
 * Returnerad söksträng har ej inledande "?".
 */
RAA.createSearchQueryString = function(page, forceMeta, noBb) {
    var queryString = RAA.getCurrentSearchFormQueryString();
    var isFirst = queryString.length == 0;
    if (!isFirst) {
        RAA.searchResultPage = page;
        if (page > 0) {
	         queryString += '&page=' + page;
	         // om okänt antal totala träffar, lägg på meta
	         if (forceMeta || RAA.searchResultCount == 0) {
	             queryString += '&meta=true';
	         }
		}
		if (noBb) {
			queryString += '&nobb=true';
		}
    } else {
        queryString += '&page=1&meta=true';
        RAA.searchResultPage = 1;
    }
    return queryString;
}

/**
 * Hanterar ev utloggning av inaktivitet.
 *
 * @param divEl element att visa meddelande i.
 * @param responseText ajax-svar
 * @return sant om utloggningshantering skett
 */
RAA.handleLogout = function(divEl, responseText) {
   	if (responseText.indexOf("j_security_check") >= 0) {
   		var shref = document.getElementById('navSearch');
   		if (shref) {
   			var href = shref.href;
   			var url = href.split('?')[0]; 
   			divEl.innerHTML = "<br/><br/><h2>Du har varit inaktiv f\u00f4r l\u00e4nge och har loggats ut automatiskt, vgv...</h2>";
   			window.location = url + "?" + RAA.getDirectLinkQueryString();
   		} else {
   			// utloggad, hittade inte elementet navSearch vilket borde finnas...
   			divEl.innerHTML = "<br/><br/><h2>Du har varit inaktiv f\u00f4r l\u00e4nge och har loggats ut automatiskt. Anv\u00e4nd menyn f\u00f4r att komma vidare.</h2>";
   			RAA.hideWorkNotice();
   		}
   		return true;
   	}
	return false;
}

/**
 * Hanterar fel från ajax-pipelines, visar meddelande i söksvarsfliken.
 *
 * @param responseText felmeddelande att visa
 */
RAA.handleError = function(responseText) {
	var div = document.getElementById('searchResultTabContainer');
	if (div) {
		div.innerHTML = "<br/><br/><h2>" + responseText + "</h2><br/>" +
			"<h3>Om felet kvarst\u00e5r, vg kontakta IT-support</h3>";
		RAA.hideTab(null, 'showObjectTabItem');
		RAA.showTab(null, "searchResultTab");
	}
}

/**
 * Uppdaterar texten som visar vad användaren har sökt på (från js-variabler).
 */
RAA.updateSearchCriteriaText = function(doc) {
	var d = doc ? doc : document;
	var crit = d.getElementById('searchCriteria');
	if (crit && RAA.searchResultCriteria) {
		// ändra sidnummer om vi har ett
		crit.innerHTML = RAA.searchResultCriteria.replace("[PAGE]", RAA.searchResultPage);
	}
}

RAA.updateMarkerLayerAndSLD = function(markerId, sldId) {
	// ta bort ev tidigare markerlager
	var layer = map.getLayer("FMI_MARKERS");
	if (layer) {
		map.removeLayer(layer);
		layer.destroy();
	}
	// lägg till nytt markerlager om vi har en url
	var markers = document.getElementById(markerId);
	if (markers) {
		markers = markers.href;
		layer = new OpenLayers.Layer.Text(
			"Fornl\u00e4mningar markering",
			{
				location: markers,
				popupClass: OpenLayers.Popup.FramedCloud
			}
		);
		layer.id = "FMI_MARKERS";
		map.addLayer(layer);
		layer.setVisibility(true);
	}
	// hämta sld för utskrifter
	var sld = document.getElementById(sldId);
	if (sld) {
		RAA.printSLD = decodeURI(sld.href);
	} else {
		RAA.printSLD = null;
	}
}

RAA.updateMapForSearchResultPanel = function() {
	RAA.updateMarkerLayerAndSLD('searchResultMarkers', 'searchResultSLD');
	var bounds = RAA.getInnerHTML('searchResultExtent');
	if (bounds) {
		map.zoomToExtent(OpenLayers.Bounds.fromString(bounds));
	}
}

RAA.doUpdateSearchResultPanel = function(queryString, loadInBackground, keepCurrentMapExtent) {
    
    var callback = {

        success: function(o) {
            // todo logging?
            if (o.responseText !== undefined) {
            	var placeDiv = document.getElementById('searchResultTabContainer');
            	if (RAA.handleLogout(placeDiv, o.responseText)) {
            		return;
            	}
                placeDiv.innerHTML = o.responseText;
                // extrahera ev. metadata
                var searchResultSingleHit;
                var searchResultMaxMapMarkers;
                var metaDiv = document.getElementById('searchResultMeta');
                if (metaDiv) {
                	RAA.searchResultCriteria = RAA.getInnerHTML('searchCriteria', '');
                	RAA.searchResultCount = RAA.getInnerHTML('searchResultCount', 0);
                	searchResultSingleHit = RAA.getInnerHTML('searchResultSingleHit');
                }

                // sätt upp paginering
                if (RAA.searchResultPage > 0 && RAA.searchResultCount > searchResultPageSize) {
	                var pDiv = document.getElementById('searchpages');
	                if (pDiv) {
		                var pageSize = searchResultPageSize;
						var prevClass = RAA.searchResultPage > 1 ? "bwrdfwrd" : "nobwrdfwrd";
						var prevPage = Math.max(1, RAA.searchResultPage - 1); 
						var nextClass = RAA.searchResultPage * pageSize < RAA.searchResultCount ? "bwrdfwrd" : "nobwrdfwrd";
						var lastPage = Math.ceil(RAA.searchResultCount / pageSize);
						var nextPage = Math.min(lastPage, RAA.searchResultPage + 1);
	                    var pageSeriesMin = RAA.searchResultPage - 4 + Math.min(lastPage - RAA.searchResultPage, 2);
	                    pageSeriesMin = pageSeriesMin > 0 ? pageSeriesMin : 1;
	                    var pageSeriesMax = pageSeriesMin + 4; 
	                    pageSeriesMax = pageSeriesMax <= lastPage ? pageSeriesMax : lastPage; 
	
						var first =  '<a href="javascript:;" onclick="RAA.updateSearchResultPanel(event, 1);" class="skipBack ' + prevClass + '" title="Till f\u00f6rsta sidan">\u00ab</a>';
						var prev =  '<a href="javascript:;" onclick="RAA.updateSearchResultPanel(event, ' + prevPage + ');" class="stepBack ' + prevClass + '" title="bak\u00e5t">&lt;</a>';
						var next =  '<a href="javascript:;" onclick="RAA.updateSearchResultPanel(event, ' + nextPage + ');" class="stepFwd ' + nextClass + '" title="fram\u00e5t">&gt;</a>';
						var last =  '<a href="javascript:;" onclick="RAA.updateSearchResultPanel(event, ' + lastPage + ');" class="skipFwd ' + nextClass + '" title="Till sista sidan">\u00bb</a>';
						var showAll = '<a href="javascript:;" onclick="RAA.updateSearchResultPanel(event, 0);" class="all" title="Visa alla' +
							(RAA.searchResultCount > maxMapMarkers ? ' (OBS! endast de f\u00f6rsta ' + maxMapMarkers + ' visas)' : '') + '">Visa alla</a>';
						var pages = "";
						for (var i = pageSeriesMin; i <= pageSeriesMax; i++) {
						   if (i == RAA.searchResultPage) {
						       pages += "<span>" + RAA.searchResultPage + "</span>";
						   } else {
						       pages += '<a href="javascript:;" onclick="RAA.updateSearchResultPanel(event, ' + i + ');" title="G\u00e5 till s\u00f6kresultatsida ' + i + '">' + i + '</a>'; 
						   }
						}					
		                pDiv.innerHTML = '<p>' + first + prev + pages + next + last + showAll + '</p>';
		            }
	            }

                // kolla om vi ska behålla nuvarande kartusträckning (sökning med id-verktyget)
                if (keepCurrentMapExtent) {
                	// skriv över sökningens framräknade utsträckning med en aningen mindre förr
                	// att behålla samma zoomnivå - med exakt samma utsträckning kommer annars
                	// en utzoomning ske
                	var currentExtent = map.getExtent();
                	var smaller = new OpenLayers.Bounds();
                	var sW = currentExtent.getWidth() - 1;
                	var sH = currentExtent.getHeight() - 1;
                	var c = currentExtent.getCenterLonLat();
                	smaller.extend(new OpenLayers.LonLat(c.lon - sW/2, c.lat - sH/2));
                	smaller.extend(new OpenLayers.LonLat(c.lon + sW/2, c.lat + sH/2));
                	RAA.setInnerHTML("searchResultExtent", smaller.toBBOX());
                }

				// uppdatera text som visar använda sökriterier
				RAA.updateSearchCriteriaText();

				// specialhantering vid en träff
	            if (RAA.searchResultCount == 1) {
	            	// visa sökresultatfliken bara, inte dess innehåll
	            	RAA.selectTabItem(null, "searchResultTabItem");
	            	// ladda och visa objektet
	            	RAA.doUpdateShowObjectPanel(searchResultSingleHit, false, keepCurrentMapExtent);
	            } else if (!loadInBackground) {
	            	// visa flik om vi inte laddar sökdata i bakgrunden
	            	RAA.showTab(null, "searchResultTab");
	            }
            }
            RAA.hideWorkNotice();
        },

        failure: function(o) {
            RAA.hideWorkNotice();
            if (o.responseText !== undefined) {
            	RAA.handleError("Ett applikationsfel uppstod vid h\u00e4mtning av s\u00f6kresultat");
            }
        },
        cache: false
    };
    RAA.showWorkNotice();
    var request = YAHOO.util.Connect.asyncRequest('GET', "ajax/searchresults" + queryString, callback);
}

// sökning
RAA.updateSearchResultPanel = function(e, page, forceMeta, loadInBackground) {
    var queryString = '?' + RAA.createSearchQueryString(page, forceMeta);
	RAA.doUpdateSearchResultPanel(queryString, loadInBackground);
	YAHOO.util.Event.stopEvent(e);
}

// ny sökning
RAA.newSearch = function(e) {
	RAA.searchResultCount = 0;
	// rensa aktuell querysträng
	RAA.searchFormQueryString = null;
	// göm objektfliken
	RAA.hideTab(null, "showObjectTab");
	// ta bort/göm ev historik-lager mm
	RAA.setHistDateTime(null);
	// sök och visa sida 1
	RAA.updateSearchResultPanel(e, 1);
}

// sökning med i-knapp
RAA.idCallbackUpdateSearchResultPanel = function(e, extent) {
	RAA.searchResultCount = 0;
	// uppdatera aktuell querysträng
	RAA.searchFormQueryString = "use_id_extent=true&extent=" + extent;
	// göm objektfliken
	RAA.hideTab(null, "showObjectTab");
	// sök och visa alla men behåll nuvarande kartutsträckning/zoom
    var queryString = "?" + RAA.searchFormQueryString;
    RAA.doUpdateSearchResultPanel(queryString, false, true);
}

RAA.updateMapForShowObjectPanel = function() {
	RAA.updateMarkerLayerAndSLD('showObjectMarkers', 'showObjectSLD');
	var x = RAA.getInnerHTML('showObjectX');
	var y = RAA.getInnerHTML('showObjectY');
	var scale = RAA.getInnerHTML('showObjectScale');
	if (x && y && scale) {
		map.setCenter(new OpenLayers.LonLat(x, y), parseInt(scale));
		// glöm bort denna tillfälliga kartusträckning
		RAA.forgetMapNavHistoryState();
		// flytta en aning så att objektet inte döljs av vänsterpanelen
		RAA.tempPanSpecialLeft(false);
	}
}

// visa objekt
RAA.doUpdateShowObjectPanel = function(id, loadInBackground, keepCurrentMapScale) {
    if (RAA.isSet(id) && id > 0) {
	    var queryString = encodeURI('?objektid=' + id + (histDateTime != null ? '&histDate=' + histDateTime : ''));
	    var isDifferent = (objectId != id);
	    objectId = id;
	
	    var callback = {
	        success: function(o) {
	            if (o.responseText !== undefined) {
	            	// ta bort ev gammal lyssnare och knapp för att vara snäll mot gc
	            	var b = YAHOO.widget.Button.getButton("buttonEnterHistDate");
	                if (b) { b.destroy(); }
	                YAHOO.util.Event.removeListener("buttonEnterHistDate", "click", RAA.enterHistDateTime);

	                var placeDiv = document.getElementById('showObjectTabContainer');
	                if (RAA.handleLogout(placeDiv, o.responseText)) {
            			return;
					}
	                placeDiv.innerHTML = o.responseText;

                        // IE6-fix, avsluta aldrig en rad i en isokodad fil) med svenska tkn.
	                // De sista två tkn:en får aldrig komma från den utökade tkn-uppsättningen. 
	                // Därför har kommentaren nedanför 2 avslutande punkter, så att inte 
	                // radens sista eller näst sista tkn är ett svensk tkn.

	                // kolla om vi ska behålla nuvarande inzoomningsnivå..
	                if (keepCurrentMapScale) {
	                	// skriv över objekthämtningens önskade zoomnivå med kartans nuvarande
	                	var currentScaleLevel = map.getZoom();
	                	RAA.setInnerHTML("showObjectScale", currentScaleLevel);
	                }

	                if (loadInBackground) {
	                	// visa fliken, ej dess innehåll om vi laddas i bakgrunden
	                	RAA.selectTabItem(null, "showObjectTabItem", true);
	                } else {
	                	RAA.showTab(null, "showObjectTab");
	                }
	                // om nytt id, uppdatera ev kartlager
	                if (isDifferent) {
	                	RAA.refreshHistoryLayers();
	            	}
	                if (histDateTime != null) {
	                	RAA.setElementValue("histDateInput", RAA.histToEnterDateStr(histDateTime));
	                }
	                // fixa knapp och lägg till lyssnare
	                new YAHOO.widget.Button("buttonEnterHistDate");
	                YAHOO.util.Event.addListener("buttonEnterHistDate", "click", RAA.enterHistDateTime);
	            }
	            RAA.hideWorkNotice();
	        },
	        failure: function(o) {
	            RAA.hideWorkNotice();
	            if (o.responseText !== undefined) {
		            RAA.handleError("Ett applikationsfel uppstod vid h\u00e4mtning av objektinformation");
	            }
	        },
	        cache: false
	    };
	    RAA.showWorkNotice();
	    // töm för att få till motsv scroll till top när man klickar på ingår i/består av
	    var placeDiv = document.getElementById('showObjectTabContainer');
	    placeDiv.innerHTML = "";
	    var request = YAHOO.util.Connect.asyncRequest('GET', "ajax/showobject" + queryString, callback);
    } else {
        // rensa
        var placeDiv = document.getElementById('showObjectTabContainer');
        placeDiv.innerHTML = "";
        RAA.showTab(null, "showObjectTab");
        objectId = 0;
    } 
}

// visa objekt
RAA.updateShowObjectPanel = function(e) {
	var target = YAHOO.util.Event.getTarget(e);
	RAA.doUpdateShowObjectPanel(target.id, false, true);
	YAHOO.util.Event.stopEvent(e);
}

// trigga ett klick på angiven marker (objektid), visar popup
RAA.highlightMarker = function(id) {
	var layer = map.getLayer("FMI_MARKERS");
	if (layer) {
		var feature;
		for (var i = 0; i < layer.features.length; ++i) {
			feature = layer.features[i];
			// kollar om objektid:t finns i popup-url:en, bästa sättet förutom att hacka OL mer
			if (feature.data.popupContentURL.indexOf(id) > 0) {
				feature.marker.events.triggerEvent("click");
				return;
			}
		}
	}
}

// ortnamnssökning
RAA.updatePlaceList = function(e) {
    var placename = RAA.getElementValue('placename');
    var queryString = "";
    if(RAA.isSet(placename)) {
        queryString = encodeURI('?placename=' + placename);
    }

    var callback = {

        success: function(o) {
            // todo logging?
            if (o.responseText !== undefined) {
                var placeDiv = document.getElementById('placeContainer');
                placeDiv.innerHTML = o.responseText;
            }
            RAA.hideWorkNotice();
        },

        failure: function(o) {
            RAA.hideWorkNotice();
            if (o.responseText !== undefined) {
		    	RAA.handleError("Ett applikationsfel uppstod vid h\u00e4mtning av orter");
            }
        },
        cache: false
    };
    RAA.showWorkNotice();
    var request = YAHOO.util.Connect.asyncRequest('GET', "ajax/place" + queryString, callback);
}

// lägg till utseende och lyssnare så snart buttonSearchPlace är inlagd i DOM (anpassning för IE)
RAA.initButtonSearchPlace = function() {
    new YAHOO.widget.Button("buttonSearchPlace");
    YAHOO.util.Event.addListener("buttonSearchPlace", "click", RAA.updatePlaceList);
}
YAHOO.util.Event.onContentReady("buttonSearchPlace", RAA.initButtonSearchPlace);

RAA.runPlaceSearchOnEnter = function(e) {
    if (e.keyCode == 13) {
        YAHOO.util.Event.preventDefault(e); // förhindra submit av formulär (sidomladdning)        
        RAA.updatePlaceList(e);				// kör ajax-baserad sökning
    }
}
YAHOO.util.Event.addListener("placename", "keydown", RAA.runPlaceSearchOnEnter);

// ortnamn
RAA.updatePlace = function(e) {
    var place = RAA.getElementValue('place');
    var queryString = "";
    if(RAA.isSet(place)) {
        queryString = encodeURI('?xy=' + place);
    }

    var callback = {

        success: function(o) {
            // todo logging?
            if (o.responseText !== undefined) {
                // byt ut koordinatformulär och Visa-knapp
                var placeRecenterDiv = document.getElementById('placeRecenterContainer');
                placeRecenterDiv.innerHTML = o.responseText;
                RAA.initButtonShowXY();
                // centrera karta och lägg till marker
                RAA.recenterMapAndMark();
            }
        },

        failure: function(o) {
            if (o.responseText !== undefined) {
				RAA.handleError("Ett applikationsfel uppstod vid h\u00e4mtning av ortinformation");
            }
        },
        cache: false
    };
    var request = YAHOO.util.Connect.asyncRequest('GET', "ajax/placeRecenter" + queryString, callback);
}

// lägg till utseende och lyssnare så snart buttonShowXY är inlagd i DOM (anpassning för IE)
RAA.initButtonShowXY = function() {
    new YAHOO.widget.Button("buttonShowXY");
    YAHOO.util.Event.addListener("buttonShowXY", "click", RAA.recenterMapAndMark);
}
YAHOO.util.Event.onContentReady("buttonShowXY", RAA.initButtonShowXY);


// initiera fält för ortsökning
RAA.initPlaceSearchFields = function() {
    RAA.disable('place');
}
YAHOO.util.Event.onDOMReady(RAA.initPlaceSearchFields);

// Skapa uttryck med sidparametrar för sidans nuvarande tillstånd.
// Utan inledande '?' eller '&'.
RAA.getDirectLinkQueryString = function() {
    var placename = RAA.getElementValue('placename');
    var x = RAA.getElementValue('x');
    var y = RAA.getElementValue('y');
    var extent = RAA.getMapExtentString();  
    var layers = RAA.getMapLayerString();
    var overview = RAA.getOverviewMapString();    

    var rqs = RAA.getCurrentSearchFormQueryString();

    var isFirst = rqs.length == 0;

    if (window.tab!=undefined && RAA.isSet(tab)) {
        rqs += "&tab=" + tab;    
    } 
    if (RAA.isSet(RAA.searchResultPage) && RAA.searchResultPage > 0) {
        rqs += "&page=" + RAA.searchResultPage;
    }
    if (RAA.isSet(objectId) && objectId > 0) {
        rqs += "&objektid=" + objectId;
    }    
    if (RAA.isSet(placename)) {
        rqs += encodeURI("&placename=" + placename);
    } 
    if (RAA.isSet(x) && RAA.isSet(y)) {
        rqs += "&x=" + x + "&y=" + y;
    }
    // extent kan vara med som en sökparameter redan
    if (rqs.indexOf("&extent") < 0 && RAA.isSet(extent)) {
        rqs += encodeURI("&extent=" + extent);
    } 
    if (RAA.isSet(layers)) {
        rqs += "&layers=" + layers;
    } 
    if (RAA.isSet(overview)) {
        rqs += "&overview=" + overview;
    } 

    // korrigera inledande tecken om strängen var tom efter läsning av sökformulär    
    if (isFirst && rqs.length > 0) {
        rqs = rqs.substring(1, rqs.length);
    }
    
    return rqs;
}

// uppdatera direktlänk
RAA.updatePageLink = function() {
    var rqs = RAA.getDirectLinkQueryString();
    var directUrl = document.getElementById('directurl');
    var directUrlText = document.getElementById('directurltext');
    
    if (RAA.isSet(directUrl) && RAA.isSet(directUrlText)) {
        var h = directUrl.href;
        var t = directUrlText.value;
        if (RAA.isSet(h) && RAA.isSet(t)) {
            var i = t.indexOf(".html");
            if (i > 0) {
                var newValue = t.substring(0, i + 5) + '?' + rqs;
                directUrl.href = newValue;                 
	            directUrlText.value = newValue;
            }
        }
    }    
}

// lägg till utseende och lyssnare så snart buttonUpdateLink är inlagd i DOM (anpassning för IE)
RAA.initButtonUpdateLink = function() {
    new YAHOO.widget.Button("buttonUpdateLink");
    YAHOO.util.Event.addListener("buttonUpdateLink", "click", RAA.updatePageLink);
}
YAHOO.util.Event.onContentReady("buttonUpdateLink", RAA.initButtonUpdateLink);

// uppdatera länk med sidparametrar för nuvarande tillstånd
RAA.updateLink = function(e) {
    var link = RAA.getEventLink(e);
    if (RAA.isSet(link)) {
        var rqs = RAA.getDirectLinkQueryString();
        var h = link.href;
        if (RAA.isSet(h)) {
            var i = h.indexOf(".html");
            if (i > 0) {
                link.href = h.substring(0, i + 5) + '?' + rqs;
            }
        }
    }  
    return true;
}

// uppdatera utloggningslänk med sidparametrar för nuvarande tillstånd
// specifall av länkuppdatering eftersom denna innnehåller en del 
// (parameter för goto) vars värden ska behållas
RAA.updateNavLogoutLink = function(e) {
    var link = document.getElementById('navLogout');
    if (RAA.isSet(link)) {
        var rqs = RAA.getDirectLinkQueryString();
        var h = link.href;
        if (RAA.isSet(h)) {
            var i = h.lastIndexOf(".html");
            if (i > 0) {
                 link.href = h.substring(0, i + 5) + '&' + rqs;
            }
        }
    }  
    return true;
}

YAHOO.util.Event.addListener("navLogin", "click", RAA.updateLink);
YAHOO.util.Event.addListener("navLogout", "click", RAA.updateNavLogoutLink);
