var uriBase;
var basePath;
var convertUrl;
var searchConvertUrlRewrite;
var convertUrlRewrite;
var convertUrlReverse;
var Console;
var myConsole;
var calcURIs;
var log;
window.addEvent('domready', function() {

	/**
	 * The console function
	 * 	Used to log in firebug
	 */
	Console = new Class({
		log: function(text){
			// if ($defined(window.console)) {
				// console.log(text);
			// }
		}
	});
	myConsole = new Console();

	log = function(msg) {
	  if (typeof console != 'undefined' && typeof console.log == 'function') console.log (msg);
	};




	/**
	 * Les chemins
	 */
	calcURIs = function(lang) {
		uriBase = new URI($('baseURL').get('value'));
		basePath = uriBase.toString()+lang+'/';
	};
	calcURIs($('lang').get('value'));

	/**
	 * Converti une url suivant son type
	 */
	convertUrl = function(url) {
		if (url.contains('=')) {
			return convertUrlRewrite(url);
		} else {
			return convertUrlReverse(url);
		}
	};

	/**
	 * Convert the url for URL rewriting
	 *  data1=4&data2=5 give data1-4,data2-5
	 */
	convertUrlRewrite = function(url) {
		var query = url;
		if (query == '') {
			return url;
		}
		var datas = new Hash(query.parseQueryString(false, false));
		var newDatas = '';
		var first = true;
		datas.each(function(value, key){

			if (!first) {
				newDatas += ',';
			} else {
				first = false;
			}

			if ($type(value) == 'object') {
				var myVal = '';
				value = new Hash(value);
				var firstLoop = true;
				value.each(function(el, k) {
					if ($type(el) == 'object') {
						el = new Hash(el);
						el.each(function(element, myKey) {
							if (firstLoop) {
								firstLoop = false;
							} else {
								myVal += ',';
							}
							myVal += key;
							myVal += '['+k+']';
							myVal += '['+myKey+']-'+element;
						});
					} else {
						if (firstLoop) {
							firstLoop = false;
						} else {
							myVal += ',';
						}
						myVal += key;
						myVal += '['+k+']-'+el;
					}
				});
				newDatas += myVal;

			} else {
				newDatas += key+'-'+value;
			}

		});
		return newDatas;
	};

	/**
	 * Same as above, but for search URL
	 */
	searchConvertUrlRewrite = function (data) {
	  if (data == null || data == '') return '';
	  var datas = new Hash(data.parseQueryString(false, false));
	  var r = ''; var first = true;

	  //log (datas);

    datas.each (function(value, key){
      if (!first) {
        r += ',';
      } else {
        first = false;
      }

      if ($type(value) == 'array') {
        var concatValue = ''; var first2 = true;
        $each(value[0],function(value2, key2){
          if (!first2){
            concatValue += ':';
          } else {
            first2 = false;
          }
          concatValue += key2;
        });
        r += key+'-'+concatValue;
      } else if ($type(value) == 'object') {
        var concatValue = ''; var first2 = true;
        $each(value,function(value2, key2){
          if (!first2){
            concatValue += ':';
          } else {
            first2 = false;
          }
          concatValue += key2;
        });
        r += key+'-'+concatValue;
      } else {
        r += key+'-'+value;
      }

    });

    log ("searchConvertUrlRewrite " + data);
    log ("into " + r);
    return r;
	};

	function convertHashToQuery() {

	}

	/**
	 * Convert the URL for URL rewriting
	 *  data1-4,data2-5 give data1=4&data2=5
	 */
	convertUrlReverse = function(url) {
		var myURL = url;
		var canSubstituteUnderscore = true;
		var finalUrl = '';
		for (var i=0 ; i<myURL.length ; i++) {
			if (url.charAt(i) == ',') {
				canSubstituteUnderscore = true;
				finalUrl += '&';
			} else if (url.charAt(i) == '-') {
				if (canSubstituteUnderscore) {
					canSubstituteUnderscore = false;
					finalUrl += '=';
				} else {
					finalUrl += url.charAt(i);
				}
			} else {
				finalUrl += url.charAt(i);
			}
		}

		return finalUrl;
	};


	// test
//	var urls = new Hash({
//		'1': '/',
//		'2': 'ok-1',
//		'3': 'ok-1,',
//		'4': 'ok-1-2',
//		'5': 'ok-1-2-',
//		'6': 'ok-2,test-3',
//		'7': 'ok-2,test-4-5-6',
//		'8': 'ok-2,test-4-5-,'
//	});
//	myConsole.log('URLS ! ');
//	urls.each(function(url) {
//		myConsole.log('START');
//		myConsole.log(url);
//		myConsole.log(convertUrlReverse(url));
//		myConsole.log('END');
//	})


	Element.implement ({

	  /**
	   * Centers vertically this Element in its parent element
	   * @param  Element parent Optional. The parent element, defaults to the first parent.
	   * @return Element This Element
	   */
	  centerVertically: function(parent){
	    parent = $(parent); if (!parent) parent = this.getParent();
	    var top = parent.getSize().y / 2 - this.getSize().y / 2;
	    if (parent.getStyle('position') == 'static')
	      parent.setStyle('position', 'relative');
	    if (this.getStyle('position') == 'static')
	      this.setStyle('position', 'absolute');
	    this.setStyle('top', top.toInt());
	    return this;
	  }

	});

});

