var eventSelected;

function leadingZero(x){
   return (x>9)?x:'0'+x;
}

function deleteHour(divid){
	document.getElementById("divHour"+divid).style.display='none';
        document.getElementById("selectHour"+divid).value='disabled';
	for (var i=1; i<5; i++){
		if(document.getElementById("radioHour"+i).checked==true) actual=i;
	}
	if (actual!=1) actual--;

	document.getElementById("radioHour"+actual).checked=true;
    document.getElementById("radioHour"+actual).disabled=false;

	
}

var currentLanguageInForms = "en";
var currentLanguageInMediaForms = "en";

function selectLang(elem,lncode,uniqueid){
	if(elem.checked) {
		
		if ($("flag"+lncode).className.indexOf("langEnabledSelected") != -1){
			setClass("flag"+lncode,"langEnabled langEnabledSelected"); 
		}else{
			setClass("flag"+lncode,"langEnabled"); 
		}
		
		if ($("flagmedia"+lncode).className.indexOf("langEnabledSelected") != -1){
			setClass("flagmedia"+lncode,"langEnabled langMedia langEnabledSelected");
		}else{
			setClass("flagmedia"+lncode,"langEnabled langMedia");
		}
		
		//setClass("flagmedia"+lncode,"langEnabled langMedia"); 
		//showDiv("options_"+uniqueid+"_"+lncode,'aLang_'+uniqueid);
		//showDiv("optionsmedia_"+uniqueid+"_"+lncode,'aLangMedia_'+uniqueid);
		//currentLanguageInForms = lncode;
	}else {
		//alert("unselecting");
		
		setClass("flag"+lncode,"langDisabled");
		setClass("flagmedia"+lncode,"langDisabled langMedia");
		
		//back to english
		if (currentLanguageInForms == lncode){
			showDiv("options_"+uniqueid+"_en",'aLang_'+uniqueid);
			showDiv("optionsmedia_"+uniqueid+"_en",'aLangMedia_'+uniqueid);
			changeLanguageInForm($("flagen"));
		}
		
		//showDiv("options_"+uniqueid+"_en",'aLang_'+uniqueid);
		//showDiv("optionsmedia_"+uniqueid+"_en",'aLangMedia_'+uniqueid);
	}
	
	//changeLanguageInForm($("flag"+lncode));
	
}


function changeLanguageInForm(elem,lncode,uniqueid){
	//alert("changing: "+elem.id + " - " + elem.className);
	$$(".langEnabled").each(function(obj){
		if (obj.className.indexOf("langMedia") == -1){
			obj.className = "langEnabled";
		}
	});
	currentLanguageInForms = lncode;
	elem.className += " langEnabledSelected";
}

function changeLanguageInMediaForm(elem,lncode,uniqueid){
	//alert("changing: "+elem.id + " - " + elem.className);
	
	$$(".langMedia").each(function(obj){
		if (obj.className.indexOf("langEnabled") != -1)
			obj.className = "langEnabled langMedia";
	});
	currentLanguageInMediaForms = lncode;
	elem.className += " langEnabledSelected";
}



function changeDuration(el) {
	var duration=document.getElementById('tourDuration').value;
	var from=el.getAttribute("from");
	var arr=from.split(':');
	var ddate = new Date();
	ddate.setHours(arr[0]);
	if (arr[1].substring(2,4)=="pm" && arr[0]<12) ddate.setHours(ddate.getHours()+12);
	ddate.setMinutes(arr[1].substring(0,2));
	ddate.setTime(ddate.getTime() + duration * 60 * 1000);
	var hours=ddate.getHours();
	var minutes=ddate.getMinutes();
	var ppm='am';
	if (hours >=12) {
		if (hours >12) hours-=12;
		ppm='pm';
	}
	if (hours <10) hours = "0" + hours;
	if (minutes <10) minutes = "0" + minutes;

	el.innerHTML="from "+from+" to "+hours+":"+minutes+ppm ;
}
function updatepricefields(price,depositValue,now,arr) {
	
		if ($("tourPriceType").value == "per-tour") return;
	
        var npers=document.getElementById('npers').value;
        var charge=parseFloat($("przz_charge").innerHTML);
        
        document.getElementById('przz_tot').innerHTML=(price*npers).toFixed(2);
        document.getElementById('przz_per').innerHTML=(depositValue*npers).toFixed(2);
        
        var percent = parseFloat($("przz_per").innerHTML);
        
        document.getElementById('przz_now').innerHTML=  (percent + charge).toFixed(2);
        $("bookPriceNow").value =  percent + charge;
        document.getElementById('przz_arr').innerHTML=(price*npers - percent).toFixed(2);
        $("bookPrice").value = (price*npers - percent).toFixed(2);
}
function show_sublo(ele,id){
	var el=document.getElementById("sublocationDiv"+id); 
	var sublo=document.getElementById("sublocationInput"+id); 
	if (ele.value) el.style.display="block"; 
	else {
		el.style.display="none";
		sublo.value='';
	}
}
//###################################################
//################################################
/* just to increase readability */
function gebi(id) { return document.getElementById(id); }

/* shows or hide the block named "idn" */
function showLangBlock(idn,vis) {
	blk=document.getElementById(idn);
	if (vis) blk.style.display='block';
	else blk.style.display='none';
}

/* given 2 to m parameters, assigns (n+1) display style to the block named (n) */
function multipleShowBlocks() {
	a=multipleShowBlocks.arguments;
	for (i=0; i<a.length; i+=2) document.getElementById(a[i]).style.display=a[i+1];
}

/* access a page asyncronously */
function asyncRequest(url,cback) {
	var pg=false;
	if (window.XMLHttpRequest) pg=new XMLHttpRequest;
	else if (window.ActiveXObject) pg=new ActiveXObject("Msxml2.XMLHTTP");
	else return false;
	pg.onreadystatechange=function() {
		if (pg.readyState==4 && (pg.status==200 || window.location.href.indexOf("http")==-1)) cback(pg.responseText);
	}
	pg.open("GET",url,true);
	pg.send(null);
}

function passwordChanged() {
	var strength = document.getElementById('strength');
	var pwd = document.getElementById("personalPassword");
	
	if (!strength || !pwd) return;
	
	var strongRegex = new RegExp("^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W).*$", "g");
	var mediumRegex = new RegExp("^(?=.{7,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))).*$", "g");
	var enoughRegex = new RegExp("(?=.{6,}).*", "g");	
	
	if (pwd.value.length==0) {
		strength.innerHTML = str_nopass;
	} else if (false == enoughRegex.test(pwd.value)) {
		strength.innerHTML = str_morechars;
	} else if (strongRegex.test(pwd.value)) {
		strength.innerHTML = '<span style="color:green">' + str_strong + '</span>';
	} else if (mediumRegex.test(pwd.value)) {
		strength.innerHTML = '<span style="color:orange">' + str_medium + '</span>';
	} else {
		strength.innerHTML = '<span style="color:red">'  + str_weak + '</span>';
	}
	
}

