/*
 * jQuery Field Plug-in
 *
 * Copyright (c) 2007 Dan G. Switzer, II
 *
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 *
 * Revision: 15
 * Version: 0.9.3
*/
(function($){var defaults={delimiter:",",checkboxRangeKeyBinding:"shiftKey",useArray:false};$.Field={version:"0.9.3",setDefaults:function(options){$.extend(defaults,options)},setProperty:function(prop,value){defaults[prop]=value},getProperty:function(prop){return defaults[prop]}};$.fn.fieldArray=function(v){var t=$type(v);if(t=="undefined")return getValue(this);if(t=="string"||t=="number"){v=v.toString().split(defaults.delimiter);t="array"}if(t=="array")return setValue(this,v);return this};$.fn.getValue=function(){return getValue(this).join(defaults.delimiter)};var getValue=function(jq){var v=[];jq.each(function(lc){var t=getType(this);switch(t){case"checkbox":case"radio":if(this.checked)v.push(this.value);break;case"select":if(this.type=="select-one"){v.push((this.selectedIndex==-1)?"":getOptionVal(this[this.selectedIndex]))}else{for(var i=0;i<this.length;i++){if(this[i].selected){v.push(getOptionVal(this[i]))}}}break;case"text":v.push(this.value);break}});return v};$.fn.setValue=function(v){return setValue(this,((!v&&(v!==0))?[""]:v.toString().split(defaults.delimiter)))};var setValue=function(jq,v){jq.each(function(lc){var t=getType(this),x;switch(t){case"checkbox":case"radio":if(valueExists(v,this.value))this.checked=true;else this.checked=false;break;case"select":var bSelectOne=(this.type=="select-one");var bKeepLooking=true;for(var i=0;i<this.length;i++){x=getOptionVal(this[i]);bSelectItem=valueExists(v,x);if(bSelectItem){this[i].selected=true;if(bSelectOne){bKeepLooking=false;break}}else if(!bSelectOne)this[i].selected=false}if(bSelectOne&&bKeepLooking&&!!this[0]){this[0].selected=true}break;case"text":this.value=v.join(defaults.delimiter);break}});return jq};$.fn.formHash=function(inHash){var bGetHash=(arguments.length==0);var stHash={};this.filter("form").each(function(){var els=this.elements,el,n,stProcessed={},jel;for(var i=0,elsMax=els.length;i<elsMax;i++){el=els[i];n=el.name;if(!n||stProcessed[n])continue;var jel=$(el.tagName.toLowerCase()+"[name='"+n+"']",this);if(bGetHash){stHash[n]=jel[defaults.useArray?"fieldArray":"getValue"]()}else if(typeof inHash[n]!="undefined"){jel[defaults.useArray?"fieldArray":"setValue"](inHash[n])}stProcessed[n]=true}});return(bGetHash)?stHash:this};$.fn.autoAdvance=function(callback){return this.find(":text,:password,textarea").bind("keyup.autoAdvance",function(e){var $field=$(this),iMaxLength=parseInt($field.attr("maxlength"),10);if(isNaN(iMaxLength)||("|9|16|37|38|39|40|".indexOf("|"+e.keyCode+"|")>-1))return true;if($field.getValue().length>=$field.attr("maxlength")){var $next=$field.moveNext().select();if($.isFunction(callback))callback.apply($field,[$next])}})};$.fn.moveNext=function(){return this.moveIndex("next")};$.fn.movePrev=function(){return this.moveIndex("prev")};$.fn.moveIndex=function(i){var aPos=getFieldPosition(this);if(i=="next")i=aPos[0]+1;else if(i=="prev")i=aPos[0]-1;if(i<0)i=aPos[1].length-1;else if(i>=aPos[1].length)i=0;return $(aPos[1][i]).trigger("focus")};$.fn.getTabIndex=function(){return getFieldPosition(this)[0]};var getFieldPosition=function(jq){var $field=jq.filter("input, select, textarea").get(0),aTabIndex=[],aPosIndex=[];if(!$field)return[-1,[]];$.each($field.form.elements,function(i,o){if(o.tagName!="FIELDSET"&&!o.disabled){if(o.tabIndex>0){aTabIndex.push(o)}else{aPosIndex.push(o)}}});aTabIndex.sort(function(a,b){return a.tabIndex-b.tabIndex});aTabIndex=$.merge(aTabIndex,aPosIndex);for(var i=0;i<aTabIndex.length;i++){if(aTabIndex[i]==$field)return[i,aTabIndex]}return[-1,aTabIndex]};$.fn.limitSelection=function(limit,options){var opt=jQuery.extend((limit&&limit.constructor==Object?limit:{limit:limit,onsuccess:function(limit){return true},onfailure:function(limit){alert("You can only select one Preferred Tour.");return false}}),options);var self=this;var getCount=function(el){if(el.type=="select-multiple")return $("option:selected",self).length;else if(el.type=="checkbox")return self.filter(":checked").length;return 0};var undoSelect=function(){setValue(self,getValue(self).slice(0,opt.limit));return opt.onfailure.apply(self,[opt.limit])};return this.bind((!!self[0]&&self[0].type=="select-multiple")?"change.limitSelection":"click.limitSelection",function(){if(getCount(this)>opt.limit){return(this.type=="select-multiple")?undoSelect():opt.onfailure.apply(self,[opt.limit])}opt.onsuccess.apply(self,[opt.limit]);return true})};$.fn.createCheckboxRange=function(callback){var opt=jQuery.extend((callback&&callback.constructor==Object?callback:{bind:defaults.checkboxRangeKeyBinding,click:callback}),callback);var iLastSelection=0,self=this,bCallback=$.isFunction(opt.click);if(bCallback)this.each(function(){opt.click.apply(this,[$.event.fix({type:null}),$(this).is(":checked")])});return this.each(function(){if(this.type!="checkbox")return false;var el=this;var updateLastCheckbox=function(e){iLastSelection=self.index(e.target)};var checkboxClicked=function(e){var bSetChecked=this.checked,current=self.index(e.target),low=Math.min(iLastSelection,current),high=Math.max(iLastSelection+1,current);if(bCallback)$(this).each(function(){opt.click.apply(this,[e,bSetChecked])});if(!e[opt.bind])return;for(var i=low;i<high;i++){var item=self.eq(i).attr("checked",bSetChecked?"checked":"").trigger("change");if(bCallback)opt.click.apply(item[0],[e,bSetChecked])}return true};$(this).unbind("click.createCheckboxRange").bind("click.createCheckboxRange",checkboxClicked).bind("click.createCheckboxRange",updateLastCheckbox);return true})};var getType=function(el){var t=el.type;switch(t){case"select":case"select-one":case"select-multiple":t="select";break;case"text":case"hidden":case"textarea":case"password":case"button":case"submit":case"submit":t="text";break;case"checkbox":case"radio":t=t;break}return t};var getOptionVal=function(el){return jQuery.browser.msie&&!(el.attributes['value'].specified)?el.text:el.value};var valueExists=function(a,v){return($.inArray(v,a)>-1)};var $type=function(o){var t=(typeof o).toLowerCase();if(t=="object"){if(o instanceof Array)t="array";else if(o instanceof Date)t="date"}return t};var $isType=function(o,v){return($type(o)==String(v).toLowerCase())}})(jQuery);	


