window.rgLib = true;

rg = {	
	imported: { },

	load: function(path) {
		if (rg.imported[path]) return;
		rg.imported[path] = true;
		document.write('<script type="text/javascript" src="' + path + '"></script>');
	},

	logError: function(message) {
		var http = navigator.appName == 'Microsoft Internet Explorer' ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
		http.open('post', '/cgi-bin/rg/error_js.cgi', true);
		http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		http.send('message=' + encodeURIComponent(message));
	},
	
	draggableTop: function(name, content) {
		return '<table ondragstart="return false" ' +
		//'onmousedown="RGDragElement(event, RGGetTopLayer(\'' + name + '\')); return false" ' +
		'style="margin-bottom: 5px; width: 100%" cellspacing="0" cellpadding="0"><tr style="vertical-align: top"><td>' + content + 
		'</td><td style="text-align: right"><span onclick="RGHideTopLayer(\'' + name + '\')" ' +
		'style="cursor: pointer"><img src="/groups/rg/images/forum_close.gif" /></span></td></tr></table>';
	},
	
	draggableBottom: function(name, content) {
		return '<div style="cursor: se-resize" ondragstart="return false" onselectstart="return false" onmousedown="RGDragElement(event, document.getElementById(\'' + 
			name + '\'), { resize: true }); return false">' + content + '</div>';
	}
	
};

rg.spinner = {
	begin: function (input) {
		var obj = typeof(input) == 'object' ? input : document.getElementById(input);
		if (!obj._spinning) {
			var span = document.createElement('span');
			span.innerHTML = 
				'<img style="position: absolute; margin-left: -19px; margin-top: ' + 
				(navigator.userAgent.match(/MSIE|Firefox/) ? '3' : '5') + 
				'px" class="RGQuerySpinner" src="/groups/rg/images/ajax-loader-field.gif" />';
			obj.parentNode.insertBefore(span, obj.nextSibling);
		}

		obj.autocomplete = 'off';
		obj._spinning = true;
	},
	end: function (input) {
		var obj = typeof(input) == 'object' ? input : document.getElementById(input);
		if (obj._spinning) obj.nextSibling.parentNode.removeChild(obj.nextSibling);
		obj._spinning = false;
	}
};

rg.loader = {
	waitTimeMs: 0,
	
	show: function() { this.toggle('show') },
	hide: function() { this.toggle('hide') },
	
	toggle: function (action) {
	
		var indicator = jQuery("#RGLoadingIndicator");
		
		if (!indicator) jQuery("body").append('<div id="RGLoadingIndicator"></div>');
		
		var title = indicator.attr("title") == 'static' ? 'static' : 'dynamic';
		
		if (title == 'dynamic' && !indicator.html()) {
			indicator.html(RGShadowBox(
				'<div class="RGGrayBox" style="padding: 20px; padding-left: 40px; padding-right: 45px; text-align: center">' +
				'<span class="rg_index_head">' + RGLang('loadingIndicator_js_toggle_loading').toString().replace(/ /, '&nbsp;') + '</span>' +
				//'<img style="position: relative;" alt="" src="http://' + this.httpHost + '/groups/rg/images/ajax-loader1-transparent.gif" />' +
				'</div>'
			));
		}
		
		if (action == 'show') {
			if (title == 'dynamic') indicator.css('margin-top', (RGGetScrollY()) + 'px');
			indicator.show();
		}
		
		if (action == 'hide') {
			setTimeout(function() {
				indicator.hide()
			},
			this.waitTimeMs);
		}
	}
}

var RGCalendars = { };
var RGSuggestionID = null;
var RGLanguage = 'sv';
var RGWeekdays;
var RGMonths;
var RGWeekWord;
var RGFirstDay;
var RGOnlineImageHost;
var RGPageNavCount = 24;
var RGCalendarData = { };
var RGHost = '';
var RGInterruptClose = false;
var RGCrossDomain = false;
var RGSafari = navigator.userAgent.match(/Safari\/[1-4]/);
var RGAdTomaResultContent = false;

function RGSetPageNavCount(n) { RGPageNavCount = n }

function RGPageNav(result, pageOfs, pageSize) {
	var nav = '';
	var pos = Math.floor(pageOfs / pageSize);
	var len = Math.ceil(result.length / pageSize);

	var min = Math.max(pos - Math.floor(RGPageNavCount / 2), 0);
	var max = Math.min(min + RGPageNavCount, len);
	min = Math.max(max - RGPageNavCount, 0);

	if (pageOfs > 0) nav += '<a href="javascript:;" onclick="RGBrowsePage(' + Math.max(pageOfs - pageSize, 0) + ')">' + RGLang('rg_lib_js_RGPageNav_previous') + '</a>&nbsp; ';
	if (min > 0) {
		nav += '<a href="javascript:;" onclick="RGBrowsePage(0)">1</a>&nbsp; ...&nbsp; ';
		min += 2;
	}
	if (max < len) max -= 2;
	for(var c = min; c < max; c++) {
		nav += pageOfs == c * pageSize ? '<b>' + (c+1) + '</b>&nbsp; ' : '<a href="javascript:;" onclick="RGBrowsePage(' + (c*pageSize) + ')">' + (c+1) + '</a>&nbsp; ';
		//d++;
		//if (d >= 25) break;
	}
	if (max < len) nav += '...&nbsp; <a href="javascript:;" onclick="RGBrowsePage(' + ((len - 1) * pageSize) + ')">' + len  + '</a>&nbsp; ';
	
	if (pageOfs + pageSize < pageSize*len)
		nav += '<a href="javascript:;" onclick="RGBrowsePage(' + (pageOfs + pageSize) + ')">' +
			RGLang('rg_lib_js_RGPageNav_next') +
		'</a> ';

	return (max - min > 1 ? RGLang('rg_lib_js_RGPageNav_page') + ': ' + nav : '');
}