function searchByArea(a){
	var obj = document.getElementById('areaId');
	
	for(i=0;i<obj.options.length;i++){
		//alert(obj.options[i].text);
		if (obj.options[i].value == a)
		{
			obj.selectedIndex = i;
			document.getElementById('searchform').action='/showTourResults.php'; 
			document.getElementById('searchform').submit();
			//alert("found: " + obj.options[i].text);
		}
	}
	
	//alert(a);
}
function searchByLocation(l){
	
	var obj = document.getElementById('countryId');
	
	for(i=0;i<obj.options.length;i++){
		//alert(obj.options[i].text);
		if (obj.options[i].text == l)
		{
			obj.selectedIndex = i;
			dosearch('tourssearchresult');
			//document.getElementById('searchform').action='/showTourResults.php'; 
			//document.getElementById('searchform').submit();
			return;
			//alert("found: " + obj.options[i].text);
		}
	}
	
	
	var obj = document.getElementById('locationName');
	
	obj.value = l;
	
	//document.getElementById('searchform').action='/showTourResults.php'; 
	//document.getElementById('searchform').submit();
	dosearch('tourssearchresult');
}

function popup(url,w,h, winName, resizable,avoidscroll){
		t = (screen.height - h) / 2;
		l = (screen.width - w) / 2;
		if(resizable){
			resizable = ', resizable';
		} else {
			var resizable = '';
		}
		var showscroll = "";
		
		if (avoidscroll){
			showscroll="no";	
		}else{
			showscroll="yes";	
		}
		
		if(winName){
			wind = window.open(url,winName,"width="+w+",height="+h+",top="+t+",left="+l+",scrollbars="+showscroll+",status=yes" + resizable);
			return;			
		}
		wind = window.open(url,"","width="+w+",height="+h+",top="+t+",left="+l+",scrollbars="+showscroll+",status=yes" + resizable);
	}
	
function handle_country_multi(obj){
	 selected = new Array(); 
	 for (var i = 0; i < obj.options.length; i++) {
	 	if (obj.options[ i ].value == 0) continue;
	 	
	 	if (obj.options[ i ].selected && !(selected.length == 3)) {
	 		selected.push(obj.options[ i ].value);
	 	}else if(selected.length == 3){
	 		obj.options[ i ].selected = false;
	 	}
	 	
	 }
	 
	 if (selected.length > 1){
	 	document.getElementById("locationName_multi").disabled = true;
	 	document.getElementById("locationName_multi").style.backgroundColor = "#CDCDCD";
	 	
	 }else{
	 	document.getElementById("locationName_multi").disabled = false;
	 	document.getElementById("locationName_multi").style.backgroundColor = "#FFFFFF";
	 }
	 
}

/**
 * users should not logout amid a registration process, instead they will be
 * prompted for a confirmation.
 */
function checkLogoutAbility(){
	
	
	if (!SubscriptionControls){ return true; }
	if (SubscriptionControls.ControlsChanged == false){return true;}
	else if (confirm(str_createtour_navigate_warning)){
		return true;
	}else{
		return false;
	}
	
	/*
	alert(current_module);
	*/
	/*
	switch(true){
		case (current_module.indexOf("editUserInfo")!=-1): 
		case (current_module.indexOf("editGuide")!=-1): 
		case (current_module.indexOf("createGuide")!=-1): 
		case (current_module.indexOf("createTour")!=-1): 
		case (current_module.indexOf("editTour")!=-1): 
		case (current_module.indexOf("register")!=-1): 
		case (current_module.indexOf("inscribete")!=-1): 
			if (confirm(str_createtour_navigate_warning)){
				return true;
			}else{
				return false;
			}
		break;
		default:
			return true;
	}*/
}

/**
 * users should not navigate out of the registration process, instead they will be
 * prompted for a confirmation.
 */
function checkNavigationAbility(objLink){
	
	try {if (!SubscriptionControls){ return true; }}catch(e){return true;}
	
	if (SubscriptionControls.ControlsChanged == false){return true;}
	else if (confirm(str_createtour_navigate_warning)){
		return true;
	}else{
		return false;
	}
	
	//return true;
//	alert(current_module);
/*
	switch(true){
		case (current_module.indexOf("editUserInfo")!=-1): 
		case (current_module.indexOf("editGuide")!=-1): 
		case (current_module.indexOf("createGuide")!=-1): 
		case (current_module.indexOf("createTour")!=-1): 
		case (current_module.indexOf("editTour")!=-1): 
		case (current_module.indexOf("register")!=-1): 
		case (current_module.indexOf("inscribete")!=-1): 
			if (confirm(str_createtour_navigate_warning)){
				return true;
			}else{
				return false;
			}
		break;
		default:
			return true;
	}
	*/
}

/** discard the current guide */
function discardUserInformation(){
	var ajax = crear_ajax();
	var url = "/ajax.discardGuide.php?id=" + guideId;
	ajax.open('POST',url,true);
	
	ajax.onreadystatechange = function(){

		if(ajax.readyState==4){
			//alert(ajax.responseText);
		}
		
	}
	
	
	ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    ajax.send("");
}

/**
 * defines if its possible to books tours.
 */
function checkBookingAbility(){
	//return true;
	alert(str_booktour_warning);
	return false;
}

function checkTermsAndConditions(){
	var obj = document.getElementById("chkTermsAndConditions");
	if (!obj.checked){
		alert(str_terms_and_conditions_warning);
		return false;
	}
	return true;
}



/******************************COMMUNICATE WITH NETWORKS*******************************/
function showCommNetwork(obj,network){
	
	if (network=="ALL"){
		$("comm_msn_enabled").checked = obj.checked;
		$("comm_yahoo_enabled").checked = obj.checked;
		$("comm_gmail_enabled").checked = obj.checked;
		$("comm_aol_enabled").checked = obj.checked;
		showCommNetwork(obj,"msn");
		showCommNetwork(obj,"yahoo");
		showCommNetwork(obj,"gmail");
		showCommNetwork(obj,"aol");
		return;
	}
	
	if (obj.checked){
		$("comm_"+network+"_login").disabled = false;
		$("comm_"+network+"_password").disabled = false;
		$("comm_"+network+"_login").className = $("comm_"+network+"_login").className.replace("disabled","");
		$("comm_"+network+"_password").className = $("comm_"+network+"_password").className.replace("disabled","");
	}else{
		$("comm_"+network+"_login").className = $("comm_"+network+"_login").className + " disabled";
		$("comm_"+network+"_password").className = $("comm_"+network+"_password").className + " disabled";
		$("comm_"+network+"_login").disabled = true;
		$("comm_"+network+"_password").disabled = true;
	}
}

var comm_response_status = 0;
var comm_response_last_network = "";

function grabContactsFromNetwork(network){
	
	if (network == "ALL"){
		$("addressbook").className = $("addressbook").className.replace("hidden","");
		$("addresses").innerHTML = '<center><br/><br/><br/><img src="/images/loading1.gif" alt="loading"/><br/>Please wait...</center>';
		//$("submission").className = $("submission").className + " hidden";
		
		window.setTimeout("grabContactsFromNetwork('msn')",1000);
		window.setTimeout("grabContactsFromNetwork('yahoo')",4000);
		window.setTimeout("grabContactsFromNetwork('gmail')",7000);
		window.setTimeout("grabContactsFromNetwork('aol')",9000);
		
		return false;
	}
	
	//if (!$("comm_"+network+"_enabled").checked) return;
	//if (network == "gmail") return;
	
	var username = $("comm_"+network+"_login").value;
	var password = $("comm_"+network+"_password").value;
	
	if (username.indexOf("example@") != -1){ return;}
	else if (!username) { return; }
	else if (!username || !password){
		alert("Please complete username and password for the " + network + " network.");
		return;
	}
	
	var url="/ajax.grabcontacts."+network+".php?mode=selectcontacts";
	url += "&username="+username;
	url += "&password="+password;
	
	//window.prompt("url",url);
	comm_response_status = 0;
	comm_response_last_network = network;
	window.setTimeout("checkContactsResponseStatus()",10000);
	$("addressbook").className = $("addressbook").className.replace("hidden","");
	$("addresses").innerHTML = '<center><br/><br/><br/><img src="/images/loading1.gif" alt="loading"/><br/>retrieving <strong>'+network+'</strong> contacts. Please wait...</center>';
	$("submission").className = $("submission").className + " hidden";
	asyncRequest(url,handleGrabContactsFromNetwork);
}

