/**
* Function : dump()
* Arguments: The data - array,hash(associative array),object
*    The level - OPTIONAL
* Returns  : The textual representation of the array.
* This function was inspired by the print_r function of PHP.
* This will accept some data as the argument and return a
* text that will be a more readable version of the
* array/hash/object that is given.
*/
function dump(arr,level) {
	var dumped_text = "";
	if(!level) level = 0;
	
	//The padding given at the beginning of the line.
	var level_padding = "";
	for(var j=0;j<level+1;j++) level_padding += "    ";
	
	if(typeof(arr) == 'object') { //Array/Hashes/Objects 
		for(var item in arr) {
			var value = arr[item];
			
			if(typeof(value) == 'object') { //If it is an array,
				dumped_text += level_padding + "'" + item + "' ...\n";
				dumped_text += dump(value,level+1);
			} else {
				dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
			}
		}
	} else { //Stings/Chars/Numbers etc.
		dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
	}
	return dumped_text;
}
function str_repeat(str, repeat) {
  var output = '';
  for (var i = 0; i < repeat; i++) {
    output += str;
  }
  return output;
}
var MAX_DEPTH = 10;
function print_r(obj, indent, depth) {
  var ws = '    ';
  var output = '';
  indent = (!indent) ? 0 : indent;
  depth = (!depth) ? 0 : depth;
  if (depth > MAX_DEPTH) {
    return str_repeat(ws, indent) + '*Maximum Depth Reached*\n';
  }
  if (typeof(obj) == "object") {
    output += (indent == 0) ? typeof(obj) + '\n(\n' : '';
    indent++;
    var child = '';
    for (var key in obj) {
      try {
        child = obj[key];
      } catch (e) {
        child = '*Unable To Evaluate*';
      }
      output += str_repeat(ws, indent) + '['+key+'] => ';
      if (typeof(child) == "object") {
        indent++;
        output += typeof(child) + '\n';
        output += str_repeat(ws, indent) + '(\n';
        output += print_r(child, indent, depth+1);
        output += str_repeat(ws, indent) + ')\n';
        indent--;
      } else {
        output += child + '\n';
      }
    }
    indent--;
    output += (indent == 0) ? ')\n' : '';
    return output;
  } else {
    return str_repeat(ws, indent) + obj + '\n';
  }
}


var BBC = {
	// Replaces the currently selected text with the passed text.
	//function replaceText(text, textarea){
	replaceText: function(text) {
		var textarea = document.forms['post'].elements['form_text'];
		if (typeof(textarea.caretPos) != "undefined" && textarea.createTextRange){ // Attempt to create a text range (IE).
			var caretPos = textarea.caretPos;
	
			caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? text + ' ' : text;
			caretPos.select();
		}else if (typeof(textarea.selectionStart) != "undefined"){ // Mozilla text range replace.
			var begin = textarea.value.substr(0, textarea.selectionStart);
			var end = textarea.value.substr(textarea.selectionEnd);
			var scrollPos = textarea.scrollTop;
	
			textarea.value = begin + text + end;
	
			if (textarea.setSelectionRange){
				textarea.focus();
				textarea.setSelectionRange(begin.length + text.length, begin.length + text.length);
			}
			textarea.scrollTop = scrollPos;
		}else{ // Just put it on the end.
			textarea.value += text;
			textarea.focus(textarea.value.length - 1);
		}
	},
	
	// Surrounds the selected text with text1 and text2.
	//function surroundText(text1, text2, textarea) {
	surroundText: function(text1, text2) {
		var textarea = document.forms['post'].elements['form_text'];
		if (typeof(textarea.caretPos) != "undefined" && textarea.createTextRange) {// Can a text range be created?
			var caretPos = textarea.caretPos;
	
			caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? text1 + caretPos.text + text2 + ' ' : text1 + caretPos.text + text2;
			caretPos.select();
		}else if (typeof(textarea.selectionStart) != "undefined") { // Mozilla text range wrap.
			var begin = textarea.value.substr(0, textarea.selectionStart);
			var selection = textarea.value.substr(textarea.selectionStart, textarea.selectionEnd - textarea.selectionStart);
			var end = textarea.value.substr(textarea.selectionEnd);
			var newCursorPos = textarea.selectionStart;
			var scrollPos = textarea.scrollTop;
	
			textarea.value = begin + text1 + selection + text2 + end;
	
			if (textarea.setSelectionRange) {
				if (selection.length == 0)
					textarea.setSelectionRange(newCursorPos + text1.length, newCursorPos + text1.length);
				else
					textarea.setSelectionRange(newCursorPos, newCursorPos + text1.length + selection.length + text2.length);
				textarea.focus();
			}
			textarea.scrollTop = scrollPos;
		}else{ // Just put them on the end, then.
			textarea.value += text1 + text2;
			textarea.focus(textarea.value.length - 1);
		}
	}
	
}

