(function($) {

var types = ['DOMMouseScroll', 'mousewheel'];

$.event.special.mousewheel = {
setup: function() {
if ( this.addEventListener )
for ( var i=types.length; i; )
this.addEventListener( types[--i], handler, false );
else
this.onmousewheel = handler;
},

teardown: function() {
if ( this.removeEventListener )
for ( var i=types.length; i; )
this.removeEventListener( types[--i], handler, false );
else
this.onmousewheel = null;
}
};

$.fn.extend({
mousewheel: function(fn) {
return fn ? this.bind("mousewheel", fn) : this.trigger("mousewheel");
},

unmousewheel: function(fn) {
return this.unbind("mousewheel", fn);
}
});

$.fn.tagName = function() {
    return this.each(function() {
        return this.tagName;
    });
}



function handler(event) {
var args = [].slice.call( arguments, 1 ), delta = 0, returnValue = true;

event = $.event.fix(event || window.event);
event.type = "mousewheel";

if ( event.wheelDelta ) delta = event.wheelDelta/120;
if ( event.detail ) delta = -event.detail/3;

// Add events and delta to the front of the arguments
args.unshift(event, delta);

return $.event.handle.apply(this, args);
}

})(jQuery);
/*
 * jQuery Autocomplete plugin 1.1
 *
 * Copyright (c) 2009 Jörn Zaefferer
 *
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 *
 * Revision: $Id: jquery.autocomplete.js 15 2009-08-22 10:30:27Z joern.zaefferer $
 */