jQuery(document).ready(function() {
	
		//if we are on the booking page then auto-submit:
		// if the end user is paying then redirect through to the payment gateway otherwise
		// send them through to booking completition page (skipping the booking step)
		
		if(jQuery("#cforms3form"))
		{
			var completion_url = jQuery('#CompletionURL').val();
			
			if(jQuery('#sepfm').val() =='on')
			{
				
			jQuery('#cforms3form').attr('action',completion_url);
			jQuery("#cforms3form").submit();
			}
			else
			{
			jQuery("#cforms3form").submit();
			}
		}
	
	
//if we have an error then read in the cookie for the pref bike and re-generate it.
	
	if(jQuery(".cf_li_err").length>0){
		var option_markup = generate_tour_menu(jQuery("#Preferred-Tour :selected").val());	
		var picked_bike = readCookie('pref_bike');
		jQuery("#pref_bike").val(picked_bike);
	}
	
	
	jQuery("#label-2-28").removeAttr('for');
	jQuery("#li-2-27 span").html("I've read and understood<br /> the <a href=\"javascript:popUp('/?p=216')\">Terms & Conditions</a>");
	
	
	var price_div = jQuery('<div class="price_label">Price</div><div class="price"></div>');
	jQuery('.cf-fs5').append(price_div);
	update_price();	
	
	
	jQuery("#Preferred-Tour").limitSelection(1);
	
	
	// select the first element in the multiple select box
	//jQuery("#pref_bike").val(jQuery("#pref_bike option:first").val());
	// Now a single select box
	//jQuery("#pref_bike").limitSelection(1);


	
	jQuery("#Preferred-Tour").click(function()
	{
		var option_markup = generate_tour_menu(jQuery("#Preferred-Tour :selected").val());
		update_price();
	});
	
	jQuery("#Preferred-Tour").change(function()
	{
		var option_markup = generate_tour_menu(jQuery("#Preferred-Tour :selected").val());						
		update_price();
	});
	
	jQuery("#Preferred-Tour").blur(function()
	{
		var option_markup = generate_tour_menu(jQuery("#Preferred-Tour :selected").val());						
		update_price();
	});
	
	jQuery("#Preferred-Tour").keydown(function()
	{
		var option_markup = generate_tour_menu(jQuery("#Preferred-Tour :selected").val());						
		update_price();
	});
	

	// wtf
	//jQuery("#pref_bike").mouseout(function()
	jQuery("#pref_bike").change(function()
	{
//		console.log(jQuery("#pref_bike :selected").val())
		var pref_bike_cookie = createCookie('pref_bike',jQuery("#pref_bike :selected").val());
		update_price();
	});


	jQuery("#no_of_riders").change(function()
	{
		update_price();
		tell_user_additional_riders(this);
	});

	
	if('#sendbutton2')
	{
	original_button_message = jQuery("#sendbutton2").val();
	jQuery("#sepfm").attr('checked',false);
	}
	
	jQuery("#sepfm").click(function()
	{
			
		if(jQuery("#sendbutton2").val() == original_button_message)
		{
			jQuery("#sendbutton2").attr('value','Click here to complete booking');
		}
		else
		{
			jQuery("#sendbutton2").attr('value',original_button_message);
		}
	});
	
	
	jQuery(".sendbutton").mouseover(function()
	{
//		console.log(jQuery("#pref_bike :selected").val());
		var pref_bike_cookie = createCookie('pref_bike',jQuery("#pref_bike :selected").val());
		update_price();	
	});

	jQuery("#deposit").click(function()
	{
		update_price();
	});
});



