var _offset = 0;
var partners = {};
var dates_init = false;
var adults_init = false;
var date_format = 'm/d/yy';

function init_dates() {
	if (dates_init) return;
	dates_init = true;
	
	var _default_checkin;
	var _default_checkout;
	var _now = new Date();

	if ( $.cookie('tp_checkin') || $.cookie('tp_checkout') ) {
		var _ci;
		var _co;
		try {
			_ci = $.datepicker.parseDate(date_format,$.cookie('tp_checkin'));
			_co = $.datepicker.parseDate(date_format,$.cookie('tp_checkout'));
		} catch ( err ) {}
		if (! _ci || _ci < _now || ! _co || ! _co <= _now) {
			$.cookie('tp_checkin',null);
			$.cookie('tp_checkout',null);
		}
	}
	if ( $.cookie('tp_checkin') && $.cookie('tp_checkout') ) {
		_default_checkin = $.cookie('tp_checkin');
		_default_checkout = $.cookie('tp_checkout');
	} else {
		_now.setDate(_now.getDate() + 1);
        _default_checkin = $.datepicker.formatDate( date_format, _now );
        _now.setDate(_now.getDate() + 2);
		_default_checkout = $.datepicker.formatDate( date_format, _now );
	}

    $('.check-in-date').val(_default_checkin).datepicker( {
        dateFormat:  date_format,
        duration: '', // no animation
        numberOfMonths: 2,
        maxDate: '+306', // copy TA
        minDate: '+0', // today
        onSelect: function ( dateText, inst ) {
            var _checkin = $(this).datepicker('getDate');
            // make checkin consistent with other datepickers on the page
            var _checkindate = $.datepicker.formatDate( date_format, _checkin );
			$('.check-in-date').val( _checkindate );
			
			// IE does this way too slowly (not a selector issue)
			if (! $.browser.msie ) {
				var _checkoutdate = new Date( _checkin.getTime() + 86400000 );
				$('.check-out-date').datepicker( 'option', 'minDate', _checkoutdate );
			}
        }
    });

    $('.check-out-date').val(_default_checkout).datepicker( {
        dateFormat:  date_format,
        duration: '',
        numberOfMonths: 2,
        maxDate: '+306',
        minDate: '+1',
		onSelect: function ( dateText, inst ) {
			var _checkoutdate = $.datepicker.formatDate(date_format, $(this).datepicker('getDate') );
			$('.check-out-date').val( _checkoutdate );
		}
    });
}

function init_adults() {
	if (adults_init) return;
	adults_init = true;

    var _default_adults = ( $.cookie('tp_adults') ? $.cookie('tp_adults') : 1 );
    $('select[name=adults]').val(_default_adults).change( function () {
        var _adults = $(this).val();
        $('select[name=adults]').each( function () {
            $(this).val(_adults);
        });
    });
}

function init_hac() {
	init_dates();
	init_adults();

	$('.hac form').submit(function(e) {
		var _form = $(this);
		var _checkin_dp = $(this).find('.check-in-date').datepicker('getDate');
		var _checkout_dp = $(this).find('.check-out-date').datepicker('getDate');
	    var _inMonth = $.datepicker.formatDate('m/yy', _checkin_dp);
	    var _inDay = $.datepicker.formatDate('d', _checkin_dp);
	    var _outMonth = $.datepicker.formatDate('m/yy', _checkout_dp);
	    var _outDay = $.datepicker.formatDate('d', _checkout_dp);

        var url = [];
        url[url.length] = _form.attr("action") + '?' + _form.serialize();
        url[url.length] = 'inMonth=' + _inMonth;
        url[url.length] = 'inDay='   + _inDay;
        url[url.length] = 'outMonth='+ _outMonth;
        url[url.length] = 'outDay='  + _outDay;

        var _url = '/cgi-bin/ct?u='+ encodeURIComponent(url.join('&')) + '&pa='+encodeURIComponent(_form.attr('pa'))+'&su='+encodeURIComponent(_form.attr('su'));
		popup( null, null, _url, 'hac' );
		return false;
	});
}

