var Creativ = {
	currentTitle: '',
	anchors: [],
	overlayOpacity: 0.2,
	overlay: null,
	
	init: function(options) {
		if (!$('creativ-overlay-container')) {
			Creativ.overlay = new Overlay();
		}

		// init default options
		this.options = $extend({}, options || {});

		$$('a').each(function(el) {
			if (!el.hasClass('ajaxified')) {
				if (el.get('rel') && el.get('href') && el.hasClass('ajax', 'i')) {
					el.addEvent('click', function(e) {
						e.stop();
						if (Creativ.click(el)) e.stop();
					}.bindWithEvent(el));
					el.addClass('ajaxified');
				}
			}

		});
	},

	click: function(el) {
		document.eventDone = true;

		var defaultOptions = {
			url: el.href
		};

		var options = $merge(defaultOptions, JSON.decode(el.rel));
		Creativ.ajaxCall(options);
		return this;
	},

	/**
	 * Requete Ajax
	 */
	ajaxCall: function(options) {
		var defaultOptions = {
			method: 'post',
			formData: false,
			url: this.href,
			params: '',
			title: '',
			update: 'central-div',
			onComplete: Creativ.ajaxCallComplete,
			onFailure: Creativ.ajaxCallFailed,
			confirm: '',
			indicator: 'Chargement en cours...',
			toTop: true,
			overlay: true
		};
		
		var mergedOptions = $merge(defaultOptions, options);
		
		if ( mergedOptions.confirm != '') {
			if ( !confirm(mergedOptions.confirm) ) {
				return false;
			}
		}

		if ( mergedOptions.overlay && mergedOptions.indicator != '' ) {
			Creativ.overlay.show( mergedOptions.indicator ); 
		}

		var ajax = new Request.HTML({
			url: mergedOptions.url,
			method: mergedOptions.method,
			data: mergedOptions.params,
			update: mergedOptions.update, 
			autoCancel: true,
			onComplete: function() { 
				mergedOptions.onComplete();
				if (mergedOptions.toTop) {
					var coords = window.getSize();
					window.scrollTo(coords.x, 0); 
				}
			}, 
			onFailure: mergedOptions.onFailure,
			evalScripts: true,
			encoding : 'utf-8'
		});
		
		if ( mergedOptions.params == '' ) {
			ajax.setHeader('Content-Length', 0);
		}
		ajax.send();

		if ( mergedOptions.title != '' ) { Creativ.currentTitle = mergedOptions.title; }
	},

	/**
	 * Fonction executée après chargement d'un lien, en cas de succès
	 */
	ajaxCallComplete: function() {
		window.document.title = Creativ.currentTitle;
		Creativ.init();
		Creativ.overlay.hide();
		document.eventDone = false;
	},
	
	ajaxCallFailed: function() {
		alert('Rubrique non disponible.\nURL: ' + this.url + '\nResponse code: ' + this.transport.status);
		Creativ.overlay.hide();
	},
	
	/**
	 * Soumet un formulaire
	 */
	submitForm: function(options) {
		if ($('page')) {
			$('page').value = 1;
		}

		var defaultOptions = {
			params: $(options.form).toQueryString(),
			historize: false,
			onComplete: Creativ.submitFormComplete,
			indicator: 'Recherche en cours...',
			formData: true
		};
		
		if (options.form.indexOf('_rech_') != -1) {
			if (defaultOptions.params.indexOf('&page=') == -1) {
				defaultOptions.params = defaultOptions.params + '&page=1';
			}
		}

		var mergedOptions = $merge(defaultOptions, options);
		
		Creativ.ajaxCall(mergedOptions);
		return false;
	},
	
	/**
	 * Fonction executée après soumission d'un formulaire, en cas de succès
	 */
	submitFormComplete: function() {
		Creativ.init();
		var coords = window.getSize();
		window.scrollTo(coords.x, 0);
		Creativ.overlay.hide();
	},
	
	urldecode: function(ch) {
	   ch = ch.replace(/[+]/g," ");
	   return ch;
	   return unescape(ch);
	},
	
	formatDate: function(d, m, y) {
		if ( Creativ.getDayCount(m, y) < d ) {
			d = 1;
			if ( m == 12 ) {
				m = 1;
				y = parseInt(y) + 1;
			} else {
				m = parseInt(m) + 1;
			}
		}
		if ( parseInt(d) < 10 ) { d = '0' + parseInt(d); }
		if ( parseInt(m) < 10 ) { m = '0' + parseInt(m); }
		return d + '/' + m + '/' + y;
	
	},
	
	getDayCount: function(m, y) {
		var m = parseInt(m);
		var y = parseInt(y);
		if ( (m == 1) || (m == 3) || (m == 5) || (m == 7) || (m == 8) || (m == 10) || (m == 12) ) {
			return(31);
		} else if ( (m == 4) || (m == 6) || (m == 9) || (m == 11) ) {
			return(30);
		} else if ( (m == 2) && (y % 4 == 0) ) {
			return(29);
		} else {
			return(28);
		}
	},
	
	urlToHash: function(url, params) {
		var suffix = '';
		var parts = params.split('&');
		for (var i=0; i<parts.length; i++) {
			tmp = parts[i].split('=');
			field = tmp[0];
			value = decodeURI(tmp[1]);
			if ( field == 'page' ) {
				suffix += '-'  + value;
			} else if( field == 'tab') {
				suffix += '-'  + value;
			}
		}
		
		return url.replace(/https?:\/\/(.)+\.(((dev)?reactivpub)|matantelouise|(r-globalnetwork))\.(.){2,3}(\/.*\.php)?\/?/, '') + suffix;
	},

	hightlightRow: function(el, className) {
		var className = (typeof className == 'undefined' ? 'highlight' : className);
		$(el).toggleClass(className);
	},
	
	toggleAction: function(obj) {
		var objp = obj.getParent().getParent();
		if ( objp.hasClass('off') ) {
			objp.removeClass('off');
			objp.addClass('off2');
		} else {
			objp.removeClass('off2');
			objp.addClass('off');
		}
	},
	
	toggleTab: function(el, flag) {
		if (flag) {
			if ( !$(el).hasClass('on') ) { 
				$(el).addClass('over'); 
			}
		} else {
			$(el).removeClass('over');
		}
	},
	
	toggleDisplay: function (el) {
		if ($(el)) {
			if ($(el).style.display == 'none') {
				$(el).style.display = '';
			} else {
				$(el).style.display = 'none';
			}
		}
	},
	
	toggleVisibility: function (el) {
		if ($(el)) {
			if ($(el).style.visibility == 'hidden') {
				$(el).style.visibility = 'visible';
			} else {
				$(el).style.visibility = 'hidden';
			}
		}
	},
	
	toggle: function (el, type) {
		if (type == 'display') {
			Creativ.toggleDisplay(el);
		} else {
			Creativ.toggleVisibility(el);
		}
	},
	
	lpad: function (str, len, pad) {
		str += '';
		while (str.length < len) {
			str = pad + str;
		}
		return str;
	}

}