// Definition of the Class Site
var Utilitaries = new Class ({
	start: function(){
		Site.open_ext_link();
		Site.dynamiseNav();
		Site.dynamiseGallery();
		if(document.forms['post']) { 
			if     (document.forms['post'].elements['form_name']) { document.forms['post'].elements['form_name'].focus(); }
			else if(document.forms['post'].elements['form_email']) { document.forms['post'].elements['form_email'].focus(); }
		}
	},
	open_ext_link: function() {
		var links = $$('a');
		links.each(function(el, i) {
			if(el.hasClass('target_blank')) {
				el.title += " - Will open in a new window - "
				el.addEvent('click', function(e){
					e = new Event(e).stop();
					window.open(this.href);
				});
			}
		});
	},
	dynamiseNav: function(){
		var CSSelements = 'div#naviguation ul li a';
		var sideblocks = $$(CSSelements);
		
		sideblocks.each(function(el, i){
			var first = el.getFirst();
//			if (!first || first.getTag() != 'a') return;
	
			var overfxs = new Fx.Styles(el, {wait: false, duration: 250, transition: Fx.Transitions.quadOut});
			
//			var fromcolor = el.getStyle('color');
//			var frombgcolor = el.getStyle('background-color');
			var frompadding = el.getStyle('padding');
			
//			var tocolor = first.getStyle('color');
//			var tobgcolor = first.getStyle('background-color');
//			var topadding = first.getStyle('padding');
			var topadding = '0 0 0 10px';
			
			el.mouseouted = true;
			el.addEvent('mouseenter', function(e){
				overfxs.start({
//					'color': tocolor,
//					'background-color': tobgcolor,
					'padding': topadding
				});
			});
			el.addEvent('mouseleave', function(e){
				overfxs.start({
//					'color': fromcolor,
//					'background-color': frombgcolor,
					'padding': frompadding
				});
			});
		}, this);
	},
	dynamiseGallery: function(){
		var CSSelements = 'div#uploaded_items ul#gallery li a';
		var sideblocks = $$(CSSelements);
		
		sideblocks.each(function(el, i){
			el.setOpacity(0.99);
			var overfxs = new Fx.Style(el, 'opacity', {wait: false, duration: 250, transition: Fx.Transitions.quadOut});
			
			el.mouseouted = true;
			el.addEvent('mouseenter', function(e){
				overfxs.start(0.99, 0.5);
			});
			el.addEvent('mouseleave', function(e){
				overfxs.start(0.5, 0.99);
			});
		}, this);
	},
	// Fonction qui vrifie les champs du formulaire d'envoi d'Emails
	validateForm: function() {
		
		var warning = "";
		var first = false;
		
		var form = document.forms['post'];
		/* Page contact */
		if (form.elements['form_Email'] && ((form.elements['form_Email'].value.indexOf("@") < 0) || (form.elements['form_Email'].value.indexOf(".") < 3))) {
		// il faut au moins un caractre, un "@", au moins un caractre puis un point.
			warning = warning + "- une adresse Email valide.\n";
			if(!first) first = form.elements['form_Email'];
		}
		if (form.elements['form_Sujet'] && form.elements['form_Sujet'].value.length == 0) {
			warning = warning + "- un sujet.\n";
			if(!first) first = form.elements['form_Sujet'];
		}
		if (form.elements['form_Message'] && form.elements['form_Message'].value.length == 0) {
			warning = warning + "- un message.\n";
			if(!first) first = form.elements['form_Message'];
		}
		/* Page contact */
		
		if (form.elements['form_name'] && form.elements['form_name'].value.length == 0) {
			warning = warning + "- votre nom.\n";
			first = form.elements['form_name'];
		}
		if (form.elements['form_email'] && ((form.elements['form_email'].value.indexOf("@") < 0) || (form.elements['form_email'].value.lastIndexOf(".") < 3))) {
		// il faut au moins un caractre, un "@", au moins un caractre puis un point.
		// if (!form.elements['email'].value.match("[a-zA-Z0-9_\.]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$")) {
			warning = warning + "- une adresse Email valide.\n";
			if(!first) first = form.elements['form_email'];
		}
		if (form.elements['form_subj'] && form.elements['form_subj'].value.length == 0) {
			warning = warning + "- un sujet.\n";
			if(!first) first = form.elements['form_subj'];
		}
		if (form.elements['form_text'] && form.elements['form_text'].value.length == 0) {
			warning = warning + "- un commentaire.\n";
			if(!first) first = form.elements['form_text'];
		}
		if (form.elements['form_addr'] && form.elements['form_addr'].value.length == 0) {
			warning = warning + "- votre adresse.\n";
			if(!first) first = form.elements['form_commande'];
		}
		if (form.elements['form_npa'] && form.elements['form_npa'].value.length == 0) {
			warning = warning + "- votre numro postal.\n";
			if(!first) first = form.elements['form_npa'];
		}
		if (form.elements['form_state'] && form.elements['form_state'].value.length == 0) {
			warning = warning + "- votre localit.\n";
			if(!first) first = form.elements['form_state'];
		}
	
		if (form.elements['form_captcha'] && form.elements['form_captcha'].value != document.getElementById("gotcha-captcha").alt) {
			warning = warning + "- le code sur l'image.\n";
			if(!first) first = form.elements['form_captcha'];
		}
		
		if (warning != "") {
			warning = "Veuillez entrer:\n" + warning;
			first.select();
			alert(warning);
			return false;
		}else{
			return true;
		}
	}
});

var Site = new Utilitaries();
window.addEvent('domready', Site.start);