﻿var ajaxRootElementId = "ajax_root";
var ajaxLoadingElementId = "ajax_loading";
var ajaxAddress = null;
var contentId = null;
var contentAddress = null;
var contentBaseAddress = null;
var contentTitle = null;
var contentItemTitle = null;
var contentLanguage = null;
var contentChanged = false;
var xmlDoc = null;
var ecardLink = null;

var process_title = "";
var process_message = "";
var process_message_title = "";

var scrollX;
var scrollY;

window.dhtmlHistory.create({
	debugMode: false,
	toJSON: function(o) {
		return Object.toJSON(o);
	}
	, fromJSON: function(s) {
		return s.evalJSON();
	}
});

function registerInit(callback) {
	/* for Mozilla */
	if (document.addEventListener) {
		document.addEventListener("DOMContentLoaded", callback, false);
	}
	/* for other browsers */
	window.onload = callback;
}

registerInit(init);

var initOnce = { succes : false };
function init() {
	if (!initOnce.succes) {
		initOnce.succes = true;
		
		dhtmlHistory.initialize();
		dhtmlHistory.addListener(historyChange);
		
		if (typeof(initLightBox) !== 'undefined') {
			initLightBox();
		}
		
		if ($('print_client_details') != null) {
			setTimeout("window.print()", 50);
		}
		
		var currentLocation = dhtmlHistory.getCurrentLocation();
		if (typeof(currentLocation) !== 'undefined' && currentLocation != "") {
			if (!currentLocation.startsWith("faq") && !currentLocation.startsWith("anchor")) {
				loadContent2("?" + (currentLocation.startsWith("tcm") ? "id=" : "ds=") + currentLocation, false);
			} else {
				if (currentLocation.startsWith("faq")) {
					removeFAQSelectedClassNames();
					$("link_" + currentLocation).parentNode.addClassName("selected");
				}
				gotoAnchor(currentLocation);
				//window.scrollTo(0, findPosY($(currentLocation)));
			}
			//loadContent2("?" + (currentLocation.startsWith("tcm") ? "id=" : "ds=") + currentLocation, false);
		} else {
			initLinks();
			initMovie();
			initResevationForm();
		}
		
		if (typeof(ecardLink) === 'string') {
			showEcard(ecardLink);
		}
	}
};

function addEvent(element, type, handle) {
	if (typeof element != "undefined") {
		if (typeof window.attachEvent != "undefined") {
			// Internet Explorer
			element.attachEvent("on" + type, handle);
		} else { // W3C standards
			element.addEventListener(type, handle, false);
		}
	}
}

function initLinks() {
	var ajaxRoot = $(ajaxRootElementId);
	if (ajaxRoot != null) {
		var hrefs = ajaxRoot.getElementsByTagName("a");
		var currentLink = window.location.protocol + "//" + window.location.host + window.location.pathname;
		for (var i=0; i<hrefs.length; i++) {
			var link = ("" + hrefs[i].getAttribute("href")).replace(currentLink, "");
			if (link.startsWith("?")) {
				addEvent(hrefs[i], "click", new Function("handleClick('" + link.substring(0) + "');"));
				hrefs[i].href = "#" + link.substring(4);
				
				var hrefs2 = $('menu').getElementsByTagName("a");
				for (var j=0; j<hrefs2.length; j++) {
					if (hrefs2[j] == hrefs[i]) {
						addEvent(hrefs[i], "click", new Function("flip("+j+");"));
					}
				}
			}
			if (link.startsWith("#faq")) {
				addEvent(hrefs[i], "click", new Function("handleFAQLinkClick('" + hrefs[i].id + "');"));
			}
			if (link.startsWith("#anchor")) {
				addEvent(hrefs[i], "click", new Function("gotoAnchor('" + link + "');"));
			}
			if (hrefs[i].rel != "" && !hrefs[i].rel.startsWith("terms")) {
				hrefs[i].innerHTML = labels[hrefs[i].rel];
			}
		}
		var imgs = ajaxRoot.getElementsByTagName("img");
		for (var j=0; j<imgs.length; j++) {
			if (imgs[j].alt.startsWith("LBL ")) {
				imgs[j].alt = labels[imgs[j].alt.substring(4)];
			}
		}
	}
	
	var sendtofriend = $('sendtofriend');
	if (sendtofriend != null) {
		addEvent(sendtofriend, "click", sendtofriendAction);
	}
	
	var printfriendly = $('printfriendly');
	if (printfriendly != null) {
		addEvent(printfriendly, "click", printfriendlyAction);
	}
	
	var blogthis = $('blogthis');
	if (blogthis != null) {
		addEvent(blogthis, "click", blogthisAction);
		blogthis.href = "javascript:void(0);"
	}
	
	var diggthis = $('diggthis');
	if (diggthis != null) {
		var diggthisurl = window.location.href;
		if (diggthisurl.indexOf("lang=") < 0) {
			var splits = (diggthisurl + "#").split("#");
			if (splits[0].indexOf("?") > 0) {
				splits[0] = splits[0] + "&lang=" + contentLanguage;
			} else {
				splits[0] = splits[0] + "?lang=" + contentLanguage;
			}
			diggthisurl = splits[0] + (("" + contentId).startsWith("tcm") ? "&id=" + contentId : "") + (splits[1] != "" && (contentId == "" || splits[1].indexOf(contentId) < 0) ? "#" + splits[1] : "");
		}
		if (contentTitle != null || contentItemTitle != null) {
			diggthis.href = "http://digg.com/submit?url=" + encodeURIComponent(diggthisurl) + "&title=" + encodeURIComponent("2009 - Yamaha VMAX - " + (contentItemTitle != null ? contentItemTitle : contentTitle)) + "";
		} else {
			diggthis.href = "http://digg.com/submit?url=" + encodeURIComponent(diggthisurl) + "&title=" + encodeURIComponent(document.title) + "";
		}
	}
}

var popw = null;
function blogthisAction() {
	var blogthisurl = window.location.href;
	if (blogthisurl.indexOf("lang=") < 0) {
		var splits = (blogthisurl + "#").split("#");
		if (splits[0].indexOf("?") > 0) {
			splits[0] = splits[0] + "&lang=" + contentLanguage;
		} else {
			splits[0] = splits[0] + "?lang=" + contentLanguage;
		}
		blogthisurl = splits[0] + (("" + contentId).startsWith("tcm") ? "&id=" + contentId : "") + (splits[1] != "" && (contentId == "" || splits[1].indexOf(contentId) < 0) ? "#" + splits[1] : "");
	}
	var message = '';
	if (document.selection) {
		message = document.selection.createRange().text;
	} else if (window.getSelection) {
		message = window.getSelection();
	} else if (document.getSelection) {
		message = document.getSelection();
	}
	popw = null;
	if (contentTitle != null || contentItemTitle != null) {
		popw = window.open('http://www.blogger.com/blog_this.pyra?t=' + encodeURIComponent(message) + '&u=' + encodeURIComponent(blogthisurl) + '&n=' + encodeURIComponent("2009 - Yamaha VMAX - " + (contentItemTitle != null ? contentItemTitle : contentTitle)),'bloggerForm','scrollbars=no,width=475,height=300,top=175,left=75,status=yes,resizable=yes');
	} else {
		popw = window.open('http://www.blogger.com/blog_this.pyra?t=' + encodeURIComponent(message) + '&u=' + encodeURIComponent(blogthisurl) + '&n=' + encodeURIComponent(document.title), 'bloggerForm','scrollbars=no,width=640,height=480,top=175,left=75,status=yes,resizable=yes');
	}
	if (!document.all && popw != null) {
		T = setTimeout('popw.focus()',50);
	}
}

