var isMSIE=0;

if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)){
	var ieversion=new Number(RegExp.$1);
	if (ieversion<8){
		isMSIE = 1;
	}
}

var ajax_sml = '<img src="/images/ajax-sml.gif" alt="loading" />';
var ajax_med = '<img src="/images/ajax-med.gif" alt="loading" />';
var ajax_lg = '<img src="/images/ajax-lg.gif" alt="loading" />';

function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function() {
			if (oldonload) {
				oldonload();
			}
			func();
		};
	}
}

function checkAlert(txt){
    if($('info').viewportOffset().top < -20){
        alert(txt);
    }
}

var clearTimer=null;

function clearTime(elem){
	clearTimer = setInterval("clearElemIE("+elem+")",5000);
}

function clearElemIE(elem){
	if(elem.style.display!='none'){
		$(elem).style.display='none';
	}
	var x = window.clearInterval(clearTimer);
}

function clearElem(elem){
	if(isMSIE){
		clearTime(elem);
	}else{
		//empty any existing 'clear' items in the queue
		var queue = Effect.Queues.get(elem);
		queue.each(function(effect) {
			effect.cancel();
		});
		//now add the new one
		Effect.Fade(elem, {
			queue: { position: 'end', scope: elem } ,
			delay:5
		});
	}
}

function clearClasses(elem){
	if($(elem).hasClassName('error')){$(elem).removeClassName('error');}
	if($(elem).hasClassName('notice')){$(elem).removeClassName('notice');}
	if($(elem).hasClassName('success')){$(elem).removeClassName('success');}
}
	
function initUser(){
	var url = '/users/include/uData.php';
		new Ajax.Request(url,{
		method:'get',
		onSuccess: function(transport){
			var response = transport.responseText;
			if(response){
				$('divLogin').innerHTML = response;
			}
		},
		onFailure: function(){
			$('divLogin').innerHTML = '<h2>ERROR</h2>';
		}
	});	
}
function initCreateStart(){
	var url = '/create/start.php';
	if($('divCreateStart')){
		new Ajax.Request(url,{
			method:'get',
			onSuccess: function(transport){
				var response = transport.responseText;
				if(isMSIE){
					$('divCreateStart').innerHTML = response;
				}else{
					new Effect.SlideUp('divCreateStart',{
						afterFinish:function(){$('divCreateStart').innerHTML = response;},
						duration:0.2,
						queue: {
							position: 'end',
							scope: 'divCreateStartScope'
						}
						});
					new Effect.SlideDown('divCreateStart',{duration:0.2, queue: { position: 'end', scope: 'divCreateStartScope' }});
				}
			},
			onFailure: function(){
				$('divCreateStart').innerHTML = '<h2>ERROR</h2>';
			}
		});
	}
}

function login(){
	var url = '/users/include/login.php';
		new Ajax.Request(url,{
		method:'post',
		parameters: {'username':$F('r_username'),'password':$F('r_password')},
		onSuccess: function(transport){
			var response = transport.responseText;
			if(response){
				rData = response.evalJSON();
				if(rData.login===0){
					$('info').innerHTML = rData.error;
					if(!isMSIE){
						clearClasses('info');
						$('info').addClassName('error');
					}else{
						$('info').style.background='#FBE3E4';
						$('info').style.borderColor='#FBC2C4';
						$('info').style.bordersTYLE='solid';
						$('info').style.borderWidth='2px';
						$('info').style.marginBottom='1em';
						$('info').style.padding='0.8em';
					}
					$('info').style.display = 'block';
				}else if(rData.login==1){
					initUser();
					initCreateStart();
					clearElem('info');
				}
			}
		},
		onFailure: function(){
			alert('There was a problem logging you in; please email the admin team if this problem persists.');
		}
	});
}

function trapEnter(event,p){
	if (Event.KEY_RETURN == event.keyCode) {
		if(p==1){
			agent_login();
		}else{
			login();
		}
	}
	return;
}



function logout(){
	var url = '/users/include/logout.php';
		new Ajax.Request(url,{
		method:'get',
		onSuccess: function(transport){
			var response = transport.responseText;
			rData = response.evalJSON();
			if(rData.status===0){
				if(parent.location.href!='http://www.flightlesstravel.com/'){
					parent.location.href='http://www.flightlesstravel.com/';
				}
				initUser();
				initCreateStart();
			}else{
				alert('There was a problem logging you out.  Please close your browser window instead.');
			}
		},
		onFailure: function(){
			$('divLogin').innerHTML = '<h2>ERROR</h2>';
		}
	});	
}

