/** 	Autocompleters	**/

function autocomplete(inputEl, targetEl, ajaxCall) {
	if(document.getElementById(''+inputEl))
	{
		new Ajax.Autocompleter(inputEl, targetEl, base_url+'index.php/ajax/autocomplete/'+ajaxCall+'/'+inputEl);
	}
}

/**		Discontinued	**/
function autocompleters() {
	if(document.getElementById('category-add-module'))
	{
		new Ajax.Autocompleter('new-categroy-tag', 'autocomplete-cat-choices', base_url+'index.php/ajax/autocompleteCategories/');
	}
}



/***	ajax calls	***/

function addTag(target, tag) {
	new Ajax.Request(base_url+'index.php/ajax/addTag/'+target+'/'+tag);
	return false;
}
function vote(id, action) {
	new Ajax.Request(base_url+'index.php/ajax/vote/'+id+'/'+action, {
						 method: 'get',
						 onComplete: function() {
							 var el = document.getElementById(action+'_'+id);
							 var votes = el.innerHTML;
							 el.innerHTML = parseInt(votes)+1;
						 }
					 });
}
function addAccount() {
	//	add an account to the database
	var params = $('add-account-form').serialize(true);
	new Ajax.Request(base_url+'index.php/ajax/addAccount', {
					 	method: 'post',
						parameters: params,
						onSuccess: function() {
							$('add-account-form').name.value = 'New place name...';
						}
					 });
}
function loadPhotoStream() {
	//	gets a json formatted file of photos
	new Ajax.Request(base_url+'index.php/ajax/getPhotoStream/'+target, { 
			method:'post',
			onComplete: function(json) {
				//	display photos			
				var el = document.getElementById('photo-module');
				var data = eval('('+json.responseText+')');
				var html = '';
				var rand = Math.floor(Math.random()*data.photos.length-5);
				for(var i=rand; i<rand+5; i++) {
					var th_url = data.photos[i].photo_file_url;
					var tmp = data.photos[i].photo_file_url;
					var b_url = tmp.replace('thumbnail', 'medium'); 
					html += '<span class="photo"><a href="'+b_url+'" rel="lightbox['+target+']" title="'+data.photos[i].photo_title+'<br />Copyright <a href=\''+data.photos[i].owner_url+'\'>'+data.photos[i].owner_name+'</a>"><img src="'+th_url+'" /></a></span>';
				}
				html += '<div class="copyright">Images by <a href="http://www.panoramio.com">';
				html += '<img src="'+base_url+'images/panoramio.png" alt="panoramio.com" /></a> Copyright belongs to their authors.</div>'; 
				el.innerHTML = html;	
			}
		});
}
function loadRelatedPages() {
	//	see if an ajax call is nessesary
	if(document.getElementById('loader')) {
		//	loading div is present because web server has no data
		new Ajax.Request(base_url+'index.php/ajax/getRelatedPages/'+targetName,
	  	{
	  		method: "get",
	  		onSuccess: function(resp) {
	  			var response = resp.responseText || "No related pages were found.";
		  		document.getElementById('related-pages').innerHTML = response;
	  		}
	  	});
	}
}

function editwiki(target) {
	new Ajax.Request(base_url+'index.php/ajax/editWiki/'+target,
	  {
		method:'get',
		onSuccess: function(wiki){
		  var response = wiki.responseText || "no response text";
		  document.getElementById('wiki-display-module').innerHTML = response;
		},
		onFailure: function(){ alert('Something went wrong...') }
	  });	
}
function updateWiki(target) {
	new Ajax.Request(base_url+'index.php/ajax/updateWiki/'+target,
	  {
		method:'get',
		onSuccess: function(wiki){
		  var response = wiki.responseText || "no response text";
		  document.getElementById('wiki-display-module').innerHTML = response;
		},
		onFailure: function(){ alert('Something went wrong...') }
	  });	
}
function cancelWiki(target) {
	new Ajax.Request(base_url+'index.php/ajax/cancelWiki/'+target,
	  {
		method:'get',
		onSuccess: function(wiki){
		  var response = wiki.responseText || "no response text";
		  document.getElementById('wiki-display-module').innerHTML = response;
		}});	
}
function addAnonReview() {
	//	add an anon discount to the database
	var params = $('add-discount-form').serialize(true);
	new Ajax.Request(base_url+'index.php/ajax/addDiscount', {
					 	method: 'post',
						parameters: params
					 });
	hideme('add-discount-form');
}