var Overlay = new Class({
	Implements: Options,
	options: {
		colour: '#000',
		opacity: 0.2,
		zIndex: 1,
		container: document.body,
		onClick: $empty,
		message: 'Chargement en cours...'
	},

	initialize: function(options){
		this.setOptions(options);
		
		this.options.container = $(this.options.container) || document.body;
		
		this.container = new Element('div').setProperty('id', 'creativ-overlay-container').setStyles({
			position: 'absolute',
			visibility: 'hidden',
			left: '0px',
			top: '0px',
			width: '100%',
			zIndex: this.options.zIndex
		}).inject(this.options.container);

/*
		this.iframe = new Element('iframe').setProperties({
			'id': 'creativ-overlay-iframe',
			'name': 'creativ-overlay-iframe',
			'src': 'javascript:void(0);',
			'frameborder': 1,
			'scrolling': 'no'
		}).setStyles({
			'position': 'absolute',
			'top': 0,
			'left': 0,
			'width': '100%',
			'height': '100%',
			'filter': 'progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)',
			'opacity': 0,
			'zIndex': 1
		}).inject(this.container);
*/
		this.overlay = new Element('div').setProperty('id', 'creativ-overlay').setStyles({
			position: 'absolute',
			left: '0px',
			top: '0px',
			width: '100%',
			height: '100%',
			zIndex: 2,
			backgroundColor: this.options.colour
		}).inject(this.container);
		
		var myCoords = this.options.container.getCoordinates(); 
		this.overlayContent = new Element('div').setProperty('id', 'creativ-overlay-content').addClass('creativ-overlay-content').setStyles({
			position: 'absolute',
			left: ((myCoords.width-300)/2)+'px',
			top: ((myCoords.height-75)/2)+'px',
			width: '300px',
			height: '75px',
			zIndex: 2
		}).inject(this.options.container);//.set('html', '<table width="300" height="75"><tr><td width="50" align="center" valign="middle"><img src="/assets/CreativMootoolsPlugin/images/ajax-loader.gif" border="0" /></td><td valign="middle">' + this.options.message + '</td></tr></table>');

		this.container.addEvent('click', function(){
			this.options.onClick();
		}.bind(this));
		
		this.fade = new Fx.Morph(this.container, {duration:250}).set({opacity: 0});
		this.fade2 = new Fx.Morph(this.overlayContent, {duration:250}).set({opacity: 0});

		this.position();
		
		window.addEvent('resize', this.position.bind(this));
	},
	
	setMessage: function(message) {
		this.options.message = message;
	},
	
	position: function(){ 
		if(this.options.container == document.body){ 
			var h = window.getScrollHeight()+'px'; 
			this.container.setStyles({top: '0px', height: h}); 
		}else{ 
			var myCoords = this.options.container.getCoordinates(); 
			this.container.setStyles({
				top: myCoords.top+'px', 
				height: myCoords.height+'px', 
				left: myCoords.left+'px', 
				width: myCoords.width+'px'
			}); 
		} 
/*
		var myCoords = this.options.container.getCoordinates(); 
		this.overlayContent = $('creativ-overlay-content').setStyles({
			left: ((myCoords.width-300)/2)+'px',
			top: (window.getScrollHeight()+((myCoords.height-75)/2))+'px'
		});
*/
	},
	
	show: function(message){
		if (typeof message != 'undefined') {
			Creativ.overlay.setMessage(message);
		}
		this.overlayContent.set('html', '<table width="300" height="75"><tr><td width="50" align="center" valign="middle"><img src="/assets/CreativMootoolsPlugin/images/ajax-loader.gif" border="0" /></td><td valign="middle">' + this.options.message + '</td></tr></table>');
/*
		this.fade.start({'opacity':[0,this.options.opacity], 'visibility':'visible'});
		this.fade2.start({'opacity':[0,1], 'visibility':'visible'});
*/
	},
	
	hide: function(){
/*
		this.fade.start({'opacity':[this.options.opacity, 0], 'visibility':'hidden'});
		this.fade2.start({'opacity':[1,0], 'visibility':'hidden'});
*/
	}
	
});