function initPlanLocations(){

	$('divStartLocation').innerHTML = ajax_sml;
	var url = '/plan/include/initLocations.php';
	new Ajax.Request(url,{
		method:'get',
		parameters: {'startCountry':$F('startCountry')},
		onSuccess: function(transport){
			var response = transport.responseText || 'Error fetching locations';
			$('divStartLocation').innerHTML = response;
		},
		onFailure: function(){
			$('divStartLocation').innerHTML = 'ERROR';
		}
	});
}

function initRoutes(range_min,range_max,rated,method){

	$('divRoutes').innerHTML = '<div style="text-align:center;min-height:300px;">' + ajax_lg + '</div>';

	var url = '/plan/include/initRoutes.php';
		new Ajax.Request(url,{
		method:'post',
		parameters: {'startLocation':parent.parent.$F('startLocation'),'range_min':range_min,'range_max':range_max,'rated':rated,'method':method},
		onSuccess: function(transport){
			var response = transport.responseText || 'Error fetching locations';
			$('divRoutes').innerHTML = response;
		},
		onFailure: function(){
			$('divRoutes').innerHTML = 'ERROR';
		}
	});	
}

/*
function prepSlider(passed_min,passed_max){
	var range_values='';
	var i=0;
	var set_min=0;
	var set_max=0;
	var min_rd = $F('min_route_duration');
	if(passed_min<min_rd){
		set_min=passed_min;
	}else{
		set_min=min_rd;
	}
	var max_rd = $F('max_route_duration');
	if(passed_max>max_rd){
		set_max=passed_max;
	}else{
		set_max=max_rd;
	}
	range_values = $F('range_values').split(',');
     var time_slider = 'time_slider';
     var handles = ['time_min','time_max'];
     var slider = new Control.Slider(handles, time_slider, {
               range: $R(min_rd,max_rd),
               values: $A(range_values),
               sliderValue: [set_min,set_max],
               spans: ['time_slider_span'],			   
			   onSlide: function(values) {
				   $('actualMinVal').innerHTML = makeDuration(values[0]);
				   $('actualMaxVal').innerHTML = makeDuration(values[1]);
				   $('currentMin').value = values[0];
				   $('currentMax').value = values[1];
			   },
               onChange: function(passed_val) {
				range_min = passed_val[0];
				range_max = passed_val[1]; 
                initRoutes(range_min,range_max,$F('routeRate'),$F('refineMethod'));
               }
          });
}
*/
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
var refinementTimer=null;
var refinementHeld=0;

function cancelRefinementTimer(){
	var x = window.clearInterval(refinementTimer);
	refinementHeld=0;
}

function procMinInc(f){
	var newDuration = parseInt($F('currentMin'),10)+10;
	if(newDuration>=$F('currentMax')){
		newDuration=$F('currentMax');
	}
	$('actualMinVal').innerHTML = makeDuration(newDuration);
	$('currentMin').value = newDuration;
	if(!f){
		refinementHeld++;
		if(refinementHeld>=12 && refinementHeld<24){
			cancelRefinementTimer();
			minInc(50);
		}else if(refinementHeld>=24){
			cancelRefinementTimer();
			minInc(25);
		}
	}
}

function procMinDec(f){
	var newDuration = parseInt($F('currentMin'),10)-10;
	if(newDuration<0){
		newDuration=0;
	}
	$('actualMinVal').innerHTML = makeDuration(newDuration);
	$('currentMin').value = newDuration;
	if(!f){
		refinementHeld++;
		if(refinementHeld>=12 && refinementHeld<24){
			cancelRefinementTimer();
			minDec(50);
		}else if(refinementHeld>=24){
			cancelRefinementTimer();
			minDec(25);
		}
	}
}

function procMaxInc(f){
	var newDuration = parseInt($F('currentMax'),10)+10;
	$('actualMaxVal').innerHTML = makeDuration(newDuration);
	$('currentMax').value = newDuration;
	if(!f){
		refinementHeld++;
		if(refinementHeld>=12 && refinementHeld<24){
			cancelRefinementTimer();
			maxInc(50);
		}else if(refinementHeld>=24){
			cancelRefinementTimer();
			maxInc(25);
		}
	}
}

