var domLoaded = false;
document.observe("dom:loaded", function() {
	domLoaded = true;
});

function inputsel(elem, focus)
{
	value = elem.title;
	if( focus == true )
	{
		if( elem.value == value )
			elem.value = "";
	}
	else
	{
		if( elem.value == "" )
			elem.value = value;
	}
}

function blockOpenClose(id, autoLoad)
{
	if (typeof(autoLoad) == "undefined") autoLoad = true;
	
	var bloc = $("bloc"+id).down("div.corps");
	var img = $("bloc"+id).down("div.edition").down("img.arrow");
	if( bloc.getStyle("display") == "none" ) {
		bloc.setStyle({display: 'block'});
		img.writeAttribute( {src: img.readAttribute('src').replace(/close/,"open") } );
		if( autoLoad && typeof(bloc.open) == "function" ) bloc.open();
	} else {
		bloc.setStyle({display: 'none'});
		img.writeAttribute( {src: img.readAttribute('src').replace(/open/,"close") } );
	}
	
	return false;
}

function loadBloc(id, user, params)
{
	if (typeof(params) == "undefined") params = {};
	var bloc = $("bloc"+id).down("div.corps");
	// Auto Open Block
	if( bloc.getStyle("display") == "none" ) {
		blockOpenClose(id, false);
	}
	
	// TEST : loader
	bloc.update('<div class="loader"><img src="/rsc/hn_pro/img/loading-bar-black.gif" alt="loading..."/></div>');
	
	var url = blocEditZoneUrl + user + '&zone=' + id;
	new Ajax.Request( url, {
		method: 'post',
		parameters: params,
		onSuccess: function(transport){
			var json = transport.responseText.evalJSON(true);
			if( typeof(json.CONTENT) != "undefined" )
			{
				bloc.update(json.CONTENT);
			}
			else
			{
				bloc.update(transport.responseText);
			}
		},
		onFailure: function(){ bloc.update('An error has occured...'); }
	});
	
	return false;
}

function initHLrow()
{
	if( domLoaded )
	{
		$$('tr.HLvice').each(function(n){ n.stopObserving('click'); });
		$$('tr.HLversa').each(function(n){ n.stopObserving('click'); });
		
		$$('tr.HLvice').each(function(n){ n.observe('click', hlRowClicked); });
		$$('tr.HLversa').each(function(n){ n.observe('click', hlRowClicked); });
	}
	else
	{
		document.observe("dom:loaded", function() { initHLrow(); });
	}
}

function hlRowClicked(event) {
	var elem = event.element();
	try
	{
		var link = elem.up("tr");
		if( typeof(link) != "undefined")
		{
			link = link.down(".rowlink");
		}
		if( typeof(link) != "undefined" )
		{
			if( link.hasAttribute("onclick") )
			{
				eval( link.readAttribute("onclick").replace(/return false;/,"") );
			}
			else
			{
				var url = link.readAttribute("href");
				if( url.substr(0, 1) == "#" )
				{
					window.location.hash = url;
				}
				else
				{
					window.location = url;
				}
			}
		}
	}
	catch(e) { }
}

function checkAll(name, checked)
{
	if(typeof(checked) == 'undefined') checked = true;
	$$('input[type=checkbox]').each(function(n){ if(n.name == name) n.checked = checked; });
}

/** block Edit Zone
 * elem : the element
 * user : the user id
 * id : the block id
 * edit : [ true/false ] ask for the edit mode
 * valid : form submission
 */