(function($){$.fn.extend({autocomplete:function(urlOrData,options){var isUrl=typeof urlOrData=="string";options=$.extend({},$.Autocompleter.defaults,{url:isUrl?urlOrData:null,data:isUrl?null:urlOrData,delay:isUrl?$.Autocompleter.defaults.delay:10,max:options&&!options.scroll?10:150},options);options.highlight=options.highlight||function(value){return value;};options.formatMatch=options.formatMatch||options.formatItem;return this.each(function(){new $.Autocompleter(this,options);});},result:function(handler){return this.bind("result",handler);},search:function(handler){return this.trigger("search",[handler]);},flushCache:function(){return this.trigger("flushCache");},setOptions:function(options){return this.trigger("setOptions",[options]);},unautocomplete:function(){return this.trigger("unautocomplete");}});$.Autocompleter=function(input,options){var KEY={UP:38,DOWN:40,DEL:46,TAB:9,RETURN:13,ESC:27,COMMA:188,PAGEUP:33,PAGEDOWN:34,BACKSPACE:8};var $input=$(input).attr("autocomplete","off").addClass(options.inputClass);var timeout;var previousValue="";var cache=$.Autocompleter.Cache(options);var hasFocus=0;var lastKeyPressCode;var config={mouseDownOnSelect:false};var select=$.Autocompleter.Select(options,input,selectCurrent,config);var blockSubmit;$.browser.opera&&$(input.form).bind("submit.autocomplete",function(){if(blockSubmit){blockSubmit=false;return false;}});$input.bind(($.browser.opera?"keypress":"keydown")+".autocomplete",function(event){hasFocus=1;lastKeyPressCode=event.keyCode;switch(event.keyCode){case KEY.UP:event.preventDefault();if(select.visible()){select.prev();}else{onChange(0,true);}break;case KEY.DOWN:event.preventDefault();if(select.visible()){select.next();}else{onChange(0,true);}break;case KEY.PAGEUP:event.preventDefault();if(select.visible()){select.pageUp();}else{onChange(0,true);}break;case KEY.PAGEDOWN:event.preventDefault();if(select.visible()){select.pageDown();}else{onChange(0,true);}break;case options.multiple&&$.trim(options.multipleSeparator)==","&&KEY.COMMA:case KEY.TAB:case KEY.RETURN:if(selectCurrent()){event.preventDefault();blockSubmit=true;return false;}break;case KEY.ESC:select.hide();break;default:clearTimeout(timeout);timeout=setTimeout(onChange,options.delay);break;}}).focus(function(){hasFocus++;}).blur(function(){hasFocus=0;if(!config.mouseDownOnSelect){hideResults();}}).click(function(){if(hasFocus++>1&&!select.visible()){onChange(0,true);}}).bind("search",function(){var fn=(arguments.length>1)?arguments[1]:null;function findValueCallback(q,data){var result;if(data&&data.length){for(var i=0;i<data.length;i++){if(data[i].result.toLowerCase()==q.toLowerCase()){result=data[i];break;}}}if(typeof fn=="function")fn(result);else $input.trigger("result",result&&[result.data,result.value]);}$.each(trimWords($input.val()),function(i,value){request(value,findValueCallback,findValueCallback);});}).bind("flushCache",function(){cache.flush();}).bind("setOptions",function(){$.extend(options,arguments[1]);if("data"in arguments[1])cache.populate();}).bind("unautocomplete",function(){select.unbind();$input.unbind();$(input.form).unbind(".autocomplete");});function selectCurrent(){var selected=select.selected();if(!selected)return false;var v=selected.result;previousValue=v;if(options.multiple){var words=trimWords($input.val());if(words.length>1){var seperator=options.multipleSeparator.length;var cursorAt=$(input).selection().start;var wordAt,progress=0;$.each(words,function(i,word){progress+=word.length;if(cursorAt<=progress){wordAt=i;return false;}progress+=seperator;});words[wordAt]=v;v=words.join(options.multipleSeparator);}v+=options.multipleSeparator;}$input.val(v);hideResultsNow();$input.trigger("result",[selected.data,selected.value]);return true;}function onChange(crap,skipPrevCheck){if(lastKeyPressCode==KEY.DEL){select.hide();return;}var currentValue=$input.val();if(!skipPrevCheck&&currentValue==previousValue)return;previousValue=currentValue;currentValue=lastWord(currentValue);if(currentValue.length>=options.minChars){$input.addClass(options.loadingClass);if(!options.matchCase)currentValue=currentValue.toLowerCase();request(currentValue,receiveData,hideResultsNow);}else{stopLoading();select.hide();}};function trimWords(value){if(!value)return[""];if(!options.multiple)return[$.trim(value)];return $.map(value.split(options.multipleSeparator),function(word){return $.trim(value).length?$.trim(word):null;});}function lastWord(value){if(!options.multiple)return value;var words=trimWords(value);if(words.length==1)return words[0];var cursorAt=$(input).selection().start;if(cursorAt==value.length){words=trimWords(value)}else{words=trimWords(value.replace(value.substring(cursorAt),""));}return words[words.length-1];}function autoFill(q,sValue){if(options.autoFill&&(lastWord($input.val()).toLowerCase()==q.toLowerCase())&&lastKeyPressCode!=KEY.BACKSPACE){$input.val($input.val()+sValue.substring(lastWord(previousValue).length));$(input).selection(previousValue.length,previousValue.length+sValue.length);}};function hideResults(){clearTimeout(timeout);timeout=setTimeout(hideResultsNow,200);};function hideResultsNow(){var wasVisible=select.visible();select.hide();clearTimeout(timeout);stopLoading();if(options.mustMatch){$input.search(function(result){if(!result){if(options.multiple){var words=trimWords($input.val()).slice(0,-1);$input.val(words.join(options.multipleSeparator)+(words.length?options.multipleSeparator:""));}else{$input.val("");$input.trigger("result",null);}}});}};function receiveData(q,data){if(data&&data.length&&hasFocus){stopLoading();select.display(data,q);autoFill(q,data[0].value);select.show();}else{hideResultsNow();}};function request(term,success,failure){if(!options.matchCase)term=term.toLowerCase();var data=cache.load(term);if(data&&data.length){success(term,data);}else if((typeof options.url=="string")&&(options.url.length>0)){var extraParams={timestamp:+new Date()};$.each(options.extraParams,function(key,param){extraParams[key]=typeof param=="function"?param():param;});$.ajax({mode:"abort",port:"autocomplete"+input.name,dataType:options.dataType,url:options.url,data:$.extend({q:lastWord(term),limit:options.max},extraParams),success:function(data){var parsed=options.parse&&options.parse(data)||parse(data);cache.add(term,parsed);success(term,parsed);}});}else{select.emptyList();failure(term);}};function parse(data){var parsed=[];var rows=data.split("\n");for(var i=0;i<rows.length;i++){var row=$.trim(rows[i]);if(row){row=row.split("|");parsed[parsed.length]={data:row,value:row[0],result:options.formatResult&&options.formatResult(row,row[0])||row[0]};}}return parsed;};function stopLoading(){$input.removeClass(options.loadingClass);};};$.Autocompleter.defaults={inputClass:"ac_input",resultsClass:"ac_results",loadingClass:"ac_loading",minChars:1,delay:400,matchCase:false,matchSubset:true,matchContains:false,cacheLength:10,max:100,mustMatch:false,extraParams:{},selectFirst:true,formatItem:function(row){return row[0];},formatMatch:null,autoFill:false,width:0,multiple:false,multipleSeparator:", ",highlight:function(value,term){return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)("+term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi,"\\$1")+")(?![^<>]*>)(?![^&;]+;)","gi"),"<strong>$1</strong>");},scroll:true,scrollHeight:180};$.Autocompleter.Cache=function(options){var data={};var length=0;function matchSubset(s,sub){if(!options.matchCase)s=s.toLowerCase();var i=s.indexOf(sub);if(options.matchContains=="word"){i=s.toLowerCase().search("\\b"+sub.toLowerCase());}if(i==-1)return false;return i==0||options.matchContains;};function add(q,value){if(length>options.cacheLength){flush();}if(!data[q]){length++;}data[q]=value;}function populate(){if(!options.data)return false;var stMatchSets={},nullData=0;if(!options.url)options.cacheLength=1;stMatchSets[""]=[];for(var i=0,ol=options.data.length;i<ol;i++){var rawValue=options.data[i];rawValue=(typeof rawValue=="string")?[rawValue]:rawValue;var value=options.formatMatch(rawValue,i+1,options.data.length);if(value===false)continue;var firstChar=value.charAt(0).toLowerCase();if(!stMatchSets[firstChar])stMatchSets[firstChar]=[];var row={value:value,data:rawValue,result:options.formatResult&&options.formatResult(rawValue)||value};stMatchSets[firstChar].push(row);if(nullData++<options.max){stMatchSets[""].push(row);}};$.each(stMatchSets,function(i,value){options.cacheLength++;add(i,value);});}setTimeout(populate,25);function flush(){data={};length=0;}return{flush:flush,add:add,populate:populate,load:function(q){if(!options.cacheLength||!length)return null;if(!options.url&&options.matchContains){var csub=[];for(var k in data){if(k.length>0){var c=data[k];$.each(c,function(i,x){if(matchSubset(x.value,q)){csub.push(x);}});}}return csub;}else
if(data[q]){return data[q];}else
if(options.matchSubset){for(var i=q.length-1;i>=options.minChars;i--){var c=data[q.substr(0,i)];if(c){var csub=[];$.each(c,function(i,x){if(matchSubset(x.value,q)){csub[csub.length]=x;}});return csub;}}}return null;}};};$.Autocompleter.Select=function(options,input,select,config){var CLASSES={ACTIVE:"ac_over"};var listItems,active=-1,data,term="",needsInit=true,element,list;function init(){if(!needsInit)return;element=$("<div/>").hide().addClass(options.resultsClass).css("position","absolute").appendTo(document.body);list=$("<ul/>").appendTo(element).mouseover(function(event){if(target(event).nodeName&&target(event).nodeName.toUpperCase()=='LI'){active=$("li",list).removeClass(CLASSES.ACTIVE).index(target(event));$(target(event)).addClass(CLASSES.ACTIVE);}}).click(function(event){$(target(event)).addClass(CLASSES.ACTIVE);select();input.focus();return false;}).mousedown(function(){config.mouseDownOnSelect=true;}).mouseup(function(){config.mouseDownOnSelect=false;});if(options.width>0)element.css("width",options.width);needsInit=false;}function target(event){var element=event.target;while(element&&element.tagName!="LI")element=element.parentNode;if(!element)return[];return element;}function moveSelect(step){listItems.slice(active,active+1).removeClass(CLASSES.ACTIVE);movePosition(step);var activeItem=listItems.slice(active,active+1).addClass(CLASSES.ACTIVE);if(options.scroll){var offset=0;listItems.slice(0,active).each(function(){offset+=this.offsetHeight;});if((offset+activeItem[0].offsetHeight-list.scrollTop())>list[0].clientHeight){list.scrollTop(offset+activeItem[0].offsetHeight-list.innerHeight());}else if(offset<list.scrollTop()){list.scrollTop(offset);}}};function movePosition(step){active+=step;if(active<0){active=listItems.size()-1;}else if(active>=listItems.size()){active=0;}}function limitNumberOfItems(available){return options.max&&options.max<available?options.max:available;}function fillList(){list.empty();var max=limitNumberOfItems(data.length);for(var i=0;i<max;i++){if(!data[i])continue;var formatted=options.formatItem(data[i].data,i+1,max,data[i].value,term);if(formatted===false)continue;var li=$("<li/>").html(options.highlight(formatted,term)).addClass(i%2==0?"ac_even":"ac_odd").appendTo(list)[0];$.data(li,"ac_data",data[i]);}listItems=list.find("li");if(options.selectFirst){listItems.slice(0,1).addClass(CLASSES.ACTIVE);active=0;}if($.fn.bgiframe)list.bgiframe();}return{display:function(d,q){init();data=d;term=q;fillList();},next:function(){moveSelect(1);},prev:function(){moveSelect(-1);},pageUp:function(){if(active!=0&&active-8<0){moveSelect(-active);}else{moveSelect(-8);}},pageDown:function(){if(active!=listItems.size()-1&&active+8>listItems.size()){moveSelect(listItems.size()-1-active);}else{moveSelect(8);}},hide:function(){element&&element.hide();listItems&&listItems.removeClass(CLASSES.ACTIVE);active=-1;},visible:function(){return element&&element.is(":visible");},current:function(){return this.visible()&&(listItems.filter("."+CLASSES.ACTIVE)[0]||options.selectFirst&&listItems[0]);},show:function(){var offset=$(input).offset();element.css({width:typeof options.width=="string"||options.width>0?options.width:$(input).width(),top:offset.top+input.offsetHeight,left:offset.left}).show();if(options.scroll){list.scrollTop(0);list.css({maxHeight:options.scrollHeight,overflow:'auto'});if($.browser.msie&&typeof document.body.style.maxHeight==="undefined"){var listHeight=0;listItems.each(function(){listHeight+=this.offsetHeight;});var scrollbarsVisible=listHeight>options.scrollHeight;list.css('height',scrollbarsVisible?options.scrollHeight:listHeight);if(!scrollbarsVisible){listItems.width(list.width()-parseInt(listItems.css("padding-left"))-parseInt(listItems.css("padding-right")));}}}},selected:function(){var selected=listItems&&listItems.filter("."+CLASSES.ACTIVE).removeClass(CLASSES.ACTIVE);return selected&&selected.length&&$.data(selected[0],"ac_data");},emptyList:function(){list&&list.empty();},unbind:function(){element&&element.remove();}};};$.fn.selection=function(start,end){if(start!==undefined){return this.each(function(){if(this.createTextRange){var selRange=this.createTextRange();if(end===undefined||start==end){selRange.move("character",start);selRange.select();}else{selRange.collapse(true);selRange.moveStart("character",start);selRange.moveEnd("character",end);selRange.select();}}else if(this.setSelectionRange){this.setSelectionRange(start,end);}else if(this.selectionStart){this.selectionStart=start;this.selectionEnd=end;}});}var field=this[0];if(field.createTextRange){var range=document.selection.createRange(),orig=field.value,teststring="<->",textLength=range.text.length;range.text=teststring;var caretAt=field.value.indexOf(teststring);field.value=orig;this.selection(caretAt,caretAt+textLength);return{start:caretAt,end:caretAt+textLength}}else if(field.selectionStart!==undefined){return{start:field.selectionStart,end:field.selectionEnd}}};})(jQuery);