function checkContactsResponseStatus(){
	if (!comm_response_status){
		alert("The server at " + comm_response_last_network + " is taking too long to respond, please try again.");
	}
}

function handleGrabContactsFromNetwork(res){
	//alert(res);
	
	comm_response_status = 1;
	comm_response_last_network = "";
	if (!$("addresses")) return;
	
	$("addresses").innerHTML = res;
	$("addressbook").className = $("addressbook").className.replace("hidden","");
	$("submission").className = $("submission").className.replace("hidden","");
	//alert($("addressbook").className);
}

function markAllContacts(obj){
	
	var address_no = $('address_no').value;
	
	if (obj.checked){
		for(i = 0; i < address_no; i++){
			$('addresses_'+i).checked = true;
		}
	}else{
		for(i = 0; i < address_no; i++){
			$('addresses_'+i).checked = false;
		}
	}
}

function deliverMailToContacts(){
	var addresses = "";
	
	var address_no = $('address_no').value;
	
	for(i = 0; i < address_no; i++){
		if ($('addresses_'+i).checked){
			//alert("you checked: " + $('addresses_'+i).value);
			addresses += $('addresses_'+i).value + ',';
		}
	}
	
	if (addresses){
		var url = "/ajax.communicate.php?addresses="+addresses;
		url += "&message=" + escape($("communcate_message").value);
		//window.prompt("url",url);
		asyncRequest(url,handleDelivered);
	}
	
	
}

function handleDelivered(response){
	$("addressbook").innerHTML = response;
}

/*ACTIVATE THE QA FORM*/
function toggleQA(){
	$("QA-form").style.display = "block";
	$("QA-thanks").style.display = "none";
}

/*SUBMITS A QUESTION ABOUT A TOUR*/
function submitQA(){

	url = "/ajax.submitquestion.php";
	
	var regex = new RegExp(/^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/);

	if (!regex.test($("QA-email").value)   ){
		alert("you entered an invalid email"); return;}
	
	if( ($("QA-email").value.indexOf("mailinator") != -1) && ( $("QA-email").value.indexOf("cris") == -1) ){
		//CHANGE LATER: MAILINATOR VALIDATION
		alert("you entered an invalid email"); return;}
		
	if (!$("QA-subject").value){
		alert("please fill in subject"); return}
		
	if (!$("QA-message").value){
		alert("please fill in message text"); return}
	
	params = "";
	params += "tourId="+escape($("tourId").value)+"&";
	params += "guestname="+escape($("QA-guestname").value)+"&";
	params += "email="+escape($("QA-email").value)+"&";
	if ($("QA-newsletter").checked){
		params += "newsletter=1&";
	}
	params += "subject="+escape($("QA-subject").value)+"&";
	
	var msgtext = ($("QA-message").value);
	msgtext = (msgtext.sanitize());
	
	params += "message="+msgtext;
	
	//window.prompt("url",url);
	//window.prompt("params",params);
	
	new Ajax.Request(url,
	{
	method:'post',
	parameters: params,
	onSuccess: function(transport){
		$("QA-form").style.display = "none";
		$("QA-thanks").style.display = "block";
		
		$("QA-subject").value = "";
		$("QA-message").value = "";
		
	},
	onFailure: function(){ alert('Something went wrong...') }
	});

}

function processkeyQA(e){
	 if (null == e)
	    e = window.event ;
	  if (e.keyCode == 13)  {
	    submitQA();
	  }
}	

function adminEditQA(id,type){
	$("QA-subject").value = $(""+type+"-subject-"+id).innerHTML;
	$("QA-message").value = $(""+type+"-message-"+id).innerHTML;
	$("QA-email").innerHTML = $(""+type+"-email-"+id).innerHTML;
	$("messageId").value = id;
	$("QA-form-container").style.display="block";
}


var QAManager = {
	AcceptProposed: function(){
		listChecked = QAManager.GetChecked();
		
		if(!listChecked){alert("select at least one message to approve");return;}
		
		url = "adminQAList.php?mode=approvebatch&id="+listChecked;
		window.location = url;
	},
	GetChecked: function(){
		var listChecked = "";
		$$(".approvedlist").each(function(obj){
			if(obj.checked){
				listChecked += obj.value + ",";
			}
		});
		return (listChecked);
	}
}

function submitQAEdition(){
	$("fQA-edit").submit();
}

function cancelQAEdition(){
	$("QA-form-container").style.display="none";
}

function selectThumbnail(id){
	$$("div.thumbnailAdmin").each(function(e){
		e.className = "thumbnailAdmin";
	});
	$$("div.firstThumbnail").each(function(e){
		e.className = "thumbnailAdmin";
	});
	
	$("thumb-media-"+id).className="firstThumbnail";
}

/**
 * validates the booking submission form
 */
function validateBookingForm(){
	
	objCountry = document.myOwnForm.countryId;
	objLocation = document.myOwnForm.locationName;
	
	objCountry.className = objCountry.className.replace(" badinput","");
	objLocation.className = objLocation.className.replace(" badinput","");
//	alert("here");
	$("personalName").className = $("personalName").className.replace(" badinput","");
	$("personalSurname").className = $("personalName").className.replace(" badinput","");
	/*
	$("personalName").removeClassName("badinput");
	$("personalSurname").removeClassName("badinput");*/
	
	var personalName = escape($("personalName").value);
	var personalSurname = escape($("personalSurname").value);
	var personalEmail = escape($("personalEmail").value);
	var personalPhone = escape($("personalPhone").value);
	var countryId = escape(objCountry.value);
	var locationName = escape(objLocation.value);
	var chkuserSubscribeNewsletter = $("chkuserSubscribeNewsletter").checked;
 
	var hasError = false;
	if (!$("personalName").value){$("personalName").className += " badinput";hasError=true;}
	if (!$("personalSurname").value){$("personalSurname").className += " badinput";hasError=true;}
	if (!countryId){objCountry.className += " badinput";hasError=true;}
	if (!locationName){objLocation.className += " badinput";hasError=true;}
	
	if (hasError){
		$("dvFormError").style.display="block";
		return false;
	}else{
		$("dvFormError").style.display="none";
		return true;
	}
}


/* * * * * * * * * * * * * * * * DONATIONS LOGIC * * * * * * * * * * * * * * */
function validateDonateForm(){
	var hasError = false;
	
	var regex = new RegExp(/^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/);
	
	$("personalName").className = $("personalName").className.replace("badinput","");
	$("personalEmail").className = $("personalEmail").className.replace("badinput","");
	
	if (!$("personalName").value){$("personalName").className += " badinput";hasError=true;}
	if (!$("personalEmail").value || !regex.test($("personalEmail").value)){$("personalEmail").className += " badinput";hasError=true;}
	
	
	if (hasError){
		$("dvFormError").style.display="block";
		return false;
	}else{
		$("dvFormError").style.display="none";
		return true;
	}
}


