var guestbook = new GuestBook();
function GuestBook(){
	// SWFUpload instance
	this.file_types = '*.jpg;*.gif;*.bmp;*.png';
	this.file_types_description = 'Images';
	this.uploader;
	this.form;
	this.post_url = root_url;
	this.content_holder_selector = '#guestBookHolder';
	this.thumbnail_selector = '.thumbnail';
	this.debug = true;
	this.last_page_query_url;
	this.working = false;
	var scope = this;
	
	this.browse = function(caller_tag){	
		this.uploader.browse();	
	}
	
	/**
	  * On upload done
	*/
	this.showImage = function(successful, XMLDocument, fileInfoObj, ImageObject){
		scope.working = false;
		try{					
			var thumbnail = jQuery(scope.thumbnail_selector)[0];
			jQuery(thumbnail).fadeOut('fast', function(){
				jQuery(thumbnail).empty();
				jQuery(thumbnail).append(ImageObject);
				jQuery(thumbnail).fadeIn(300);
				jQuery(ImageObject).show();
			});
			jQuery('[name=temp_image]', this.form)[0].value = jQuery(fileInfoObj).attr('filename');
		}catch(ex){
			if(scope.debug) alert("Fel:"+ex);				
		}
	}
	/**
	  * Deletes a entry
	*/
	this.deleteEntry = function(target_caller, entry_id, query_params){
		if(this.last_page_query_url) query_params = this.last_page_query_url;
		
		var data = new Object();
		data.id = parseInt(entry_id);
	
		var scope = this;
		jQuery.post(this.post_url+delete_guestbook_entry_url, data, function (data){
			try{	
				var xml = jQuery.textToXML(data);
				var message = '';
				var messages = jQuery("message", xml);
				var successful = jQuery('status', xml).attr('successful');	
				
				for(var i=0; i<messages.length; i++){
					var err = messages[i].firstChild.data;
					var name = jQuery(messages[i]).attr('name');
					message += err;
					if(i < messages.length) message += "<br />";
				}
				if(successful === 'true'){
					var parent = utilities.findParentBySelector('.odd,.even', target_caller);
					if(parent){
						$(parent).animate({ 
							opacity: 0.1
						}, 350);
						scope.showPage(scope.last_page_query_url, '');
					}
				}else{
					// ERROR	
				}
			}catch(err){
				if(scope.debug) alert("Fel: "+err);	
			}
		});	
	}
	/**
	  * Adds a entry
	*/
	this.addEntry = function(form, query_params){
		if(this.working) return false;
		try{
			// Check if it's the default value
			if(utilities.isDefaultValue(jQuery("[name=message]", form)[0])) return false;
			// If a request is in progress
			if(jQuery("[name=message]", form)[0].empty) return false;
			this.working = true;
			
			this.form = form;
			var data = jQuery(form).serializeArray();
			var button = jQuery('[name=submit]', form);
			if(button.length) jQuery(button[0]).addClass('sending');	
		
			var scope = this;
			jQuery.post(this.post_url+add_guestbook_entry_url, data, function (data){
				try{	
					scope.working = false;
					if(button.length) jQuery(button[0]).removeClass('sending');	
	
					var xml = jQuery.textToXML(data);
					var message = '';
					var messages = jQuery("message", xml);
					var successful = jQuery('status', xml).attr('successful');	
					
					for(var i=0; i<messages.length; i++){
						var err = messages[i].firstChild.data;
						var name = jQuery(messages[i]).attr('name');
						message += err;
						if(i < messages.length) message += "<br />";
					}
					if(successful === 'true'){					
						scope.showPage(query_params, '');
						scope.resetForm(form);
					}else{
						// ERROR	
					}
				}catch(ex){
					if(scope.debug) alert("Fel: "+ex);	
				}
			});	
		}catch(ex){
			if(this.debug) alert("Fel: "+ex);	
		}
	}
	/**
	  * Resets input form
	*/
	this.resetForm = function(form){
		try{
			var message = jQuery('[name=message]', form);
			if(message.length) message[0].value = "Skriv ditt meddelande här.";
			jQuery('[name=temp_image]', this.form)[0].value = "";
			
			var thumbnail = jQuery(this.thumbnail_selector)[0];
			jQuery(thumbnail).fadeOut('fast');
		}catch(err){
			if(this.debug) alert("Fel: "+err);	
		}
	}
	
	/**
	  * Get entries for a specific page
	*/
	this.showPage = function(query_params, page_param){
		if(query_params && query_params != "") this.last_page_query_url = query_params;
		if(page_param && page_param != "") this.last_page_query_url += '&'+page_param;
		
		try{
			var page = page_param.replace('page=', '');
			this.render(this.last_page_query_url);
		}catch(err){
			if(this.debug) alert("Fel: "+err);	
		}
	}
	this.render = function(query_params){	
		try{
			var url = this.post_url+refresh_guestbook_url;
			if(query_params && query_params != "") url += '&'+query_params;
			refresher.refresh(url, this.content_holder_selector);
		}catch(err){
			if(this.debug) alert("Fel: "+err);	
		}
	}
	/**
	  * Init SWFUploader object
	*/
	jQuery(document).ready(function(){
		try{			
			if(!scope.uploader) scope.uploader = new SWFUploader(scope.file_types, scope.file_types_description, 1, scope.showImage, 71);	
		}catch(ex){
			if(scope.debug) alert('Fel: '+ex);	
		}
	});
}
