var SNIPPET_DIR = "./assets/snippets/reservations/";
var REQUEST_DIR = SNIPPET_DIR+"ajax/";
var selected_room_id = "0";
var start_date = "";
var end_date = "";
var adults = "";
var children = "";
var supplements_cost = 0;
var services_cost = 0;
var meal_plans_cost = 0;
var total_cost = 0;
var discount = 0;

var USD_CURR = 1.2626;
var GBP_CURR = 0.844209682;
var SELECTED_CURR = 0;
var CURR_SYMBOL = [];
CURR_SYMBOL['GBP'] = "&pound;";
CURR_SYMBOL['USD'] = "&#36;";
var j = jQuery.noConflict();

function get_rooms(){
	start_date = "";
	end_date = "";
	adults_obj = document.getElementById('adults');
	adults = adults_obj.options[adults_obj.selectedIndex].value;
	
	children_obj = document.getElementById('children');
	children = children_obj.options[children_obj.selectedIndex].value;
	selected_room_id = "0";
	reset_calculated_values();
	//update_calendar_holder("");
	update_instr("Please select dates to view the rooms available or room to view the available dates.");
	params = "action=get_rooms_occupancy&adults="+adults+"&children="+children;
	ajax_request(params, 'actions.php');
	
}


function clear_selections(){
	start_date = "";
	end_date = "";
	
	adults_obj = document.getElementById('adults');
	adults_obj.selectedIndex = 0;
	
	children_obj = document.getElementById('children');
	children_obj.selectedIndex = 0;
	get_rooms();
	update_instr(" Please select occupants...");
	reset_calculated_values();
	//update_calendar_holder("");
	//params = "action=get_rooms_occupancy&adults="+adults+"&children="+children;
	//ajax_request(params, 'actions.php');
	
	return false;
}

function get_rooms_for_dates(start_date, end_date){
	adults_obj = document.getElementById('adults');
	var adults = adults_obj.options[adults_obj.selectedIndex].value;
	
	children_obj = document.getElementById('children');
	var children = children_obj.options[children_obj.selectedIndex].value;
	
	//alert(start_date);
	//alert(end_date);
	
	params = "action=get_rooms_dates&adults="+adults+"&children="+children+"&start_date="+start_date+"&end_date="+end_date;
	
	//alert(params);
	
	ajax_request(params, 'actions.php');
	
}

function get_calendar_for_room(room_id){
	adults_obj = document.getElementById('adults');
	var adults = adults_obj.options[adults_obj.selectedIndex].value;
	
	children_obj = document.getElementById('children');
	var children = children_obj.options[children_obj.selectedIndex].value;
	
	params = "action=get_room_calendar&room_id="+room_id+"&adults="+adults+"&children="+children+"&start_date="+start_date+"&end_date="+end_date;
	ajax_request(params, 'actions.php');
}

function validate_calculate(start_date, end_date){
	//alert("Room: "+selected_room_id+" Dates: "+start_date+"-"+end_date+" Adults:"+adults+" Children:"+children);
	//alert('this is where i should do the following: 1) redo the availability check [occupancy, dates, minimum stay, allotment, booked]... 2) print out the button for booking 3) do the cost analisys and meal plans');
	
	params = "action=validate_calculate_room&adults="+adults+"&children="+children+"&start_date="+start_date+"&end_date="+end_date+"&room_id="+selected_room_id;
	ajax_request(params, 'actions.php');
}


function ajax_request(params, script){
	var lang_id = set_lang_id();
	var lang_prefix = set_lang_prefix();
	params += "&lang_id="+lang_id+"&lang_prefix="+lang_prefix;
	//alert(params);
	/*var xmlHttp;
	try{
		// Firefox, Opera 8.0+, Safari
		xmlHttp=new XMLHttpRequest();
	}catch (e){
		// Internet Explorer
		try{
			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		}catch (e){
			try{
				xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
			}catch (e){
				alert("Your browser does not support AJAX!");
				return false;
			}
		}
	}
	xmlHttp.open("POST",REQUEST_DIR+script,true);
	xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	xmlHttp.setRequestHeader("Content-length", params.length);
	xmlHttp.setRequestHeader("Connection", "close");
	
	
	xmlHttp.onreadystatechange=function(){
		if(xmlHttp.readyState==4){
			var txt = xmlHttp.responseText;
			//alert(txt);
			txt = txt.replace(/\n/g, '');
			txt = txt.replace(/\r/g, '');
			txt = txt.replace(/\t/g, '');

			eval(txt);
		}
	}
	xmlHttp.send(params);*/
	var j = jQuery.noConflict();
	j.ajax({
			type: 'POST',
			url: REQUEST_DIR+'actions.php',
			data: params,
			cache: false,
			//better to use async false - blocks the browser when the request is active
			async: false,
			success: function(txt){
				txt = txt.replace(/\n/g, '');
				txt = txt.replace(/\r/g, '');
				txt = txt.replace(/\t/g, '');
				eval(txt);
			}
	});
}