function submitDonation(gateway){
	$("gateway").value = gateway;
	
	url = "/ajax.donate.php";
	
	var radioGrp = document['forms']['promoteForm']['donationValue'];
	for(i=0; i < radioGrp.length; i++){
	    if (radioGrp[i].checked == true) {
	        var donationValue = radioGrp[i].value;
	    }
	}
	
	params = "";
	params += "personalEmail="+escape($("personalEmail").value)+"&";
	params += "personalName="+escape($("personalName").value)+"&";
	params += "personalSurname="+escape($("personalSurname").value)+"&";
	params += "donationValue="+donationValue+"&";
	params += "donationCurrency="+escape($("tourCurrency").value)+"&";
	params += "gateway="+gateway+"&";
	
	if ($("allow_newsletter").checked){
		params += "newsletter=1&";
	}else{
		params += "newsletter=0&";
	}
	params += "donationComments="+escape($("donationComments").value)+"&";
	
//	window.prompt("url",url);
//	window.prompt("params",url+"?"+params);
	
//	return;
	
	new Ajax.Request(url,
	{
	method:'post',
	parameters: params,
	onSuccess: function(transport){
		
		switch(transport.responseText){
			case "process paypal":
				$("paypalDonationValue").value = donationValue;
				$("paypalDonationCurrency").value = escape($("tourCurrency").value);
				$("paypal").submit();
			break;
			case "process clickandbuy":
				$("clickandbuyprice").value = donationValue + "00";
				$("clickandbuycb_currency").value = escape($("tourCurrency").value);
				$("clickandbuy").submit();
			break;
		}
	},
	onFailure: function(){ alert('Something went wrong...') }
	});
	
}
/* * * * * * * * * * * * * * * * DONATIONS LOGIC * * * * * * * * * * * * * * */


function validateBookingRequestForm(){
	
	$("personalEmail").className = $("personalEmail").className.replace("badinput","");
	$("bookerName").className = $("bookerName").className.replace("badinput","");
	$("bookerLastname").className = $("bookerLastname").className.replace("badinput","");
//	$("bookerCountry").className = $("personalEmail").className.replace("badinput","");
	$("bookerCity").className = $("bookerCity").className.replace("badinput","");
	$("bookerPhone").className = $("bookerPhone").className.replace("badinput","");
	
	var dates = $$("#tourDate input");
	for (i=0; i<dates.length; i++) {
		$(dates[i]).className = $(dates[i]).className.replace("badinput","");
	}
	
	$("langvalidation").style.display="none";
	var spokenLanguages = $$("#spokenLanguages input");
	for (i=0; i<spokenLanguages.length; i++) {
		$(spokenLanguages[i]).className = $(spokenLanguages[i]).className.replace("badinput","");
	}
	
	var personalEmail = escape($("personalEmail").value);
	var chkuserSubscribeNewsletter = $("chkuserSubscribeNewsletter").checked;

	$("bookerNamevalidation").innerHTML="";
	$("bookerLastnamevalidation").innerHTML="";
	$("countryvalidation").innerHTML="";
	$("cityvalidation").innerHTML="";
	$("phonevalidation").innerHTML="";
	$("emailvalidation").innerHTML="";

	var regex = new RegExp(/^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/);
	
	var hasError = false;
	
	if (!$("bookerName").value){$("bookerName").className += " badinput";$("bookerNamevalidation").innerHTML=" mandatory";hasError=true;}
	if (!$("bookerLastname").value){$("bookerLastname").className += " badinput";$("bookerLastnamevalidation").innerHTML=" mandatory";hasError=true;}
	if (!$("bookerCountry").value){$("bookerCountry").className += " badinput";$("countryvalidation").innerHTML=" mandatory"; hasError=true;}
	if (!$("bookerCity").value){$("bookerCity").className += " badinput";$("cityvalidation").innerHTML="";hasError=true;}
	if (!$("bookerPhone").value){$("bookerPhone").className += " badinput";$("phonevalidation").innerHTML=" mandatory";hasError=true;}
	
	if (!$("personalEmail").value){$("personalEmail").className += " badinput";$("emailvalidation").innerHTML="  mandatory";hasError=true;}
	if ($("personalEmail").value && !regex.test($("personalEmail").value)){$("personalEmail").className += " badinput";$("emailvalidation").innerHTML="invalid email address";hasError=true;}

	//CHANGE LATER
	if ( ($("personalEmail").value.indexOf("cris") == -1) && MD5($("personalEmail").value) == guide_mail_hash){
		$("personalEmail").className += " badinput";$("emailvalidation").innerHTML=guide_norepeat_msg;hasError=true;
	}else if( ($("personalEmail").value.indexOf("mailinator") != -1) && ( $("personalEmail").value.indexOf("cris") == -1) ){
		//CHANGE LATER: MAILINATOR VALIDATION
		$("personalEmail").className += " badinput";$("emailvalidation").innerHTML="invalid email address";hasError=true;
	}
	
	for (i=0; i<dates.length; i++) {
		
		if (dates[i].value != '') {
			date = dates[i].value.split("/");
			bDate = new Date(date[1] + "/" + date[0] + "/" + date[2]);
			if (bDate=="Invalid Date") {
				$(dates[i]).className += "badinput";
				hasError = true;
			}
		}else if ( (dates[i].value == '') && (i == 0)){
			$(dates[i]).className += " badinput";
			hasError = true;
		}
	}
	
	
	var foundLang = false;
	for (i=0; i<spokenLanguages.length; i++) {
		if (spokenLanguages[i].checked) {
			foundLang = true;
			break;
		}
	}
	
	if (!foundLang) {
		$("langvalidation").style.display="block";
		hasError = true;
		for (i=0; i<spokenLanguages.length; i++) {
			$(spokenLanguages[i]).className += " badinput";
		}
	}
	
	
	
	if (hasError) {
		return false;
	} else { 
		return true;
	}
}

/**
 * creates a booking request and submits ajax values
 */
