window.addEvent('domready', function() {
	
	/************************************************************
	 Slide out locations
	******/

	$$( '.locations_box_wrapper' ).each(function(item){
		var thisSlider = new Fx.Slide( item.getElement( '.locations_box' ), { duration: 250 } );
		thisSlider.hide();
		item.getElement( '.toggle' ).addEvent( 'click', function(){ 
			thisSlider.toggle();
			if (item.getElement('.toggle').getStyle('background-position') == '0% 0%')
				item.getElement('.toggle').setStyle('background-position', '0px -31px');
			else
				item.getElement('.toggle').setStyle('background-position', '0% 0%');
		});
	});

	// Capcha
	
	if ($("capcha")){
		var spans       = $$('#capcha div.opt span');
	    var radios      = $$('#capcha div.opt span input');
	    var images      = $$('#capcha div.opt div.j3img');
	    
	    spans.each(function(el){
	    	el.setStyles({'display':'none'});
	    });
	
	    images.each(function(el){
	    	el.setStyles({'display':'block'});
	    	el.addEvent('click', function(element){
	    		images.each(function(img){
	    			img.setStyles({'background-position':'bottom left'});
	    		});
	    		el.setStyles({'background-position':'top left'});
	    		el.getParent('div').getChildren('span').each(function(e){
	    			e.getChildren('input').setProperty('checked',true);
	    		});
	    		//radios.setProperty('checked',true);
	    	});
	    });	
	}
	
	// display the date picker (hidden by default)
	$$( '.date_picker' ).each(function(item){
		item.setStyle('display','block');
	});
	
	// Date Picker
	var currentTime = new Date();
	var month = currentTime.getMonth() + 1;
	var day = currentTime.getDate();
	var year = currentTime.getFullYear();
	var currentDate = day + '-' + month + '-' + year;
	new DatePicker('.date_picker', { pickerClass: 'datepicker_vista', format: 'M j, Y', minDate: { date: currentDate, format: 'd-m-Y' } });	
	
	// set JS enabled flag, if required
	$$( '.js_enabled' ).each(function(item){
		item.value=1;
	});

	// Homepage Text
	$$('.homepage_country_text' ).each(function(el){
		var n = 300;
		var html = el.get('html');
		var htmllength = html.replace(/<[^>]*>/g, "");
		htmllength = htmllength.length;
		var tooLong = htmllength > n,
		s_ = tooLong ? html.substr(0,n-1) : html;
        s_ = tooLong ? s_.substr(0,s_.lastIndexOf(' ')) : s_;
        var dots = '';
        dots = tooLong ? '... ' : '';
        if (tooLong) 
        {
        	var orig_height = '382px';
        	if (el.getParent('div').get('class').indexOf('hp_main')>0)
        		orig_height = 'auto';
        	s_ = s_ + dots;
	        el.more = new Element('span', {
	        	'html' : 'read more',
	        	'style' : 'cursor:pointer;color:#DA7700;',
	        	'class' : '_morelink',
				events: {
					click: function() {
						el.setProperty('html', html);
						this.setStyle('display', 'none');
						el.getParent('div').setStyle('height', 'auto');
						less = new Element('span', {
							'html' : 'show less',
							'style' : 'cursor:pointer;color:#DA7700;',
							'class' : '_lesslink',
							events: {
								click: function() {
									el.setProperty('html', s_);
									this.setStyle('display', 'none');
									el.more.setStyle('display', 'block');
									el.getParent('div').setStyle('height', orig_height);
								}
							}
						}).inject(el, 'after');
	        		}
	        	}
	        }).inject(el, 'after');
        }
        el.setStyle('padding-bottom', '30px');
        el.setProperty('html', s_);
	});	

});

function getQueryVariable(variable) {
	var query = window.location.search.substring(1);
	var vars = query.split("&");
	for (var i=0;i<vars.length;i++) {
		var pair = vars[i].split("=");
		if (pair[0] == variable) {
			return pair[1];
		}
	}
}

function findobject(n, d) 
{
	var x,i,p;

	if(!d) d=document;
	if((p=n.indexOf("?"))>0&&parent.frames.length) 
	{
		d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);
	}
	if(!(x=d[n])&&d.all) x=d.all[n];
	for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
	for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=findobject(n,d.layers[i].document);
	if(!x && document.getElementById) x=document.getElementById(n); return x;
}

function showlayer(myname, myaction ) 
{
	var p,v,obj;

	if ((obj=findobject(myname))!=null) 
	{
		v=myaction;
	}
	if (obj.style) {
		obj=obj.style; v=(v=='show')?'visible':(v='hide')?'hidden':v;
	}
	obj.visibility=v;
}