function reset_dropddown_selections(){
	adults_obj = document.getElementById('adults');
	adults_obj.selectedIndex = 0;
	children_obj = document.getElementById('children');
	children_obj.selectedIndex = 0;
}

function set_lang_id(){
	return document.getElementById('lang_id').value;
}

function set_lang_prefix(){
	return document.getElementById('lang_prefix').value;
}


function update_calendar_holder(inner_html){
	var cal_holder = document.getElementById('calendar_outer_holder');
	cal_holder.innerHTML = inner_html;
}


function supplements_js(){
	j('.supplements_input').click(function() {
		if(this.checked){
			total_cost += parseFloat(this.value);
			supplements_cost += parseFloat(this.value);
		}else{
			total_cost -= parseFloat(this.value);
			supplements_cost -= parseFloat(this.value);
		}
		update_supplements_cost(Math.abs(supplements_cost));
		update_total(Math.abs(total_cost));
	});
	
}

function services_js(){
		j('.services_input').click(function() {
		j('.services_input').not(this).each(function(i){
			if (this.checked){
				this.checked = false;
				services_cost -= parseFloat(this.value);
				total_cost -= parseFloat(this.value);
			}
		});
		if(this.checked){
			total_cost += parseFloat(this.value);
			services_cost += parseFloat(this.value);
		}else{
			total_cost -= parseFloat(this.value);
			services_cost -= parseFloat(this.value);
		}
		update_services_cost(Math.abs(services_cost));
		update_total(Math.abs(total_cost));
	});
}

function meal_plans_js(){
		j('.meal_plans_input').click(function() {
		j('.meal_plans_input').not(this).each(function(i){
			if (this.checked){
				this.checked = false;
				meal_plans_cost -= parseFloat(this.value);
				total_cost -= parseFloat(this.value);
			}
		});
			
		
		if(this.checked){
			total_cost += parseFloat(this.value);
			meal_plans_cost += parseFloat(this.value);
		}else{
			total_cost -= parseFloat(this.value);
			meal_plans_cost -= parseFloat(this.value);
		}
		update_meal_plans_cost(Math.abs(meal_plans_cost));
		update_total(Math.abs(total_cost));
	});
}


function hilight_calendar_range(){
//	alert("hilighting range");
}

function remove_hilighted_range(){
//	alert("removing range");
}

function set_selected_selected(date1, date2){
	j(document).ready(function(){	
		if((date1 != '')&&(date2 != '')){
			
			j('#calendar_holder').find('a[rel="'+date1+'"]').parent().parent().addClass('selected');
			j('#calendar_holder').find('a[rel="'+date2+'"]').parent().parent().addClass('selected');
			validate_calculate(date1, date2);
			//alert(date1+" "+date2);
		}
	});
}