function blockEditZone(id, user, edit, valid, params)
{
	var bloc = $("bloc"+id).down("div.corps");
	var btn = false;
	try {
		btn = $("bloc"+id).down('.btn').firstDescendant();
		if( !$("bloc"+id).down('.btn', 1) ) {
			btn = false;
		}
	} catch(e) {}
	
	// Auto Open Block
	if( bloc.getStyle("display") == "none" ) {
		blockOpenClose(id, false);
	}

	var url = blocEditZoneUrl + user + '&zone=' + id;
	if( edit )
		url += '&edit';

	if( typeof(params) == "undefined" )
		params = {};
	
	if( valid )
	{
		//var inputs = bloc.getElementsByTagName('input');
		//var paramBlocks = $A(inputs).map(Element.extend);
		var paramBlocks = bloc.select('input');
		
		var data = params
		data = paramBlocks.inject(data, function(result, element) {
		  if (!element.disabled && element.name) {
			key = element.name; value = $(element).getValue();
			if (value != null && element.type != 'file' && (element.type != 'submit' || (!submitted &&
				submit !== false && (!submit || key == submit) && (submitted = true)))) {
			  if (key in result) {
				if (!Object.isArray(result[key])) result[key] = [result[key]];
				result[key].push(value);
			  }
			  else result[key] = value;
			}
		  }
		  return result;
		});
		
		paramBlocks = bloc.select('select');
		
		data = paramBlocks.inject(data, function(result, element) {
		  if (!element.disabled && element.name) {
			key = element.name; value = $(element).getValue();
			if (value != null) {
			  if (key in result) {
				if (!Object.isArray(result[key])) result[key] = [result[key]];
				result[key].push(value);
			  }
			  else result[key] = value;
			}
		  }
		  return result;
		});
		
		//var textareas = bloc.getElementsByTagName('textarea');
		//paramBlocks = $A(textareas).map(Element.extend);
		paramBlocks = bloc.select('textarea');
		
		data = paramBlocks.inject(data, function(result, element) {
		  if (!element.disabled && element.name) {
			key = element.name; value = $(element).getValue();
			if (value != null) {
			  if (key in result) {
				if (!Object.isArray(result[key])) result[key] = [result[key]];
				result[key].push(value);
			  }
			  else result[key] = value;
			}
		  }
		  return result;
		});
		
		params = data;
	}
	
	new Ajax.Request( url, {
		method: 'post',
		parameters: params,
		onSuccess: function(transport){
			var json = transport.responseText.evalJSON(true);
			if( typeof(json.VALIDATION) == 'undefined' || json.VALIDATION == "200" )
			{
				bloc.update(json.CONTENT);
				while( btn )
				{
					if( btn.getStyle("display") == "none" )
						btn.setStyle({display: 'inline'});
					else
						btn.setStyle({display: 'none'});
					btn = btn.next();
				}
			}
			else
			{
				FancyZoomBox.init();
				var el = $('bloc_error_msg_'+ id);
				if( !el ) {
					var html = '<div id="bloc_error_msg_'+ id +'" style="display:none;">'+ json.CONTENT +'</div>';
					bloc.insert(html);
				} else {
					el.update(json.CONTENT);
				}
				FancyZoomBox.show(0, 'bloc_error_msg_' + id, 0, 0);
			}
		},
		onFailure: function(){ bloc.update('An error has occured...'); }
	});
	
	return false;
}

function AjaxSearch(elem, frmName, destName)
{
	$("frm_loading").style.display = "";
	$("frm_failure").style.display = "none";
	$(elem).disabled = true;
	frm = $(frmName);
	arr = frm.getElements();
	
	url = "";
	
	var params = {}
	params = arr.inject(params, function(result, element) {
	  if (!element.disabled && element.name) {
		key = element.name; value = $(element).getValue();
		if (value != null && element.type != 'file' && (element.type != 'submit' || (!submitted &&
			submit !== false && (!submit || key == submit) && (submitted = true)))) {
		  if (key in result) {
			if (!Object.isArray(result[key])) result[key] = [result[key]];
			result[key].push(value);
		  }
		  else result[key] = value;
		}
		
		if(key == "form_url") {
			url = value;
		}
	  }
	  return result;
	});
	
	var query = {}
	query = arr.inject(query, function(result, element) {
	  if (!element.disabled && element.name) {
		key = element.name; 
		value = $(element).getValue();
		if (value != null && value != "" && element.type != 'file' && element.type != 'hidden' && (element.type != 'submit' || (!submitted &&
			submit !== false && (!submit || key == submit) && (submitted = true)))) {
		  if (key in result) {
			if (!Object.isArray(result[key])) result[key] = [result[key]];
			result[key].push(value);
		  }
		  else result[key] = value;
		}
		
		if(key == "form_url") {
			url = value;
		}
	  }
	  return result;
	});
	
	if( url != "" )
	{
		new Ajax.Request( url, {
			method: 'post',
			parameters: params,
			requestHeaders: {Accept: 'application/json'},
			onSuccess: function(transport){		
				var json = transport.responseText.evalJSON(true);
				$(elem).disabled = false;
				if( (typeof(json.REDIRECT) == 'undefined') || (json.REDIRECT == '') )
				{
					$(destName).update(json.CONTENT);
					document.title = json.TITLE;
					$("frm_loading").style.display = "none";
					window.location.hash = Object.toQueryString(query);
				}
				else
				{
					var redirect = json.REDIRECT;
					if( redirect.substring(0, 5) != "http:" )
					{
						if( redirect.substring(0, 1) != '/' ) redirect = '/' + redirect;
						window.location.href = window.location.protocol + '//' + window.location.host + redirect;
					}
					else
					{
						window.location.href = json.REDIRECT;
					}
				}
			},
			onFailure: function(){ 
				$(elem).disabled = false;
				$("frm_loading").style.display = "none";
				$("frm_failure").style.display = "";
			}
		});
	}
	else
	{
		$(elem).disabled = false; 
		$("frm_loading").style.display = "none";
		$("frm_failure").style.display = "";
	}
	
	return false;
}