/************************************************************
 Maps
******/

// Highlights a region on the map
function mapSetRegion(partN) 
{
	if ($('dynamic_map'))
		$('dynamic_map').SetVariable("perem1", "state" + partN);
}

// Update location dropdown from Flash Map
function mapSetDropdown(loc,id){
	// loc = 1,2,3 or 4
	// id = numerical value for this location
		
	current_map_level = loc;
		
	lc = $('lc'+loc);	// reference the dropdown element
	success = false;
	
	// loop through options 
	for(i=0;i<lc.options.length;i++)
	{
		var current = lc.options[i];
		$(current).setProperty('selected','');
		if(current.value == id)
		{
			current.setProperty('selected', 'selected');
			sub('lc'+loc);
			success = true;
		}
	}
	
	if (success == false && loc == 4)
	{
		// try lc3
		lc = $('lc3');
		for(i=0;i<lc.options.length;i++)
		{
			var current = lc.options[i];
			$(current).setProperty('selected','');
			if(current.value == id)
			{
				current.setProperty('selected', 'selected');
				sub('lc'+loc);
				success = true;
			}
		}		
	}
	
	
	if (loc == 3)
		displayVillaListings(id);

	if (loc == 2)
		checkMinLevel(id);	
		
	refreshFeaturedVillas(id);
}

function checkMinLevel(id)
{
	// get the min level for this location
	// compare to current map level and take appropriate action
	var req = new Request.HTML({url: '/ajax_map_control.php?type=min&id='+id, 
		onSuccess: function(one, two, text) {
			var json = eval("("+text+")");
			if (json.min)
				if ($('dynamic_map'))
					if (parseInt(json.min)-1 == parseInt(current_map_level))
						displayVillaListings(id);
		}
	}).send();
}

var current_map_level = 1;
var current_map_name = 'worldwide';

// Load Map from dropdown selection
function mapLoadMap(id)
{
	var mapinfo = new String($(id).getSelected().get('id'));
	mapinfo = mapinfo.split('-');
	
	/*
	 * mapinfo[0] = map name
	 * mapinfo[1] = region id
	 * mapinfo[2] = level
	 * 
	 */
	
	var showFlashMap = false;
	
	if (id != 'lc4')
	{
		if (mapinfo[0] == '')	// 'Any' has been selected from a dropdown
		{
			// load the parent level map
			var newid = parseInt(id.substring(id.length-1))-1;
			id = 'lc'+newid;
			var mapinfo = new String($(id).getSelected().get('id'));
			mapinfo = mapinfo.split('-');
			
			var lvl = parseInt(id.substring(id.length-1))+1;
			/*if (lvl < gmap_min)
				showFlashMap = true;*/
		}
	
		/*
		alert(current_map_name);
		alert(mapinfo[0]);
		alert(current_map_level);
		alert(mapinfo[2]);*/
		
		if ( (current_map_level != mapinfo[2] || (current_map_name != mapinfo[0]) || (showFlashMap == true)) && mapinfo[0] != '')
		{	
			if (mapinfo[0] == 'worldwide')
			{
			    var flashvars = {
						config: '/config.xml'		
			    };
			}else{		
			    var flashvars = {
					config: '/config.xml',
					mapfile: '/maps/'+mapinfo[0]+'.swf',
					xmlfile1: '/maps/'+mapinfo[0]+'.xml',
					xmlfile2: '/maps/'+mapinfo[0]+'_data.xml',
					level: mapinfo[2]
				};
			}
			var params = {
				menu: 'false',
				wmode: 'transparent',
				bgcolor: '#FFFFFF'
			};
			
			// check if we need to replace our google map with the flash one
			if (!$('dynamic_map'))
			{
				if ($('outer_map'))
				{
					$('outer_map').innerHTML = '<div id="dynamic_map"></div>';
					$('outer_map').setStyle('background-color', '#ffffff');
				}
			}
			
			swfobject.embedSWF('/locator_map.swf', 'dynamic_map', '450', '400', '8.0.0', '/flash/expressInstall.swf', flashvars, params);
			
			current_map_name = mapinfo[0];
			current_map_level = mapinfo[2];
		}
		else
		{
			mapSetRegion(mapinfo[1]);
			slid = $(id).getSelected().get('value');
			
			if (mapinfo[2] > 2)
				displayVillaListings(slid);

		}
	}
	var lcid = $(id).getSelected().get('value');
	refreshFeaturedVillas(lcid);
}