function apply_calendar_js(room_update, price_calculation){
	j(document).ready(function(){
		j('.calendar_date_selection').click(function() {
			var found = 0;
			var has_room_avail = false;
			var selected_items = j('#calendar_outer_holder').find('.selected');
			var tmp = "";
			selected_items.each(function(i) {
				found++;
				/*room_id = '';
				selected_room_id = '';
				price_calculation = false;*/
			});
			
			if(found==2){
				selected_items.removeClass('selected').addClass('weekday');
				remove_hilighted_range();
				//selected_room_id = 0;
				price_calculation = false;
			}
			
			
			j(this).parent().parent().removeClass('weekday');
			j(this).parent().parent().addClass('selected');
			if(found==1){
				var date1 = selected_items.find('a').attr('rel');
				var date2 = j(this).attr('rel');
				if((compare_date(date1, date2))){
					tmp = date1;
					date1 = date2;
					date2 = tmp;
				}
					
					
					start_date = date1;
					end_date = date2;

				if(date1 == date2){
					alert('Please select different dates...');
				}else{
					j('#check_in_date').html(ymd_to_dmy(date1));
					j('#check_out_date').html(ymd_to_dmy(date2));
					get_rooms_for_dates(date1, date2);
					
					j('#rooms_container').find('.room_outer_container').find("input[name='room_id']").each(function(i){
					//	alert(j(this).val());
						has_room_avail = true;
						if(selected_room_id == j(this).val()){
						//	alert('found');
							j(this).parent().css('background', '#1783BF');
							j(this).parent().find('.room_inner_container').show('slow');
							price_calculation = true;
						}
					});
					//search in the container to see if we can find this room id and then deselect it if not and dont update the price
					
					
					//if(room_update){
					//		get_rooms_for_dates(date1, date2);
					//}
					if(price_calculation){
							validate_calculate(date1, date2);
							update_instr('Please go on with your reservation.');
					}else{
							if(has_room_avail){
								update_instr('Please select a room for these dates.');
							}
					}
				}
			}else{
				reset_calculated_values();
			}
				return false;
	});
	
	
	j('#up_cal_arrow').click(function() {
		var pScroll = 180;
		j('#calendar_holder').animate({scrollTop: '-=' + pScroll + 'px'}, 1000, 'easeInOutBack');
			return false;
	});
	j('#down_cal_arrow').click(function() {
		var pScroll = 180;
		if((j('#calendar_holder')[0].scrollHeight) <= j('#calendar_holder')[0].scrollTop + (pScroll*2)){
			pScroll = 0;
		}
		
	j('#calendar_holder').animate({scrollTop: '+=' + pScroll + 'px'}, 1000, 'easeInOutBack');
		return false;
	});
});	

}

function step_calendar(step){
	j(document).ready(function(){
		var animate_scrool = 180 * step;
		j('#calendar_holder').animate({scrollTop: '+=' + animate_scrool + 'px'}, 1000, 'easeInOutBack');
	});
	//alert(step+" "+animate_scrool);
}

function get_booking_button(){
	j('#book_button_holder').html('<img src="'+SNIPPET_DIR+'layout/images/book_button.jpg" id="booking_button"/>');
	j('#booking_button').click(function() {
		var found = 0;
		var day = Array(2);
		var supplements = "";
		var frm_html = "";
		var adults_val = "";
		var children_val = "";
		var room_id = "";
		var service = "";
		var meal_plan = "";
		var voucher_code = "";
		var baby_cot = "";
		
		//ADD THE COT
		//adults - children - room
		adults_val = j('#adults option:selected').val();
		children_val = j('#children option:selected').val();
		room_id = selected_room_id;
		baby_cot = j('#baby_cot').val();
		
		//dates
		j('#calendar_outer_holder').find('.selected').each(function(i){
				day[found] = j(this).find('a').attr('rel');
				found++;
		});
		if(found != 2){
			alert("Please pic 2 dates");
			return ;
		}
		start_date_val = day[0];
		end_date_val = day[1];
		
		//Supplements
		j('#supplements_holder').find('input:checked').each(function(i){
			supplements += '<input type="text" name="supplement_ids[]" value="'+j(this).attr('name')+'" />';
			//alert("found "+j(this).attr('name'));
		
		});
		//alert(supplements);
		j('#services_holder').find('input:checked').each(function(i){
			service = j(this).attr('name');
		});
		
		j('#meal_plans_holder').find('input:checked').each(function(i){
			meal_plan = j(this).attr('name');
		});
		
		j('#discount_voucher_holder').find('input').each(function(i){
			voucher_code = j(this).val();
			
		});
		
		if((adults_val != "")&&(start_date_val != "")&&(end_date_val != "")&&(room_id != "")){
			frm_html += '<form action="http://bougainvillea.com.cy/new/index.php?id=12" method="POST" id="book_frm" style="display: none;">';
			frm_html += '<input type="text" name="adults" value="'+adults_val+'" />';
			frm_html += '<input type="text" name="children" value="'+children_val+'" />';
			frm_html += '<input type="text" name="room_id" value="'+room_id+'" />';
			frm_html += '<input type="text" name="start_date" value="'+start_date_val+'" />';
			frm_html += '<input type="text" name="end_date" value="'+end_date_val+'" />';
			frm_html += '<input type="text" name="service_id" value="'+service+'" />';
			frm_html += '<input type="text" name="meal_plan_id" value="'+meal_plan+'" />';
			frm_html += '<input type="text" name="action" value="booking" />';
			frm_html += '<input type="text" name="baby_cot" value="'+baby_cot+'" />';
			frm_html += '<input type="text" name="voucher_code" value="'+voucher_code+'" />';
			frm_html += supplements;
			frm_html += '</form>';
			
			//alert(frm_html);
			
			j('#book_button_holder').html(frm_html);
			j('#book_frm').submit();
		}else{
			alert("Please review your selections..");
		}
		
	});
}