function sendtofriendAction() {
	popw = window.open('/sendtofriend/index.jsp?title=' + encodeURIComponent("2009 - Yamaha VMAX - " + contentTitle) + '&url=' + encodeURIComponent(window.location.href.split("#")[0] + "?lang=" + contentLanguage + (("" + contentId).startsWith("tcm") ? "&id=" + contentId : "")),'vmaxsendtofriend','scrollbars=no,width=475,height=300,top=175,left=75,status=yes,resizable=yes');
	if (!document.all && popw != null) {
		T = setTimeout('popw.focus()',50);
	}
}

function printfriendlyAction() {
	popw = window.open('/print.jsp?title=' + encodeURIComponent("2009 - Yamaha VMAX - " + contentTitle) + '&url=' + (contentAddress) + "&lang=" + contentLanguage + (("" + contentId).startsWith("tcm") ? "&id=" + contentId : ""),'vmaxsendtofriend','scrollbars=yes,menubar=yes,width=900,height=600,top=75,left=75,status=yes,resizable=yes');
	if (!document.all && popw != null) {
		T = setTimeout('popw.focus()',50);
	}
}

function gotoAnchor(anchor) {
	gotoAnchorSmooth(anchor, false);
}

function gotoAnchorSmooth(anchor, smoothly) {
	var ypos = findPosY($(anchor));
	//RW@INDI: fixed scroll
	window.scrollTo(0, 400);
	//if (smoothly) {
	//	windowScrolling(ypos, (document.all)?document.body.scrollTop:window.pageYOffset, 25);
	//} else {
	//	window.scrollTo(0, ypos);
	//}
}

function openwindow(url, title, attributes) {
	popw = window.open(url, title, attributes);
	setTimeout("setTimeout('popw.focus()',50);");
}

function flip(index) {
	if (typeof($('main_flash_movie').flip) !== 'undefinded') {
		$('main_flash_movie').flip(index+1);
	}
}

function windowScrolling(max, current, step) {
	if (current > max) {
		var newCurrent = Math.max(current - step, max);
		window.scrollBy(0, newCurrent - current);
		
		setTimeout("windowScrolling(" + max + "," + newCurrent + "," + step + ")", 8);
	} else if (current < max) {
		var newCurrent = Math.min(current + step, max);
		window.scrollBy(0, newCurrent - current);
		
		setTimeout("windowScrolling(" + max + "," + newCurrent + "," + step + ")", 8);
	} else {
		
	}
}

function menuAnchorClick(link, anchor) {
	dhtmlHistory.add(anchor);
	gotoAnchor(anchor);
	removeFAQSelectedClassNames();
	$(link.parentNode).addClassName("selected");
}

function handleFAQLinkClick(linkid) {
	var link = $(linkid);
	removeFAQSelectedClassNames();
	$(link.parentNode).addClassName("selected");
}

function removeFAQSelectedClassNames() {
	var ajaxRoot = $(ajaxRootElementId);
	if (ajaxRoot != null) {
		var hrefs = ajaxRoot.getElementsByTagName("a");
		for (var i=0; i<hrefs.length; i++) {
			$(hrefs[i].parentNode).removeClassName("selected");
		}
	}
}

var currentStep = 0;
function showReservationStep(step) {
	var valid = validateReservationForm();
	if (valid) {
		switch(step) {
			case 1: setReservationHeader('title_step1', 1); break;
			case 2: setReservationHeader('title_step2', 2); break;
			case 3: setReservationHeader('title_step3', 3); break;
			case 4: setReservationHeader('title_step4', 4); break;
			case 5: setReservationHeader('title_step5', 5); break;
		}
		setReservationForm(step);
	}
}

function setReservationHeader(title_id, current) {
	var base = $('currentstep_one_of_base');
	var header = $('currentstep_title');
	var title = $(title_id);
	if (base != null && header != null && title != null) {
		header.innerHTML = base.innerHTML.replace('${current}', '' + current).replace('${total}', '5') + ': ' + title.innerHTML;
	}
}

function setReservationForm(step) {
	var form1 = $('reservation_step' + step);
	if (form1 != null) {
		form1.style.display = 'block';
		var form2 = $('reservation_step' + currentStep);
		if (form2 != null && step != currentStep) {
			form2.style.display = 'none';
		}
	}
	var link1 = $('breadcrumb' + step);
	if (link1 != null) {
		link1.className = 'breadcrumb active';
		var link2 = $('breadcrumb' + currentStep);
		if (link2 != null && step != currentStep) {
			link2.className = 'breadcrumb';
		}
	}
	
	currentStep = step;
	if (step == 3) {
		// fill plate flash
		sendToFlash($('rf_plate_text_input').value);
	}
	if (step == 4) {
		var countryDropdown = $('country');
		var strCountry = countryDropdown.options[countryDropdown.selectedIndex].value
		var strCoords = countryDropdown.options[countryDropdown.selectedIndex].className
		MMYME.LocationSearch.changeCountry(strCoords, strCountry);
	}
	if (step == 5) {
		// fill plate flash
		sendToConfirmFlash($('rf_plate_text_input').value);
	}
}

function sendToFlash(value) {
	if ($('step3_plate_flash') != null) {
		if (typeof($('step3_plate_flash').sendStringToFlash) === 'undefined') {
			setTimeout('sendToFlash("' + value + '")', 100);
		} else {
			$('step3_plate_flash').sendStringToFlash(value);
		}
	}
}

function sendToConfirmFlash(value) {
	if ($('step5_plate_flash') != null) {
		if (typeof($('step5_plate_flash').sendStringToFlash) === 'undefined') {
			setTimeout('sendToConfirmFlash("' + value + '")', 100);
		} else {
			$('step5_plate_flash').sendStringToFlash(value);
		}
	}
}

var detailPopup = null;
function printReservation() {
	var frm = $('reservationform');
	if (frm != null) {
		var pAction = frm.action;
		var pTarget = frm.target;
		frm.action = 'print_reservation_details.jsp';
		frm.target = 'printed_details';
		
		detailPopup = openwindow('print_reservation_details.jsp', 'printed_details', 'scrollbars=yes,menubar=yes,width=800,height=600,top=35,left=75,status=yes,resizable=yes');
		setTimeout('postPrintReservation("' + pAction + '","' + pTarget + '");', 3000)
	}
}