function popUp(URL) 
{
	day = new Date();
	id = day.getTime();
	eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=1,width=640,height=480');");
}

/*

This will generate the drop down for the Preffered Motorcycle choice, based on the choice from preffered tour.
Keep ',' out of the price values as this will cause a string split error.
Always append cc to cc ratings. eg. 400cc
*/


/*
returns string of html options.
*/
function generate_tour_menu(array_choice) 
{
	tours = new Array();
	// do not changes these keys!
	tours["Select Tour"] =											'Select Motorcycle'
	tours["Half Day Novice Tour"] =									'Select Motorcycle,	Suzuki LTZ-90 Quad Bike  - $250,	Yamaha TTR125 - $250,	Honda CRF150  - $250,	Honda CRF230  - $250,	Suzuki DRZ250 - $250,	Polaris Hawkeye Quad Bike - $250,	Suzuki DRZ400 - $285,	KTM 400EXC - $285,	Bring your own motorcycle - $125';
	tours["One Day Mountain Tour"] =								'Select Motorcycle,	Suzuki LTZ-90 Quad Bike  - $445,	Yamaha TTR125 - $445,	Honda CRF150  - $445,	Honda CRF230  - $445,	Suzuki DRZ250 - $445,	Polaris Hawkeye Quad Bike - $445,	Suzuki DRZ400 - $495,	KTM 400EXC - $495,	Bring your own motorcycle - $225';
	tours["Two Day Hillrun Tour"] =									'Select Motorcycle,	Suzuki LTZ-90 Quad Bike  - $1390,	Yamaha TTR125 - $1390,	Honda CRF150  - $1390,	Honda CRF230  - $1390,	Suzuki DRZ250 - $1390,	Polaris Hawkeye Quad Bike - $1390,	Suzuki DRZ400 - $1390,	KTM 400EXC - $1390,	Bring your own motorcycle - $900';
	tours["Five Day Canterbury Trails"] =							'Select Motorcycle,	Suzuki LTZ-90 Quad Bike - $3475,	Yamaha TTR125 - $3475,	Honda CRF150  - $3475,	Honda CRF230  - $3475,	Suzuki DRZ250 - $3475,	Polaris Hawkeye Quad Bike - $3475,	Suzuki DRZ400 - $3475,	KTM 400EXC - $3475,	Bring your own motorcycle - $2250';
	tours["Half Day Coaching"] =									'Select Motorcycle,	Suzuki LTZ-90 Quad Bike  - $250,	Yamaha TTR125 - $250,	Honda CRF150  - $250,	Honda CRF230  - $250,	Suzuki DRZ250 - $250,	Polaris Hawkeye Quad Bike - $250,	Suzuki DRZ400 - $285,	KTM 400EXC - $285,	Bring your own motorcycle - $125';
	tours["Full Day Coaching"] =									'Select Motorcycle,	Suzuki LTZ-90 Quad Bike  - $445,	Yamaha TTR125 - $445,	Honda CRF150  - $445,	Honda CRF230  - $445,	Suzuki DRZ250 - $445,	Polaris Hawkeye Quad Bike - $445,	Suzuki DRZ400 - $495,	KTM 400EXC - $495,	Bring your own motorcycle - $225';
	tours["Corporate - Price on Application"] =						'Select Motorcycle,	Suzuki LTZ-90 Quad Bike  - $0,		Yamaha TTR125 - $0,		Honda CRF150  - $0,		Honda CRF230  - $0,		Suzuki DRZ250 - $0,		Polaris Hawkeye Quad Bike - $0,		Suzuki DRZ400 - $0,		KTM 400EXC - $0,	Bring your own motorcycle - $0';
	// no quadbikes allow for these tours:
	tours["Four Day Extreme Enduro"] =								'Select Motorcycle,	Yamaha TTR125 - $4180,	Honda CRF150  - $4180,	Honda CRF230  - $4180,	Suzuki DRZ250 - $4180,	Suzuki DRZ400 - $4180,	KTM 400EXC - $4180,	Bring your own motorcycle - $1800';
	tours["Dual Sport Adventure - Coves & Coastline (1 Day)"] =		'Select Motorcycle,	Yamaha TTR125 - $445,	Suzuki DRZ250 - $445,	Suzuki DRZ400 - $495,	KTM 400EXC - $495,	Bring your own motorcycle - $225';
	tours["Dual Sport Adventure - Apline Springs (3 Days)"] = 		'Select Motorcycle,	Yamaha TTR125 - $2085,	Suzuki DRZ250 - $2085,	Suzuki DRZ400 - $2085,	KTM 400EXC - $2085,	Bring your own motorcycle - $1350';
	tours["Dual Sport Adventure - High Country Trails (6 Days)"] = 	'Select Motorcycle,	Yamaha TTR125 - $4170,	Suzuki DRZ250 - $4170,	Suzuki DRZ400 - $4170,	KTM 400EXC - $4170,	Bring your own motorcycle - $2700';
	tours["Dual Sport Adventure - South Island Safari (10 Days)"] = 'Select Motorcycle,	Yamaha TTR125 - $6950,	Suzuki DRZ250 - $6950,	Suzuki DRZ400 - $6950,	KTM 400EXC - $6950,	Bring your own motorcycle - $4500';

	var bike_prices =  mark_up_tour_options(tours[array_choice]);

	jQuery('#pref_bike').html(bike_prices);

}