function covert_total(){
	var currency_obj = document.getElementById('currency_dropdown');
	var currency = currency_obj.options[currency_obj.selectedIndex].value;
	
	var currency_total = j('#total_price_holder').html();
	var converted_total = currency_total * currency;

	SELECTED_CURR = currency_obj.options[currency_obj.selectedIndex].text;
	
	j('#converted_total').html(CURR_SYMBOL[SELECTED_CURR]+"&nbsp;"+converted_total.toFixed(2));

}

function get_currency_converter(){
	var select_usd = "";
	var select_gbp = "";
	if(SELECTED_CURR == "USD"){
		select_usd = "selected";
	}else{
		select_gbp = "selected";
	}
	j('#converter_holder').html("<select onchange='covert_total();' name='currency_dropdown' id='currency_dropdown'><option value='"+USD_CURR+"' "+select_usd+">USD</option><option value='"+GBP_CURR+"' "+select_gbp+">GBP</option></select>");
	covert_total();
}

function update_instr(text){
	var instructions = document.getElementById('procidure');
	instructions.innerHTML = text;

}

function update_total(value){
	j('#total_price_holder').html(value.toFixed(2));
	get_currency_converter();
}

function update_supplements_cost(value){
	j('#supplement_price_holder').html(value.toFixed(2));
}

function update_services_cost(value){
	j('#services_price_holder').html(value.toFixed(2));
}

function update_meal_plans_cost(value){
	j('#meal_plan_price_holder').html(value.toFixed(2));
}

function update_discount_deduction(value){
	j('#discount_price_holder').html(value.toFixed(2));
}

function reset_calculated_values(){

	j('#room_price_holder').html('0.00');
	j('#supplement_price_holder').html('0.00');
	j('#meal_plan_price_holder').html('0.00');
	j('#services_price_holder').html('0.00');
	j('#total_price_holder').html('0.00');
	j('#discount_price_holder').html('0.00');
	
	j('#supplements_holder').html('&nbsp;');
	j('#services_holder').html('&nbsp;');
	j('#meal_plans_holder').html('&nbsp;');
	j('#discount_voucher_holder').html('&nbsp;');
	j('#go_btn_holder').html('&nbsp;');
	
	j('#book_button_holder').html('');
	
	total_cost = 0;
	supplements_cost = 0;
	meal_plans_cost = 0;
	discount = 0;
	j('#converter_holder').html("");
	j('#converted_total').html("");
}


function validate_code(){
	//total_cost = parseFloat(total_cost) + parseFloat(discount);
	discount = 0;
	update_discount_deduction(discount);
	
	j('.voucher_input').each(function(i){
		params = "action=validate_code&voucher_code="+this.value+"&start_date="+start_date+"&end_date="+end_date+"&room_id="+selected_room_id;
		ajax_request(params, 'actions.php');
	
	});
	return false;
}


function ymd_to_dmy(date_ymd){
	var date_dmy = "";
	
	date_dmy = date_ymd.charAt(8)+date_ymd.charAt(9)+"-"+date_ymd.charAt(5)+date_ymd.charAt(6)+"-"+date_ymd.charAt(0)+date_ymd.charAt(1)+date_ymd.charAt(2)+date_ymd.charAt(3);
	
	return date_dmy;
}