function procMaxDec(f){
	var newDuration = parseInt($F('currentMax'),10)-10;
	if(newDuration<=$F('currentMin')){
		newDuration=$F('currentMin');
	}
	$('actualMaxVal').innerHTML = makeDuration(newDuration);
	$('currentMax').value = newDuration;
	if(!f){
		refinementHeld++;
		if(refinementHeld>=12 && refinementHeld<24){
			cancelRefinementTimer();
			maxDec(50);
		}else if(refinementHeld>=24){
			cancelRefinementTimer();
			maxDec(25);
		}
	}
}

function minInc(rate){
	var r;
	if(!rate){r=200;}else{r=rate;}
	refinementTimer = setInterval('procMinInc()',r);
}
function minDec(rate){
	var r;
	if(!rate){r=200;}else{r=rate;}
	refinementTimer = setInterval('procMinDec()',r);
}

function maxInc(rate){
	var r;
	if(!rate){r=200;}else{r=rate;}
	refinementTimer = setInterval('procMaxInc()',r);
}
function maxDec(rate){
	var r;
	if(!rate){r=200;}else{r=rate;}
	refinementTimer = setInterval('procMaxDec()',r);
}

function refineTime(){
	initRoutes($F('currentMin'),$F('currentMax'),$F('routeRate'),$F('refineMethod'));
}

function minIncClick(){
	var newDuration = parseInt($F('currentMin'),10)+10;
	if(newDuration>=$F('currentMax')){
		newDuration=$F('currentMax');
	}
	$('actualMinVal').innerHTML = makeDuration(newDuration);
	$('currentMin').value = newDuration;
	initRoutes($F('currentMin'),$F('currentMax'),$F('routeRate'),$F('refineMethod'));
}

function minDecClick(){
	var newDuration = parseInt($F('currentMin'),10)-10;
	if(newDuration<0){
		newDuration=0;
	}
	$('actualMinVal').innerHTML = makeDuration(newDuration);
	$('currentMin').value = newDuration;
	initRoutes($F('currentMin'),$F('currentMax'),$F('routeRate'),$F('refineMethod'));
}

function maxIncClick(){
	var newDuration = parseInt($F('currentMax'),10)+10;
	$('actualMaxVal').innerHTML = makeDuration(newDuration);
	$('currentMax').value = newDuration;
	initRoutes($F('currentMin'),$F('currentMax'),$F('routeRate'),$F('refineMethod'));
}

function maxDecClick(){
	var newDuration = parseInt($F('currentMax'),10)-10;
	if(newDuration<=$F('currentMin')){
		newDuration=$F('currentMin');
	}
	$('actualMaxVal').innerHTML = makeDuration(newDuration);
	$('currentMax').value = newDuration;
	initRoutes($F('currentMin'),$F('currentMax'),$F('routeRate'),$F('refineMethod'));
}



/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
function pad(str) {
	if(str<10){
		str = '0'+str;
	}
	return str;
 
}

function makeDuration(mins){
	if(mins<60){
		return pad(mins)+'m';
	}else if(mins>=60 && mins<=1440){
		hrs_frac = mins/60;
		hrs = Math.floor(hrs_frac);
		mins_rem = Math.round((hrs_frac - hrs)*60);
		mins_rem = 0 ? '0' : mins_rem;
		return pad(hrs)+"h "+pad(mins_rem)+"m";
	}else{
		day_frac = (mins/60)/24;
		days = Math.floor(day_frac);
		hrs_frac = (day_frac-days)*24;
		hrs = Math.floor(hrs_frac);
		mins_rem = Math.round((hrs_frac - hrs)*60);
		
		hrs = 0 ? '0' : hrs;
		mins_rem = 0 ? '0' : mins_rem;
		return pad(days)+"d "+pad(hrs)+"h "+pad(mins_rem)+"m";
	}
}

function rateHover(imgElem,setTo,u){

	var newImg = '/images/' + setTo + 'star' + u + '.png';
	$(imgElem).src = newImg;

}
function rateOut(imgElem,setTo,u){

	var newImg = '/images/' + setTo + 'star' + u + '.png';
	$(imgElem).src = newImg;

}

function refineRating(rate){
	$('routeRate').value = rate;
	initRoutes($F('currentMin'),$F('currentMax'),rate,$F('refineMethod'));
}

function refineMethod(){
	initRoutes($F('currentMin'),$F('currentMax'),$F('routeRate'),$F('refineMethod'));	
}