/***	Review Function 	***/
function clearInput(input) {
	if(input.value == 'Review subject' || input.value == 'Add your review here...' || input.value == 'New place name...') {
		input.value = '';
	}
}

function setScore(rating)
{
	var w = rating*20;
	document.getElementById('new-review-score').value = rating;
	document.getElementById('current-rating').style.width = w+"%";
}
function addReview() {
	var params = $('review-form').serialize(true);
	var reviewTarget = document.getElementById('new-review-target').value;
	new Ajax.Request(base_url+'index.php/ajax/addReview', {
					 method:'post', 
					 parameters: params,
					 onSuccess: function() {
						 setTimeout('doNothing()', 500);
						 getReviews(reviewTarget);
					 }
	});
}
function addCategory() {
	var params = $('category-form').serialize(true);
	var catTarget = document.getElementById('new-category-target').value;
	new Ajax.Request(base_url+'index.php/ajax/addCategory', {
					 method:'post', 
					 parameters: params ,
					 onSuccess: function() {
						 setTimeout('doNothing()', 500);
						 getCategories(catTarget);
					 }
	});
}
function doNothing() {
	//	this function does absolutely nothing and is only here for the setTimeout
	var nothing = 0;
}
function getReviews(reviewTarget) {
	new Ajax.Request(base_url+'index.php/ajax/getReviews/'+reviewTarget,
	  {
		method:'get',
		onSuccess: displayReviews,
		onFailure: function(){ alert('Something went wrong...') }
	  });	
	new Ajax.Request(base_url+'index.php/ajax/getReviewSummary/'+reviewTarget,
	  {
		method:'get',
		onSuccess: displayReviewSummary,
		onFailure: function(){ alert('Something went wrong...') }
	  });		
	//	change the reviewTarget in the form
	document.getElementById('new-review-target').value = reviewTarget;
	//	reset the form fields
	document.getElementById('new-review-tag').value = 'Review subject';		
	document.getElementById('new-review-text').value = 'Add your review here...';	
}
function getCategories(catTarget) {
	 document.location.reload(true);
}
function displayReviews(json){
	var data = json.responseText;			
	document.getElementById('main-panel').innerHTML = data;
}	
function displayReviewSummary(json){
	var data = json.responseText;			
	document.getElementById('tag-list').innerHTML = data;
}	

/***	Places and Discounts		***/
function selectTag(tag) {
	tag = ucfirst(tag);
	var cloud = document.getElementById('selected-tag-cloud');
	var el = document.createElement('SPAN');
	el.id = 'tag_'+tag;
	el.className = 'selected-tag';
	el.innerHTML = tag+' <img src="'+base_url+'images/css/delete16.png" alt="remove tag" title="Remove" onclick="javascript:removeTag(\'tag_'+tag+'\');" />';
	cloud.appendChild(el);
	refreshTags();
}
function selectRegion(tag) {
	tag = ucfirst(tag);
	var cloud = document.getElementById('selected-region-cloud');
	var el = document.createElement('SPAN');
	el.id = 'tag_'+tag;
	el.className = 'selected-tag';
	el.innerHTML = tag+' <img src="'+base_url+'images/css/delete16.png" alt="remove tag" title="Remove" onclick="javascript:removeTag(\'tag_'+tag+'\');" />';
	cloud.appendChild(el);
}
function removeTag(id) {
	removeElement(id);
	refreshTags();
}
function refreshTags() {
	var tags = [];	
	var cloud = document.getElementById('selected-tag-cloud');
	for(var i = 0; i < cloud.childNodes.length; i++) {
		if(cloud.childNodes[i].tagName == 'SPAN') {
			var name = cloud.childNodes[i].id.substring(4, cloud.childNodes[i].id.length);
			tags.push(name);
		}
	}
	//	determine whether to match discounts or places
	var url = base_url+'index.php/ajax/';
	if(document.getElementById('places-module')) {
		url += 'matchPlaces/places';
	} else {
		url += 'matchPlaces/discounts'
	}
	for(var i = 0; i < tags.length; i++) {
		url += '/'+tags[i];
	}
	if(!document.getElementById('trip-cloud-module')) {
		new Ajax.Request(url, {
			 method: 'get',
			 onComplete: function(json) {
				 document.getElementById('places-holder').innerHTML = json.responseText;
			 }
			});
	}
}
function removeElement(id) {
	var el = document.getElementById(''+id);
	el.parentNode.removeChild(el);
}
function refreshPlaces(json) {
	var data = eval('('+json.responseText+')');	//	data is now an object		
	var html = '';
	var lim = 10;
	if(lim > data.length) {
		lim = data.length;
	}
	for(var t=0; t<lim; t++) {
		html += '<div class="place"><table class="outer"><tr><td class="img"><img src="'+base_url+'images/photos/'+data[t].image+'" height="100" width="160" /></td><td class="info"><div class="place-name"><a href="'+site_url+'place/'+data[t].name+'/'+data[t].location+'">'+data[t].name+'</a></div><div class="place-description">'+data[t].intro+' <a href="'+site_url+'place/'+data[t].name+'/'+data[t].location+'">...read more...</a></div></td><td class="score-holder"><table class="inner"><tr><td class="score">'+(data[t].score*1).toFixed(0)+'%</td></tr><tr><td class="match">Match</td></tr></table></td></td></td></table></div>';
	}
	document.getElementById('places-holder').innerHTML =  html;
	var title = 'Results';
	if(catState && catState != 'All') {
		title += ' limited to '+catState;
	}
	if(tagState) {
		title += ' ordered by '+tagState;
	}
	var div = document.getElementById('places-list');
	div.style.opacity='';
	div.style.background='#FFF';
	div.style.filter='alpha(opacity=1)';
	document.getElementById('place-title').innerHTML = title;	
}