function compare_date(d1, d2){
	var mk_d1 = mktime(0, 0, 0, (d1.charAt(5)+d1.charAt(6)), (d1.charAt(8)+d1.charAt(9)), (d1.charAt(0)+d1.charAt(1)+d1.charAt(2)+d1.charAt(3)));
	var mk_d2 = mktime(0, 0, 0, (d2.charAt(5)+d2.charAt(6)), (d2.charAt(8)+d2.charAt(9)), (d2.charAt(0)+d2.charAt(1)+d2.charAt(2)+d2.charAt(3)));
	
	if(mk_d1>mk_d2){
		return true;
	}else{
		return false;
	}
}

function make_day2(d2){
	var mk_d2 = date('Y-m-d', mktime(0, 0, 0, (d2.charAt(5)+d2.charAt(6)), (parseFloat((d2.charAt(8)+d2.charAt(9)))-1), (d2.charAt(0)+d2.charAt(1)+d2.charAt(2)+d2.charAt(3))));
	return mk_d2;
}

function mktime() {
    
    var no, ma = 0, mb = 0, i = 0, d = new Date(), argv = arguments, argc = argv.length;
 
    if (argc > 0){
        d.setHours(0,0,0); d.setDate(1); d.setMonth(1); d.setYear(1972);
    }
 
    var dateManip = {
        0: function(tt){ return d.setHours(tt); },
        1: function(tt){ return d.setMinutes(tt); },
        2: function(tt){ var set = d.setSeconds(tt); mb = d.getDate() - 1; return set; },
        3: function(tt){ var set = d.setMonth(parseInt(tt)-1); ma = d.getFullYear() - 1972; return set; },
        4: function(tt){ return d.setDate(tt+mb); },
        5: function(tt){ return d.setYear(tt+ma); }
    };
    
    for( i = 0; i < argc; i++ ){
        no = parseInt(argv[i]*1);
        if (isNaN(no)) {
            return false;
        } else {
            // arg is number, let's manipulate date object
            if(!dateManip[i](no)){
                // failed
                return false;
            }
        }
    }
 
    return Math.floor(d.getTime()/1000);
}