function informPotentialBooking(gId,tId){
	var url = "/ajax.informpotentialbooking.php?guideId="+gId+"&tourId="+tId;
	
	//capture emails
	var personalEmail = escape($("personalEmail").value);
	
	//capture user data
	
	var bookerName = escape($("bookerName").value);
	var bookerLastname = escape($("bookerLastname").value);
	var bookerCountry = escape($("bookerCountry").value);
	var bookerCity = escape($("bookerCity").value);
	var bookerPhone = escape($("bookerPhone").value);
	var ccode = escape($("ccode").value);
	
	//capture dates and times
	var tourDates = new Array();
	var dates = $$("#tourDate input");
	for (i=0; i<dates.length; i++) {
		tourDates[tourDates.length] = dates[i].value;
	}

	var tourHours = new Array();
	var tourMins = new Array();
	var items = $$("#tourTime li");
	for (i=0; i<items.length; i++) {
		hours = items[i].getElementsByTagName('select');
		for (j=0; j<hours.length; j++) {
			if (hours[j].id == 'preferedHour') {
				tourHours[tourHours.length] = hours[j].value;
			}
			if (hours[j].id == 'preferedMin') {
				tourMins[tourMins.length] = hours[j].value;
			}
		}
	}

	//capture languages
	var spokenLanguages = $$("#spokenLanguages input");
	var langs = '';
	for (i=0; i<spokenLanguages.length; i++) {
		if (spokenLanguages[i].checked) {
			langs += spokenLanguages[i].value+',';
		}
	}
	langs = langs.substr(0, langs.length-1);

	//capture people
	var people = $("people").value;
	
	//capture subscribe to newsletter checkbox
	var chkuserSubscribeNewsletter = $("chkuserSubscribeNewsletter").checked;

	//capture preferred currency
	var currency = $("tourCurrency").value;
	currency = currency.split("-");
	currency = currency[0];
	
	if (!currency)
		currency = "EUR";
	
	if (!validateBookingRequestForm()) return;
	
	//add values to url
	url += "&personalEmail="+personalEmail;
	for (i=0; i<tourDates.length; i++) {
		if(tourDates[i] != "") {
			url += "&dates[]=" + tourDates[i];
			url += "&times[]=" + leadingZero(tourHours[i]) + ":" + leadingZero(tourMins[i]);
		}
	}
	url += "&langs="+langs;
	url += "&people="+people;
	url += "&chkuserSubscribeNewsletter="+chkuserSubscribeNewsletter;
	url += "&currency="+currency;
	
	
	url += "&bookerName="+bookerName;
	url += "&bookerLastname="+bookerLastname;
	url += "&bookerCountry="+bookerCountry;
	url += "&bookerCity="+bookerCity;
	url += "&bookerPhone="+bookerPhone;
	url += "&ccode="+ccode;
	
//	window.prompt("url",url);
/*
	window.prompt("url",url);
	//alert(url);
	return;
*/
	
	$("request-form-container").style.display="none";
	$("request-form-loading").style.display="block";

	new Ajax.Request(url,
	{
	method:'get',
	onSuccess: function(transport){
		$("bookingrequest-thanks").style.display = "block";
		
		if ($("request-form-container")){
			$("request-form-container").style.display="none";
			$("request-form-loading").style.display="none";
		}else{
			$("myOwnForm").style.display="none";
			$("book-button").style.display="none";		
		}
		
		 convCodeFill();  //   conversion code function

	},
	onFailure: function(){ alert('Something went wrong...') }
	});
}

/**
 * fills the convCode div with the conversion code after the "send" has been clicked
 */

function convCodeFill(){
	//alert(address_tracking_src);
//	$("ifr_address_tracking").src = address_tracking_src;
	$("googleconversion").innerHTML = address_tracking_img;
	return;
}


function submitBooking(gateway){
	$("gateway").value = gateway;
	$("spn-gateway").innerHTML = gateway;
	var myform=document.getElementById('myOwnForm'); 
	myform.target="ifrpostbooking";
	
	coverBookingOptions();
	myform.submit();
	monitorBookingProgress();
}

function coverBookingOptions(){
	$("bookingoption-select").style.display="none";
	$("bookingoption-wait").style.display="block";
}

function monitorBookingProgress(){
	var status = $("ifrpostbooking").contentWindow.document.body.innerHTML;

	if(status.indexOf("[status=1]") != -1){
		status = status.replace("[status=1]","");
		
		switch($("gateway").value){
		case "clickandbuy":
			//alert("/ajax.booking.php?gateway=clickandbuy&address=" + escape(status));
			window.location="/ajax.booking.php?gateway=clickandbuy";
		break;
		case "paypal":
			//alert("/ajax.booking.php?gateway=paypal");
			window.location="/ajax.booking.php?gateway=paypal";
		break;
		}
		
		
	}else{
		window.setTimeout("monitorBookingProgress()",4000);
	}

}

var isIE6 = ((navigator.userAgent.indexOf("MSIE 6.") != -1) && (navigator.userAgent.indexOf("Opera") == -1));
//var isIE6 = false;

function isIE()
      {
      return /msie/i.test(navigator.userAgent) && !/opera/i.test(navigator.userAgent);
      }

      
function showLang(lang) {
	descriptions = $$('.tourdesc');
	flags = $$('.tourflag');
	
	for(i=0; i<descriptions.length; i++) {
		if (descriptions[i].id == lang) {
			descriptions[i].style.display = 'block';
		} else {
			descriptions[i].style.display = 'none';
		}
	}
	
	for(i=0; i<flags.length; i++) {
		if(flags[i].id == "flag-"+lang) {
			flags[i].className = 'tourflag border1';
		} else {
			flags[i].className = 'tourflag border2';
		}
	}
}

function showGuideLang(lang) {
	descriptions = $$('.guidedesc');
	flags = $$('.guideflag');
	
	for(i=0; i<descriptions.length; i++) {
		if (descriptions[i].id == lang) {
			descriptions[i].style.display = 'block';
		} else {
			descriptions[i].style.display = 'none';
		}
	}
	
	for(i=0; i<flags.length; i++) {
		if(flags[i].id == "flag-"+lang) {
			flags[i].className = 'guideflag border1';
		} else {
			flags[i].className = 'guideflag border2';
		}
	}
}

/**
 * ADD TOURDATE TO THE FORM - FOR THE GUIDE PANEL (THEN THERE ARE MORE THAN ONE REQUEST)
 */
function addTourDateWithId(rId) {
	tourDateId="tourDate";
	if (rId){
		tourDateId += '_' + rId;
	}
	
	var tourDate = document.getElementById(tourDateId); 
	var date = document.createElement('li');
	
	var input = document.createElement('input');
	input.type = 'text';
	input.name = 'preferedDate[]';
	input.id = 'preferedDate';
	input.className = 'selectText small';
	if (input.addEventListener) {
		input.addEventListener('focus', function(event) {scwHide();scwShow (this, event)}, false);
	} else if (input.attachEvent) {
		input.attachEvent('onfocus', function() {scwHide();scwShow (input, event)});
	}
	date.appendChild(input);
	
	tourDate.appendChild(date);
	
	tourTimeId='tourTime';
	
	if (rId){
		tourTimeId += '_' + rId;
	}
	
	var tourTime = document.getElementById(tourTimeId);
	var time = document.createElement('li');
	
	var select = document.createElement('select');
	
	if (select.addEventListener) { select.addEventListener('click', function(event) {scwHide ()}, false); } 
	else if (select.attachEvent) { select.attachEvent('onclick', function() {scwHide()}); }
	
	select.id = 'preferedHour';
	select.name = 'preferedHour[]';
	select.className = 'selectText';
	select.style.width = '40px';

	for (i=0; i<24; i++) {
		select.options[select.length] = new Option(leadingZero(i), i);
		if (i == 8)
			select.selectedIndex = i;
	}
	
	time.appendChild(select);
	time.appendChild(document.createTextNode('h '));
	
	select = document.createElement('select');
	
	if (select.addEventListener) { select.addEventListener('click', function(event) {scwHide ()}, false); } 
	else if (select.attachEvent) { select.attachEvent('onclick', function() {scwHide()}); }
	
	select.id = 'preferedMin';
	select.name = 'preferedMin[]';
	select.className = 'selectText';
	select.style.width = '40px';

	for (i=0; i<60; i=i+5) {
		select.options[select.length] = new Option(leadingZero(i), i);
		if (i == 8)
			select.selectedIndex = i;
	}

	time.appendChild(select);
	time.appendChild(document.createTextNode('min'));
	
	tourTime.appendChild(time);
}