function postPrintReservation(pAction, pTarget) {
	var frm = $('reservationform');
	if (frm != null) {
		frm.submit();
		//setTimeout("detailPopup.focus()",50);
		
		frm.action = pAction;
		frm.target = pTarget;
	}
}

function initResevationForm() {
	if ($('reservation_form_container') != null) {
		showReservationStep(1);
	}
	if ($('newsletter_form_container') != null || $('reservation_step2') != null) {
		// create date dropdowns
		var date = new Date();
		var dayElement = $('rf_birth_day');
		for (var day = 1; day <= 31; day++) {
			dayElement.options[day - 1] = new Option('' + day, '' + day);
		}
		
		var monthElement = $('rf_birth_month');
		for (var month = 1; month <= 12; month++) {
			monthElement.options[month - 1] = new Option('' + month, '' + month);
		}
		
		var yearElement = $('rf_birth_year');
		for (var year = date.getFullYear() - 17; year >= date.getFullYear() - 87; year--) {
			yearElement.options[(date.getFullYear() - 17) - year] = new Option('' + year, '' + year);
		}
		
		var countryCount = 0;
		if (currentCountry == 'UK') {
			currentCountry = 'GB';
		}
		var countryElement = $('rf_country');
		for (var key in countries) {
			countryElement.options[countryCount] = new Option('' + countries[key], '' + key);
			if (key == currentCountry) {
				countryElement.selectedIndex = countryCount;
			}
			countryCount++;
		}
		
		var postalcodeElement = $('rf_postalcode');
		if (currentCountry == 'IE') {
			postalcodeElement.value = 'n.a.';
		}
		
		var ihaveabikeElement = $('rf_checkbox_haveabike');
		if (ihaveabikeElement != null) {
			var brandElement = $('rf_bikebrand');
			var modelElement = $('rf_bikemodel');
			var bikeyearElement = $('rf_bikeyear');
			addEvent(ihaveabikeElement, "click", haveBike);
			addEvent(brandElement, "change", changeBikeBrand);
			
			var brandCount = 0;
			for (var key in brandmodels) {
				brandElement.options[brandCount] = new Option('' + key, '' + key);
				brandCount++;
			}
			for (var year = date.getFullYear(); year >= date.getFullYear() - 25; year--) {
				bikeyearElement.options[(date.getFullYear()) - year] = new Option('' + year, '' + year);
			}
			bikeyearElement.options[26]  = new Option('Classic', 'Classic');
			haveBike();
			changeBikeBrand();
		}
		
		var languageElement = $('lang');
		if (languageElement != null) {
			languageElement.value = contentLanguage;
		}
	}
}

function clearDropDown(objSelect) {
	if (objSelect != null) {
		for (var i = (objSelect.options.length - 1); i >= 0; i--) {
			objSelect.options[i] = null;
		}
	}
}

function haveBike() {
	var ihaveabikeElement = $('rf_checkbox_haveabike');
	if (ihaveabikeElement != null) {
		$('rf_bikebrand').style.display = ihaveabikeElement.checked ? "block" : "none";
		$('rf_bikebrand_lbl').style.display = ihaveabikeElement.checked ? "block" : "none";
		$('rf_bikemodel').style.display = ihaveabikeElement.checked ? "block" : "none";
		$('rf_bikemodel_lbl').style.display = ihaveabikeElement.checked ? "block" : "none";
		$('rf_bikeyear').style.display = ihaveabikeElement.checked ? "block" : "none";
		$('rf_bikeyear_lbl').style.display = ihaveabikeElement.checked ? "block" : "none";
	}
}

function changeBikeBrand() {
	var brandElement = $('rf_bikebrand');
	var modelElement = $('rf_bikemodel');
	var modelCount = 0;
	clearDropDown(modelElement);
	for (var key in brandmodels[brandElement.value]) {
		modelElement.options[modelCount] = new Option('' + brandmodels[brandElement.value][key], '' + brandmodels[brandElement.value][key]);
		modelCount++;
	}

}

var currentDealer = null;
function selectDealer(dealerid, dealer, country) {
	currentDealer = dealer;
	var result = $('rf_display_dealer');
	var directresult = $('selected_dealer');
	if (directresult != null && result != null) {
		var html = ( dealer.name || '' ) + '<br/>' + ( dealer.street || '' ) + '<br/>' + ( dealer.street2 || '' ) + '<br/>' + ( dealer.town || '' ) + (country == 'gb' ? ('<br/>' + ( dealer.state || '' ) + '<br/>' + ( dealer.pc || '' ) + '<br/>' + ( dealer.telephone || '' )) : ('<br/>' + ( dealer.telephone || '' ) + '<br/>' + ( dealer.state || '' )));
		result.innerHTML = html;
		directresult.innerHTML = html;
		directresult.style.display = 'block';
		$('rf_dealer_info'). value = html;
		$('rf_dealer_id'). value = dealerid;
		$('rf_dealer_name').value = dealer.name;
	}
}

var othertext = "andere";
var mandatoryElements = new Array("rf_first_name", "rf_surname", "rf_street1", "rf_postalcode", "rf_city", "rf_country", "rf_phonenumber", "rf_email_address");
var mandatoryError = "Please enter a";
var invalidError = "Please enter a valid";
var checkBoxError = "Please select";
var noDealerError =  "You need to select a dealer!";
var currentCountry = "GB";
var countries = {	"":"-- Please select --",
					"AL":"Albania",
					"AT":"Austria",
					"BY":"Belarus",
					"BE":"Belgium",
					"BA":"Bosnia",
					"BG":"Bulgaria",
					"HR":"Croatia",
					"CY":"Cyprus",
					"CZ":"Czech Republic",
					"DK":"Denmark",
					"EE":"Estonia",
					"FI":"Finland",
					"FR":"France",
					"DE":"Germany",
					"GR":"Greece",
					"HU":"Hungary",
					"IS":"Iceland",
					"IE":"Ireland",
					"IT":"Italy",
					"LV":"Latvia",
					"LI":"Liechtenstein",
					"LT":"Lithuania",
					"LU":"Luxembourg",
					"MK":"Macedonia",
					"MT":"Malta",
					"MC":"Monaco",
					"NL":"Netherlands",
					"NO":"Norway",
					"PL":"Poland",
					"PT":"Portugal",
					"RO":"Romania",
					"RU":"Russia",
					"SK":"Slovakia",
					"SI":"Slovenia",
					"ES":"Spain",
					"SE":"Sweden",
					"CH":"Switzerland",
					"UA":"Ukraine",
					"GB":"United Kingdom" };