function init_icr () {
	init_dates();
	init_adults();

	$("a.check-rates").live("mouseover", function() {
		var _icr = $("#icr-modal");
		var _icr_id = this.id;
		_icr.attr('pa', $(this).attr('pa') || 'hotel_detail');
		if (_icr_id) {
			_icr.find("ul").removeClass('active');
			var _icr_partner_list = _icr.find("ul."+_icr_id);
			if ( _icr_partner_list.size() > 0 ) {
				_icr_partner_list.addClass('active');
			} else {
				$('<ul class="active '+ _icr_id +'"></ul>').appendTo(_icr.find('.vendors'));
				$('#icr_partner_waiting').show();
				var hotel_id = _icr_id.split('-')[1];
				var mcid = _icr_id.split('-')[2];
				$.getJSON('/cgi-bin/accommodations.pl?page_type=partners&hotel_id='+hotel_id+'&mcid='+mcid,
				    function(data){
						$('#icr_partner_waiting').hide();
					    $.each(data, function(i,partner){
							$('<li><input type="checkbox" value="'+partner.Url+'" position="'+i+'" name="'+partner.Vendor+'" id="'+partner.Author+'" '+ (partner.Checked === undefined ? '' : 'checked') +' /><label for="'+partner.Author+'">'+partner.Vendor+'</label></li>').appendTo(_icr.find("ul."+_icr_id));
					    });
				    }
				);
			}
		}
		_icr.dialog({
			autoOpen: false,
			width:'335px',
			close: function(event, ui) {
				$(this).find('.hasDatepicker').datepicker('hide');
			}
		});
        var left = $(this).offset().left+$(this).width()-$(window).scrollLeft();
        if ($(this).hasClass('float-icr-left')) {
            left = $(this).offset().left-320-$(window).scrollLeft();
        }
		var position = [left,$(this).offset().top-$(window).scrollTop()-10];
		if (position == _icr.dialog('option', 'position') && _icr.dialog('isOpen')) return;
		_icr.dialog('option', 'modal', false);
		_icr.dialog('option', 'position', position);
		if (! $(this).hasClass('disable-hover') ) _icr.dialog('open');
	}).live("click", function() {
		$("#icr-modal").dialog('close');
		$("#icr-modal").dialog('option', 'modal', true);
		$("#icr-modal").dialog('open');
		return false;
	}).attr('href', '#');
}
function init_reviews(ta_id,partner_id,mcid,suffix,show_checkrates) {
    $('#hotel-reviews').append("<img src='/bin/graphics/busy.gif' id='spinner' />");
    $.get('/cgi-bin/accommodations-reviews.pl?hotel_id='+ ta_id +'&lnf='+ partner_id +'&mcid='+ mcid +'&suf='+ suffix + '&show_checkrates=' + ( show_checkrates ? '1' : '' ),
        function (data) {
            $('#reviews').html( data );
            $('#spinner').remove();
            /*
            if (show_checkrates) {
                var check_rates_node = $('.check-rates-container').clone().get(0);
                if (check_rates_node) $('#reviews .check-rates').parent().replaceWith(check_rates_node);
            }
            */
        }
    );
}
function popup (e, el, url, name, offset) {
	if (!offset) offset = 0;
	if (screen.width > 1024) {
		width = 800;
		height = 600;
		x = 240;
		y = 5;
	} else if (screen.width > 800) {
		width = 620;
		height = 500;
		x = 240;
		y = 5;
	} else {
		width = 475;
		height = 390;
		x = 210;
		y = 5;
	}
	x+=offset;
	y+=offset;
	var args = [];
	args[args.length] = 'width='+ width;
	args[args.length] = 'height='+ height;
	args[args.length] = 'screenX='+ x;
	args[args.length] = 'screenY='+ y;
	args[args.length] = 'left='+ x;
	args[args.length] = 'top='+ y;
	if (!url) url = el.href;
	var w = window.open(url, name, args.join(',')+',toolbar=1,resizable=1,menubar=1,location=1,status=1,scrollbars=1');
	if (w != null && e != null) {
		e.preventDefault();
		w.focus();
	}
	return w;
}
function search_partners(el) {
	partners = {};
	var _selected_partners = el.find("ul.active [type=checkbox]:checked");
    if (_selected_partners.length === 0) {
        alert("Please select at least one vendor from the list.");
        return;
    }
    var _checkin_dp = el.find('.check-in-date').datepicker('getDate');
    var _checkout_dp = el.find('.check-out-date').datepicker('getDate');
    var _adults = el.find('select[name=adults]').val();
    var _inMonth = $.datepicker.formatDate('m%20yy', _checkin_dp);
    var _inDay = $.datepicker.formatDate('d', _checkin_dp);
    var _outMonth = $.datepicker.formatDate('m%20yy', _checkout_dp);
    var _outDay = $.datepicker.formatDate('d', _checkout_dp);
    if (_checkin_dp > _checkout_dp) { // dates reversed
        var _inMonthTmp = _inMonth;
        var _inDayTmp   = _inDay;
        _inMonth    = _outMonth;
        _inDay      = _outMonth;
        _outMonth   = _inMonthTmp;
        _outDay     = _inDayTmp;
    }
    var _popup_blocker_enabled = false;
    $.cookie('tp_checkin', el.find('.check-in-date').val());
    $.cookie('tp_checkout', el.find('.check-out-date').val());
    $.cookie('tp_adults', _adults);
    _selected_partners.each(function (i, e) {
        var url = [];
        url[url.length] = 'http://www.tripadvisor.com'+$(e).val();
        url[url.length] = '&inMonth=' + _inMonth;
        url[url.length] = '&inDay='   + _inDay;
        url[url.length] = '&outMonth='+ _outMonth;
        url[url.length] = '&outDay='  + _outDay;
        url[url.length] = '&adults='  + _adults;
        url[url.length] = '&position='+ $(e).attr('position');

        var partner = $(e).attr('id');
        var _url = '/cgi-bin/ct?u='+ encodeURIComponent(url.join('&')) + '&pa='+ encodeURIComponent(el.attr('pa') || 'hotel_detail') +'&su=icr&pl='+el.attr('id');

        partners[partner] = { url: _url, name: $(e).attr('name') };

        if (_popup_blocker_enabled) return;

        var _window = show_partner(partner);

        if (_window === null) {
            _popup_blocker_enabled = true;
        }
    });
    if (_popup_blocker_enabled) {
        manual_show_partners(partners);
    }
}
function manual_show_partners(partners) {
    var _parent = $("#manual_icr_dialog ul");
    _parent.html('');

    var _count_checked = 0;
    var _count_total = 0;

    for (var partner in partners) {
        _count_total++;
        if (partners[partner].opened) _count_checked++;
        var _html = '<li><a href="'+ partners[partner].url + '" style="padding-left:111px; background: url(/bin/graphics/'+ (partners[partner].opened ? 'cr_check.gif' : 'cr.gif') +') no-repeat" onclick="if (!show_partner(\''+partner+'\',this)) return true; return false">'+partners[partner].name+'</a></li>';
        $(_html).appendTo(_parent);
    }

    $("#icr_checked").html(_count_checked);
    $("#icr_total").html(_count_total);

    $("#manual_icr_dialog").dialog({
        bgiframe: true,
        autoOpen: false,
        modal: true,
        position: ['left','top']
    });
    $("#manual_icr_dialog").dialog('open')
}
function show_partner(partner,el) {
    var _window = popup( null, null, partners[partner].url, partner, _offset );
    if (_window) {
        partners[partner].opened = true;
        _offset += 30;
    }
    if (el) {
        el.style.backgroundImage='url(/bin/graphics/cr_check.gif)';
        var _count_checked = 0;
        for (var partner in partners) {
            if (partners[partner].opened) _count_checked++;
        }
        $("#icr_checked").html(_count_checked);
    }
    return _window;
}
/*
function replace_static_map (container, width, height, src) {
    if (!width) width=264;
    if (!height) height=264;
    $(container).parent().html('<iframe name="map_frame" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" width="'+ width +'" height="'+ height +'" src="'+ src +'">');
}
*/