function RGSetLayerPos(layer, x, y, p) {
	if (x == null) x = RGGetLayerX(layer);
	if (y == null) y = RGGetLayerY(layer);

	if (p && p.moveInView) {
		if (x + RGGetLayerWidth(layer) > RGGetScrollX() + RGGetClientWidth()) {
			x = RGGetScrollX() + RGGetClientWidth() - RGGetLayerWidth(layer);
		}

		if (y + RGGetLayerHeight(layer) > RGGetScrollY() + RGGetClientHeight()) {
			y = RGGetScrollY() + RGGetClientHeight() - RGGetLayerHeight(layer);
		}
	}

	if (p && p.flipInView) {
		if (x + RGGetLayerWidth(layer) > RGGetScrollX() + RGGetClientWidth()) {
			x -= RGGetLayerWidth(layer) + (p.flipInView.dx ? p.flipInView.dx : 0);
			if (x < RGGetScrollX()) x = RGGetScrollX();
		}
		if (y + RGGetLayerHeight(layer) > RGGetScrollY() + RGGetClientHeight()) {
			y -= RGGetLayerHeight(layer) + (p.flipInView.dy ? p.flipInView.dy : 0);
			if (y < RGGetScrollY()) y = RGGetScrollY();
		}
	}

	if (document.all) {
		layer.style.pixelLeft = x;
		layer.style.pixelTop = y;
	} else {
		layer.style.left = x + 'px';
		layer.style.top = y + 'px';
	}
}

function RGGetLayerX(layer) { return layer.style.pixelLeft ? layer.style.pixelLeft : parseInt(layer.style.left) }
function RGGetLayerY(layer) { return layer.style.pixelTop ? layer.style.pixelTop : parseInt(layer.style.top) }
function RGGetLayerWidth(layer) { return layer.offsetWidth ? layer.offsetWidth : layer.clientWidth }
function RGGetLayerHeight(layer) { return layer.offsetHeight ? layer.offsetHeight : layer.clientHeight }
function RGGetMouseX(e) { return document.all ? RGGetScrollX() + window.event.clientX : RGSafari ? e.clientX : RGGetScrollX() + e.clientX }
function RGGetMouseY(e) { return document.all ? RGGetScrollY() + window.event.clientY : RGSafari ? e.clientY : RGGetScrollY() + e.clientY }
function RGGetScrollX() { return window.pageXOffset ? window.pageXOffset : document.documentElement && document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft }
function RGGetScrollY() { return window.pageYOffset ? window.pageYOffset : document.documentElement && document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop }
function RGGetClientWidth() { return window.innerWidth ? window.innerWidth : document.documentElement && document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.clientWidth }
function RGGetClientHeight() { return window.innerHeight ? window.innerHeight : document.documentElement && document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight }

function RGLang(a) { return a[RGLanguage] }
function RGSetLanguage(language) {
	RGLanguage = language;	
	RGWeekdays = RGLang('rg_lib_js_RGSetLanguage_weekdays').split(/ /);
	RGMonths = RGLang('rg_lib_js_RGSetLanguage_months').split(/ /);
	RGWeekWord = RGLang('rg_lib_js_RGSetLanguage_week');
	RGFirstDay = RGLang({ sv: 1, no: 1, nl: 1, fr: 1, en: 0 });
}


function RGMin(vec, func) {
	if (!func) func = function(a) { return a };

	var min = null;
	for(var c = vec.length - 1; c >= 0; c--) 
		if (min == null || func(vec[c]) < func(min)) min = vec[c];

	return min;
}

function RGGetDaysInMonth(date) {
	var d = date.split(/-/);
	var year = d[0];
	var month = parseInt(d[1]);
	return month == 2 ? 28 + (year % 4 == 0 ? 1 : 0) : month < 8 ? (month % 2 == 0 ? 30 : 31) : (month % 2 == 0 ? 31 : 30);
}

function RGGetTodayDate() {
	var d = new Date();
	var year = d.getYear();
	var month = d.getMonth() + 1;
	var day = d.getDate();
	return (year < 1900 ? year + 1900 : year) + '-' + (month > 9 ? month : '0' + month) + '-' + (day > 9 ? day : '0' + day);
}

function RGSort(vec, func) {
	if (!func) func = function(a, b) { return a <= b };
	if (vec.length > 0) _RGQuickSort(vec, 0, vec.length - 1, func); 
}