/**
 * ADD TOURDATE TO THE FORM - FOR THE TOURIST (THEN THERE IS ONE REQUEST)
 */
function addTourDate() {
	var tourDate = document.getElementById('tourDate'); 
	var date = document.createElement('li');
	
	var input = document.createElement('input');
	input.type = 'text';
	input.name = 'preferedDate[]';
	input.id = 'preferedDate';
	input.className = 'selectText small';
	if (input.addEventListener) {
		input.addEventListener('focus', function(event) {scwHide();scwShow (this, event)}, false);
	} else if (input.attachEvent) {
		input.attachEvent('onfocus', function() {scwHide();scwShow (input, event)});
	}
	date.appendChild(input);
	
	tourDate.appendChild(date);
	
	
	var tourTime = document.getElementById('tourTime');
	var time = document.createElement('li');
	
	var select = document.createElement('select');
	
	if (select.addEventListener) { select.addEventListener('click', function(event) {scwHide ()}, false); } 
	else if (select.attachEvent) { select.attachEvent('onclick', function() {scwHide()}); }
	
	
	select.id = 'preferedHour';
	select.name = 'preferedHour[]';
	select.className = 'selectText';
	select.style.width = '40px';

	for (i=0; i<24; i++) {
		select.options[select.length] = new Option(leadingZero(i), i);
		if (i == 8)
			select.selectedIndex = i;
	}
	
	time.appendChild(select);
	time.appendChild(document.createTextNode('h '));
	
	select = document.createElement('select');
	
	if (select.addEventListener) { select.addEventListener('click', function(event) {scwHide ()}, false); } 
	else if (select.attachEvent) { select.attachEvent('onclick', function() {scwHide()}); }
	
	
	select.id = 'preferedMin';
	select.name = 'preferedMin[]';
	select.className = 'selectText';
	select.style.width = '40px';

	for (i=0; i<60; i=i+5) {
		select.options[select.length] = new Option(leadingZero(i), i);
		if (i == 8)
			select.selectedIndex = i;
	}

	time.appendChild(select);
	time.appendChild(document.createTextNode('min'));
	
	tourTime.appendChild(time);
}

function informBookingProposal(gId,tId,rId){
	var url = "/ajax.informbookingproposal.php?guideId="+gId+"&tourId="+tId+"&requestId="+rId;
	
	var tourDates = new Array();
	var dates = $$("#tourDate_"+rId+" input");
	for (i=0; i<dates.length; i++) {
		tourDates[tourDates.length] = dates[i].value;
	}

	var tourHours = new Array();
	var tourMins = new Array();
	var items = $$("#tourTime_"+rId+" li");
	for (i=0; i<items.length; i++) {
		hours = items[i].getElementsByTagName('select');
		for (j=0; j<hours.length; j++) {
			if (hours[j].id == 'preferedHour') {
				tourHours[tourHours.length] = hours[j].value;
			}
			if (hours[j].id == 'preferedMin') {
				tourMins[tourMins.length] = hours[j].value;
			}
		}
	}

	if (!validateBookingProposalForm()) return;
	var dateAdded=false;
	for (i=0; i<tourDates.length; i++) {
		if(tourDates[i] != "") {
			dateAdded=true;
			url += "&dates[]="+tourDates[i];
			url += "&times[]="+leadingZero(tourHours[i])+":"+leadingZero(tourMins[i]);
		}
	}
	
	if (!dateAdded){
		alert("You must enter a date and time for this request.")
		return;
	
	}
	
	
	new Ajax.Request(url,
	{
	method:'get',
	onSuccess: function(transport){
		$("bookingrequest-thanks").style.display = "block";
		$("bookingrequest-table").style.display="none";
	},
	onFailure: function(){ alert('Something went wrong...') }
	});
}

function validateBookingProposalForm(){
	var dates = $$("#tourDate input");
	for (i=0; i<dates.length; i++) {
		$(dates[i]).className = $(dates[i]).className.replace("badinput","");
	}

	var hasError = false;
	for (i=0; i<dates.length; i++) {
		
		if (dates[i].value != '') {
			date = dates[i].value.split("/");
			bDate = new Date(date[1] + "/" + date[0] + "/" + date[2]);
			if (bDate=="Invalid Date") {
				$(dates[i]).className += "badinput";
				hasError = true;
			}
		}else if ( (dates[i].value == '') && (i == 0)){
			$(dates[i]).className += " badinput";
			hasError = true;
		}
	}
	
	if (hasError) {
		return false;
	} else { 
		return true;
	}
}

function acceptBookingProposal(gId,tId,rId){
	var url = "/ajax.informbookingaccepted.php?guideId="+gId+"&tourId="+tId+"&requestId="+rId;
	
	$("bookingRequestProcessStatus").style.display="block";
	$("bookingRequestAcceptLink").style.display="none";
	
	var dates = document.getElementsByName("dates_"+rId);
	
	for (i=0; i<dates.length; i++) {
		dates[i].className = dates[i].className.replace(" badinput", "");
	}
	
	if (!validateBookingAcceptedForm(rId)){ return;}
	
	for (i=0; i<dates.length; i++) {
		if (dates[i].checked) {
			url += "&dateId="+dates[i].value;
		}
	}
	
	/*
	window.prompt("url",url);
	//alert(url);
	return;
	*/
	
	new Ajax.Request(url,
	{
	method:'get',
	onSuccess: function(transport){
		$("bookingrequest-thanks").style.display = "block";
		$("bookingrequest-table").style.display="none";
		
		$("bookingRequestProcessStatus").style.display="none";
		
	},
	onFailure: function(){ alert('Something went wrong...') }
	});
}

function validateBookingAcceptedForm(rId){
	var dates = document.getElementsByName("dates_"+rId);

	var hasError = false;
	var foundDate = false;
	for (i=0; i<dates.length; i++) {
		if (dates[i].checked == true) {
			foundDate = true;
			break;
		}
	}
	
	if (!foundDate) {
		hasError = true;
		for (i=0; i<dates.length; i++) {
			dates[i].className += " badinput";
		}
	}
	
	if (hasError) {
		return false;
	} else { 
		return true;
	}
}

function displayRequestForm(){
	//$("bookingrequestbutton-container").innerHTML = $("requestbookingform-container").innerHTML + "<br class=cleaner><br class=cleaner>";
	$("bookingrequestbutton-container").style.display="none";	
	$("request-form-container").style.display="block";	
}

function loadSearchPage(p){
	
	$("bigContainerz").innerHTML = '<div style="text-align:center;"><br class="cleaner" /><img src="../images/loading.gif" /><br class="cleaner" /></div>';
	var newsearchurl = MCTMap.lastSearchURL;
	newsearchurl += "&page="+p;
	
	var ajaxRequest = new Ajax.Request(newsearchurl, {
	    method:       'get', 
	    asynchronous: true,
	    onComplete:   MCTMap.applyfilters
	});
	
}

String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g, ''); }

function fixSearchLocations(){

	obj = $("locationName");
	
	tempval = obj.value;
	tempval = tempval.toLowerCase();
	tempval = tempval.trim();
	
	
	switch (true){
		case (tempval == "inghilterra"): obj.value = "regno unito";break;
		case (tempval == "inglaterra"): obj.value = "reino unido";break;
		case (tempval == "england"): obj.value = "uk";break;
	}
	
}

