var App = {
	base_url: '',
	
	togglePanel: function(category_id)
	{
		var target_panel = $('category-panel-'+category_id);
		
		$$('.category-panel').findAll(function(e) { return e.visible() && e != target_panel; }).each(function(elmt) {
		    new Effect.SlideUp(elmt, {duration: 0.5, queue:'end'});
		});
		
		new Effect.toggle(target_panel, 'slide', {duration: 0.5, queue:'end'});
		
		return false;
	},
	
	displayPage: function(parameters)
	{
		if (parameters == undefined) {
			parameters = {};
		}
		
		new Ajax.Request(App.base_url+'/aj_page.php', {
			method: 'get',
			parameters: parameters,
			onSuccess: function(transport) {
				var article_page = $('article-full-'+parameters.article_id+'-page');
				
				new Effect.ScrollTo('article-content-'+parameters.article_id, {duration: 0.5, queue: 'front'});
				
				new Effect.Fade(article_page, {duration: 0.5, from: 1, to: 0.01, queue: 'end', afterFinish: function() { 
						article_page.update(transport.responseText);
						App.displayImages(article_page);
				}});
				
				new Effect.Appear(article_page, {duration: 0.5, from: 0.01, to: 1, queue: 'end'});
			}
		});
		
		return false;
	},
	
	displayMessage: function(message)
	{
		var modal = new Control.Modal(false, {
			opacity: 0.7,
			fade: true,
			afterOpen: function() {
			  $('modal_overlay').setStyle({height: $('container').getHeight()+'px'});
		 	},
			contents: function(){  
		        return message;  
		    }
		});

		modal.open();

		return false;
	},
	
	displayHoverbox: function(elmt, message)
	{
		if(message)
		{
			var modal = new Control.Modal(elmt, {
				hover: true,
				position: 'mouse',
				offsetLeft: 20,
				containerClassName: 'hoverbox',
				contents: function(){  
			        return message;  
			    }
			});

			modal.open();
		}
		
		return false;
	},
			
	displayImage: function(link)
	{
		link = $(link);

		var modal = new Control.Modal(link, {
			opacity: 0.7,
			image: true,
			fade: true,
			afterOpen: function() {
			  $('modal_overlay').setStyle({height: $('container').getHeight()+'px'});
		 	},
			afterImageLoad: function() {
			  $('modal_container').insert('<img id="modal_minimize" src="'+App.base_url+'/plugins/picto/minimize.png" alt="Refermer" title="Refermer" />');
	      $('modal_minimize').setStyle({position:'absolute', left:'10px', bottom:'12px'}).setOpacity(0.7).observe('click', Control.Modal.close);
			}
		});

		modal.open();

		return false;
	},
	
	displayImages: function(article_page)
	{
		$(article_page).select('.article-text-image a').each(function(elmt) {
			new Control.Modal(elmt, {
			  opacity: 0.7,
		  	image: true,
		  	fade: true,
  			afterOpen: function() {
  			  $('modal_overlay').setStyle({height: $('container').getHeight()+'px'});
    		},
    		afterImageLoad: function() {
    		  $('modal_container').insert('<img id="modal_minimize" src="'+App.base_url+'/plugins/picto/minimize.png" alt="Refermer" title="Refermer" />');
          $('modal_minimize').setStyle({position:'absolute', left:'10px', bottom:'12px'}).setOpacity(0.7).observe('click', Control.Modal.close);
    		}
    	});
		});
		
		return false;
	},
	
	toggleArticle: function(id)
	{
		if ($('article-summary-'+id).visible()) {
			return App.showArticle(id);
		}
		else {
			return App.hideArticle(id);
		}
	},
	
	showArticle: function(id)
	{
		var article_content = $('article-content-'+id);
		
		new Effect.SlideUp('article-summary-'+id, {duration: 0.5, queue: 'end'});
		new Effect.SlideDown('article-full-'+id, {duration: 0.5, queue: 'end'});
		new Effect.ScrollTo(article_content, {duration: 0.5, queue: 'end'});
		
		pageTracker._trackPageview(article_content.down(1).readAttribute('href').substr(App.base_url.length));
		
		return false;
	},
	
	hideArticle: function(id)
	{
		new Effect.ScrollTo('article-content-'+id, {duration: 0.5, queue: 'end'});
		new Effect.SlideUp('article-full-'+id, {duration: 0.5, queue: 'end'});
		new Effect.SlideDown('article-summary-'+id, {duration: 0.5, queue: 'end'});
		
		return false;
	},
	
	displayComments: function(link)
	{
		link = $(link);
		
		id = link.up().id.match(/\d+$/);
		link.href = App.base_url+'/aj_comments.php';
		
		var modal = new Control.Modal(link, {
			width: 470,
			height: 510,
			opacity: 0.7,
			requestOptions: {method: 'get', parameters: {id: id}},
			afterOpen: function() {
			  $('modal_overlay').setStyle({height: $('container').getHeight()+'px'});
  		}
		});
		
		link.href = '#';
		
		modal.open();
		
		return false;
	},
	
	newCaptcha: function(div)
	{
	  $(div).setStyle({
	    backgroundImage: 'url('+App.base_url+'/plugins/captcha.php?'+App.token()+')'
	  });
	  
	  return false;
	},
	
	displayPopup: function(link)
	{
		link = $(link);
		
		var modal = new Control.Modal(link, {
			width: 470,
			height: 470,
			opacity: 0.7,
			afterOpen: function() {
			  $('modal_overlay').setStyle({height: $('container').getHeight()+'px'});
  		}
		});
		
		modal.open();
		
		return false;
	},
	
	clearValue: function(input)
	{
		$(input).observe('focus', function() {
      if (this._cleared) return;
      
      this.clear();
      this._cleared = true;
    });
	},
	
	token: function()
	{
	  var chars = '0123456789abcdefghiklmnopqrstuvwxyz';
	  var length = 40;
    var token = '';
    
    for (var i=0; i<length; i++) {
    	var rnum = Math.floor(Math.random() * chars.length);
    	token += chars.substring(rnum, rnum+1);
    }
    
    return token;
	},
	
	uploadProgress: function(id, fileObj, bytesLoaded)
	{
		var percent = Math.ceil((bytesLoaded / fileObj.size) * 100);
    
    if($(id+'-output'))
		  $(id+'-output').update('('+percent+'% achevé)');
	},
	
	uploadContestComplete: function(id, fileObj)
	{
	  if($(id+'-output'))
	    $(id+'-output').update();
	  
	  var src = App.base_url+'/plugins/swf_upload_preview.php?tmp_name='+tmp_name+'&type_id=1&width=400&'+App.token();
	  $('contestUploader-preview').src = src;
	  $('competitor-tmp-name').value = tmp_name;
	  $('competitor-file').value = fileObj.name;
	},
	
	checkCompetitorName: function()
	{
		var elmt = $('competitor-name');
		App.toggleError(elmt, elmt.value);
	},
	
	checkCompetitorEmail: function()
	{
		var elmt = $('competitor-email');
		elmt.value = elmt.value.strip();
		App.toggleError(elmt, elmt.value.match(/^([a-z0-9+_\.-]+)@([a-z0-9]+)(([\.\-]?[a-z0-9]+)*)\.([a-z]{2,6})$/i));
	},
	
	checkCompetitorEmailConfirm: function()
	{
		var elmt = $('competitor-email');
		var elmt_confirm = $('competitor-email-confirm');
		App.toggleError(elmt_confirm, elmt_confirm.value == elmt.value);
	},
	
	stateCompetitorEmail: function(state)
	{
		App.toggleError($('competitor-email'), state);
		$('email-state').update(state ? '100 car.' : 'déjà utilisé');
	},
	
	toggleError: function(elmt, toggle)
	{
		if (typeof elmt == 'string') {
			var label = $(elmt);
		}
		else {
			var label = $$('label[for='+elmt.id+']').first();
		}

		if (toggle) {
			label.removeClassName('error');
		}
		else {
			label.addClassName('error');
		}
	}
}