function _RGQuickSort(vec, loBound, hiBound, func) {

	var pivot, loSwap, hiSwap, temp;

	if (hiBound - loBound == 1) {
		if (!func(vec[loBound], vec[hiBound])) { //vec[loBound] > vec[hiBound] 
			temp = vec[loBound];
			vec[loBound] = vec[hiBound];
			vec[hiBound] = temp;
		}
		return;
	}

	pivot = vec[parseInt((loBound + hiBound) / 2)];
	vec[parseInt((loBound + hiBound) / 2)] = vec[loBound];
	vec[loBound] = pivot;
	loSwap = loBound + 1;
	hiSwap = hiBound;

	do {
		while (loSwap <= hiSwap && func(vec[loSwap], pivot)) //vec[loSwap] <= pivot
			loSwap++;

		while (!func(vec[hiSwap], pivot)) //vec[hiSwap] > pivot
			hiSwap--;

		if (loSwap < hiSwap) {
			temp = vec[loSwap];
			vec[loSwap] = vec[hiSwap];
			vec[hiSwap] = temp;
		}
	} while (loSwap < hiSwap);

	vec[loBound] = vec[hiSwap];
	vec[hiSwap] = pivot;

	if (loBound < hiSwap - 1) _RGQuickSort(vec, loBound, hiSwap - 1, func);
	if (hiSwap + 1 < hiBound) _RGQuickSort(vec, hiSwap + 1, hiBound, func);
}

function RGHTMLSelect(params, rows, value) {
	var html = '';

	for(var c = 0; c < rows.length; c++) {
		var row = rows[c];
		html += '<option ' + (value == row[0] ? 'selected ' : '') + 'value="' + row[0] + '">' + row[1] + '</option>';
	}	

	return '<select ' + params + '>' + html + '</select>';
}

function RGHTMLRadio(name, params, rows, value) {
	var html = '';

	var ie = navigator.userAgent.match(/MSIE/);

	for(var c = 0; c < rows.length; c++) {
		var row = rows[c];
		html += '<input type="radio" ' + params + ' name="' + name + '" ' + (value == row[0] ? 'checked="checked" ' : '') + 'value="' + row[0] + '" /><span style="cursor: pointer" onmousedown="var a = this.previousSibling; a.click(); if (a.onmouseup) a.onmouseup()' + (ie ? '; if (a.onchange) a.onchange()' : '') + '">' + row[1] + '</span> ';
	}
	
	return html;
}

function RGHTMLCheckbox(name, params, rows, values, clickableText) {
	var html = '';
	
	if (typeof(clickableText) == "undefined") clickableText = true;

	for(var c = 0; c < rows.length; c++) {
		var row = rows[c];
		var checked = false;
		
		for (var i = 0; i < values.length; i++) {
			if (row[0] == values[i]) checked = true;
		}
		
		html +=
			'<input ' +
				'type="checkbox" ' +
				'id="' + name + row[0] + '" ' +
				params + ' ' +
				'name="' + name + '" ' +
				(checked ? 'checked="checked" ' : '') +
				'value="' + row[0] + '" ' +
			'/>' +
			
			'<label for="' + name + row[0] + '">' + row[1] + '</label>';
	}
	
	return html;
}

function _RGY2K(number) { return (number < 1000) ? number + 1900 : number; }		

		
function RGGetWeek(year,month,day) {
    var when = new Date(year,month,day);
    var newYear = new Date(year,0,1);
    var modDay = newYear.getDay();
    if (modDay == 0) modDay=6; else modDay--;

    var daynum = ((Date.UTC(_RGY2K(year),when.getMonth(),when.getDate(),0,0,0) -
					Date.UTC(_RGY2K(year),0,1,0,0,0)) /1000/60/60/24) + 1;

    if (modDay < 4 ) {
        var weeknum = Math.floor((daynum+modDay-1)/7)+1;
    }
    else {
        var weeknum = Math.floor((daynum+modDay-1)/7);
        if (weeknum == 0) {
            year--;
            var prevNewYear = new Date(year,0,1);
            var prevmodDay = prevNewYear.getDay();
            if (prevmodDay == 0) prevmodDay = 6; else prevmodDay--;
            if (prevmodDay < 4) weeknum = 53; else weeknum = 52;
        }
    }

    return weeknum;
}
			
		
function RGAddPopup(obj) {
	RGCalendars[obj.id] = obj;
}
			
function RGCalendarSelect(divID, fieldID, yy, mm, dd) {
	var div2 = document.getElementById(divID);
	div2.innerHTML = '';
	delete RGCalendars[divID]; 
	
	var field = document.getElementById(fieldID);
	field.value = yy + '-' + (mm.length > 1 ? mm : '0' + mm) + '-' + (dd.length > 1 ? dd : '0' + dd);
	if (field.onchange) field.onchange();
}

function RGCalendar(p) {
	if (arguments.length > 1) p = { divId: arguments[0], fieldId: arguments[1] };
	RGCalendarData[p.divId] = p;
	_RGCalendar(p.divId);
}

