// Place your application-specific JavaScript functions and classes here
// This file is automatically included by javascript_include_tag :defaults



var LANG = 'fr';
if (document.location.toString().search(/lang=en/) > -1) LANG = 'en';

var EDIT_FORM_DIRTY = false

function edit_form_onchange(event)
{
	EDIT_FORM_DIRTY = true;
	$('dirty_status').update('*')
}

function edit_form_goto_page(url)
{
	if (EDIT_FORM_DIRTY)
	{
		if (confirm(LSTR['confirm_unsaved_record']))
		{
			document.location = url;
		}
	}
	else
	{
		document.location = url;
	}
}

function observe_form_change(form_id, exclude_ids)
{
	EDIT_FORM_DIRTY = false;
	fields = $(form_id).getElementsBySelector('input[type=text]', 'input[type=checkbox]', 'input[type=radio]', 'select', 'textarea');
	for (var i = 0; i < fields.length; i++)
	{
		if (exclude_ids && exclude_ids.indexOf(fields[i].id) == -1)
		{
			$(fields[i]).observe('change', edit_form_onchange);
		}
	}
}

function ValidationData()
{
	this.data = [];
	this.err_messages = [];
}

ValidationData.prototype =
{

	add_handler: function(field_id, friendly_name, validation_func)
	{
		this.data.push({field_id: field_id, friendly_name: friendly_name, validation_func: validation_func});
	},

	validates: function()
	{
		var valid = true;
		this.err_messages = [];

		for (var i = 0; i < this.data.length; i++)
		{
			var msg = this.data[i].validation_func(this.data[i].field_id)
			if (msg)
			{
				$(this.data[i].field_id).setStyle({border: 'solid 1px red'})
				valid = false;
				this.err_messages.push((this.data[i].friendly_name ? this.data[i].friendly_name : this.data[i].field_id) + ' ' + msg);
			}
			else
			{
				$(this.data[i].field_id).setStyle({border: null})
			}
		}

		if (!valid)
		{
			alert("ERREUR(S) DANS LE FORMULAIRE\n\n" + this.err_messages.join("\n"));
		}

		return valid;
	}
}

function validates_form(validation_data)
{
	return validation_data.validates();
}

function validates_presence_of(field_id)
{
	var field = $(field_id);
	if (field && (field.value == null || field.value.length == 0 || field.value == '0'))
	{
		return "ne peut pas être vide";
	}
	return null
}

function validates_date_format(field_id)
{
	if ($(field_id).value.search(/^\s*\d{4}[\/-]\d{1,2}[\/-]\d{1,2}\s*$/) == -1)
	{
		return "doit avoir le format AAAA-MM-JJ"
	}
	return null;
}

function validate_presence_of()
{
	var fields = arguments
	for (var i = 0; i < fields.length; i++)
	{
		if (typeof(fields[i]) == 'object' && typeof(fields[i].length) == 'number' && fields[i].length == 2)
		{
			var field = $(fields[i][0]);
			var name = fields[i][1];
		}
		else
		{
			var field = $(fields[i]);
			var name = fields[i];
		}
		if (field.value == null || field.value.length == 0 || field.value == '0')
		{
			alert(name + " ne peut pas être vide");
			return false;
		}
	}
	return true;
}

function validate_presence_of_one_of()
{
	var fields = arguments;
	var names = [];
	for (var i = 0; i < fields.length; i++)
	{
		if (typeof(fields[i]) == 'object' && typeof(fields[i].length) == 'number' && fields[i].length == 2)
		{
			var field = $(fields[i][0]);
			var name = fields[i][1];
		}
		else
		{
			var field = $(fields[i]);
			var name = fields[i];
		}
		if (field.value != null && field.value.length > 0 && field.value != '0')
		{
			return true;
		}
		else
		{
			names.push(name);
		}
	}
	alert("L'un des éléments suivants doit être présent : " + names.join(', '));
	return false;
}

function validates_add_title_form()
{
	if ($('title_id') == null && !validate_presence_of(['title', "Le titre"])) return false;
	return validate_presence_of_one_of(['title', "nouveau titre"], ['title_id', "titre existant"]);
}

