
	var api = {
		'vars' : new Object(),
		'load' : function(zone, params){
			api.params 	= params;
			var zones 	= ['global', zone];
			$.each(zones, function(i,zone){
				$.each(api[zone], function(){
					if(typeof this.load === 'function') this.load();
				});
			});
		},
		'backend' : {
			'ajax' : {
				'table' : {
					'action' : {
						'loader' 	: function($this){
							$('div.jqibuttons').remove();
							api.global.ajax.loader($('div.jqimessage'));	
						},						
						'success' 	: function($this, url){
							$($this).attr('href', url);							
							$($this).parent().parent().effect('pulsate', function(){
								api.global.selector.toggle($this)
							});
						},
						'error' 	: function($this, url){
							$($this).attr('href', url);							
							$('td', $($this).parent().parent()).each(function(){
								var color = $('td', $($this).parent().parent()).css('background-color');
								$(this).animate({'backgroundColor':'#cc0000'}, 500).animate({'backgroundColor':color}, 5000);
							});						
						}						
					},
					'delete' : {
						'loader' 	: function($this){
							api.backend.ajax.table.action.loader($this);
						},						
						'success' 	: function($this, url){
							$($this).attr('href', url);							
							$($this).parent().parent().effect('fade', 1000);
						},
						'error' 	: function($this, url){
							api.backend.ajax.table.action.error($this, url);
						}						
					}
				},
				'form' : {
					'loader' 	: function($this){
						$($this).attr('action', 'javascript:;');							
						$('input[type=submit], input[type=button]', $($this)).hide();
						api.global.ajax.loader($('input[type=submit], input[type=button]', $($this)).parent(), true);
					},				
					'success' 	: function($this, url){
						$($this).attr('action', url);							
						api.global.ajax.loaderRemove($('input[type=submit], input[type=button]', $($this)).parent());
						$('input[type=submit], input[type=button]', $($this)).show();
					},
					'error' 	: function($this, url){
						api.backend.ajax.form.success($this, url);
					}
				}				
			},
			'upload' : {
				'load' : function(){
					$('a.upload_edit').click(function(){
						api.backend.upload.toggle(this);
					});
				},
				'toggle' : function($this){
					if($($this).parent().is(':visible')){
						$('span.upload:hidden', $($this).parent().parent()).show();
						$($this).parent().hide();
					}
					else{
						$('span.upload:visible', $($this).parent().parent()).hide();
						$($this).parent().show();						
					}
				}
			},			
			'websites' : {
				'load' : function(){
					if($('#desc').get(0)){
						api.backend.websites.descSize();
						$('#desc').keyup(function(){
							api.backend.websites.descSize();				  
						});
					}
				},
				'descSize' : function(){
					$('#desc').val($('#desc').val().replace(/(\s|\r|\n|\t)+/gi, ' '));
					$('#desc_size').html($('#desc').val().length);
				}
			},
			'tabs' : {
				'load' : function(){
					$('#tabs').tabs({
						'collapsible' : true			
					});	
				}
			},		
			'logs' : {
				'load' : function(){
					$('.log_line').click(function(){
						$('.log_details', $(this).parent()).toggle();
					});	
				}
			},			
			'stats' : {
				'bind' 		: false,
				'loaded' 	: new Object(),
				'load' 		: function(){
					api.backend.stats.display();
				},			
				'display' 	: function(){
					$('div.chart').each(function(){
						if($(this).is(':visible')){
							var $this 		= this;
							var $default 	= $($this).html();
							if(!api.backend.stats.loaded[$($this).attr('id')]){
								api.backend.stats.loaded[$($this).attr('id')] = true;
								api.global.ajax.post(api.global.ajax.getUrl(), $($this).attr('id'), false, $this, {
									'loader'	: function($this){
										api.global.ajax.loader($this);
									},
									'error'		: function(){
										$($this).html($default);
										$($this).removeClass('chart');										
									},
									'success' 	: function(t,u,data){
										switch($($this).attr('type')){
											default:
											case 'line':
												var options = {
													'credits' : {
														'enabled' : false
													},
													'chart' : {
														'type' : 'line',
														'renderTo' : $($this).attr('id')
													},
													'title' : {
														'text' : $($this).attr('title')
													},
													'subtitle' : {
														'text' : api.backend.stats.getDays(data) + ' derniers jours'
													},								
													'xAxis' : {
														'type' : 'datetime',
														'tickInterval' : 7 * 24 * 3600 * 1000,
														'tickWidth' : 0,
														'gridLineWidth' : 1,
														'labels' : {
															'align' : 'left',
															'x' : 3,
															'y' : -3 
														}
													},
													'yAxis' : [{
														'title' : {
															'text' : null
														},
														'labels' : {
															'align' : 'left',
															'x' : 3,
															'y' : 16,
															'formatter' : function() {
																return Highcharts.numberFormat(this.value, 0);
															}
														},
														'showFirstLabel' : false
													}, {
														'linkedTo' : 0,
														'gridLineWidth' : 0,
														'opposite' : true,
														'title' : {
															'text' : null
														},
														'labels' : {
															'align' : 'right',
															'x' : -3,
															'y' : 16,
															'formatter' : function() {
																return Highcharts.numberFormat(this.value, 0);
															}
														},
														'showFirstLabel' : false
													}],
													'tooltip' : {
														'shared' : true,
														'crosshairs' : true
													},
													'plotOptions' : {
														'series' : {								
															'marker' : {
																'lineWidth' : 1
															}
														}
													},
													'series' : data
												};
											break;
											case 'pie':
												var options = {
													'credits' : {
														'enabled' : false
													},
													'chart' : {
														'type' : 'pie',
														'renderTo' : $($this).attr('id')
													},
													'title' : {
														'text' : $($this).attr('title')
													},
													'tooltip' : {
														'formatter' : function() {
															return '<b>'+ this.point.name +'</b>: '+ this.y +' %';
														}
													},
													'plotOptions' : {
														'pie' : {
															'allowPointSelect' : true,
															'cursor' : 'pointer',
															'dataLabels' : {
																'enabled' : true,
																'color' : '#000000',
																'connectorColor' : '#000000',
																'formatter' : function() {
																	return '<b>'+ this.point.name +'</b>: '+ this.y +' %';
																}
															}
														}
													},							
													'series' : data
												};						
											break;
										}
										api.backend.stats.clear($this);
										api.backend.stats.loaded[$($this).attr('id')] = new Highcharts.Chart(options);
									}
								});
							}
						}
						else if(!api.backend.stats.bind){
							api.backend.stats.bind = true;
							$('#tabs').bind('tabsshow', function(){
								api.backend.stats.display();
							});	
						}				
					});
				},
				'clear' : function($this){
					$($this).removeAttr('title');
					$($this).removeAttr('type');
					$($this).html('');				
				},
				'getDays' : function(data){
					if(data[0].data){
						return data[0].data.length;
					}
					return '- error -';
				}
			},
			'cleditor' : {
				'load' : function(){
					$('.cleditor').cleditor({
						'width' 	: 557,
						'height' 	: 400
					});	
				}
			}			
		},
		'frontend' : {			
			'disclamer' : {
				'load'		: function(){
					$('#disclamer').each(function(){					
						if(!$.cookie('disclamer')){
							$.prompt('<div style="width:600px;">'+$(this).html()+'</div>', {
								'opacity'	: 0.9,
								'buttons'	: {'ENTRER':true, 'SORTIR':false},
								'submit'	: function(v,m){
									if(v){
										$.cookie('disclamer', 1, {'path':'/'});
										return true;
									}
									else{
										window.location.href = 'http://www.google.fr';
										return false;
									}
								}
							});
						}
					});
				}
			},
			'getScript' : function(u,t,a){
				$.prompt('<p>Copiez/collez ce code HTML sur votre site internet :</p><textarea>&lt;a href=&quot;'+u+'&quot; target=&quot;_blank&quot; title=&quot;'+t+'&quot;&gt;'+a+'&lt;/a&gt;</textarea>', {
					'buttons'	: {'Ok':true},
					'loaded'	: function(){
						$(".jqimessage textarea").select();
						$(".jqimessage textarea").live('click focus', function(){
							$(this).select();
						});
					},
					'submit'	: function(v,m){
						return true; 
					}
				});	
			},
			'formsearch' : {
				'load' : function(){
					if($('#formsearch').get(0)){
						api.frontend.formsearch.set();
					}
				},					
				'set' : function(){
					$('#formsearch_btn').click(function(){
						var $this = this;
						if($('#formsearchplus').is(':visible')){
							var empty = true;
							$('#formsearch input[type=text]').each(function(){
								if($(this).val() != '') empty = false;				 
							});
							if(empty) $('#formsearch').removeClass('formsearch_selected');
							$('#formsearchplus').hide(500, function(){
								$($this).animate({'height' : '90px'}, 500, function(){
									$($this).removeClass('formsearch_btn_back').addClass('formsearch_btn_default');
								});
							});
						}
						else{
							$('#formsearch').addClass('formsearch_selected');
							$($this).animate({'height' : '158px'}, 500, function(){
								$('#formsearchplus').show(500, function(){
									$($this).removeClass('formsearch_btn_default').addClass('formsearch_btn_back');
								});
							});
						}
					});
					$('#formsearch_fields input[type=text], #formsearch_fields select').focus(function(){
						$('#formsearch').addClass('formsearch_selected');
						if($(this).val() != '' && $(this).val() != 0){
							$(this).addClass('formsearch_fields_selected');
						}
						else{
							$(this).removeClass('formsearch_fields_selected');
						}					
						
					}).blur(function(){
						var empty = true;
						$('#formsearch input[type=text]').each(function(){
							if($(this).val() != '') empty = false;				 
						});					
						if(empty && !$('#formsearchplus').is(':visible')) $('#formsearch').removeClass('formsearch_selected');
					});
				}				
			},
			'clics' : {
				'load' : function(){
					api.frontend.clics.count();
				},					
				'count' : function(){
					if(api.params.classClics){
						$.each(api.params.classClics, function(c,name){
							$('a.'+c).click(function(){
								var data 					= new Object();
								data[api.params.json.hash] 	= $(this).attr('id');
								data[c] 					= encodeURIComponent($(this).attr('href'));
								api.global.ajax.post(api.global.ajax.getUrl(), name, data);
							});
						});
					}
				}
			}
		},
		'global' : {		
			'checbox'	:{
				'load' : function(){
					$('.checklist input:checked').parent().addClass('checkbox-selected');
					$('.checklist .checkbox-select').click(function(event){
						event.preventDefault();
						if($(this).parent().find(':radio')){
							$('li', $(this).parent().parent()).removeClass('checkbox-selected');
							$('li', $(this).parent().parent()).find(':checkbox, :radio').removeAttr('checked');						
						}
						$(this).parent().addClass('checkbox-selected');
						$(this).parent().find(':checkbox, :radio').attr('checked','checked');
					});
					$('.checklist .checkbox-deselect').click(function(event){
						event.preventDefault();
						$(this).parent().removeClass('checkbox-selected');
						$(this).parent().find(':checkbox, :radio').removeAttr('checked');
					});			
				}
			},			
			'captcha'	:{
				'load' : function(){
					$('#recaptcha_image').mouseover(function(){
						$(this).addClass('captcha_zoom');
					}).mouseout(function(){
						$(this).removeClass('captcha_zoom');
					});
					$('#recaptcha_response_field').focus(function(){
						$('#recaptcha_image').addClass('captcha_zoom');
					}).blur(function(){
						$('#recaptcha_image').removeClass('captcha_zoom');
					});					
				}
			},
			'selector'	: {				
				'toggle' 	: function($this){
					$(':hidden', $($this).parent()).show();
					$($this).hide();
				}
			},
			'ajax'	: {				
				'sendForm' 	: function($this, name, callback){				
					api.global.ajax.post($($this).attr('action'), name, $($this).dataFields(), $this, callback);
					return false;
				},
				'post' 		: function(url, post, data, $this, callback){
					data 				= data ? data : new Object();
					data[post]			= 1;
					callback			= callback ? callback : new Object();
					callback.success 	= callback && callback.success 	? callback.success 	: callback;
					callback.error 		= callback && callback.error 	? callback.error 	: false;
					callback.loader 	= callback && callback.loader 	? callback.loader 	: false;
					if(callback.loader) callback.loader($this);					
					$.ajax({
						'type'			: 'POST',
						'url'			: url,
						'dataType'		: 'json',
						'data'			: api.params.json.key+'='+$.toJSON(data),
						'success'		: function(response){
							if(response){
								if(response.code == 'success'){
									if(callback.success) 	callback.success($this, url, response.data);
								}else if(callback.error) 	callback.error($this, url, response.data);
								if(response.msgDisplay) 	api.global.msg.display(response.msgDisplay);									
								if(response.redirect) 		window.location.href = response.redirect;
							}else api.global.msg.display('<ul class="msg_error"><li>Erreur technique, la requête n\'a pas pu être envoyée.</li></ul>');
						},
						'error'			: function(){
							api.global.msg.display('<ul class="msg_error"><li>Erreur technique, la requête a &chouée.</li></ul>');
						}					
					});
				},
				'loader' : function($this, append){
					var loader = '<span class="loader"></span>';
					if(append) 	$($this).append(loader);
					else 		$($this).html(loader);
				},
				'loaderRemove' : function($this){
					$('.loader', $($this)).remove();
				},
				'getUrl' : function(path){
					return api.params.URL+(path ? path : document.location.pathname);
				}			
			},
			'msg' 	: {
				'load' : function(){
					api.global.msg.tip();
					api.global.msg.hide();
				},
				'hide' : function(){
					setTimeout(function(){
						$('.msg_ok').hide('slow'); 
					}, 3000);
				},				
				'display'		: function(html){
					$('#msg').html(html);
					api.global.msg.hide();
				},
				'confirmForm' 	: function($this, msg, name1, name2, data){
					var url 	= $($this).attr('href');
					$($this).attr('href', 'javascript:;');
					var fields 	= '';
					if(data){
						$.each(data, function(name, value){
							fields += '<input type="hidden" name="'+name+'" value="'+value+'" />';			  
						});
					}
					$.prompt((msg ? msg : '') + '<form action="'+url+'" method="post">'+fields+(name1 ? '<input type="hidden" name="'+name1+'" value="1" />' : '')+(name2 ? '<p>Vous pouvez laisser un commentaire concernant cette action :</p><textarea name="'+name2+'"></textarea>' : '')+'</form>', {
						'buttons'	: {'Ok':true, 'Annuler':false},
						'focus'		: 1,
						'loaded'	: function(v,m){
							if(!msg){
								$('div.jqibuttons').remove();
								$('form', $('div.jqimessage')).submit();
								api.global.ajax.loader($('div.jqimessage'));
								return false;
							}
						},
						'submit'	: function(v,m){
							if(v){
								$('form', $(m[0].offsetParent)).submit();
								return false;
							}else $($this).attr('href', url);
							return true; 
						}
					});	
					return false;
				},				
				'confirm' : function($this, msg, name1, name2, data, callback){
					var url = $($this).attr('href');
					$($this).attr('href', 'javascript:;');
					$.prompt((msg ? msg : '') + (name2 ? '<p>Vous pouvez laisser un commentaire concernant cette action :</p><textarea name="'+name2+'"></textarea>' : ''), {
						'buttons'	: {'Ok':true, 'Annuler':false},
						'focus'		: 1,
						'loaded'	: function(){
							if(!msg){
								api.global.ajax.post(url, name1, $.paramsToObj((name2 ? '&'+name2+'='+$('textarea[name='+name2+']', $(m)).val() : '')+(data ? '&'+data : '')), $this, callback);
								return true;
							}
						},						
						'submit'	: function(v,m){
							if(v) api.global.ajax.post(url, name1, $.paramsToObj((name2 ? '&'+name2+'='+$('textarea[name='+name2+']', $(m)).val() : '')+(data ? '&'+data : '')), $this, callback);
							return true; 
						}
					});	
					return false;
				},			
				'tip' : function(){
					$('.tip').qtip({
					  'position': {
						 'corner': {
							'target'	: 'bottomRight',
							'tooltip'	: 'topLeft'
						 },
						 'adjust'	: {
							'x' : -20, 
							'y'	: 0 
						}
					  },
					 'style': {
						'background'	: '#3b4b5a',
						'name'			: 'dark',
						'padding'		: '7px 13px',
						'width': {
							'max'	: 550,
							'min'	: 100
						 },
						 'border'	: {
							'radius'	: 5,
							'color'	: '#1a2e3e'
						 },
						 'tip'		: true
					  }
					});
				}
			}	
		}
	};