/***	Booking Functions	***/

function loadBookingForm(url) {
	//	appends the booking form onto the book button
	var module = document.getElementById('book-module');
	var html = '<form action="'+url+'" id="booking-input-form" name="booking-input-form" method="post"><h3 class="subheading">Select Dates</h3><div><label>Check in</label><input type="text" name="checkin" id="checkin" onblur="checkDate(this, \'today\')" /><span id="checkin-tick"></span></div><div><label>Nights</label><input type="text" name="nights" id="nights" /></div><div><label>Guests</label><input type="text" name="guests" id="guests" /></div><div class="center" ><input name="submit" type="submit" value="Book" /></div></form>';
	module.innerHTML = html;
}
function getPartnerAvailability() {
	//	calls ajax function	
	var params = $('booking-input-form').serialize(true);
	new Ajax.Request(base_url+'index.php/ajax/getPartnerAvailability/'+target, {
					 method:'post', 
					 parameters: params ,
					 onSuccess: function(json) {
						 document.getElementById('selection-area').innerHTML = json.responseText;
					 }
	});	
}
function checkDate(el) {
	//	checks the date input and returns reformatted
	var today = '';
	if(document.getElementById('book-module')) {
		today = true;
	}
	new Ajax.Request(base_url+'index.php/ajax/formatDate/'+el.value+'/'+today, {
					 method:'get', 
					 onSuccess: function(json) {
						 el.value =  (json.responseText).replace(/^\s*|\s*$/g,'');
					 }
	});	
}

function validate(el, type, target) {
	var valid = false;
	var input = el.value;
	// 	check each type
	if(type == 'email') {
		if((input.indexOf(".") > 2) && (input.indexOf("@") > 0)) valid = true;
	}
	//	change the tick
	if(valid) {
		if(document.getElementById(''+target)) {
			var tar = document.getElementById(''+target);
			tar.innerHTML = '<img src="'+base_url+'images/css/tick24.png"';
		}
	}
}

function validateNames(row) {
	var fname = document.getElementById('firstname'+row);
	var sname = document.getElementById('surname'+row);
	var objRegExp  = /(^[a-z]*$)/i;
	if(objRegExp.test(fname) && objRegExp.test(sname)) {
		var tar = document.getElementById('guest'+row);
		tar.innerHTML = '<img src="'+base_url+'images/css/tick24.png"';
   }
}

function validateForm(el) {
	var valid = true;
	var imgs = document.getElementsByTagName('img');
	for(var i=0; i<imgs.length; i++) {
		if(imgs[i].src.indexOf("delete24") > 0) valid = false;
	}
	return valid;
}