function select_update_associated_link(sel, link_id, param_name)
{
	var link = $(link_id)
	if (param_name == null) param_name = sel.id
	var url = link.href;
	if (param_name == 'id')
	{
		var hp = ''
		var matches = url.match(/^(https*:\/\/[^\/]+)/)
		if (matches) {
			hp = matches[1];
			url = url.replace(/^https*:\/\/[^\/]+/, '')
		}
		url = url.replace(/\/(\d+)(.*)$/, '/' + sel.value + '$2');
		url = hp + url;
	}
	else
	{
		var params = url.toQueryParams();
		params[param_name] = sel.value;
		url = url.replace(/\?[^#]+(#*.*)$/, '?' + Hash.toQueryString(params) + '$1');
		url = url.replace(/%2b/ig, '+');	// replace code %2b with + (bug in href assignement below)
	}
	link.href = url;
}

function select_update_link(link_id, url)
{
	$(link_id).href = url
}

function search_type_changed(sel, disabled_values)
{
	//console.log('search_type_changed hit');
	var disabled = false
	for (var i = 0; i < disabled_values.length; i++)
	{
		if (sel.value == disabled_values[i])
		{
			disabled = true
			break;
		}
	}
	//console.log('search_type_changed new value for fields: ' + disabled);
	var fields = ['search_option']
	for (var i = 0; i < fields.length; i++)
	{
		$(fields[i]).disabled = disabled;
		//console.log('search_type_changed ' + (disabled ? 'disabling' : 'enabling') + ' field ' + fields[i]);
	}
}

function open_win_center(h, w, url, win_name)
{
	if (win_name == null) win_name = "new";
	var y = (window.screen.availHeight - h) / 2;
	var x = (window.screen.availWidth - w) / 2;
	var params = "scrollbars=yes,resizable=yes,width=" + w + ",height=" + h + ",top=" + y + ",left=" + x;

	var win = window.open(url, win_name, params);
	win.focus();
}

function name_expr_update_element(element, selected_element)
{
	var last = selected_element.readAttribute('last');
	var first = selected_element.readAttribute('first');
	var name = last + (first && first.length > 0 ? ', ' : '') + first;
	element.value = name;
	$($('autocomplete_field_id').value).value = selected_element.readAttribute('name_id');
	$($('new_indicator_id').value).style.display = "none";
}

function on_update_choices_name_expr(choices, element)
{
	$($('autocomplete_field_id').value).value = "0";
	if (element.value && element.value.length > 0)
	{
		$($('new_indicator_id').value).style.display = "";
	}
	else
	{
		$($('new_indicator_id').value).style.display = "none";
	}
	return choices;
}

function cited_name_expr_update_element(element, selected_element)
{
	var last = selected_element.readAttribute('last');
	var first = selected_element.readAttribute('first');
	var name = last + (first && first.length > 0 ? ', ' : '') + first;
	element.value = name;
	$($('autocomplete_field_id').value).value = selected_element.readAttribute('name_id');
	$($('new_indicator_id').value).style.display = "none";
	//$('cited_name').disabled = true;
	//$('normalized_name').disabled = true;
}

function on_update_choices_cited_name_expr(choices, element)
{
	$($('autocomplete_field_id').value).value = "0";
	if (element.value && element.value.length > 0)
	{
		$($('new_indicator_id').value).style.display = "";
		//$('cited_name').disabled = false;
		//$('normalized_name').disabled = false;
	}
	else
	{
		$($('new_indicator_id').value).style.display = "none";
		//$('cited_name').disabled = true;
		//$('normalized_name').disabled = true;
	}
	return choices;
}

function cited_title_expr_update_element(element, selected_element)
{
	element.value = selected_element.readAttribute('title');
	$($('autocomplete_field_id').value).value = selected_element.readAttribute('title_id');
	$($('new_indicator_id').value).style.display = "none";
	var new_fields = $('new_fields').value.split(/,/);
	for (var i = 0; i < new_fields.length; i++)
	{
		$(new_fields[i]).disabled = true;
	}
}

function on_update_choices_cited_title_expr(choices, element)
{
	var new_fields = $('new_fields').value.split(/,/);
	var new_fields_disabled;
	$($('autocomplete_field_id').value).value = "0";
	if (element.value && element.value.length > 0)
	{
		$($('new_indicator_id').value).style.display = "";
		new_fields_disabled = false;
	}
	else
	{
		$($('new_indicator_id').value).style.display = "none";
		new_fields_disabled = true;
	}
	for (var i = 0; i < new_fields.length; i++)
	{
		$(new_fields[i]).disabled = new_fields_disabled;
	}

	return choices;
}

function device_expr_update_element(element, selected_element)
{
	var device = selected_element.readAttribute('device');
	element.value = device;
	$($('autocomplete_field_id').value).value = selected_element.readAttribute('device_id');
	$($('new_indicator_id').value).style.display = "none";
}

function on_update_choices_device_expr(choices, element)
{
	$($('autocomplete_field_id').value).value = "0";
	if (element.value && element.value.length > 0)
	{
		$($('new_indicator_id').value).style.display = "";
	}
	else
	{
		$($('new_indicator_id').value).style.display = "none";
	}
	return choices;
}

function stop_notice_status_blink()
{
	$('flash_notice').style.visibility = 'hidden';
	$('flash_notice').style.textDecoration = 'none';
}

function get_random_range(min, max)
{
	return Math.floor(Math.random() * (max - min + 1)) + min;
}

/*
BrowseImages

data should be of the following stucture:

data = [
	{
		src: 'file',
		url: 'url',
		caption: 'test 1',
		desc: 'test 1'
	}
];

*/

function BrowseImages(data)
{
	this.data = data;
	this.idx = 0;
}

BrowseImages.prototype =
{
	next_img: function(direction, img_id, href_id, caption_id, desc_id)
	{
		if (!isNaN(direction))
		{
			this.idx = parseInt(direction);
		}
		else if (direction == 'next')
		{
			if (this.idx >= (this.data.length - 1))
			{
				this.idx = 0;
			}
			else
			{
				this.idx += 1;
			}
		}
		else if (direction == 'prev')
		{
			if (this.idx > 0)
			{
				this.idx -= 1;
			}
			else
			{
				this.idx = this.data.length - 1;
			}
		}
		else	// random
		{
			this.idx = get_random_range(0, this.data.length - 1);
		}

		$(img_id).src = this.data[this.idx].src;
		if (this.data[this.idx].caption != null)
		{
			$(img_id).alt = this.data[this.idx].caption.replace('<i>', '').replace('</i>', '').replace('<b>', '').replace('</b>', '');
		}

		if (href_id != null && $(href_id) && this.data[this.idx].url != null)
		{
			$(href_id).href = this.data[this.idx].url;
		}

		if (caption_id != null && $(caption_id) && this.data[this.idx].caption != null)
		{
			$(caption_id).update(this.data[this.idx].caption);
		}

		if (desc_id != null && $(desc_id) && this.data[this.idx].desc != null)
		{
			$(desc_id).update(this.data[this.idx].desc);
		}
	}
}

// FLASH FUNCTIONS

function draw_movie(dom_id, flash_movie, flv_movie, w, h, frame_idx, lang, auto_play, params)
{
	if (w == null) w = 550;
	if (h == null) h = 414;
	if (frame_idx == null) frame_idx = 0;
	if (lang == null) lang = 'fr';
	if (auto_play)
	{
		auto_play = '1';
	}
	else
	{
		auto_play = '0';
	}

	var flashvars = '';
	if (params)
	{
		var data = [];
		for (var p in params)
		{
			data.push(p + '=' + encodeURI(params[p]));
		}
		flashvars = data.join('&');
	}
	if (flashvars.length > 0) flashvars += '&';

	var version;
	if (DetectFlashVer(8, 0, 0))
	{
		flash_movie += '_f8';
		flv_movie += '_f8';
		version = 8;
	}
	else
	{
		flash_movie += '_f7';
		flv_movie += '_f7';
		version = 7;
	}


	AC_FL_RunContent(
		'codebase', 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=' + version + ',0,0,0',
		'width', w,
		'height', h,
		'src', '/flash/' + flash_movie,
		'quality', 'high',
		'pluginspage', 'http://www.macromedia.com/go/getflashplayer',
		'align', 'middle',
		'play', 'true',
		'loop', 'true',
		'scale', 'showall',
		'wmode', 'window',
		'devicefont', 'false',
		'id', dom_id,
		'bgcolor', '#ffffff',
		'name', 'movies',
		'menu', 'true',
		'allowFullScreen', 'false',
		'allowScriptAccess','sameDomain',
		'movie', '/flash/' + flash_movie,
		'salign', '',
		'flashvars', flashvars + "flv_movie=" + flv_movie + '.flv&auto_play=' + auto_play + '&frame_idx=' + frame_idx + '&lang=' + lang
	);
}

function draw_flash(id, flash_movie, w, h, params)
{
	var version = DetectFlashVer2(8, 0, 0) ? 8 : 7;
	var flashvars = '';
	if (params)
	{
		var data = [];
		for (var p in params)
		{
			data.push(p + '=' + encodeURI(params[p]));
		}
		flashvars = data.join('&');
	}

return AC_FL_RunContent2(
		'codebase', 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=' + version + ',0,0,0',
		'width', w,
		'height', h,
		'src', '/flash/' + flash_movie,
		'quality', 'high',
		'pluginspage', 'http://www.macromedia.com/go/getflashplayer',
		'align', 'middle',
		'play', 'true',
		'loop', 'true',
		'scale', 'showall',
		'wmode', 'window',
		'devicefont', 'false',
		'id', id,
		'name', 'movies',
		'menu', 'true',
		'allowFullScreen', 'false',
		'allowScriptAccess','sameDomain',
		'movie', '/flash/' + flash_movie,
		'salign', '',
		'flashvars', flashvars  
	);
}


function alter_style(el, style_id, value)
{
	el.style[style_id] = value;
}