/**
 * Mail management
 */
function autoSaveMail(id, userid)
{
	if( $('msg_compose_buttons') != null )
	{
		setTimeout("saveMail(" + id + "," + userid + ");", 10000 );
	}
}

function saveMail(id, userid)
{
	if( $('msg_compose_buttons') == null )
		return;
	
	$$('#msg_compose_buttons input').each( function(e) {
		e.disable = true;
	});
	$$('#msg_compose_buttons .loading').each( function(e) {
		e.style.display = "";
	});
	
	var bloc = $("bloc"+id).down("div.corps");
	var url = blocEditZoneUrl + userid + '&zone=' + id;
	
	params = {action: "autosave"};
	var paramBlocks = bloc.select('input');
	
	{
		var data = params
		data = paramBlocks.inject(data, function(result, element) {
			if (!element.disabled && element.name) {
				key = element.name; value = $(element).getValue();
				if (value != null && element.type != 'file' && (element.type != 'submit' || (!submitted &&
				submit !== false && (!submit || key == submit) && (submitted = true)))) {
					if (key in result) {
						if (!Object.isArray(result[key])) result[key] = [result[key]];
						result[key].push(value);
					}
					else result[key] = value;
				}
			}
			return result;
		});
		
		paramBlocks = bloc.select('select');
		
		data = paramBlocks.inject(data, function(result, element) {
			if (!element.disabled && element.name) {
				key = element.name; value = $(element).getValue();
				if (value != null) {
					if (key in result) {
						if (!Object.isArray(result[key])) result[key] = [result[key]];
						result[key].push(value);
					}
					else result[key] = value;
				}
			}
			return result;
		});
		
		paramBlocks = bloc.select('textarea');
		
		data = paramBlocks.inject(data, function(result, element) {
			if (!element.disabled && element.name) {
				key = element.name; value = $(element).getValue();
				if (value != null) {
					if (key in result) {
						if (!Object.isArray(result[key])) result[key] = [result[key]];
						result[key].push(value);
					}
					else result[key] = value;
				}
			}
			return result;
		});
		
		params = data;
	}
	
	new Ajax.Request( url, {
		method: 'post',
		parameters: params,
		onSuccess: function(transport){
			var json = transport.responseText.evalJSON(true);
			$('compose_msgid').value = json;
			$$('#msg_compose_buttons input').each( function(e) {
				e.disable = false;
			});
			$$('#msg_compose_buttons .loading').each( function(e) {
				e.style.display = "none";
			});
			setTimeout("autoSaveMail(" + id + "," + userid + ");", 1 );
		},
		onFailure: function(){
			$$('#msg_compose_buttons input').each( function(e) {
				e.disable = false;
			});
			$$('#msg_compose_buttons .loading').each( function(e) {
				e.style.display = "none";
			});
			alert("error");
		}
	});
}

/**
 * Tabs management
 */
function tabsSelect(id, num)
{
	var tabs = $(id);
	
	var e = tabs.down(".this");
	e.addClassName("e1");
	e.removeClassName("this");
	
	e = tabs.down("li");
	if( num > 1 )
	{
		e = e.next("li", num - 2 );
	}
	
	if( typeof(e) != "undefined" )
	{
		e.down("a").addClassName("this");
		e.down("a").removeClassName("e1");
	}
}

/**
 * Swap Images
 */
function swapImg(name, elem)
{
	dest = document.getElementById(name);
	dest.realImg = dest.src;
	dest.src = elem.src;
}
function unswapImg(name)
{
	dest = document.getElementById(name);
	dest.src = dest.realImg;
}

/**
 *
 */
function visibilitySwitch(id)
{
	var pub = $(id);
	if(pub.visible())
	{
		pub.fold();
	}
	else {
		Effect.SlideDown(pub);
		pub.setStyle({overflow: 'auto'}); // Opera fix
	}
	return false;
}