function _RGCalendar(dataId, yy, mm, dd) {
	var data = RGCalendarData[dataId];
	var divID = data.divId;
	var fieldID = data.fieldId;
	var validDate = data.validDate;
	if (!validDate) validDate = function() { return true };

	var nav = arguments.length > 2;
	var div2 = document.getElementById(divID);
	var field = document.getElementById(fieldID);	
	
	if (!yy && RGCalendars[divID]) {
		div2.innerHTML = '';
		delete RGCalendars[divID];
		delete RGCalendarData[divID];
	} else {
		var now = new Date();
		var year = now.getYear(); if (year < 1900) year += 1900;
		var month = now.getMonth() + 1;
		var day = now.getDate();

		var months = data.months ? data.months : 24;
		var yearEnd = year;
		var monthEnd = month + months - 1;
		while (monthEnd > 12) { monthEnd -= 12; yearEnd++ }

		var fdate;

		if (field.value) {
			fdate = field.value.split(/-/);
			fdate[1] = fdate[1].replace(/^0/, '');
			fdate[2] = fdate[2].replace(/^0/, '');
		} else {
			fdate = [ year, month, day ];
		}

		if (yy == undefined) yy = fdate[0];
		if (mm == undefined) mm = fdate[1];
		if (dd == undefined) dd = fdate[2];

		if (typeof(mm) == 'string') mm = mm.replace(/^0/, '');
		if (typeof(dd) == 'string') dd = dd.replace(/^0/, '');

		yy = parseInt(yy);
		mm = parseInt(mm);

		while (mm < 1) { mm += 12; yy-- }
		while (mm > 12) { mm -= 12; yy++ }

		if (yy < year) yy = year;
		if (yy == year && mm < month) mm = month;
		if (yy > yearEnd) yy = yearEnd;
		if (yy == yearEnd && mm > monthEnd) mm = monthEnd;

		var mdays = '. 31 28 31 30 31 30 31 31 30 31 30 31'.split(/ /);
		if (yy % 4 == 0) mdays[2] = 29;
		var days = mdays[mm];

		var weekPrefix = RGWeekWord.substring(0, 1).toLowerCase() + '.';

		var html =
			'<table width=250 cellspacing=0 cellpadding=0 border=0 class="RGCalendarWindow"><tr><td>';

		html +=
			'<table style="width: 100%" cellspacing=0 cellpadding=0><tr><td style=\"width: 100%\"><table class="RGCalendarTable" style=\"width: 100%\" cellspacing=1 cellpadding=0 border=0><tr class="RGCalendarRow">' +
			'<td class="RGCalendarSelected" style="font-weight: bold; text-align: center' + (yy == year && mm == month ? '; color: gray' : '') + '" onmousedown="parent._RGCalendar(\'' + dataId + '\', ' + yy + ',' + (mm - 1) + ',' + dd + ')">&lt;</td>' +
			'<td class="RGCalendarSelected" onmousewheel="var a = event.wheelDelta > 0 ? -1 : 1; parent._RGCalendar(\'' + dataId + '\', ' + yy + ',' + mm + '+a,' + dd + ')" style="width: 70%; text-align: center; font-weight: bold; cursor: default">' + RGMonths[mm-1] + ' ' + yy + '</td>' +
			'<td class="RGCalendarSelected" style="font-weight: bold; text-align: center' + (yy == yearEnd && mm == monthEnd ? '; color: gray' : '') + '" onmousedown="parent._RGCalendar(\'' + dataId + '\', ' + yy + ',\'' + (mm + 1) + '\',\'' + dd + '\')">&gt;</td></tr></table></td><td style="text-align: right; padding-left: 5px"><table class="RGCalendarTable" cellspacing=1 cellpadding=0><tr class="RGCalendarRow"><td class="RGCalendarSelected"><div style=\"width: 15px; font-weight: bold; text-align: center\" onmousedown="parent._RGCalendar(\'' + dataId + '\'); return false">X</div></td></tr></table></td></tr></table>';
	
		html += '<table style="margin-top: 5px" class="RGCalendarTable" width="100%" cellspacing=1 cellpadding=0 border=0><tr class=RGCalendarHead><td>&nbsp;</td>';
		for(var c = 0; c < RGWeekdays.length; c++) {
			html += '<td align=center>' + RGWeekdays[c].substring(0, 3) + '</td>';
		}
		html += '</tr><tr class=RGCalendarRow><td class=RGCalendarWeek align=center>' + weekPrefix + RGGetWeek(yy, mm-1, 1) + '</td>';					
		
		var mday = (new Date(yy, mm-1, 1)).getDay();
		if (mday == 0) mday = 6; else mday--;					
		
		for(var c = 0; c < mday; c++) html += '<td class=RGCalendarWeek>&nbsp;</td>';
		
		var col = mday;
		var current = fdate[0] == yy && fdate[1] == mm;
		var current2 = year == yy && month == mm; 
		for(var c = 1; c <= days; c++) {
			if (c > 1 && col++ % 7 == 6) html += '</tr><tr class=RGCalendarRow><td align=center class=RGCalendarWeek>' + weekPrefix + RGGetWeek(yy, mm-1, c) + '</td>'; //(col % 7 > 4 ? 'class=RGCalendarDay ' : 'class=RGCalendarDay ')
			html += (!current2 || c >= day) && validDate(yy + '-' + (mm.length > 9 ? mm : '0' + mm) + '-' + (c > 9 ? c : '0' + c), yy, mm, dd) ? '<td onclick="parent.RGCalendarSelect(\'' + divID + '\', \'' + fieldID + '\', ' + yy + ',\'' + mm + '\',\'' + c + '\')" ' + (current && c == dd ? 'class=RGCalendarSelected' : 'RGCalendarDay')  + ' align=center>' + c + '</td>' : '<td align=center class=RGCalendarDisabled>' + c + '</td>';
		}
		
		for(var c = 6 - (col % 7); c > 0; c--) html += '<td></td>';
		
		html +=
			'</tr></table>' +
			'</td></tr></table>';



		var frameName = 'RGCalendar' + divID;

		var fade = function(c) {
			var frame = document.getElementById(frameName);
			div2.style.clip = 'Rect(0 ' + ((parseInt(frame.width) + 10)*c/100) + ' ' + ((parseInt(frame.height)+10)*c/100) + ' 0)';
			if (c < 100) setTimeout(function() { fade(c + 20) }, 10); else div2.style.clip = 'Rect(auto auto auto auto)';
		}

		if (RGCrossDomain) {
			RGCalendars[divID] = div2;
			div2.innerHTML = RGShadowBox('<div onmousedown="RGInterruptClose = true">' + html + '</div>');
				
			div2.style.visibility = 'inherit';
		} else {
		
		var update = function() {
			var frame = document.getElementById(frameName);
			var body = frame.contentWindow.document.body;
			body.innerHTML = html;
			frame.width = RGGetLayerWidth(body.childNodes[0]);
			frame.height = RGGetLayerHeight(body.childNodes[0]);
			div2.style.visibility = 'inherit';
			div2.style.zIndex = 99999;
			if (!nav) fade(0);

			RGSetLayerPos(div2, null, null, { moveInView: true });
		};

		if (RGCalendars[divID]) {
			update();
		} else {
			RGCalendars[divID] = div2;
			div2.style.visibility = 'hidden';
			div2.innerHTML = RGShadowBox('<iframe src="about:blank" id="' + frameName + '" style="z-index: 100000" scrolling=no frameborder=0 width=400 height=0></iframe>');
			setTimeout(function() {
				var frame = document.getElementById(frameName);
				RGCallback = update;
				frame.src = RGHost + '/groups/rg/iframe_template.html';
			}, 0);
		}

		}

	}
}