function map_ui(){

	var areas = {};

	function tooltips(obj) {

		var $win = $(window);
		var iebody = (document.compatMode && document.compatMode != "BackCompat") ? document.documentElement : document.body;
		var dsoctop = document.all ? iebody.scrollTop : pageYOffset;
		var scroll = parseInt(dsoctop);

		if(obj.action=='show' && obj.html && obj.event) {
			$('#tooltips').html(obj.html);
			$('#tooltips').stop(true,true).hide().fadeIn(125).css({
				'left': obj.event.clientX+15,
				'top': obj.event.clientY+15+scroll
			});
		}
		else if(obj.action=='move' && obj.event) {

			$('#tooltips').css({
				'left': obj.event.clientX+15,
				'top': obj.event.clientY+15+scroll
			});
		}
		else {
			$('#tooltips').hide();
		}
	}

return {
	/*#####################################################
	# tooltips
	#####################################################*/
	tooltips: function(what) {

	    what = (what) ? what : '.help[title]';

	    $(what).mouseover(function(e){

		    if(!$(this).data('html')){
				$(this).data('html',$(this).attr('title')).removeAttr('title');
			}

			tooltips({
			    'action':'show',
			    'event' :e,
				'html': $(this).data('html')
			});
		 }).mouseout(function(){
		    tooltips({'action':'hide'});

		 }).mousemove(function(e){
			tooltips({
			    'action':'move',
			    'event' :e
			});
		 });
	},

	/*#####################################################
	# make button
	#####################################################*/
	multiImg : function(what) {

		var img = $(what+' img');
		var ln = img.size();
		if(ln>1) {
			$(what).wrap('<div id="multiImg"></div>');
			$(what).after('<div class="multiImgNav"><a class="arriere left" href="#">Précèdente<img src="/module/carto/img/empty.gif"/></a><a class="avant right" href="#"><img src="/module/carto/img/empty.gif"/>Suivante</a></div>');
			$('#multiImg .multiImgNav').after('<br class="clear"/>');

			var height = h = 0;
			var width = w = 0;
			var margin=0;
			img.each(function(){
				h = $(this).height();
				height = (h > height) ? h : height;
				//w = $(this).width();
				//width = (h > width) ? w : width;
			});

			width = $(what).width();
			img.each(function(i){
				h = $(this).height();
				w = $(this).width();

				if(i>0) {
					$(this).hide();
				}

				if(h<height) {
					$(this).css('marginTop',parseInt((height-h)/2));
				}

				if(w<width) {
					$(this).css('marginLeft',parseInt((width-w)/2));
				}
			});

			$(what).css({
				'height':height
			});
			img.css({
				'position':'absolute'
			});

			var actu = 0;

			$('#multiImg .arriere').click(function(e){
				e.preventDefault();
				actu--;
				actu = (actu<0) ? ln-1 : actu;
				$(what+' img:not(:eq('+actu+'))').fadeOut(250,function(){
					img = $(what+' img:eq('+actu+')').fadeIn(500);
				});

			});

			$('#multiImg .avant').click(function(e){
				e.preventDefault();
				actu++;
				actu = (actu>=ln) ? 0 : actu;
				$(what+' img:not(:eq('+actu+'))').fadeOut(250,function(){
					img = $(what+' img:eq('+actu+')').fadeIn(500);
				});
			});

		}
	},

	/*#####################################################
	# make button
	#####################################################*/
	mkButton : function(what) {

		var querys='';
		var querys2='';
		this.btLocker = new Array();
		var _this = this;

		for(var x in what) {
			if(typeof what[x] =='string') {
				querys += ',input:radio[name='+what[x]+'], input:checkbox[name^='+what[x]+']';
			}
		}

		if(querys!='') {
			querys = querys.substring(1);
		}


		if(querys!='') {
			$(querys).each(function(){

				var type = $(this).attr('type');
				var classes = $(this).attr('class');
				var test = $('label[for='+$(this).attr('id')+']');

				if(test.length > 0) {
					var title = ' title="'+test.text()+'"';
					test.remove();
				}

				$(this).css('visibility','hidden');
				$(this).wrap('<div class="help '+type+' '+classes+'"'+title+'></div>');
			});
		}

		$('div.checkbox,div.radio').click(function(){

			var test = $('input', this).attr('id');
			
			if(_this.btLocker[test] !='locked') {
				if($(this).hasClass('radio')){
				
					$('input[type=radio]',this).attr('checked','checked').triggerHandler('click');

					$(this).parent().find('input[type=radio]').each(function(){

						var p = $(this).parent();
						if($(this).attr('checked')) {
							p.addClass('checked');
						}
						else {
							p.removeClass('checked');
						}

					});

				}
				else {
					if($('input[type=checkbox]',this).attr('checked')!=false){
						$('input[type=checkbox]',this).removeAttr('checked').triggerHandler('click');
						$(this).removeClass('checked');
					}
					else {
						$('input[type=checkbox]',this).attr('checked','checked').triggerHandler('click');
						$(this).addClass('checked');
					}
				}
			}
		});
	},
	/*#####################################################
	# animated png
	#####################################################*/
	apng: function(what) {

		$(what).each(function(){

			var _this = this;
			var width = parseInt($(this).css('width'));
			var width_real = 600;
			var frame = width_real/width;
			var src = $(this).attr('src');

			$(this).attr('src','/module/carto/img/empty.gif');
			$(this).css({
				'background-image':'url('+src+')',
				'background-position':'0 0'
			});
			var x = 0;
			setInterval(function(){
				x++;
				if(x>frame){x=0;}
				$(_this).css('background-position','-'+(width*x)+'px');

			},50);


		});

	},
	/*#####################################################
	# default value
	#####################################################*/
	mkDefault: function(what) {

		$(what).focus(function(){

			var _this = $(this);
			if(_this.val() == _this.data('val')) {
				_this.val('');
			}

		}).blur(function(){

			var _this = $(this);
			if(_this.val() == '') {
				_this.val(_this.data('defaultValue'));
			}

			if(_this.val()=='') {
				_this.val(_this.data('val'));
			}

		}).each(function(){
			$(this).data('val',$(this).val());
		});

	},

	/*#####################################################
	# default value for password
	#####################################################*/
	mkDefaultPassword: function(what) {

		$(what).focus(function(){
			var id = $(this).attr('id');
			$('#c'+id).show()
			$('#c'+id).focus();
			$(this).hide();

		}).each(function(){
			var id = $(this).attr('id');
			var name = $(this).attr('name');
			var classes = $(this).attr('class');
			classes = (classes) ? classes.replace(/passwordd/g,'') : '';
			$(this).after('<input type="password" name="'+name.substring(1)+'" class="hide '+classes+'" parent="'+id+'" id="c'+id+'" />');

			$('#c'+id).blur(function(){
				if($(this).val()=='') {
					$(this).hide();
					var id = $(this).attr('id');
					$('#'+id.substring(1)).show();
				}
			});

		});

	},

	/*#####################################################
	# make area
	#####################################################*/
	mkArea : function(parent, input, obj, opts) {

		if(typeof obj == 'object') {

			areas[input] = obj;
			opts.type = (opts.type) ? opts.type : 'checkbox';

			var area ='';
			$(parent+' img').css('position','absolute');
			for(var x in obj) {

				area = obj[x];
				$(parent).prepend('<div class="help '+area.id+'" title="'+area.title+'"></div>');


				$('#'+area.id).hover(function(){

					var what = $(this).attr('id');
					$('.'+what).addClass('hover');

				}, function(){

					var what = $(this).attr('id');
					$('.'+what).removeClass('hover');

				}).click(function(){

					for(var y in obj) {

						if($(this).attr('id') != obj[y].id) {
							if(opts.type =='checkbox'){$('.'+obj[y].id).removeClass('selected');}
						}
						else {
							var action = obj[y].action;
							var valeur = obj[y].value;
						}
					}

					var what = $(this).attr('id');

					if($('.'+what).hasClass('selected')!=true) {
						$('.'+what).addClass('selected');

						if(opts.type !='checkbox'){
							var val = $(input).val();
							$(input).val(val+';'+valeur);
						}
						else {
							$(input).val(valeur);
						}

						if(typeof action == 'function'){action('checked');}
					}
					else {
						$('.'+what).removeClass('selected');

						if(opts.type !='checkbox'){
							var exp = new RegExp(';'+valeur,'g');
							var val = $(input).val();
							val = val.replace(exp,'');
							$(input).val(val);
						}
						else {
							$(input).val('');
						}

						if(typeof action == 'function'){action('notchecked');}
					}
				});

			}

		}

	},

	/*#####################################################
	# infobulle
	#####################################################*/
	infoBulle: function(what,callback, opts) {

		var o = {
			'horizontal':'right',
			'vertical':'none',
			'decal':[0,0,0,0],
			'marge':10,
			'duration': 500,
			'effect':  250,
			'in':'',
			'out':''
		};
		$.extend(o, opts);

		var info = $(idfr.map.opts.tip);
		var parent = $('#map_workspace').position();

		var top = 0;
		var left = 0;
		var bulletimer='';
		var id='';

		var init = function(){

			info.mouseleave(function(e){

				if(typeof o.effect=='number') {
					info.show().fadeOut(o.effect);
				}
				else {
					info.hide();
				}

				if(typeof o['out'] == 'function' && id) {
					o['out'](id);
				}
			}).mouseenter(function(){
				clearTimeout(bulletimer);
				if(typeof o['in'] == 'function' && id) {
					o['in'](id);
				}
			});


			$(what).mouseover(function(e){

				id = $(this).attr('id').replace(/picto_/g,'');
				if(typeof callback == 'function') {
					callback(id);
				}

				if(typeof o['in'] == 'function' && id) {
					o['in'](id);
				}


				clearTimeout(bulletimer);
				var top = 0;
				var left = 0;
				var _this = this;

				switch(o.vertical) {
					case 'top':
						top = -(info.height());
					break;
					case 'bottom':
						top = $(this).height();
					break;
				}

				switch(o.horizontal) {
					case 'left':
						left = -info.width();
					break;
					default:
						left = $(this).width();
					break;
				}

				var pos = $(this).position();

				//echo(pos.left+parent.left+left +' '+ pos.top+parent.top+top);

				var left2 = pos.left+left;//+parent.left;
				var top2 = pos.top+top+o.decal[0];//+parent.top;

				var win = $(window);
				$('#infobulle .floater.left').hide();
				$('#infobulle .floater.right').show();

				if((left2+o.marge-win.scrollLeft())<0) {
					//left2 = pos.left + parent.left + $(this).width();
					left2 = pos.left+$(this).width()+o.decal[3];
					$('#infobulle .floater.right').hide();
					$('#infobulle .floater.left').show();
				}

				if((top2-win.scrollTop())<0) {
					//top2 = pos.top + parent.top;
				}

				if((left2-o.marge+info.width()-win.scrollLeft())>win.width()) {
					//left2 = pos.left+parent.left+left-info.width()-$(this).width();
				}

				if((top2-o.marge+info.height()-win.scrollTop())>win.height()) {
					//top2 = pos.top+parent.top+top-info.height()+$(this).height();
				}


				info.css({
					'left' : left2,
					'top' : top2
				});


				var t = $(this).position();
				var test = true;
				if(t.left > ($('#map').width()-13) || t.top > ($('#map').height()-13) || t.top<0 || t.left<0){
					test=false;
				}

				$(_this).addClass('selected');

				if(test==true) {
					if(typeof o.effect=='number') {
						info.hide().stop(true,true).fadeIn(o.effect);
					}
					else {
						info.show();
					}
				}

			}).mouseleave(function(e,t){

				t = (t)? t : false;

				var _this = this;
				$(_this).removeClass('selected');
				if(typeof o['out'] == 'function') {

					var id = $(this).attr('id').replace(/picto_/g,'');
					o['out'](id);
				}

				var tt = $(this).position();
				var test = true;
				if(tt.left > ($('#map').width()-13) || tt.top > ($('#map').height()-13) || tt.top<0 || tt.left<0){
					test=false;
				}

				if(t==false){
					bulletimer = setTimeout(function(){

						if(test==true){$('.warp',info).trigger('mouseleave');}

						clearTimeout(bulletimer);
					}, o.duration);
				}
				else {
					if(test==true){$('.warp',info).trigger('mouseleave');}
				}
			});
		};

		//setTimeout(init,1000);
		init();

	},

	/*#####################################################
	# init form
	#####################################################*/
	initForm : function(fields, submit) {

			var test=false;
			for(var x in fields) {

				var what = $('input[name='+x+'],input[name='+x+'[]]');
				switch (what.attr('type')) {
					case 'checkbox':
						if(typeof fields[x]=='object' ) {

							var field = fields[x];
							$('input[name='+$(what).attr('name')+']').each(function(){

								var val = $(this).val();
								for(var y in field) {
									test = (field[y] == val)? true : false;
									if(test==true){break;}
								}
								if(test==true){
									$(this).attr('checked','checked');
									$(this).parent().addClass('checked');
								}

							});
						}
						else {
							what.attr('checked','checked');
							what.parent().addClass('checked');
						}
					case 'radio':
						what = $('input[name='+x+'][value='+fields[x]+']');
						what.attr('checked','checked');
						$('input[name='+x+']').parent().removeClass('checked');
						what.parent().addClass('checked');
					break;
					case 'text':
					case 'hidden':
						//echo(what.attr('name')+' '+fields[x]);
						what.attr('value',fields[x]);

						var val = what.val();
						var patt = new RegExp(';[0-9]{1,2}.*');
						if(patt.test(val)==true) {

							var area = areas['#'+what.attr('id')];

							var xp = val.split(';');

							for(var y in xp) {
								for(var x in area) {
									if(area[x].value == xp[y]) {

										$('.'+area[x].id).addClass('selected');
										break;
									}
								}
							}

						}

					break;
				}

				what = $('select[name='+x+']');
				if(what.length==1) {
					$('option',what).each(function(){

						if($(this).val()==fields[x]){
							$(this).attr('selected','selected');

						}
						else {
							$(this).removeAttr('selected');
						}

					});
						what.trigger('change');
				}



			}

			$(submit).trigger('submit');

		},

	/*#####################################################
	# canvas mask
	#####################################################*/
	makeMask: function(id,data) {

		var sel = $('#'+id);
		if(sel.length<1) {
			$(idfr.map.opts.map).append('<canvas id="'+id+'"></canvas>');
			sel = $('#'+id);
		}

		data.color = (data.color) ? data.color : '#000';

		var ctx = sel[0].getContext('2d');
		sel.css({
			'width':data.width,
			'height':data.height,
			'top':data.top,
			'left':data.left,
			'position':'absolute'
		});
		if(typeof data.draw == 'object') {

			ctx.fillStyle = data.color;
  			ctx.globalAlpha = 0.3;
  			ctx.shadowBlur = 50;
 	  			ctx.shadowColor = "rgba(0, 0, 0, 1)";
			ctx.beginPath();
			ctx.moveTo(0,0);

			var line = data.draw
			for(var x in line) {
				ctx.lineTo(line[x].x,line[x].y);
			}

			ctx.fill();
		}

	}


};}