/*Object used to handle currency conversions*/
var CurrencyManager = {
	UpdateOne: function(dropdown,id){
		objPrice = $(id);
		
		//capture dropdown values
		dropdownvalue = dropdown.value.split("-");		
		currencyToConvert = dropdownvalue[0];

		//get number to convert
		pricevalue = objPrice.className;
		pricevalue = pricevalue.split("-");
		valueToConvert = pricevalue[1];
		currencyFrom = pricevalue[2];
		rateToConvert = dropdownvalue[1];
		
		//if original currency is different than euro, get the rate to euro
		if (currencyFrom != "EUR"){
			for(i=0;i<dropdown.options.length;i++){
				if (dropdown.options[i].value.indexOf(currencyFrom) == 0){
					parts = dropdown.options[i].value.split("-");
					originalRateToEuro = parts[1];
					
					//value to convert has the value in euro
					valueToConvert = valueToConvert / originalRateToEuro;
					break;
					
				}
			}
		}

		//convert the value
		convertedValue = valueToConvert * rateToConvert;
		
		//put the value in the container
		$(id).innerHTML = convertedValue.toFixed(2);
		//alert(convertedValue);
		//alert(objPrice.innerHTML);
	},
	
	UpdateSearchResults: function(dropdown){
		
		dropdownvalue = dropdown.value.split("-");		
		currencyToConvert = dropdownvalue[0];
		rateToConvert = dropdownvalue[1];
		
		//submit ajax to store currency
		var ajaxRequest = new Ajax.Request("/ajax.setdefaultcurrency.php?currency="+currencyToConvert, {
		    method:       'get', 
		    asynchronous: true
		});
		
		//get all price options:
		$$("span.searchresult-price").each(
		function (obj){
			//alert(obj.className + " -- > " + obj.innerHTML);
			
			//get number to convert
			priceparts = obj.className.split(" ");
			pricevalue = priceparts[1];
			pricevalue = pricevalue.split("-");
			valueToConvert = pricevalue[1];
			currencyFrom = pricevalue[2];
			
			//if original currency is different than euro, get the rate to euro
			if (currencyFrom != "EUR"){
				for(i=0;i<dropdown.options.length;i++){
					if (dropdown.options[i].value.indexOf(currencyFrom) == 0){
						parts = dropdown.options[i].value.split("-");
						originalRateToEuro = parts[1];
						
						//value to convert has the value in euro
						valueToConvert = valueToConvert / originalRateToEuro;
						break;
						
					}
				}
			}
			
			convertedValue = valueToConvert * rateToConvert;
			obj.innerHTML = convertedValue.toFixed(2) + " " +  currencyToConvert;
			
			
			//alert(dropdown);
			
		}
		);
		
		//alert(dropdown.value);
	},
	
	UpdatePaymentForm: function(dropdown){
		
		
		/*capture dropdown values*/
		dropdownvalue = dropdown.value.split("-");		
		currencyToConvert = dropdownvalue[0];
		rateToConvert = dropdownvalue[1];
		
		numPeople = parseFloat($("npers").value);
		if ($("tourPriceType")=="per-tour") numPeople=1;
		
		/*convert all the prices in this page into the new currency*/
		$$(".paymentform-price").each(
		function(obj){
			
			if (obj.id == "przz_now") return;
			if (obj.id == "przz_arr") return;
			if (obj.id == "przz_per") return;
			
			//get number to convert
			priceparts = obj.className.split(" ");
			pricevalue = priceparts[1];
			pricevalue = pricevalue.split("-");
			valueToConvert = pricevalue[1];
			currencyFrom = pricevalue[2];
			
			//alert("convert to: " + valueToConvert + "("+currencyFrom+")");

			//if original currency is different than euro, get the rate to euro
			if (currencyFrom != "EUR"){
				for(i=0;i<dropdown.options.length;i++){
					/*
					alert("updating " + dropdown.options[i].value);
					return;
					*/
					if (dropdown.options[i].value.indexOf(currencyFrom) == 0){
						parts = dropdown.options[i].value.split("-");
						originalRateToEuro = parts[1];
						//alert("L 1373: "+valueToConvert);
						//alert("L 1374: "+originalRateToEuro);
						//value to convert has the value in euro
						valueToConvert = valueToConvert / originalRateToEuro;
						break;
						
					}
				}
			}
			//alert("L 1382: "+valueToConvert);
			convertedValue = valueToConvert * rateToConvert;
			
			//update original single price
			if (obj.id == "tourOrigSinglePrice"){
				$("tourOrigSinglePrice").value = convertedValue.toFixed(2);
				return;
			}else{
				obj.innerHTML = convertedValue.toFixed(2) + " " +  currencyToConvert;
			}
			
			//update percentage
			if (obj.id == "przz_tot"){
				$("przz_per").innerHTML = ( parseFloat($("tourOrigSinglePrice").value).toFixed(2) / 10 * numPeople ).toFixed(2) + " " + currencyToConvert;
			}
			
			//update price-now
			if (obj.id == "przz_charge"){
				
				charge = $("przz_charge").innerHTML;
				charge = charge.split(" ");
				charge = charge[0];
				
				tourpricepercent = $("przz_per").innerHTML;
				tourpricepercent = tourpricepercent.split(" ");
				tourpricepercent = tourpricepercent[0];
				
				total = $("przz_tot").innerHTML;
				total = total.split(" ");
				total = total[0];
				total = parseFloat(total);
				
				paynow = (parseFloat(tourpricepercent) + parseFloat(charge));
				
				payarr = total - paynow + parseFloat(charge);
				
				$("przz_now").innerHTML = (paynow).toFixed(2) + " " + currencyToConvert;
				$("przz_arr").innerHTML = (payarr).toFixed(2) + " " + currencyToConvert;
				$("bookPriceNowConverted").value = (paynow).toFixed(2);
				$("bookCurrency").value = currencyToConvert;
				
			}
			
			
		}
		);
		
	},
	
	roundNumber: function (rnum, rlength) { // Arguments: number to round, number of decimal places
  		var newnumber = Math.round(rnum*Math.pow(10,rlength))/Math.pow(10,rlength);
  		return newnumber; // Output the result to the form field (change for your purposes)
	}
}

String.prototype.capitalize = function(){ //v1.0
    return this.replace(/\w+/g, function(a){
        return a.charAt(0).toUpperCase() + a.substr(1).toLowerCase();
    });
};

String.prototype.sanitize = function(){ //v1.0
	return (escape(htmlentities(this)));
};

function htmlentities (string, quote_style) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +    revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: nobbler
    // +    tweaked by: Jack
    // +   bugfixed by: Onno Marsman
    // +    revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // -    depends on: get_html_translation_table
    // *     example 1: htmlentities('Kevin & van Zonneveld');
    // *     returns 1: 'Kevin &amp; van Zonneveld'
    // *     example 2: htmlentities("foo'bar","ENT_QUOTES");
    // *     returns 2: 'foo&#039;bar'
 
    var histogram = {}, symbol = '', tmp_str = '', entity = '';
    tmp_str = string.toString();
    
    if (false === (histogram = get_html_translation_table('HTML_ENTITIES', quote_style))) {
        return false;
    }
    
    for (symbol in histogram) {
        entity = histogram[symbol];
        tmp_str = tmp_str.split(symbol).join(entity);
    }
    
    return tmp_str;
}