var brandmodels = {
	"Yamaha" : {	0 : "BT 1100 Bulldog",
					1 : "DT 125 R/RE",
					2 : "DT 125 X",
					3 : "FJR 1300",
					4 : "FZ1 Fazer",
					5 : "FZ1 Naked",
					6 : "FZ6 Fazer",
					7 : "FZ6 Naked",
					8 : "FZR 1000/YZF 1000 ThunderAce",
					9 : "FZR 600/YZF 600 ThunderCat",
					10 : "FZS 1000 Fazer",
					11 : "FZS 600 Fazer",
					12 : "MT-01",
					13 : "MT-03",
					14 : "TDM 850/900",
					15 : "TDR 125",
					16 : "T-Max 500",
					17 : "TT 600",
					18 : "TW 125/225",
					19 : "TZR 125",
					20 : "V-max 1200",
					21 : "WR 250F",
					22 : "WR 250X",
					23 : "WR 400-450F",
					24 : "XJ 600 Diversion",
					25 : "XJ 900 Diversion",
					26 : "XJR 1200/1300",
					27 : "XT 125 R/X",
					28 : "XT 500-600",
					29 : "XT 660 R",
					30 : "XT 660 X",
					31 : "XTZ 600/660/750 Ténéré",
					32 : "XV 1600/1700",
					33 : "XV 1900 Midnight Star",
					34 : "XV 535 Virago",
					35 : "XV/XVS 125",
					36 : "XVS 1100/1300",
					37 : "XVS 650 Drag Star",
					38 : "YBR125",
					39 : "YBR250",
					40 : "YZ 125",
					41 : "YZ 250 (2-stroke)",
					42 : "YZ 250F (4-stroke)",
					43 : "YZ 400-450F",
					44 : "YZ 85",
					45 : "YZF-R1",
					46 : "YZF-R125",
					47 : "YZF-R6",
					48 : "..." },
	"Aprilia" : {	0 : "NA 850 Mana",
					1 : "Pegaso 650/660",
					2 : "RS 125",
					3 : "RS 250",
					4 : "RSV 1000",
					5 : "RXW 4.5",
					6 : "SL 750 Shiver",
					7 : "SMV 750 Dorsoduro",
					8 : "SXV 4.5",
					9 : "Tuono 1000",
					10 : "..." },
	"BMW" : {	0 : "F 650 GS(twin 850)",
				1 : "F 650 GS/ST/PD/CS",
				2 : "F 800",
				3 : "F 800 GS",
				4 : "G 650 X-series",
				5 : "HP 2",
				6 : "HP2 Sport",
				7 : "K 1200 LT/GT",
				8 : "K 1200 R",
				9 : "K 1200 RS",
				10 : "K 1200 S",
				11 : "K1100/1200LT",
				12 : "R 1100-1200 RS/ST",
				13 : "R 1100-1200 RT",
				14 : "R 1100-1200 S/Boxer Cup",
				15 : "R 850-1150 R",
				16 : "R 850-1200 GS",
				17 : "..." },
	"Ducati" : {	0 : "1098 series",
					1 : "748/916/996/998 series",
					2 : "749/999 series",
					3 : "Desmosedici RR",
					4 : "Hypermotard",
					5 : "Monster series",
					6 : "Multistrada series",
					7 : "Sport 1000 series",
					8 : "SS series",
					9 : "ST2/ST3/ST4",
					10 : "..." },
	"Harley-Davidson" : {	0 : "Dyna-series",
							1 : "Road King-series",
							2 : "Softtail-series",
							3 : "Sportster-series",
							4 : "Touring-series",
							5 : "V-Rod",
							6 : "XR 1200",
							7 : "..." },
	"Honda" : {	0 : "CB 1000 R",
				1 : "CB 1000/1100/X-11",
				2 : "CB 1300/S",
				3 : "CB 600 Hornet",
				4 : "CB 750",
				5 : "CB 900 Hornet",
				6 : "CB series 250-450",
				7 : "CBF 1000",
				8 : "CBF 500",
				9 : "CBF 600",
				10 : "CBR 1000 F",
				11 : "CBR 1100 XX Blackbird",
				12 : "CBR 125 R",
				13 : "CBR 600 F",
				14 : "CBR 600 RR",
				15 : "CBR 900/1000 RR FireBlade",
				16 : "CR series (2-stroke)",
				17 : "CRF series (4-stroke)",
				18 : "DN-01",
				19 : "GL 1500/1800 Goldwing",
				20 : "NTV 650/700 Deauville",
				21 : "NX/FMX/FX/SLR 650",
				22 : "ST 1100/1300 Pan European",
				23 : "VFR 750/800",
				24 : "VT 600 Shadow",
				25 : "VT 750-1100 Shadow",
				26 : "VTR 1000 SP1/SP2",
				27 : "VTR 1000F Firestorm",
				28 : "XL series 250-600",
				29 : "XLV 1000 Varadero",
				30 : "XLV 125 Varadero",
				31 : "XLV 600/650 Transalp",
				32 : "XR 600/650 R",
				33 : "XRV 650/750 Africa Twin",
				34 : "..." },
	"Kawasaki" : {	0 : "1400 GTR",
					1 : "ER-5",
					2 : "ER-6 F",
					3 : "ER-6 N",
					4 : "KLE 500",
					5 : "KLR/KLX 650",
					6 : "KX series (2-stroke)",
					7 : "KXF series (4-stroke)",
					8 : "Versys",
					9 : "VN Vulcan series",
					10 : "Z 750/1000",
					11 : "ZR-7/ZR 750",
					12 : "ZRX 1100/1200",
					13 : "ZX-10R Ninja",
					14 : "ZX-12R Ninja",
					15 : "ZX-6R/RR Ninja",
					16 : "ZX-7R Ninja",
					17 : "ZX-9R Ninja",
					18 : "ZZ-R 1200/1400",
					19 : "ZZ-R 600",
					20 : "..." },
	"KTM" : {	0 : "690 Enduro",
				1 : "690 Supermoto",
				2 : "Adventure/Enduro 950/990",
				3 : "Duke 640/690",
				4 : "EXC-series (2-stroke)",
				5 : "EXC-series (4-stroke)",
				6 : "LC4-series",
				7 : "RC 8",
				8 : "SuperDuke 950/990",
				9 : "Supermoto 950/990",
				10 : "SX-series (2-stroke)",
				11 : "SX-series (4-stroke)",
				12 : "..." },
	"Suzuki" : {	0 : "B-King 1300",
					1 : "DL 1000 V-Strom",
					2 : "DL 650 V-Strom",
					3 : "DR 125/250/350",
					4 : "DR/XF 650 Freewind",
					5 : "DR-Z 400",
					6 : "GS 500 E/F",
					7 : "GSF 1250 Bandit",
					8 : "GSF 600/650 Bandit",
					9 : "GSX 1200/1400/Inazuma",
					10 : "GSX 1300 R Hayabusa",
					11 : "GSX 600/750/1100 F",
					12 : "GSX 750",
					13 : "GSX-R 1000/1100",
					14 : "GSX-R 600",
					15 : "GSX-R 750",
					16 : "RM series (2-stroke)",
					17 : "RM-Z series (4-stroke)",
					18 : "SV 1000",
					19 : "SV 650",
					20 : "VN Marauder/Intruder-series",
					21 : "..." },
	"Triumph" : {	0 : "Classic series",
					1 : "Daytona 675",
					2 : "Daytona 955/1200",
					3 : "Rocket-3 (2.3)",
					4 : "Speed Triple 955/1050",
					5 : "Street Triple 675",
					6 : "Tiger",
					7 : "..." },
	"..." : {	0 : "..." }
}