/***	Help Functions	***/
function getHelp(id, subject) {
	var el = $(id);
	el.style.display = 'block';	
	new Ajax.Request(base_url+'index.php/ajax/getHelp/'+subject,
	  {
		method:'get',
		onSuccess: function(help){
		  var response = help.responseText || "Sorry, no help is currently available";
		  el.innerHTML = response;
		}
	  });	
}
function hideHelp(id) {
	var el = $(id);
	el.style.display = 'none';
}

/***	Login Functions		***/
function checkLogin(obj) {

	new Ajax.Request(base_url+'index.php/ajax/getUserID', {
					 method: 'get',
					 onComplete: function(res) {
						 if(parseInt(res.responseText) > 0) {
							 window.location = obj.href;
						 } else {
							 login();
						 }
					 }
					});
}
function login() {
	var html = '<div id="login"></div>';
    var objBody = $$('body')[0];
	objBody.appendChild(Builder.node('div',{id:'login-overlay'}));
	document.getElementById('login-overlay').innerHTML = html;
    new Effect.Appear($('login-overlay'), { from: 0.0, to: 0.8 });
	new Ajax.Request(base_url+'index.php/ajax/getLoginForm/',
					 {
						 method: 'post',
						 onSuccess: function(res) {
							 document.getElementById('login').innerHTML = res.responseText;
						 }
					 });
	return false;
}
function hideLogin() {
	var overlay = document.getElementById('login-overlay');
	var par = overlay.parentNode;
	par.removeChild(overlay);	
	return true;
}
function join() {
	new Ajax.Request(base_url+'index.php/ajax/getJoinForm/',
					 {
						 method: 'post',
						 onSuccess: function(res) {
							 document.getElementById('login-overlay').innerHTML = res.responseText;
						 }
					 });
}
function registerUser() {
	var params = $('login-form').serialize(true);
	new Ajax.Request(base_url+'index.php/ajax/registerUser/',
	  {
		method:'post',
		parameters: params,
		onSuccess: function(res) {
			if(res.responseText == 'login success') {
				hideLogin();
				history.go(0);
			}
		}
	  });	
}
function validatePassword(f) {
	var valid = true;
	var pw1 = f.password1.value;
	var pw2 = f.password2.value;
	if (pw1 != pw2 || !pw1) {
        alert ( "The passwords supplied do not match" );
        valid = false;
    } else {
		if(f.id == 'join-form') {
		var params = $('join-form').serialize(true);
		new Ajax.Request(base_url+'index.php/ajax/createUser/',
		  {
			method:'post',
			parameters: params,
			onSuccess: redisplay
		  });	
		}
	}		
    return valid;
}

/***	Trip Functions		***/

function getTripInputs() {
	var form = $('hidden-form');
	//	get interest tags
	var tags = [];
	var cloud = document.getElementById('selected-tag-cloud');
	for(var i = 0; i < cloud.childNodes.length; i++) {
		if(cloud.childNodes[i].tagName == 'SPAN') {
			var tagName = cloud.childNodes[i].id.substring(4, cloud.childNodes[i].id.length);
			form.appendChild(Builder.node('input',{name:tagName, value: tagName, type:'hidden'}));
			tags.push(tagName);
		}
	}
	//	get geo tags
	var geos = [];
	var cloud = document.getElementById('selected-region-cloud');
	for(var i = 0; i < cloud.childNodes.length; i++) {
		if(cloud.childNodes[i].tagName == 'SPAN') {
			var tagName = cloud.childNodes[i].id.substring(4, cloud.childNodes[i].id.length);
			form.appendChild(Builder.node('input',{name:tagName, value: tagName, type:'hidden'}));
			geos.push(tagName);
		}
	}
	if(tags.length > 0) {
		return true;
	} else {
		alert('Select at least 1 travel interest');
		return false;
	}
}
/***	Reuseable Functions	***/
function ucfirst(str) {
    str += '';
    var f = str.charAt(0).toUpperCase();
    return f + str.substr(1, str.length-1);
}	
function addMethod(object, name, fn){
    var old = object[ name ];
    object[ name ] = function(){
        if ( fn.length == arguments.length )
            return fn.apply( this, arguments );
        else if ( typeof old == 'function' )
            return old.apply( this, arguments );
    };
}
function showme(el) {
	var area = document.getElementById(''+el);
	area.style.display = 'block';
}
function hideme(el) {
	var area = document.getElementById(''+el);
	area.style.display = 'none';
}