function RGSetHost(host) {
	document.domain = document.location.href.match(/^http:\/\/([^\/]+)/i)[1].match(/[^\.]+\.[^\.]+$/)[0];
	RGHost = 'http://' + host;
}

function RGSetOnlineImageHost(host) { RGOnlineImageHost = host }

function RGShadowBox(content, p) {
	if (content == '') return '';

	if (typeof p != 'object') p = { style: p };
	
	var html = '';
	var img_left = 'http://www.reseguiden.se/groups/rg/images/shadow_left.png';
	var img_right = 'http://www.reseguiden.se/groups/rg/images/shadow_right.png';
	var img_bottom = 'http://www.reseguiden.se/groups/rg/images/shadow_bottom.png';
	var img_corner = 'http://www.reseguiden.se/groups/rg/images/shadow_corner.png';

	var td = (p.className ? ' class="' + p.className + '"' : '') + (p.style ? ' style="' + p.style + '"' : '');	

	if (navigator.userAgent.match(/MSIE 6/)) {
		return '<table cellspacing="0" cellpadding="0" border="0"><tr style="vertical-align: top"><td style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + img_left + '\',sizingMethod=\'crop\'); padding-left: 2px"></td><td' + td + '>' +
			content +
			'</td><td style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + img_right + '\',sizingMethod=\'crop\'); padding-left: 4px"></td></tr>' +
			'<tr><td colspan="2" style="height: 4px; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + img_bottom + '\',sizingMethod=\'crop\')"></td>' +
			'<td style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + img_corner + '\',sizingMethod=\'crop\')"></td></tr></table>';

	} else {
		return '<table cellspacing="0" cellpadding="0"><tr style="vertical-align: top"><td style="background-image: url(' + img_left + '); padding-left: 2px"></td><td' + td + '>' +
			content + 
			'</td><td style="background-image: url(' + img_right + '); padding-left: 4px"></td></tr><tr><td colspan="2" style="height: 4px; background-image: url(' + img_bottom + ')"></td>' +
			'<td style="background-image: url(' + img_corner + ')"></td></tr></table>';
	}
}

function RGShowDateInfo(where, date) {	
	if (date == '') return;
	var a = date.split('-');
	var days = [ 31, 28 + (a[0] % 4 == 0 ? 1 : 0), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ];
	var d = new Date(a[0], a[1]-1, a[2]);
	where.innerHTML =
		'&nbsp; (' +
		(a[2] > days[a[1]-1] ? RGLang('rg_lib_js_RGShowDateInfo_wrong_date') :
		RGWeekdays[(d.getDay() + 6) % 7] + ' ' + RGWeekWord.substring(0, 1).toLowerCase() + '.' + RGGetWeek(a[0], a[1]-1, a[2])) +
		')';
}

function RGShowAirDateInfo(where, date) {	
	if (date == '') return;
	var a = date.split('-');
	var days = [ 31, 28 + (a[0] % 4 == 0 ? 1 : 0), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ];
	var d = new Date(a[0], a[1]-1, a[2]);
	where.innerHTML =
		'&nbsp;' +
		(a[2] > days[a[1]-1] ? RGLang('rg_lib_js_RGShowDateInfo_wrong_date') :
		RGWeekdays[(d.getDay() + 6) % 7].substring(0,1).toLowerCase() + RGWeekdays[(d.getDay() + 6) % 7].substring(1,3) +
		' ' + RGWeekWord.substring(0, 1).toLowerCase() + '.' + RGGetWeek(a[0], a[1]-1, a[2]));
}


function RGInit() {
	
	if (!document.body) return;
	var old = document.body.onmousedown;
	document.body.onmousedown = old ? function(e) { old(e); _RGOnMouseDown(e) } : _RGOnMouseDown;
	
	
}

function _RGOnMouseDown(e) {
	var elem = e ? e.target : window.event.srcElement;
	if (!RGInterruptClose) {
		for(var a in RGCalendars) { var b = RGCalendars[a]; delete RGCalendarData[a]; setTimeout(function() { b.innerHTML = '' }, 1) }
		RGCalendars = { };		
	} else
		RGInterruptClose = false;
}