function submitNewsLetterForm() {
	if (validateNewsletterForm()) {
		$('transp_error_bg').style.visibility = "hidden";
		$('newsletterform').submit();
	} else {
		$('transp_error_bg').style.visibility = "visible";
	}
}

function submitReservationForm() {
	currentStep = 5;
	if (validateReservationForm()) {
		$('reservationform').submit();
	}
}

function validateNewsletterForm() {
	var errMsg = $('newsletter_error_messages');
	var valid = true;
	
	if (errMsg != null) {
		errMsg.innerHTML = "";
		errMsg.style.visibility = "hidden";
		
		var inputs = document.getElementsByTagName("input");
		for (var i=0; i<inputs.length; i++) {
			if (inputs[i].className == "error") { 
				inputs[i].className = "";
			}
		}
		
		var labels = document.getElementsByTagName("label");
		for (var i=0; i<labels.length; i++) {
			if (labels[i].className.indexOf("error") >= 0) {
				labels[i].className = labels[i].className.substring(0, labels[i].className.indexOf("error"));
			}
		}
		
		var errorFieldCount = 0;
		var errorFields = "<ul>";
		var lastErrorField = "";
		for (var i=0; i<mandatoryElements.length; i++) {
			var mandatoryElement = $(mandatoryElements[i]);
			if (mandatoryElement != null && (mandatoryElement.value == null || mandatoryElement.value == "")) {
				mandatoryElement.className = "error";
				var label = $(mandatoryElements[i] + '_lbl');
				if (label != null) {
					lastErrorField = "<label for=\"" + label.htmlFor + "\" class=\"error\">" + label.innerHTML.substring(0, label.innerHTML.indexOf("<")) + "</label>";
					errorFields += "<li>" + lastErrorField + "</li>"
					label.className = "error";
					errorFieldCount++;
				}
				valid = false;
				errMsg.innerHTML = mandatoryError;
				errMsg.style.visibility = "visible";
			}
		}
		
		if (valid) {
			// check valid email
			var emailElement = $('rf_email_address');
			if (!echeck(emailElement.value)) {
				emailElement.className = "error";
				var label = $('rf_email_address_lbl');
				if (label != null) {
					lastErrorField = "<label for=\"" + label.htmlFor + "\" class=\"error\">" + label.innerHTML.substring(0, label.innerHTML.indexOf("<")) + "</label>";
					errorFields += "<li>" + lastErrorField + "</li>"
					label.className = "error";
					errorFieldCount++;
				}
				valid = false;
				errMsg.innerHTML = invalidError;
				errMsg.style.visibility = "visible";
			}
		}
		
		if (valid) {
			// check checkboxes checked
			var termsCheckboxElement = $('rf_checkbox_terms');
			var signupCheckboxElement = $('rf_checkbox_signup');
			if (signupCheckboxElement != null && !signupCheckboxElement.checked) {
				var label = $('rf_checkbox_signup_lbl');
				if (label != null) {
					lastErrorField = "<label for=\"" + label.htmlFor + "\" class=\"error\">" + label.innerHTML + "</label>";
					errorFields += "<li>" + lastErrorField + "</li>"
					label.className = label.className + " error";
					errorFieldCount++;
				}
				valid = false;
				errMsg.innerHTML = checkBoxError;
				errMsg.style.visibility = "visible";
			}
			if (termsCheckboxElement != null && !termsCheckboxElement.checked) {
				var label = $('rf_checkbox_terms_lbl');
				if (label != null) {
					lastErrorField = "<label for=\"" + label.htmlFor + "\" class=\"error\">" + label.childNodes[0].innerHTML + "</label>";
					errorFields += "<li>" + lastErrorField + "</li>"
					label.className = label.className + " error";
					errorFieldCount++;
				}
				valid = false;
				errMsg.innerHTML = checkBoxError;
				errMsg.style.visibility = "visible";
			}
		}
		
		errorFields += "</ul>";
		
		if (errorFieldCount > 0) {
			if (errorFieldCount == 1) {
				errMsg.innerHTML = errMsg.innerHTML.replace("${fields}", " <span class=\"errorlabel\">" + lastErrorField + "</span>");
			} else {
				errMsg.innerHTML = errMsg.innerHTML.replace("${fields}", errorFields);
			}
		}
	}
	return valid;
}

function validateReservationForm() {
	var valid = true;
	var errorFieldCount = 0;
	var errorFields = "<ul>";
	var lastErrorField = "";
	
	var errMsg = null;
	switch(currentStep) {
		case 1: 
			// no validation needed
			break;
		case 2:
			// validate naw
			errMsg = $('step2_error_messages');
			errMsg.innerHTML = "";
			errMsg.style.visibility = "hidden";
			
			var inputs = document.getElementsByTagName("input");
			for (var i=0; i<inputs.length; i++) {
				if (inputs[i].className == "error") { 
					inputs[i].className = "";
				}
			}
			
			var labels = document.getElementsByTagName("label");
			for (var i=0; i<labels.length; i++) {
				if (labels[i].className.indexOf("error") >= 0) {
					labels[i].className = labels[i].className.substring(0, labels[i].className.indexOf("error"));
				}
			}
			
			for (var i=0; i<mandatoryElements.length; i++) {
				var mandatoryElement = $(mandatoryElements[i]);
				if (mandatoryElement != null && (mandatoryElement.value == null || mandatoryElement.value == "")) {
					mandatoryElement.className = "error";
					var label = $(mandatoryElements[i] + '_lbl');
					if (label != null) {
						lastErrorField = "<label for=\"" + label.htmlFor + "\" class=\"error\">" + label.innerHTML.substring(0, label.innerHTML.indexOf("<")) + "</label>";
						errorFields += "<li>" + lastErrorField + "</li>"
						label.className = "error";
						errorFieldCount++;
					}
					valid = false;
					errMsg.innerHTML = mandatoryError;
					errMsg.style.visibility = "visible";
				}
			}
			
			if (valid) {
				// check valid email
				var emailElement = $('rf_email_address');
				if (!echeck(emailElement.value)) {
					emailElement.className = "error";
					var label = $('rf_email_address_lbl');
					if (label != null) {
						lastErrorField = "<label for=\"" + label.htmlFor + "\" class=\"error\">" + label.innerHTML.substring(0, label.innerHTML.indexOf("<")) + "</label>";
						errorFields += "<li>" + lastErrorField + "</li>"
						label.className = "error";
						errorFieldCount++;
					}
					valid = false;
					errMsg.innerHTML = invalidError;
					errMsg.style.visibility = "visible";
				}
			}
			
			if (valid) {
				// check checkboxes checked
				var termsCheckboxElement = $('rf_checkbox_terms');
				if (termsCheckboxElement != null && !termsCheckboxElement.checked) {
					var label = $('rf_checkbox_terms_lbl');
					if (label != null) {
						lastErrorField = "<label for=\"" + label.htmlFor + "\" class=\"error\">" + label.childNodes[0].innerHTML + "</label>";
						errorFields += "<li>" + lastErrorField + "</li>"
						label.className = label.className + " error";
						errorFieldCount++;
					}
					valid = false;
					errMsg.innerHTML = checkBoxError;
					errMsg.style.visibility = "visible";
				}
			}
			errorFields += "</ul>";
			
			if (errorFieldCount > 0) {
				if (errorFieldCount == 1) {
					errMsg.innerHTML = errMsg.innerHTML.replace("${fields}", " <span class=\"errorlabel\">" + lastErrorField + "</span>");
				} else {
					errMsg.innerHTML = errMsg.innerHTML.replace("${fields}", errorFields);
				}
			}
			
			break;
		case 3:
			// check valid plate text
			errMsg = $('step3_error_messages');
			errMsg.innerHTML = "";
			errMsg.style.visibility = "hidden";
			
			var mandatoryElement = $('rf_plate_text_input');
			if (mandatoryElement != null && (mandatoryElement.value == null || mandatoryElement.value == "")) {
				mandatoryElement.className = "error";
				var label = $('rf_plate_text_input_lbl');
				if (label != null) {
					lastErrorField = "<label for=\"" + label.htmlFor + "\" class=\"error\">" + label.innerHTML.substring(0, label.innerHTML.indexOf("<")) + "</label>";
					errorFields += "<li>" + lastErrorField + "</li>"
					label.className = "error";
					errorFieldCount++;
				}
				valid = false;
				errMsg.innerHTML = mandatoryError;
				errMsg.style.visibility = "visible";
			}
			errorFields += "</ul>";
			
			if (errorFieldCount > 0) {
				if (errorFieldCount == 1) {
					errMsg.innerHTML = errMsg.innerHTML.replace("${fields}", " <span class=\"errorlabel\">" + lastErrorField + "</span>");
				} else {
					errMsg.innerHTML = errMsg.innerHTML.replace("${fields}", errorFields);
				}
			}
				
			break;
		case 4:
			// check dealer selected
			var dID = $('rf_dealer_id');
			if (currentDealer == null || dID.value == null || dID.value == '') {
				valid = false;
				alert(noDealerError);
			}
			break;
		case 5:
			// check dealer selected
			var dID = $('rf_dealer_id');
			if (currentDealer == null || dID.value == null || dID.value == '') {
				valid = false;
				alert(noDealerError);
			}
			break;
	}
	
	syncReservationInputs();
	return valid;
}