function displayVillaListings(id)
{
	/* Not required at present
	if ($('dynamic_map'))
	{
		var req = new Request.HTML({url: '/ajax_map_control.php?type=lst&id='+id, 
			onSuccess: function(x, xx, res) {
				var json = eval("("+res+")");
				if(json.url)
					window.location = json.url;
			}
		}).send();
	}*/
}

function refreshFeaturedVillas(id)
{
	var req = new Request.HTML({url: '/ajax_map_control.php?type=vil&id='+id, 
		onSuccess: function(x, xx, res) {
			var json = eval("("+res+")");
			if(json.html && $('featured_villas_hp'))
				$('featured_villas_hp').innerHTML = json.html;
		}
	}).send();
}

function showGoogleMapFromId(id)
{
	if (id > 0)
	{
		var req = new Request.HTML({url: '/ajax_map_control.php?type=all&id='+id, 
			onSuccess: function(x, xx, res) {
				if (res == '')
					$("goog_map").destroy();
				else
				{			
					var json_result = eval("("+res+")");
										
					var lat = json_result[0].lat;
					var lng = json_result[0].lng;
					var lvl = parseInt(json_result[0].lvl);
					var _name = json_result[0].name;
					var _lcid = json_result[0].lcid;
					var _url = json_result[0].url;
					
					$("goog_map").innerHTML = '';
					var map = new GMap2($("goog_map"));
					var mapPosition = new GLatLng(lat, lng);
					map.addMapType(G_PHYSICAL_MAP); 
					map.setCenter(mapPosition, lvl, G_PHYSICAL_MAP);
									
					var nreq = new Request.HTML({url: '/ajax_map_control.php?type=loc&id='+id, 
						onSuccess: function(x, xx, ret) {
							if (ret)
							{
								var json = eval("("+ret+")");
								gmarkers = new Array();
								for (i=0;i<json.length;i++)
								{
									var jlat = json[i].lat;
									var jlng = json[i].lng;
									var jname = json[i].name;
									var jlcid = json[i].lcid;
									var jurl = json[i].url;
									var _lvl = json[i].lvl;
							    	
									gmarkers.push({
										latlng: new GLatLng(parseFloat(jlat), parseFloat(jlng)),
										name: '<b>'+jname+'</b><br /><a href="'+jurl+'">Click to View Vacation Rentals</a>',
										lcid: jlcid
									});
								}
							    for (i=0;i<gmarkers.length;i++)
							    	map.addOverlay(create_gmarker(gmarkers[i]));
							}							
						}			
					}).send();
		
				    var customUI = map.getDefaultUI();
					customUI.controls.scalecontrol = false;
					map.setUI(customUI);
					map.disableScrollWheelZoom();
				}
			},
			onFailure: function() {
				$('goog_map').destroy();
			}
		}).send();
	}
	else
		$('goog_map').destroy();
	
}

function create_gmarker( marker )
{
    var gmarker = new GMarker( marker.latlng );
    GEvent.addListener( gmarker, 'click', function( ) {
    	set_location(marker.lcid);
    	gmarker.openInfoWindowHtml(marker.name);
    });
    return gmarker;
}

function set_location(id)
{
	var req = new Request.HTML({url: '/ajax_map_control.php?type=set&session='+$('_session').value+'&id='+id, 
		onSuccess: function(x, xx, ret) {
			// do owt.
		}
	}).send();	
}

/************************************************************
 MooTools
******/

MooTools.More = {
	'version': '1.2.3.1'
};


/*
Script: Fx.Scroll.js
	Effect to smoothly scroll any element, including the window.

	License:
		MIT-style license.

	Authors:
		Valerio Proietti
*/