function _RGSetSelectionRange(field, start, end) {
    if (field.createTextRange) {
        var oRange = field.createTextRange();
		oRange.collapse(true);
        oRange.moveStart("character", start); 
        oRange.moveEnd("character", end);
        oRange.select();
    } else if (field.setSelectionRange) {
        field.setSelectionRange(start, end);
    } 
    field.focus(); 	
}

function _RGEventFunc(obj, param, func) {
	var old = obj[param];
	obj[param] = old ? function(e) { this.old = old; this.old(e); func(e) } : func;
}

function RGFieldSuggestions(obj, words, delay) {
	if (!delay) delay = 100;

	_RGEventFunc(obj, 'onkeydown', function(e) {
		if (RGSuggestionID != null) clearTimeout(RGSuggestionID);
	});
	
	_RGEventFunc(obj, 'onkeyup', function(e) {
		if (!e) e = event;
		var k = e.keyCode;

		if ((k < 65 || k > 90) && k != 8 && k != 32 && k != 192 && k != 221 && k != 222) return;

		var value = obj.value;
		if (value.length == 0) return;

		if (RGSuggestionID != null) clearTimeout(RGSuggestionID);
		RGSuggestionID = setTimeout(function() {
			RGSuggestionID = null;

			var rest = null;

			if (typeof(words) == 'function') {
				words(obj);
			} else
			if (typeof(words) == 'string') {
				try {
					var re = new RegExp('\\|' + value + '[^\\|]*', 'i');
					rest = words.match(re);
					if (rest != null) rest = rest[0].substr(1);
				} catch (e) { }
			} else {
				var max = words.length;
				for(var c = 0; c < max; c++) {
					var w = words[c];
					if (value.toLowerCase() == w.substr(0, value.length).toLowerCase()) { rest = w; break; }
				}
			}
		
			if (rest != null) {
				var len = obj.value.length;
				obj.value += rest.substr(value.length);
				_RGSetSelectionRange(obj, len, obj.value.length);
			}
	
		}, delay);

	});

	_RGEventFunc(obj, 'onblur', function() {
		var value = obj.value;

		if (value == '') return;

		if (typeof(words) == 'string') {
			try {
				var re = new RegExp('\\|' + value + '[^\\|]*', 'i');
				rest = words.match(re);
				if (rest != null) obj.value = rest[0].substr(1);
			} catch (e) { }
		} else {
			var max = words.length;
			for(var c = 0; c < max; c++) {
				if (value.toLowerCase() == words[c].toLowerCase()) { obj.value = words[c]; break; }
			}
		}
	});
}

function RGStudy(obj, n) {
	if (!n) n = 1;
	var s = '';
	for(var c = n-1; c >= 0; c--) s += '¨¨¨';
	
	var r = '';
	if (typeof(obj) == 'object') {
		if (obj.length) {
			r += '[\n';
			for(var c = 0; c < obj.length; c++) r += '¨¨¨' + s + c + ': ' + RGStudy(obj[c], n+1) + '\n';
			r += s + ']';				
		} else {
			r += '{\n';			
			for(var a in obj) r += '¨¨¨' + s + a + ': ' + RGStudy(obj[a], n+1) + '\n';
			r += s + '}';				
		}
	} else {
		r += '\'' + (obj.length > 100 ? obj.substr(0, 100) + '...' : obj) + '\'';
	}
	return r;
}

function RGOnlineImagePath(image, size) {
	return RGOnlineImageHost + image.Path + '_' + size + (image.Extension ? '.' + image.Extension : '');
}

function RGPrice(price, normalSpaces) {
	
	var space = normalSpaces ? ' ' : '&nbsp;';
	
	return RGLang({
		sv: ('' + Math.round(price)).replace(/(\d)(\d{3})$/, '$1' + space + '$2') + space + 'kr',
		no: ('' + Math.round(price)).replace(/(\d)(\d{3})$/, '$1' + space + '$2') + space + 'kr',
		en: '€' + ('' + Math.round(price)).replace(/(\d)(\d{3})$/, '$1' + space + '$2'),
		nl: '€' + ('' + Math.round(price)).replace(/(\d)(\d{3})$/, '$1' + space + '$2'),
		fr: '€' + ('' + Math.round(price)).replace(/(\d)(\d{3})$/, '$1' + space + '$2')
	});
}

function RGInitTopLayer(name) {
	if (!document.body) return;
	
	if (!name) name = 'RGInfoDiv';
	var div = document.createElement('DIV');
	div.id = name;
	div.style.position = 'absolute';
	div.style.visibility = 'hidden';
	div.style.zIndex = 99999999;
	
	return document.body.insertBefore(div, document.body.childNodes[0]); 
}

function RGGetTopLayer(name) {
	if (!name) name = 'RGInfoDiv';
	var div = document.getElementById(name);
	if (!div) div = RGInitTopLayer(name);
	return div;
}

function RGTopLayerAttach(obj) {
	obj.onmousemove = function(ev) { RGTopLayerNoticeMove(ev ? ev : window.event) };
	obj.onmouseout = function(ev) { RGHideTopLayer() };
}