function resetRefinement(){
	setTo = 0;
	$('routeRate').value = setTo;
	var newImg = '/images/' + setTo + 'star.png';
	$('currentRating').src = newImg;
	if($('actualMinVal')){ $('actualMinVal').innerHTML = makeDuration($F('min_route_duration')); }
	if($('actualMaxVal')){ $('actualMaxVal').innerHTML = makeDuration($F('max_route_duration')); }
	$('currentMin').value = $F('min_route_duration');
	$('currentMax').value = $F('max_route_duration');
	$('refineMethod').value='';
//	if($('actualMinVal')){ prepSlider($F('min_route_duration'),$F('max_route_duration')); }
	initRoutes();
}

function rate(elem,rid,r){
	$(elem).value=r;
	$(elem+'_'+rid+'_img').src='/images/'+r+'star.png';
	var num=0;
	var denom=0;
	if(parseInt($F('culture'),10)>0){num=num+parseInt($F('culture'),10);denom++;}
	if(parseInt($F('scenery'),10)>0){num=num+parseInt($F('scenery'),10);denom++;}
	if(parseInt($F('safety'),10)>0){num=num+parseInt($F('safety'),10);denom++;}
	if(parseInt($F('bathroom_facilities'),10)>0){num=num+parseInt($F('bathroom_facilities'),10);denom++;}
	if(parseInt($F('fooddrink'),10)>0){num=num+parseInt($F('fooddrink'),10);denom++;}
	if(parseInt($F('drivers_conductors_agents'),10)>0){num=num+parseInt($F('drivers_conductors_agents'),10);denom++;}
	if(parseInt($F('comfort'),10)>0){num=num+parseInt($F('comfort'),10);denom++;}
	if(denom===0){denom=1;}
	var mean_overall = Math.round(num/denom);
	$('overall_rating').value=mean_overall;
	$('overall_rating_' + $F('route_id') + '_img').src='/images/'+mean_overall+'star.png';
}

var dtCh= "/";
var minYear=1900;
var maxYear=2100;

function isInteger(s){
	var i;
    for (i = 0; i < s.length; i++){   
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))){return false;}
    }
    return true;
}

function stripCharsInBag(s, bag){
	var i;
    var returnString = "";
    for (i = 0; i < s.length; i++){   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1){returnString += c;}
    }
    return returnString;
}

function daysInFebruary (year){
    return (((year % 4 === 0) && ( (!(year % 100 === 0)) || (year % 400 === 0))) ? 29 : 28 );
}
function DaysArray(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 31;
		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30;}
		if (i==2) {this[i] = 29;}
   } 
   return this;
}

function isDate(dtStr){
	var daysInMonth = DaysArray(12);
	var pos1=dtStr.indexOf(dtCh);
	var pos2=dtStr.indexOf(dtCh,pos1+1);
	var strDay=dtStr.substring(0,pos1);
	var strMonth=dtStr.substring(pos1+1,pos2);
	var strYear=dtStr.substring(pos2+1);
	strYr=strYear;
	if (strDay.charAt(0)=="0" && strDay.length>1){strDay=strDay.substring(1);}
	if (strMonth.charAt(0)=="0" && strMonth.length>1){strMonth=strMonth.substring(1);}
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1){strYr=strYr.substring(1);}
	}
	month=parseInt(strMonth,10);
	day=parseInt(strDay,10);
	year=parseInt(strYr,10);
	if (pos1==-1 || pos2==-1){
		alert("The date format should be : dd/mm/yyyy");
		return false;
	}
	if (strMonth.length<1 || month<1 || month>12){
		alert("Please enter a valid month");
		return false;
	}
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
		alert("Please enter a valid day");
		return false;
	}
	if (strYear.length != 4 || year===0 || year<minYear || year>maxYear){
		alert("Please enter a valid 4 digit year between "+minYear+" and "+maxYear);
		return false;
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))===false){
		alert("Please enter a valid date");
		return false;
	}
return true;
}

function validateDate(){
	var dt=$F('route_travelled');
	if (isDate(dt)===false){
		dt.focus();
		return false;
	}
    return true;
}

