var ggmap = function()
{
	this.adresse = null;
	this.map = null;
};
ggmap.prototype.init = function(el)
	{
		var $obj = this;
		app.addload(function()
			{
				
				var setcenter = function(response)
				{
					$("#logocontrol,#copyright,.gmnoprint,#menumtctl,#_magnifyingglass").remove();
					var place = response.Placemark[0];
					var point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
					$obj.map.setCenter(point, 13);
					var marker = new GMarker(point,{});
					$obj.map.addOverlay(marker);
				};
				
				$obj.map = new GMap2($(el).get(0));
				$obj.map.setUIToDefault();
				$obj.geocoder = new GClientGeocoder();
				$obj.geocoder.current_map = $obj.map;
				$obj.geocoder.getLocations($obj.adresse,setcenter);
			});
	};




$(function()
{
	$(".encoded-email").each(
		 function(){
				  var $this = $(this);
				  if($this.is("a"))
				  {
					    var link = $.base64decode($this.attr('href'));
						$(this).attr({href:'mailto:'+link+'?subject='+$this.attr('title')});
				  }
				  else if($this.is("em"))
				  {
					  var html 	= $.base64decode($this.html());
						$this.after(html);
						$this.parent('a').attr({href:'mailto:'+html}).show();
						$this.remove();
				  }
				  });
	
	$(".validate-float").validate_float();
	$(".validate-int").validate_int();

});


var $r =
{
	request: function(form)
	{
		$msg.remove();
		form = document[form];
		if(!this.validate(form)) return;
		if(form.validate)
		{
			if(!eval(form.validate.value)(form)) return;	
		}
		
		$.ajax({url:'/application/request/'+form.action.value
		,data:$(form).serialize()
		,success: function(data)
		{
			data = json_decode(data);
			if(form.callback)
			{
				eval(form.callback.value)(form,data);	
			}
		}});
		
		
	}
	,validate: function(form)
	{
		var error = 0;
		$("label.error").removeClass("error");
		$(form).find(".required").each(function()
		{
			if(empty(this.value))
			{
				if($(this).hasClass('if-not-empty'))
				{
					var fieldname = $(this).attr('linkto');
					
					if(form[fieldname])
					{
						var field = $(form[fieldname]);
						debug((field.attr('default') != field.val() && !empty(field.attr('default'))));
						if( !( field.attr('default') == field.val() && !empty(field.attr('default')) ) && !empty(field.val()))
						{
							return;
						}
					}
				}
				
				error++;
				$("label[for='"+this.name+"']").addClass("error");
			}
		});
		
		if(error> 0){$msg.show(lang('validation - Enter all required field'),'error');return false;}
		
		$(form).find(".valid-email").each(function()
		{
			if(!validate_email(this.value))
			{
				error++;
				$("label[for='"+this.name+"']").addClass("error");
			}
		});
		
		if(error> 0){$msg.show(lang('validation - Enter a valid email address'),'error');return false;}
		
		
		
		return error == 0;
	}
	
};



var $msg = 
{
	show:function(txt,type,timeout)
	{
		this.remove();
		var box = $("<div id='messages' class='"+type+"-message' />").html(txt).appendTo("body").css({opacity:0.1});
		var but = $("<a href='javascript:;' class='close'></a>")
					.bind('click',function(){box.fadeTo(300,0.1,function(){$(this).hide();});}).appendTo(box);
		
		box.css({marginTop:'-'+Math.floor(box.outerHeight()/2)+'px'}).fadeTo(200,1);
		
		if(timeout)
		{
			setTimeout(function()
			{
				box.fadeTo(300,0.1,function(){$(this).remove();});
				
			},2000);
		}
		return;
	}
	,remove:function()
	{
		$("#messages").remove();
	}
};


function json_decode(data)
{
	try{data = eval('('+data+')');}	
	catch(e){}
	return data;
}

function empty(mixed_var)
{
	var key;    
	if (mixed_var === "" ||
		mixed_var === 0 ||
		mixed_var === "0" ||
		mixed_var === null ||        
		mixed_var === false ||
		typeof mixed_var === 'undefined' ||
		(typeof mixed_var === 'string' && mixed_var.replace(/[\s\t\r\n]+/g,'')=="")
		
	) return true;
	
	if (typeof mixed_var == 'object') {
		for (key in mixed_var) {
			return false;
		}        return true;
	}
 
	return false;
		
}


function validate_email(email)
{
	var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
	return reg.test(email);	
}

$.allowed_keys = [8,9,13,35,36,37,38,39,40,116];
$.fn.validate_float = function()
{ 
	return this.each(function()
	{		
		$(this).bind('keypress',function(e)
		{
			if($.inArray(e.keyCode,$.allowed_keys) > -1) return;
			
			var char = String.fromCharCode(e.charCode);
			var val = $(this).val();
			
			if(char.search(/[0-9\.]/ig) == -1) return false;
			if(char == '.' && val.search(/[\.]/ig) > -1) return false;
			
			if(char == '.' && val=='')
			{
				$(this).val('0.')
				return false;
			}
			
		})
		.bind('blur',function(e)
		{
			var val = $(this).val();
			val = new Number(val).toFixed(2);
			$(this).val(val);
			
		})
		.trigger('blur');
	});
};

$.fn.validate_int = function()
{
	return this.each(function()
	{
		var parent = $(this).parent('.field-wrapper');
		
		$(this).bind('keypress',function(e)
		{
			if($.inArray(e.keyCode,$.allowed_keys) > -1) return;
			return String.fromCharCode(e.charCode).search(/[0-9]/ig) > -1;
		});
	 
	});
};