function syncReservationInputs() {
	switch(currentStep) {
		case 1:
			// don't sync
			break;
		case 2:
			// sync naw
			$('rf_display_name').innerHTML = $('rf_title').value + '. ' + $('rf_first_name').value + ' ' + $('rf_surname').value;
			$('rf_display_address').innerHTML = $('rf_street1').value + '<br/>' + $('rf_street2').value + '<br/>' + $('rf_street3').value;
			$('rf_display_postalcode').innerHTML = $('rf_postalcode').value;
			$('rf_display_city').innerHTML = $('rf_city').value;
			$('rf_display_country').innerHTML = countries[$('rf_country').value];
			$('rf_display_phonenumber').innerHTML = $('rf_phonenumber').value;
			$('rf_display_email').innerHTML = $('rf_email_address').value;
			$('rf_display_birthdate').innerHTML = $('rf_birth_day').value + '-' + $('rf_birth_month').value + '-' + $('rf_birth_year').value;
			if ($('rf_checkbox_haveabike').checked) {
				$('rf_display_bike').innerHTML = '' + $('rf_bikebrand').value + '<br/>' + $('rf_bikemodel').value + '<br/>' + $('rf_bikeyear').value;
				$('rf_display_bike').style.display = 'inline';
				$('rf_display_bike_lbl').style.display = 'inline';
			} else {
				$('rf_display_bike').innerHTML = '&nbsp;';
				$('rf_display_bike').style.display = 'none';
				$('rf_display_bike_lbl').style.display = 'none';
			}
			break;
		case 3:
			// sync plate
			var elForm = $('rf_plate_text');
			var elInput = $('rf_plate_text_input');
			elForm.value = elInput.value;
			break;
		case 4:
			// sync dealer
			break;
		case 5:
			// don't sync
			break;
	}
}

function echeck(str) {
	var at="@"
	var dot="."
	var lat=str.indexOf(at)
	var lstr=str.length
	var ldot=str.indexOf(dot)
	if (str.indexOf(at)==-1) {
		return false;
	}
	if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr) {
		return false;
	}
	if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr) {
		return false;
	}
	if (str.indexOf(at,(lat+1))!=-1) {
		return false;
	}
	if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot) {
		return false;
	}
	if (str.indexOf(dot,(lat+2))==-1) {
		return false;
	}
	if (str.indexOf(" ")!=-1) {
		return false;
	}
	return true;
}

function historyChange(newLocation, historyData) {
	if (typeof(newLocation) !== 'undefined' && newLocation.length > 1) {
		if (!newLocation.startsWith("faq") && !newLocation.startsWith("anchor")) {
			loadContent2("?" + (newLocation.startsWith("tcm") ? "id=" : "ds=") + newLocation, false);
		} else {
			if (newLocation.startsWith("faq")) {
				removeFAQSelectedClassNames();
				$("link_" + newLocation).parentNode.addClassName("selected");
			}
			gotoAnchor(newLocation);
			// window.scrollTo(0, findPosY($(newLocation)));
		}
	} else {
		if (!contentChanged) {
			initLinks();
			initMovie();
			initResevationForm();
			if ($("link_faq1") != null) {
				removeFAQSelectedClassNames();
				$("link_faq1").parentNode.addClassName("selected");
			}
			var anchorLinks = $('anchorlinks');
			if (anchorLinks != null && anchorLinks.childNodes.length > 0) {
				removeFAQSelectedClassNames();
				anchorLinks.getElementsByTagName('li')[0].className = "selected";
				gotoAnchor('');
			}
		} else {
			loadContent2("?id=", false);
		}
	}
}

function handleClick(params) {
	scrollX = (document.all)?document.body.scrollLeft:window.pageXOffset;
	scrollY = (document.all)?document.body.scrollTop:window.pageYOffset;
	dhtmlHistory.add(params.substring(4), contentTitle);
	loadContent2(params, false);
}

function loadContent(params) {
	loadContent2(params, true);
}