function saveRate(){
	if(validateDate()){
		var url = '/rate/include/saveRate.php';
		new Ajax.Request(url,{
			method:'post',
			parameters: Form.serialize($('fmRating')),
			//parameters: $('fmRating').serialize(true),
			onSuccess: function(transport){
				var response = transport.responseText;
				var rData = response.evalJSON();
				$('info').innerHTML = rData.msg;
				$('info').style.display = 'block';
				if(rData.flag=='1'){
				  //$('btnView').disabled=false;
				     $('btnView').enable();
				     parent.parent.$('routeRate_'+rData.rid).value = rData.overall;
					parent.parent.$('currentRating_'+rData.rid).src='/images/'+rData.overall+'star.png';
				}
				clearElem('info');
				if(!isMSIE){
     				var posn = $('info').cumulativeScrollOffset();
     				if(posn[1]!==0){
     					alert(rData.msg);
     				}
     			}
			},
			onFailure: function(){
				$('info').innerHTML = 'ERROR SAVING RATING';
				$('info').style.display = 'block';
				clearElem('info');
				if(!isMSIE){
     				var posn = $('info').cumulativeScrollOffset();
     				if(posn[1]!==0){
     					alert('ERROR SAVING RATING');
     				}
     			}
			}
		});	
	}
}

function initCreate(){
	var cid=$F('startCountryPlan');
	this.parent.location.href='/create/?cid='+cid;
}
 
function getSelectionId(text, li) {
	alert ('here');
//		alert (li.id);
}

function rateFromRoute(route,rid){
	parent.location.href='/rate/rate.php?rid='+rid;
	parent.parent.$('GB_caption').innerHTML = route;
	
}

function routeFromRate(rid){
	parent.location.href='/plan/include/initRoute.php?rid='+rid;
	parent.parent.$('GB_caption').innerHTML = 'View Rated Route';
	
}

function hiliteComments(set,id){
switch(set){
	case 'min':
		color = '#348934';
		break;
	case 'max':
		color = '#A72727';
		break;
}
if($('did_'+id)){
	$('did_'+id).style.background=color;
}
if($('cid_'+id)){
	$('cid_'+id).style.background=color;
}
return false;
}

var durationTimer=null;
var durationHeld=0;

function increaseDuration(rate){
	var r;
	if(!rate || rate==0){r=200;}else{r=rate;}
	durationTimer = setInterval('procIncreaseDuration(0)',r);
}
function decreaseDuration(rate){
	var r;
	if(!rate || rate==0){r=200;}else{r=rate;}
	durationTimer = setInterval('procDecreaseDuration(0)',r);
}

function cancelDurationTimer(){
	var x = window.clearInterval(durationTimer);
	durationHeld=0;
}

function procIncreaseDuration(f){
	var newDuration = parseInt($F('route_duration'),10)+10;
	$('route_duration').value = newDuration;
	$('durationTxt').innerHTML = makeDuration(newDuration);
	if(f==0){
		durationHeld++;
		if(durationHeld>=12 && durationHeld<24){
			cancelDurationTimer();
			increaseDuration(50);
		}else if(durationHeld>=24){
			cancelDurationTimer();
			increaseDuration(25);
		}
	}
}

function procDecreaseDuration(f){
	var newDuration = parseInt($F('route_duration'),10)-10;
	if(newDuration<0){
		newDuration=0;
	}
	$('route_duration').value = newDuration;
	$('durationTxt').innerHTML = makeDuration(newDuration);
	if(f==0){
		durationHeld++;
		if(durationHeld>=12 && durationHeld<24){
			cancelDurationTimer();
			decreaseDuration(50);
		}else if(durationHeld>=24){
			cancelDurationTimer();
			decreaseDuration(25);
		}
	}
}
function initImages(rid){
	$('divRouteImages').innerHTML = ajax_lg;
	var url = '/plan/include/initImages.php';
	new Ajax.Request(url,{
		method:'post',
		parameters: {'rid':rid},
		onSuccess: function(transport){
			var response = transport.responseText;
			$('divRouteImages').innerHTML = response;
		},
		onFailure: function(){
			$('info').innerHTML = 'ERROR LOADING IMAGES';
			$('info').style.display = 'block';
			clearElem('info');
		}
	});	
   
}

function saveCaption(cid){
	$('info').innerHTML = ajax_sml;
	$('info').style.display = 'block';
	var url = '/plan/include/saveCaption.php';
	new Ajax.Request(url,{
		method:'post',
		parameters: {'cid':cid,'cap':$F(cid)},
		onSuccess: function(transport){
			var response = transport.responseText;
			$('info').innerHTML = response;
			var posn = $('info').cumulativeScrollOffset();
			if(posn[1]!==0){
				alert(response);
			}
			clearElem('info');
		},
		onFailure: function(){
			$('info').innerHTML = 'ERROR SAVING CAPTION';
			var posn = $('info').cumulativeScrollOffset();
			if(posn[1]!==0){
				alert('ERROR SAVING CAPTION');
			}
			clearElem('info');
		}
	});	
}