Fx.Scroll = new Class({

	Extends: Fx,

	options: {
		offset: {x: 0, y: 0},
		wheelStops: true
	},

	initialize: function(element, options){
		this.element = this.subject = document.id(element);
		this.parent(options);
		var cancel = this.cancel.bind(this, false);

		if ($type(this.element) != 'element') this.element = document.id(this.element.getDocument().body);

		var stopper = this.element;

		if (this.options.wheelStops){
			this.addEvent('start', function(){
				stopper.addEvent('mousewheel', cancel);
			}, true);
			this.addEvent('complete', function(){
				stopper.removeEvent('mousewheel', cancel);
			}, true);
		}
	},

	set: function(){
		var now = Array.flatten(arguments);
		this.element.scrollTo(now[0], now[1]);
	},

	compute: function(from, to, delta){
		return [0, 1].map(function(i){
			return Fx.compute(from[i], to[i], delta);
		});
	},

	start: function(x, y){
		if (!this.check(x, y)) return this;
		var offsetSize = this.element.getSize(), scrollSize = this.element.getScrollSize();
		var scroll = this.element.getScroll(), values = {x: x, y: y};
		for (var z in values){
			var max = scrollSize[z] - offsetSize[z];
			// scrolling left had -ve value in values[x] - .limit set these to zero.
			if ($chk(values[z])) values[z] = ($type(values[z]) == 'number') ? values[z] : max;
			else values[z] = scroll[z];

			  values[z] = (values[z] + this.options.offset[z]).limit(0, max)
			  /*
			if (Browser.Engine.trident){
			  // add to scroll[z] as this is a scroll relative to this.element
			  values[z] = (values[z] + this.options.offset[z] + scroll[z]).limit(0, max)
			}else{
			  values[z] = (values[z] + this.options.offset[z]).limit(0, max)
			}*/

		}
		return this.parent([scroll.x, scroll.y], [values.x, values.y]);
	},

	toTop: function(){
		return this.start(false, 0);
	},

	toLeft: function(){
		return this.start(0, false);
	},

	toRight: function(){
		return this.start('right', false);
	},

	toBottom: function(){
		return this.start(false, 'bottom');
	},

	toElement: function(el){
		var position = document.id(el).getPosition(this.element);
		return this.start(position.x, position.y);
	},

	scrollIntoView: function(el, axes, offset){
		axes = axes ? $splat(axes) : ['x','y'];
		var to = {};
		el = document.id(el);
		var pos = el.getPosition(this.element);
		var size = el.getSize();
		var scroll = this.element.getScroll();
		var containerSize = this.element.getSize();
		var edge = {
			x: pos.x + size.x,
			y: pos.y + size.y
		};
		['x','y'].each(function(axis) {
			if (axes.contains(axis)) {
				if (edge[axis] > scroll[axis] + containerSize[axis]) to[axis] = edge[axis] - containerSize[axis];
				if (pos[axis] < scroll[axis]) to[axis] = pos[axis];
			}
			if (to[axis] == null) to[axis] = scroll[axis];
			if (offset && offset[axis]) to[axis] = to[axis] + offset[axis];
		}, this);
		if (to.x != scroll.x || to.y != scroll.y) this.start(to.x, to.y);
		return this;
	}

});





/* A workaround for IE issues in mootools 1.2.1
 * - Recreates FX.Scroll() but utilises 1.2.0's getPosition/getOffset routines.
 */
Fx.Scroll2 = new Class({

    'Extends': Fx.Scroll,

    'styleString': Element.getComputedStyle,
    'styleNumber': function(element, style) {
        return this.styleString(element, style).toInt() || 0;
    },
    'borderBox': function(element) {
        return this.styleString(element, '-moz-box-sizing') == 'border-box';
    },
    'topBorder': function(element) {
        return this.styleNumber(element, 'border-top-width');
    },
    'leftBorder': function(element) {
        return this.styleNumber(element, 'border-left-width');
    },
    'isBody': function(element) {
        return (/^(?:body|html)$/i).test(element.tagName);
    },
    'toElement': function(el) {
        var offset   = {x: 0, y: 0};
        var element  = $(el);

        if (this.isBody(element)) {
            return offset;
        }
        var scroll = element.getScrolls();

        while (element && !this.isBody(element)){
            offset.x += element.offsetLeft;
            offset.y += element.offsetTop;

            if (Browser.Engine.gecko){
                if (!this.borderBox(element)){
                    offset.x += this.leftBorder(element);
                    offset.y += this.topBorder(element);
                }
                var parent = element.parentNode;
                if (parent && this.styleString(parent, 'overflow') != 'visible'){
                    offset.x += this.leftBorder(parent);
                    offset.y += this.topBorder(parent);
                }
            } else if (Browser.Engine.trident || Browser.Engine.webkit){
                offset.x += this.leftBorder(element);
                offset.y += this.topBorder(element);
            }

            element = element.offsetParent;
            if (Browser.Engine.trident) {
                while (element && !element.currentStyle.hasLayout) {
                    element = element.offsetParent;
                }
            }
        }
        if (Browser.Engine.gecko && !this.borderBox(element)){
            offset.x -= this.leftBorder(element);
            offset.y -= this.topBorder(element);
        }

        var relative = this.element;
        var relativePosition = (relative && (relative = $(relative))) ? relative.getPosition() : {x: 0, y: 0};
        var position = {x: offset.x - scroll.x, y: offset.y - scroll.y};

        return this.start(position.x - relativePosition.x, position.y - relativePosition.y);
    }
});


var gallTick, scrl; 