function RGTopLayerNotice(e, content, extra) {
	if (content == '') return;

	var info = RGGetTopLayer();

	var width = false;
	if (extra && extra > 0) { width = extra; extra = false }

	info.innerHTML = RGShadowBox(content, extra ? extra : 'border: solid 1px silver; background-color: white; padding: 5px; font-family: Arial; font-size: 11px' + (width ? '; width: ' + width + 'px' : ''));
	info.style.visibility = 'inherit';	

	RGTopLayerNoticeMove(e);
}

function RGTopLayerNoticeMove(e, name) {
	var info = RGGetTopLayer(name);
	var x = e ? RGGetMouseX(e) + 12 : RGGetLayerX(info);
	var y = e ? RGGetMouseY(e) + 7 : RGGetLayerY(info);

	RGSetLayerPos(RGGetTopLayer(name), x, y, { flipInView: { dx: 12*2, dy: 7*2 } });
}

function RGHideTopLayer(name) {
	RGGetTopLayer(name).style.visibility = 'hidden';
}

function RGCrop(s, len, suffix) {
	if (!suffix) suffix = '...';
	return s.length <= len ? s : s.substring(0, len) + suffix;
}

function RGOnLoad(func) {
	var old = window.onload;
	window.onload = function() { if (old) old(); func() };
}

function RGInitEvent() {
	var old = document.body.onmousemove;
	document.body.onmousemove = function(e) { if (old) old(); RGEvent = { clientX: RGGetMouseX(e), clientY: RGGetMouseY(e) } };
}

function RGDropDown(obj, content, p) {
	var attachTo = p && p.attachTo ? p.attachTo : obj;
	var div;
	var exists = attachTo.previousSibling != null && attachTo.previousSibling.id == 'RGDropDownMenu';
	if (exists) {
		div = attachTo.previousSibling;
		div.onmouseover();
	} else {
		var tid = null;
		div = document.createElement('div');
		var old = obj.onmouseout;
		obj.onmouseout = function(e) { if (old) old(e); attachTo.previousSibling.onmouseout() };
		div.style.position = 'absolute';
		div.id = 'RGDropDownMenu';
		div.style.zIndex = p && p.zIndex ? p.zIndex : 99999998;
		div.style.display = 'none';
		div.style.marginLeft = (p && p.x != undefined ? p.x : 0) + 'px';
		div.style.marginTop = (p && p.y != undefined ? p.y : 16) + 'px';
		div.onmouseover = function() { if (tid) { clearTimeout(tid) } };
		var delay = p ? p.delay : undefined;
		div.onmouseout = function() {
				var _this = this;
				tid = setTimeout(
					function() { if (p && p.onBlur) p.onBlur(); tid = null; _this.style.display = 'none' },
					delay != undefined ? delay : 200
				)
		};
		attachTo.parentNode.insertBefore(div, attachTo);
	}

	div.style.display = 'inline';
	if (p && p.cache && exists) {
	} else {
		var box = RGShadowBox(content, p ? p : 'background-color: white; padding: 6px; border: solid 1px silver; white-space: nowrap');
		if (navigator.userAgent.match(/MSIE 6|Linux/)) {
			div.innerHTML = '<iframe frameborder="no" style="left: 2px; width: 0px; height: 0px; position: absolute"></iframe><div style="position: relative">' + box + '</div>';
			div.childNodes[0].style.width = (div.clientWidth - 4) + 'px';
			div.childNodes[0].style.height = (div.clientHeight - 4) + 'px';
		} else {
			div.innerHTML = box;
		}
	}
}

function RGAJAXPost(post, callback) {
	var http = navigator.appName == 'Microsoft Internet Explorer' ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();

	http.open('post', document.location.href, true);
	http.onreadystatechange = function() { if (http.readyState != 4) return; callback(http.responseText) };
	http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	http.send(post);
}

function RGGetFileXMLHTTP (pURL) {
	var xmlhttp;

	if (window.XMLHttpRequest) { // code for Mozilla, Safari, etc
		
		xmlhttp = new XMLHttpRequest();
		xmlhttp.open("GET", pURL, false);
		xmlhttp.send(null);	
	} else if (window.ActiveXObject) { //IE
		xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
		if (xmlhttp) {
			//xmlhttp.onreadystatechange=postFileReady;
			xmlhttp.open('GET', pURL, false);
			xmlhttp.send();
		}
	}
		
	if ( xmlhttp ) {
		if ( xmlhttp.readyState==4) {
			if (xmlhttp.status==200) {
				return xmlhttp.responseText;
			}
		}
	}

	return false;
}

function RGBrowseGeo(query, browseDivElementId, iFrameUrl, iFrameStyle, divStyle) {

	var div = document.getElementById(browseDivElementId);	
	div.style.visibility = 'hidden';

	//var obj = document.getElementById(objElementId);
	var html = RGShadowBox(
		'<iframe id=\"RGDestFrame\" src="' + iFrameUrl + '&word=' + escape(query) + '" frameborder=\"0\" style=\"' + (iFrameStyle ? iFrameStyle : 'width: 250px; height: 200px;') + '\"></iframe>'
		, (divStyle ? divStyle : 'border: solid 1px black; background-color: white')
	);

	setTimeout(function() { 
		div.innerHTML = html;
		var old = document.body.onmousedown;
		document.body.onmousedown = function(e) { if (old) old(e); document.body.onmousedown = old; div.innerHTML = '' };		
	}, 1);

	div.style.visibility = 'visible';
}

function RGDestSelect(value, destFieldElementId, browseDivElementId, close) {
	var dest = document.getElementById(destFieldElementId);
	dest.value = value;
	dest.focus();
	dest.select();

	if (close) {
		setTimeout(function() { document.getElementById(browseDivElementId).innerHTML = '' }, 1);
	}
	
}