function date ( format, timestamp ) {

 
    var a, jsdate=(
        (typeof(timestamp) == 'undefined') ? new Date() : // Not provided
        (typeof(timestamp) == 'number') ? new Date(timestamp*1000) : // UNIX timestamp
        new Date(timestamp) // Javascript Date()
    );
    var pad = function(n, c){
        if( (n = n + "").length < c ) {
            return new Array(++c - n.length).join("0") + n;
        } else {
            return n;
        }
    };
    var txt_weekdays = ["Sunday","Monday","Tuesday","Wednesday",
        "Thursday","Friday","Saturday"];
    var txt_ordin = {1:"st",2:"nd",3:"rd",21:"st",22:"nd",23:"rd",31:"st"};
    var txt_months =  ["", "January", "February", "March", "April",
        "May", "June", "July", "August", "September", "October", "November",
        "December"];
 
    var f = {
        // Day
            d: function(){
                return pad(f.j(), 2);
            },
            D: function(){
                var t = f.l();
                return t.substr(0,3);
            },
            j: function(){
                return jsdate.getDate();
            },
            l: function(){
                return txt_weekdays[f.w()];
            },
            N: function(){
                return f.w() + 1;
            },
            S: function(){
                return txt_ordin[f.j()] ? txt_ordin[f.j()] : 'th';
            },
            w: function(){
                return jsdate.getDay();
            },
            z: function(){
                return (jsdate - new Date(jsdate.getFullYear() + "/1/1")) / 864e5 >> 0;
            },
 
        // Week
            W: function(){
                var a = f.z(), b = 364 + f.L() - a;
                var nd2, nd = (new Date(jsdate.getFullYear() + "/1/1").getDay() || 7) - 1;
 
                if(b <= 2 && ((jsdate.getDay() || 7) - 1) <= 2 - b){
                    return 1;
                } else{
 
                    if(a <= 2 && nd >= 4 && a >= (6 - nd)){
                        nd2 = new Date(jsdate.getFullYear() - 1 + "/12/31");
                        return date("W", Math.round(nd2.getTime()/1000));
                    } else{
                        return (1 + (nd <= 3 ? ((a + nd) / 7) : (a - (7 - nd)) / 7) >> 0);
                    }
                }
            },
 
        // Month
            F: function(){
                return txt_months[f.n()];
            },
            m: function(){
                return pad(f.n(), 2);
            },
            M: function(){
                t = f.F(); return t.substr(0,3);
            },
            n: function(){
                return jsdate.getMonth() + 1;
            },
            t: function(){
                var n;
                if( (n = jsdate.getMonth() + 1) == 2 ){
                    return 28 + f.L();
                } else{
                    if( n & 1 && n < 8 || !(n & 1) && n > 7 ){
                        return 31;
                    } else{
                        return 30;
                    }
                }
            },
 
        // Year
            L: function(){
                var y = f.Y();
                return (!(y & 3) && (y % 1e2 || !(y % 4e2))) ? 1 : 0;
            },
            o: function(){
                if (f.n() === 12 && f.W() === 1) {
                    return jsdate.getFullYear()+1;
                }
                if (f.n() === 1 && f.W() >= 52) {
                    return jsdate.getFullYear()-1;
                }
                return jsdate.getFullYear();
            },
            Y: function(){
                return jsdate.getFullYear();
            },
            y: function(){
                return (jsdate.getFullYear() + "").slice(2);
            },
 
        // Time
            a: function(){
                return jsdate.getHours() > 11 ? "pm" : "am";
            },
            A: function(){
                return f.a().toUpperCase();
            },
            B: function(){
                // peter paul koch:
                var off = (jsdate.getTimezoneOffset() + 60)*60;
                var theSeconds = (jsdate.getHours() * 3600) +
                                 (jsdate.getMinutes() * 60) +
                                  jsdate.getSeconds() + off;
                var beat = Math.floor(theSeconds/86.4);
                if (beat > 1000) beat -= 1000;
                if (beat < 0) beat += 1000;
                if ((String(beat)).length == 1) beat = "00"+beat;
                if ((String(beat)).length == 2) beat = "0"+beat;
                return beat;
            },
            g: function(){
                return jsdate.getHours() % 12 || 12;
            },
            G: function(){
                return jsdate.getHours();
            },
            h: function(){
                return pad(f.g(), 2);
            },
            H: function(){
                return pad(jsdate.getHours(), 2);
            },
            i: function(){
                return pad(jsdate.getMinutes(), 2);
            },
            s: function(){
                return pad(jsdate.getSeconds(), 2);
            },
            u: function(){
                return pad(jsdate.getMilliseconds()*1000, 6);
            },
 
        // Timezone
            //e not supported yet
            I: function(){
                var DST = (new Date(jsdate.getFullYear(),6,1,0,0,0));
                DST = DST.getHours()-DST.getUTCHours();
                var ref = jsdate.getHours()-jsdate.getUTCHours();
                return ref != DST ? 1 : 0;
            },
            O: function(){
               var t = pad(Math.abs(jsdate.getTimezoneOffset()/60*100), 4);
               if (jsdate.getTimezoneOffset() > 0) t = "-" + t; else t = "+" + t;
               return t;
            },
            P: function(){
                var O = f.O();
                return (O.substr(0, 3) + ":" + O.substr(3, 2));
            },
            //T not supported yet
            Z: function(){
               var t = -jsdate.getTimezoneOffset()*60;
               return t;
            },
 
        // Full Date/Time
            c: function(){
                return f.Y() + "-" + f.m() + "-" + f.d() + "T" + f.h() + ":" + f.i() + ":" + f.s() + f.P();
            },
            r: function(){
                return f.D()+', '+f.d()+' '+f.M()+' '+f.Y()+' '+f.H()+':'+f.i()+':'+f.s()+' '+f.O();
            },
            U: function(){
                return Math.round(jsdate.getTime()/1000);
            }
    };
 
    return format.replace(/[\\]?([a-zA-Z])/g, function(t, s){
        if( t!=s ){
            // escaped
            ret = s;
        } else if( f[s] ){
            // a date function exists
            ret = f[s]();
        } else{
            // nothing special
            ret = s;
        }
 
        return ret;
    });
}