function loadContent2(params, addEntry) {
	var ajaxRoot = $(ajaxRootElementId);
	if (ajaxRoot != null) {
		
		// empty the ajax element
		//if (ajaxRoot.hasChildNodes()) {
		//	while (ajaxRoot.childNodes.length >= 1) {
		//		ajaxRoot.removeChild(ajaxRoot.firstChild);
		//	}
		//}
		
		// display waiting image
		if (addEntry) {
			dhtmlHistory.add(params.substring(4));
			document.title = document.title;
		}
		
		var loadingImg = $(ajaxLoadingElementId);
		if (loadingImg != null) {
			// var scrlX = (document.all)?document.body.scrollLeft:window.pageXOffset;
			// var scrlY = (document.all)?document.body.scrollTop:window.pageYOffset;
			
			// var myWidth = 0
			// var myHeight = 0;
			// if( typeof( window.innerWidth ) == 'number' ) {
				// // Non-IE
				// myWidth = window.innerWidth;
				// myHeight = window.innerHeight;
			// } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
				// // IE 6+ in 'standards compliant mode'
				// myWidth = document.documentElement.clientWidth;
				// myHeight = document.documentElement.clientHeight;
			// } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
				// // IE 4 compatible
				// myWidth = document.body.clientWidth;
				// myHeight = document.body.clientHeight;
			// }
			
			// var contentElement = $('content').getElementsByTagName("h1")[0];
			// var elWidth = (scrlY + (myHeight / 2) - (loadingImg.offsetWidth / 2));
			// var elHeight = (scrlY + (myHeight / 2) - (loadingImg.offsetHeight / 2));
			// loadingImg.style.top = (findPosY(contentElement) + 10) + "px";
			// loadingImg.style.left = (findPosX(contentElement) - 35) + "px";
			// // loadingImg.style.width = contentElement.offsetWidth;
			loadingImg.style.display = 'block';
		}
		
		contentChanged = true;
		// execute the ajax call
		ajax_loadContent(ajaxRootElementId, handleAjaxCall, ajaxAddress + params + "&url=" + encodeURIComponent(contentAddress) + "&t=" + encodeURIComponent(contentTitle))
	}
}

function handleAjaxCall() {
	var ajaxRoot = $(ajaxRootElementId);
	if (ajaxRoot != null) {
		
		// remove waiting image
		var loadingImg = $(ajaxLoadingElementId);
		if (loadingImg != null) {
			loadingImg.style.display = 'none';
		}
		
		//ajaxRoot.innerHTML = xmlDoc;
		initLinks();
		initMovie();
		initResevationForm();
		var currentLocation = dhtmlHistory.getCurrentLocation();
		if (currentLocation.startsWith("tcm")) {
			gotoAnchor('anchor_top');
			//window.scrollTo(0, findPosY($('anchor_top')));
		} else {
			window.scrollTo(scrollX, scrollY);
		}
	}
}

// terms and conditions pop-up
function termsPopup() {
}

var ecardLightbox = null;
function showEcard(url) {
	// fix for firefox.. wmode=transparent and iframes don't match. wmode=window and iframes don't match. So do a popup
	//if (navigator.userAgent.indexOf('Firefox/2') > -1 || navigator.userAgent.indexOf('Firefox/1') > -1) {
	//	openwindow(url, 'Yamaha VMAX 2009 Ecard', 'scrollbars=no,menubar=no,width=720,height=400,top=35,left=75,status=yes,resizable=no')
	//} else {
		ecardLightbox = new lightbox('ecardLightbox'); 
		$('ecardIframe').src = url;
		$('ecardLightbox').style.display = "block";
		ecardLightbox.activate();
	//}
}

/** reservation form **/
function switchform(view) {
	switchform(view, true);
}

function switchform(view, validate) {
	if (validate) {
		if (validateReservationForm()) {
			displayform("res_form_container1", view == "res_form_container1");
			displayform("res_form_container2", view == "res_form_container2");
			displayform("res_form_container3", view == "res_form_container3");
		}
	} else {
		displayform("res_form_container1", view == "res_form_container1");
		displayform("res_form_container2", view == "res_form_container2");
		displayform("res_form_container3", view == "res_form_container3");
	}
}

function displayform(view, visible) {
	switch (view) {
		case "res_form_container1":
			if ($('res_form_container1') != null) {
				$('res_form_container1').style.display = visible ? '' : 'none';
			}
			break;
		case "res_form_container2":
			if ($('res_form_container2') != null) {
				$('res_form_container2').style.display = visible ? '' : 'none';
			}
			break;
		case "res_form_container3":
			if ($('res_form_container3') != null) {
				$('res_form_container3').style.display = visible ? '' : 'none';
			}
			break;
	}
}

/*country selector*/
function switchcontent(view) {
	displaycontent("lang_active", view == "lang_active");
	displaycontent("lang_not_active", view == "lang_not_active");
}

function displaycontent(view, visible) {
	switch (view) {
		case "lang_active":
			if ($('lang_active') != null) {
				$('lang_active').style.display = visible ? 'block' : 'none';
			}
			break;
		case "lang_not_active":
			if ($('lang_not_active') != null) {
				$('lang_not_active').style.display = visible ? 'block' : 'none';
			}
			break;		
	}
}

/*******************/

function showMovie(videoId) {
	player_path = 'http://yamaha.formevideo.nl/'+videoId+'/';
	features = 'scrollbars=no,width=345,height=215';
	window.open(player_path,'forme',features);
}

function showMovie(divId, videoId) {
	var element = $(divId);
	if (element != null) {
		element.innerHTML = "<iframe id=\"VideoIFrame\" style=\"border:0px; width:345px; height:215px;\" src=\"http://yamaha.formevideo.nl/"+videoId+"/\" scrolling=\"no\" marginheight=\"0\" marginwidth=\"0\" frameborder=\"0\"></iframe>";
	}
}

var preparedMovie = null;
function prepareMovie(divId, videoId) {
	preparedMovie = { id: divId, video: videoId }
}

function initMovie() {
	if (preparedMovie != null) {
		showMovie(preparedMovie.id, preparedMovie.video);
	}
}

function findPosX(obj) {
	if (obj == null) {
		return 0;
	}
	var curleft = 0;
	if (obj.offsetParent) {
		while (1) {
			curleft += obj.offsetLeft;
			if (!obj.offsetParent) {
				break;
			}
			obj = obj.offsetParent;
		}
	} else {
		if (obj.x) {
			curleft += obj.x;
		}
	}
	return curleft;
}

function findPosY(obj) {
	if (obj == null) {
		return 0;
	}
	var curtop = 0;
	if (obj.offsetParent) {
		while(1) {
			curtop += obj.offsetTop;
			if (!obj.offsetParent) {
				break;
			}
			obj = obj.offsetParent;
		}
	} else {
		if(obj.y) {
			curtop += obj.y;
		}
	}
	return curtop;
}