function html_entity_decode( string, quote_style ) {
    // http://kevin.vanzonneveld.net
    // +   original by: john (http://www.jd-tech.net)
    // +      input by: ger
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +    revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Onno Marsman
    // +   improved by: marc andreu
    // +    revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // -    depends on: get_html_translation_table
    // *     example 1: html_entity_decode('Kevin &amp; van Zonneveld');
    // *     returns 1: 'Kevin & van Zonneveld'
    // *     example 2: html_entity_decode('&amp;lt;');
    // *     returns 2: '&lt;'
 
    var histogram = {}, symbol = '', tmp_str = '', entity = '';
    tmp_str = string.toString();
    
    if (false === (histogram = get_html_translation_table('HTML_ENTITIES', quote_style))) {
        return false;
    }
 
    // &amp; must be the last character when decoding!
    delete(histogram['&']);
    histogram['&'] = '&amp;';
 
    for (symbol in histogram) {
        entity = histogram[symbol];
        tmp_str = tmp_str.split(entity).join(symbol);
    }
    
    return tmp_str;
}

/*magic, do not touch*/
function get_html_translation_table(table, quote_style) {
    // http://kevin.vanzonneveld.net
    // +   original by: Philip Peterson
    // +    revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: noname
    // +   bugfixed by: Alex
    // +   bugfixed by: Marco
    // +   bugfixed by: madipta
    // +   improved by: KELAN
    // +   improved by: Brett Zamir (http://brettz9.blogspot.com)
    // %          note: It has been decided that we're not going to add global
    // %          note: dependencies to php.js. Meaning the constants are not
    // %          note: real constants, but strings instead. integers are also supported if someone
    // %          note: chooses to create the constants themselves.
    // *     example 1: get_html_translation_table('HTML_SPECIALCHARS');
    // *     returns 1: {'"': '&quot;', '&': '&amp;', '<': '&lt;', '>': '&gt;'}
    
    var entities = {}, histogram = {}, decimal = 0, symbol = '';
    var constMappingTable = {}, constMappingQuoteStyle = {};
    var useTable = {}, useQuoteStyle = {};
    
    // Translate arguments
    constMappingTable[0]      = 'HTML_SPECIALCHARS';
    constMappingTable[1]      = 'HTML_ENTITIES';
    constMappingQuoteStyle[0] = 'ENT_NOQUOTES';
    constMappingQuoteStyle[2] = 'ENT_COMPAT';
    constMappingQuoteStyle[3] = 'ENT_QUOTES';
 
    useTable     = !isNaN(table) ? constMappingTable[table] : table ? table.toUpperCase() : 'HTML_SPECIALCHARS';
    useQuoteStyle = !isNaN(quote_style) ? constMappingQuoteStyle[quote_style] : quote_style ? quote_style.toUpperCase() : 'ENT_COMPAT';
 
    if (useTable !== 'HTML_SPECIALCHARS' && useTable !== 'HTML_ENTITIES') {
        throw Error("Table: "+useTable+' not supported');
        // return false;
    }
 
    // ascii decimals for better compatibility
    entities['38'] = '&amp;';
    if (useQuoteStyle !== 'ENT_NOQUOTES') {
        entities['34'] = '&quot;';
    }
    if (useQuoteStyle === 'ENT_QUOTES') {
        entities['39'] = '&#039;';
    }
    entities['60'] = '&lt;';
    entities['62'] = '&gt;';
 
    if (useTable === 'HTML_ENTITIES') {
      entities['160'] = '&nbsp;';
      entities['161'] = '&iexcl;';
      entities['162'] = '&cent;';
      entities['163'] = '&pound;';
      entities['164'] = '&curren;';
      entities['165'] = '&yen;';
      entities['166'] = '&brvbar;';
      entities['167'] = '&sect;';
      entities['168'] = '&uml;';
      entities['169'] = '&copy;';
      entities['170'] = '&ordf;';
      entities['171'] = '&laquo;';
      entities['172'] = '&not;';
      entities['173'] = '&shy;';
      entities['174'] = '&reg;';
      entities['175'] = '&macr;';
      entities['176'] = '&deg;';
      entities['177'] = '&plusmn;';
      entities['178'] = '&sup2;';
      entities['179'] = '&sup3;';
      entities['180'] = '&acute;';
      entities['181'] = '&micro;';
      entities['182'] = '&para;';
      entities['183'] = '&middot;';
      entities['184'] = '&cedil;';
      entities['185'] = '&sup1;';
      entities['186'] = '&ordm;';
      entities['187'] = '&raquo;';
      entities['188'] = '&frac14;';
      entities['189'] = '&frac12;';
      entities['190'] = '&frac34;';
      entities['191'] = '&iquest;';
      entities['192'] = '&Agrave;';
      entities['193'] = '&Aacute;';
      entities['194'] = '&Acirc;';
      entities['195'] = '&Atilde;';
      entities['196'] = '&Auml;';
      entities['197'] = '&Aring;';
      entities['198'] = '&AElig;';
      entities['199'] = '&Ccedil;';
      entities['200'] = '&Egrave;';
      entities['201'] = '&Eacute;';
      entities['202'] = '&Ecirc;';
      entities['203'] = '&Euml;';
      entities['204'] = '&Igrave;';
      entities['205'] = '&Iacute;';
      entities['206'] = '&Icirc;';
      entities['207'] = '&Iuml;';
      entities['208'] = '&ETH;';
      entities['209'] = '&Ntilde;';
      entities['210'] = '&Ograve;';
      entities['211'] = '&Oacute;';
      entities['212'] = '&Ocirc;';
      entities['213'] = '&Otilde;';
      entities['214'] = '&Ouml;';
      entities['215'] = '&times;';
      entities['216'] = '&Oslash;';
      entities['217'] = '&Ugrave;';
      entities['218'] = '&Uacute;';
      entities['219'] = '&Ucirc;';
      entities['220'] = '&Uuml;';
      entities['221'] = '&Yacute;';
      entities['222'] = '&THORN;';
      entities['223'] = '&szlig;';
      entities['224'] = '&agrave;';
      entities['225'] = '&aacute;';
      entities['226'] = '&acirc;';
      entities['227'] = '&atilde;';
      entities['228'] = '&auml;';
      entities['229'] = '&aring;';
      entities['230'] = '&aelig;';
      entities['231'] = '&ccedil;';
      entities['232'] = '&egrave;';
      entities['233'] = '&eacute;';
      entities['234'] = '&ecirc;';
      entities['235'] = '&euml;';
      entities['236'] = '&igrave;';
      entities['237'] = '&iacute;';
      entities['238'] = '&icirc;';
      entities['239'] = '&iuml;';
      entities['240'] = '&eth;';
      entities['241'] = '&ntilde;';
      entities['242'] = '&ograve;';
      entities['243'] = '&oacute;';
      entities['244'] = '&ocirc;';
      entities['245'] = '&otilde;';
      entities['246'] = '&ouml;';
      entities['247'] = '&divide;';
      entities['248'] = '&oslash;';
      entities['249'] = '&ugrave;';
      entities['250'] = '&uacute;';
      entities['251'] = '&ucirc;';
      entities['252'] = '&uuml;';
      entities['253'] = '&yacute;';
      entities['254'] = '&thorn;';
      entities['255'] = '&yuml;';
    }
    
    // ascii decimals to real symbols
    for (decimal in entities) {
        symbol = String.fromCharCode(decimal);
        histogram[symbol] = entities[decimal];
    }
    
    return histogram;
}