/*
return a string of bike options based on the preffered motorcycle choices
*/

function update_price() 
{
	var riders =  jQuery('#no_of_riders :selected').val(); 
	var option = jQuery('#pref_bike :selected').val(); 
	var price = (riders * get_price(option));

	if(jQuery('#deposit').attr('checked')) {
		price = Math.round(price / 2);
	}

	jQuery('.price').html('$ ' + price);
	jQuery('#Total_String').val('$ ' + price);
	jQuery('#Total_NZD').val(price);
}

/*
creates a string of <options>
*/

function make_option(input_array) 
{
	var str='';
	for( i in input_array)
	{
		for(var j=0; j<input_array[i].length; j++)
		{
			str += '<option value="' + input_array[i][j] + '">' + input_array[i][j] + '</option>';
		}
	}
	return str;
}


/*
creates a string of <options> from a selected tour.
*/

function mark_up_tour_options(selected_tour)
{
	var str='';
	var array_picked_tour = selected_tour.split(',');
	for(var i=0; i< array_picked_tour.length; i++)
	{
		str += '<option value="' + array_picked_tour[i] + '">' + array_picked_tour[i] + '</option>';
	}
	return str;
}

/*
returns a price from a string as an int
*/
function get_price (str) 
{
	var price;
	price = str.match(/\$([0-9]+)/);
	// "Select Motorcycle" does not have a price
	if(price) {
		return parseInt(price[1]);
	}
	else {
		return 0;
	}
}

/*
allows the end user to fill in more information about more tour riders.
the client expects one form per customer
*/

function tell_user_additional_riders(no_of_riders)
{

	var riders =  no_of_riders.value;
	if(riders>1)
	{
		if(jQuery('.riders_check'))
		{
		jQuery('.riders_check').remove();
		}
		jQuery('#Question-or-Comments').after('<span class="reqtxt riders_check">Please insert the names of additional riders that you are paying for.</span>');
	}
	else 
	{
	jQuery('.riders_check').remove();
	}
}

function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}


function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}