function sack(file) {
	this.xmlhttp = null;
	
	this.resetData = function() {
		this.method = "POST";
  		this.queryStringSeparator = "?";
		this.argumentSeparator = "&";
		this.URLString = "";
		this.encodeURIString = true;
  		this.execute = false;
  		this.element = null;
		this.elementObj = null;
		this.requestFile = file;
		this.vars = new Object();
		this.responseStatus = new Array(2);
  	};
	
	this.resetFunctions = function() {
  		this.onLoading = function() { };
  		this.onLoaded = function() { };
  		this.onInteractive = function() { };
  		this.onCompletion = function() { };
  		this.onError = function() { };
		this.onFail = function() { };
	};
	
	this.reset = function() {
		this.resetFunctions();
		this.resetData();
	};
	
	this.createAJAX = function() {
		this.xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP")
	};
	
	this.setVar = function(name, value){
		this.vars[name] = new Array(value, false);
	};
	
	this.encVar = function(name, value, returnvars) {
		if (true == returnvars) {
			return new Array(encodeURIComponent(name), encodeURIComponent(value));
		} else {
			this.vars[encodeURIComponent(name)] = new Array(encodeURIComponent(value), true);
		}
	}
	
	this.processURLString = function(string, encode) {
		encoded = encodeURIComponent(this.argumentSeparator);
		regexp = new RegExp(this.argumentSeparator + "|" + encoded);
		varArray = string.split(regexp);
		for (i = 0; i < varArray.length; i++){
			urlVars = varArray[i].split("=");
			if (true == encode){
				this.encVar(urlVars[0], urlVars[1]);
			} else {
				this.setVar(urlVars[0], urlVars[1]);
			}
		}
	}
	
	this.createURLString = function(urlstring) {
		if (this.encodeURIString && this.URLString.length) {
			this.processURLString(this.URLString, true);
		}
		
		if (urlstring) {
			if (this.URLString.length) {
				this.URLString += this.argumentSeparator + urlstring;
			} else {
				this.URLString = urlstring;
			}
		}
		
		// prevents caching of URLString
		this.setVar("rndval", new Date().getTime());
		
		urlstringtemp = new Array();
		for (key in this.vars) {
			if (false == this.vars[key][1] && true == this.encodeURIString) {
				encoded = this.encVar(key, this.vars[key][0], true);
				delete this.vars[key];
				this.vars[encoded[0]] = new Array(encoded[1], true);
				key = encoded[0];
			}
			
			urlstringtemp[urlstringtemp.length] = key + "=" + this.vars[key][0];
		}
		if (urlstring){
			this.URLString += this.argumentSeparator + urlstringtemp.join(this.argumentSeparator);
		} else {
			this.URLString += urlstringtemp.join(this.argumentSeparator);
		}
	}
	
	this.runResponse = function() {
		eval(this.response);
	}
	
	this.runAJAX = function(urlstring) {
		if (this.failed) {
			this.onFail();
		} else {
			this.createURLString(urlstring);
			if (this.element) {
				this.elementObj = $(this.element);
			}
			if (this.xmlhttp) {
				var self = this;
				if (this.method == "GET") {
					totalurlstring = this.requestFile + this.queryStringSeparator + this.URLString;
					this.xmlhttp.open(this.method, totalurlstring, true);
				} else {
					this.xmlhttp.open(this.method, this.requestFile, true);
					try {
						this.xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
					} catch (e) { }
				}
				
				this.xmlhttp.onreadystatechange = function() {
					switch (self.xmlhttp.readyState) {
						case 1:
							self.onLoading();
							break;
						case 2:
							self.onLoaded();
							break;
						case 3:
							self.onInteractive();
							break;
						case 4:
							self.response = self.xmlhttp.responseText;
							self.responseXML = self.xmlhttp.responseXML;
							self.responseStatus[0] = self.xmlhttp.status;
							self.responseStatus[1] = self.xmlhttp.statusText;
							
							if (self.execute) {
								self.runResponse();
							}
							
							if (self.elementObj) {
								elemNodeName = self.elementObj.nodeName;
								elemNodeName.toLowerCase();
								if (elemNodeName == "input"
								|| elemNodeName == "select"
								|| elemNodeName == "option"
								|| elemNodeName == "textarea") {
									self.elementObj.value = self.response;
								} else {
									self.elementObj.innerHTML = self.response;
								}
							}
							if (self.responseStatus[0] == "200") {
								self.onCompletion();
							} else {
								self.onError();
							}
							
							self.URLString = "";
							/* These lines were added by Alf Magne Kalleland ref. info on the sack home page. It prevents memory leakage in IE */
							
							delete self.xmlhttp['onreadystatechange'];
							self.xmlhttp=null;
							self.responseStatus=null;
							self.response=null;
							self.responseXML=null;
							
							break;
					}
				};

				this.xmlhttp.send(this.URLString);
			}
		}
	};

	this.reset();
	this.createAJAX();
}

var enableCache = false;
var jsCache = new Array();

var dynamicContent_ajaxObjects = new Array();

function ajax_showContent(divId,ajaxIndex,url)
{
	var targetObj = $(divId);
	targetObj.innerHTML = dynamicContent_ajaxObjects[ajaxIndex].response;
	if(enableCache){
		jsCache[url] = 	dynamicContent_ajaxObjects[ajaxIndex].response;
	}
	dynamicContent_ajaxObjects[ajaxIndex] = false;
	
	ajax_parseJs(targetObj)
	evaluateCss(targetObj);
}

function ajax_loadContent(divId, functionToCall, url) {
	if (enableCache && jsCache[url]) {
		$(divId).innerHTML = jsCache[url];
		ajax_parseJs($(divId))
		evaluateCss($(divId))
		return;
	}
	
	var ajaxIndex = dynamicContent_ajaxObjects.length;
	dynamicContent_ajaxObjects[ajaxIndex] = new sack();
	
	dynamicContent_ajaxObjects[ajaxIndex].requestFile = url;// Specifying which file to get
	dynamicContent_ajaxObjects[ajaxIndex].onCompletion = function(){ ajax_showContent(divId,ajaxIndex,url); functionToCall(); };// Specify function that will be executed after file has been found
	dynamicContent_ajaxObjects[ajaxIndex].runAJAX();// Execute AJAX function
}

function ajax_parseJs(obj) {
	var scriptTags = obj.getElementsByTagName('SCRIPT');
	var string = '';
	var jsCode = '';
	for (var no=0;no<scriptTags.length;no++) {
		if (scriptTags[no].src) {
	        var head = document.getElementsByTagName("head")[0];
	        var scriptObj = document.createElement("script");
	        scriptObj.setAttribute("type", "text/javascript");
	        scriptObj.setAttribute("src", scriptTags[no].src);
		} 
		if (scriptTags[no].text || scriptTags[no].innerHTML) {
			if (navigator.userAgent.toLowerCase().indexOf('opera')>=0) {
				jsCode = jsCode + scriptTags[no].text + '\n';
			} else {
				jsCode = jsCode + scriptTags[no].innerHTML;
			}
		}
	}
	if (jsCode) {
		ajax_installScript(jsCode);
	}
}

function ajax_installScript(script) {
    if (!script) {
        return;
	}
    if (window.execScript) {
    	window.execScript(script)
    } else if (window.jQuery && jQuery.browser.safari) { // safari detection in jQuery
        window.setTimeout(script,0);
    } else {
        eval(script);
    } 
}

function evaluateCss(obj) {
	var cssTags = obj.getElementsByTagName('STYLE');
	var head = document.getElementsByTagName('HEAD')[0];
	for (var no=0;no<cssTags.length;no++) {
		head.appendChild(cssTags[no]);
	}
}