function RGXMLRequest(url, post, callback) {
	var http = navigator.appName == 'Microsoft Internet Explorer' ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();

	if (typeof post == 'object') {
		var r = '';
		for(var c = 0; c < post.elements.length; c++) {
			var obj = post.elements[c];
			if ((obj.type == 'radio' || obj.type == 'checkbox') && !obj.checked) continue;
			r += obj.name + '=' + encodeURIComponent(obj.value) + '&';
		}
		post = r;
	}

	http.open(post ? 'post' : 'get', url ? url : document.location.href, true);
	http.onreadystatechange = function() { 
		if (http.readyState != 4) return; 
		if (callback) 
			callback(http.responseText); 
		else 
			try { 
				if (http.responseText.match(/SymWin/)) {
					eval(
						http.responseText.replace(
							/\s*<script(.|\s)+?<\/script>\s*/gi, 
							function(a) { return a.match(/SymWin/) ? '' : a }
						)
					);
				} else 
					eval(http.responseText);
			} catch (error) { 
				rg.logError('RGXMLRequest:' + url + ':' + post + ':' + error.message + ':' + http.responseText);
				alert('Error:\n' + error.message);
			} 
	};
	http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	http.send(post);

	return http;
}


function RGMemberIncomingCallback(r) {
	if (r) {
		if (r.match(/^<a/)) document.getElementById('RGForumPanel').innerHTML = r;
		if (r == 'retry') setTimeout(RGMemberIncomingTrigger, 60000);
	}
}

function RGMemberIncomingTrigger() {
	RGXMLRequest('/cgi-bin/rg/forum_ajax.cgi?event=check_incoming', true, RGMemberIncomingCallback);
}

function RGMemberIncomingInit() {
	setTimeout(RGMemberIncomingTrigger, 60000);
}

function RGLoadingIndicatorImage() {
	return '<img class="RGLoadingIndicator" alt="" src="http://' + window.location.hostname + '/groups/rg/images/ajax-loader-fb.gif" />';
	//return '<img class="RGLoadingIndicator" alt="" src="http://' + window.location.hostname + '/groups/rg/images/ajax-loader-squares.gif" />';
	//return '<img class="RGLoadingIndicator" alt="" src="http://' + window.location.hostname + '/groups/rg/images/ajax-loader1-transparent.gif" />';
}

function RGProgressBox(content, mainSite, title) {
	var middleContent = 
		'<div class="RGProgressBoxHeader" style="position: relative; left: -2px; top: -2px">' + 
			'<h2 style="margin-left: 0px; margin-bottom: 3px">' + 
				(title && mainSite ? title : RGLang('rg_lib_js_RGProgressBox_searching')) + 
				'&nbsp;&nbsp;' +
				(RGLoadingIndicatorImage()) +
			'</h2>' +
		'</div>' + 
		content;
	
	var html = '';

	try	{
		html = orbvilleShadowbox(middleContent);	
	}
	catch (e){
		html = '<div class="RGProgressBox" style="text-align: left width: 100%">' + middleContent + '</div>';
	}

	return html + '<br />';
}

function RGACQLodgingRatingToStars(rating, style) {
	return '<img ' + (style ? 'style="' + style + '"' : '') + ' src="http://' + window.location.hostname + '/reseguiden/rg/images/lodging_class_icons/' + ('' + (rating + 0.001)).substr(0, 4) + '.gif">';
}

function RGExtractAdContent(content) {
    var pattern = "<script[^>]+></script>";
    var rx = new RegExp(pattern, "i");
    return content.replace(rx, "");
}

function RGSetupAd() {
    var content = RGExtractAdContent(document.getElementById('adContent').innerHTML);
    if ( content && content.length > 1 ) {
        RGAdTomaResultContent = content;
    }
}


function pageShot() {
	var html = document.body.parentNode;

	var htmlParams = '';
	if (html.attributes) {
		for(var c = 0; c < html.attributes.length; c++) 
			if (html.attributes[c].specified) 
				htmlParams += html.attributes[c].name + '="' + html.attributes[c].value.replace(/"/g, '&quot;') + '" ';
	}

	var doctype = '';
	if (document.doctype) {
		var doctype = '<!DOCTYPE ' + document.doctype.name + ' PUBLIC "' + document.doctype.publicId + '" "' + document.doctype.systemId + '">';
	} else if (document.childNodes[0].text) {
		doctype = document.childNodes[0].text;
	}

	RGXMLRequest(
		'/cgi-bin/rg/page_shots.cgi', 
		'url=' + encodeURIComponent(document.URL) + '&' +
		'title=' + encodeURIComponent(document.title) + '&' +
		'document=' + encodeURIComponent(doctype + '\n<html ' + htmlParams.substr(0, htmlParams.length - 1) + '>' + html.innerHTML + '</html>'),
		function() { }
	);
}

function initPageShot() {
	try {
		if (document.pageShot) return;
		document.pageShot = true;

		if (document.addEventListener) 
			document.addEventListener('keydown', function(e) { if (e.keyCode == 119) pageShot() }, false); 
		else
		if (document.attachEvent) 
			document.attachEvent('onkeydown', function() { if (window.event.keyCode == 119) pageShot() });

	} catch (e) { }
}

initPageShot();
                                  
RGInit();
