
function get_lookup_value(lookup)
{
	request = new Object ();
	request.handler = '/resources/engines/dataset/ajax/ds_lookup.php?';
	switch (lookup.mode)
	{
		case "single":
			target = document.forms[0].elements['F' + lookup.fieldid];
			request.search_value = escape(document.forms[0].elements['F' + lookup.dependancy.id].value);
			request.mode = 'single';
			request.source_field = lookup.fieldid;
		break;

		case "all":
			field_values = "";
			for (i = 0; i < lookup.fields.length; i ++)
			{
				id = lookup.fields[i];
				element = document.forms[0].elements['F' + id];

				switch (true)
				{
					case (element.length > 1 && element[0].type == "radio"):
						value = "";
						for (r = 0; r < element.length; r ++)
						{
							if (element[r].checked)
							{
								value = element[r].value;
								r = element.length;
							}
						}
					break;

					default:
						value = element.value;
					break;
				}

				field_values += 'i:' + lookup.fields[i] + ';s:' + value.length + ':"' + value + '";';
			}

			field_values = 'a:' + lookup.fields.length + ':{' + field_values + '}';
			request.mode = 'all';
			request.dataset = lookup.dataset;
			request.field_values = escape(field_values);
		break;
	}
	ajax(request, fill_lookup_value);
}

function fill_lookup_value(result)
{
	errors = new Array();
	result = eval('(' + result + ')');
	for (i = 0; i < result.length; i ++)
	{
		object = result[i];
		document.forms[0].elements['F' + object.id].value = unescape(object.value);
		if (object.error)
		{
			errors.push(object.name + " Returned " + object.error);
		}
	}

	if (errors.length > 0)
	{
		alert(errors.join("\n"));
	}
}

function gallery_image_upload(name, el, stored, limit)
{
	vext = 'zip,jpg,jpeg';
	error = GID(name + '_error');
	files = 0;
	stored = new Number(stored);

	file = document.createElement('input');
	file.type = 'file';
	file.name = name + '[]';
	file.onchange = function(){gallery_image_upload(name, this, stored, limit);}

	add_object = false;
	form_objects = document.forms[0].elements;
	for (o = 0; o < form_objects.length; o ++)
	{
		if (form_objects[o].name == name + '[]')
		{
			files ++;
			object = form_objects[o];
			object_error = name + '_gallery_error[' + o + ']';
			object_parent = object.parentNode;
			if (!GID(object_error))
			{
				span = document.createElement('span');
				span.className = 'errorcellhints';
				span.id = object_error;
				span.innerHTML = vext;
				object_parent.insertBefore(span, error);
				object_parent.insertBefore(document.createElement('br'), error);
			}

			object_error = GID(object_error);

			if (VEXT(object.value, vext))
			{
				add_object = true;
				file_path = object.value;
				path_split = false;
				if (file_path.indexOf('\\') > 0)
				{
					path_split = '\\';
				}

				if (file_path.indexOf('/') > 0)
				{
					path_split = '/';
				}

				if (path_split)
				{
					file_path = file_path.split(path_split);
					file_path = file_path[file_path.length - 1];
				}

				object_error.innerHTML = file_path;
				object_error.className = 'errorcellvalid';
			}
			else
			{

				object_parent.replaceChild(file, object);
				object_error.innerHTML = 'must be ' + vext;
				object_error.className = 'errorcellerror';
				add_object = false;
			}
		}
	}

	if (limit > 0 && (files + stored) >= limit)
	{
		add_object = false;
		error.innerHTML = ' limit reached';
	}

	if (add_object && el == object)
	{
		object_parent.insertBefore(file, error);
	}
}

function ds_gallery_manage()
{
	Sortable.create('ds_gallery_container', {
					tag: 'img',
					constraint: false,
					overlap: 'horizontal',
					containment: ['ds_gallery_container', 'ds_gallery_trash'],
					only: 'ds_gallery_image'
					});

	Droppables.add('ds_gallery_trash', {accept: 'ds_gallery_image', onDrop: ds_gallery_delete_image});
}

function ds_gallery_delete_image(dragged)
{
	if (confirm('Delete this image?'))
	{
		dragged.toggle('appear');
		ds_gallery.trash.push(dragged.alt);
	}
}

function ds_gallery_save()
{
	save = ds_gallery.save +
			'&images=' + Sortable.sequence('ds_gallery_container') +
			'&trash=' + ds_gallery.trash.join(',');

	location = save;
}

function ds_gallery_manual(dir, config)
{
	holder = GID('ds_gallery_image_' + config.key);
	index = GID('ds_gallery_index_' + config.key);

	active = new Number(holder.alt) + new Number(dir);
	images = config.images;

	if (active < 0)
	{
		active = images.length - 1;
	}

	if (active > images.length - 1)
	{
		active = 0;
	}

	holder.src = '/resources/phpscripts/showimage.php?' + images[active];
	holder.alt = active;
	index.innerHTML = active + 1;
}

/**/
var gm_status_codes=[];
function gm_load_status_codes()
{
	gm_status_codes[G_GEO_SUCCESS]            = "Success";
	gm_status_codes[G_GEO_MISSING_ADDRESS]    = "Missing Address";
	gm_status_codes[G_GEO_UNKNOWN_ADDRESS]    = "Unknown Address";
	gm_status_codes[G_GEO_UNAVAILABLE_ADDRESS]= "Unavailable Address";
	gm_status_codes[G_GEO_BAD_KEY]            = "Bad Key";
	gm_status_codes[G_GEO_TOO_MANY_QUERIES]   = "Too Many Queries";
	gm_status_codes[G_GEO_SERVER_ERROR]       = "Server Error";
}

function ds_load_inline_google_maps()
{
	if (!GBrowserIsCompatible())
	{
		return;
	}

	ds_load_map(0);
}

function ds_load_map(index)
{
	var geocode = new GClientGeocoder();
	var map = GID(google_maps[index].id);

	if (google_maps[index].map.coordinates)
	{
		gm_load_map({Status:{code:445}}, map, index);
	}
	else
	{
		geocode.getLocations(google_maps[index].map.address, function(result){gm_load_map(result, map, index);});
	}
}

function gm_load_map(result, el, index)
{
	if (gm_status_codes.length == 0)
	{
		gm_load_status_codes();
	}

	var loc = false;
	switch (result.Status.code)
	{
		case 200:
			loc = [result.Placemark[0].Point.coordinates[1], result.Placemark[0].Point.coordinates[0]];
		break;

		case 445:
			loc = google_maps[index].map.coordinates;
		break;

		default:
			el.innerHTML = 'map unavailable';
		break;
	}

	if (loc)
	{
		var map = new GMap2(el);
		var start = new GLatLng(loc[0], loc[1]);
		var zoom = google_maps[index].zoom;

		map.setCenter(start, zoom);
		marker = new GMarker(start, "here");
		map.addOverlay(marker);
	}

	index ++;
	if (google_maps[index])
	{
		ds_load_map(index);
	}
}

function ds_load_google_map_display()
{
	if (!GBrowserIsCompatible())
	{
		return;
	}
	var map = new GMap2(GID('google_map_display'));
	ds_load_point(0, map);
}

function ds_load_point(index, map)
{
	var geocode = new GClientGeocoder();

	if (google_map_points[index].map.coordinates)
	{
		gm_load_map_point({Status:{code:445}}, map, index);
	}
	else
	{
		address = google_map_points[index].map.address.replace(/\+/g, ' ');
		geocode.getLocations(address, function(result){gm_load_map_point(result, map, index);});
	}
}

try
{
  var gm_latlng = new GLatLngBounds();
}
catch (e)
{

}

function gm_load_map_point(result, map, index)
{
	if (gm_status_codes.length == 0)
	{
		gm_load_status_codes();
	}

	var loc = false;
	switch (result.Status.code)
	{
		case 200:
			loc = [result.Placemark[0].Point.coordinates[1], result.Placemark[0].Point.coordinates[0]];
		break;

		case 445:
			loc = google_map_points[index].map.coordinates;
		break;

		default:
			show_errors = getGetKey('show_errors');
			if (show_errors == 1)
			{
				error_code = gm_status_codes[result.Status.code]
				alert('Error Code: ' + error_code + '; Address: ' + google_map_points[index].map.address);
			}
		break;
	}

	if (loc)
	{
		start = new GLatLng(loc[0], loc[1]);
		gm_latlng.extend(start);
		g_marker = create_gmarker({latlng: start, html: google_map_points[index].html});
		map.addOverlay(g_marker);
	}

	index ++;
	if (google_map_points[index])
	{
		ds_load_point(index, map);
	}
	else
	{
		map.setCenter(gm_latlng.getCenter(), map.getBoundsZoomLevel(gm_latlng));
		map.setUIToDefault();

	}
}

function create_gmarker(marker)
{
    var gmarker = new GMarker(marker.latlng);
    GEvent.addListener(gmarker, 'click', function() {gmarker.openInfoWindowHtml(marker.html);});
    return gmarker;
}

function ds_calculate(left, operator, right, decimal, target)
{
	value = 'n/a';
	left = new Number(document.forms[0].elements['F' + left].value);
	right = new Number(document.forms[0].elements['F' + right].value);
	decimal = new Number(decimal);

	if (left != '' && right != '')
	{
		value = eval(left + ' ' + operator + ' ' + right);
		value = NUMBERFORMAT(value, decimal, decimal);
	}

	document.forms[0].elements['F' + target].value = value;
}

function ds_check_unique(field, record)
{
	request = new Object ();
	request.handler = '/resources/engines/dataset/ajax/ds_unique.php?';
	request.dataset = current_ds;
	request.value = document.forms[0].elements['F' + field].value;
	request.record = record;
	request.field = field;

	field = 'F' + field + '_unique';
	document.forms[0].elements[field].value = 0;
	ajax(request, ds_update_unique);
}

function ds_update_unique(result)
{
	result = eval('(' + result + ')');
	field = 'F' + result.field + '_unique';
	document.forms[0].elements[field].value = result.unique;
}

function ds_load_form_finished(result)
{
  GID('ds-form-cell').innerHTML = result;
}

function ds_loaded_form_submit(form)
{
  var valid = validate.submit(form);
  if (valid)
  {
    var request = {};
    request.config =
    {
      url: '/resources/engines/dataset/ajax/ds_form.php',
      post: true
    };
    request.data = {};

    for (var i = 0; i < form.elements.length; i ++)
    {
      request.data[form.elements[i].name] = form.elements[i].value;
    }

    ajax(request, ds_load_form_finished);
  }

  return false;
}

function ds_load_form_html(result)
{
  GID('ds-form-cell').innerHTML = result;
  form = GID('ds-form-cell').childNodes[1];
  $.scrollTo($('#ds-form-cell'));
}

function ds_cancel_form()
{
  if (GID('ds-form-cell'))
  {
    var row = GID('ds-form-cell').parentNode;
    row.parentNode.parentNode.deleteRow(row.rowIndex);
  }
}

function ds_load_form(config)
{
  ds_cancel_form();

  var link_id = config.link_id;
  var row = false;
  var p = GID(link_id).parentNode;
  while (!row)
  {
    if (p.nodeName == 'TR')
    {
      row = p;
    }
    else
    {
      p = p.parentNode;
    }
  }

  var table = row.parentNode.parentNode;
  row_index = row.rowIndex;

  var colspan = 0;
  for (var i = 0; i < row.cells.length; i ++)
  {
    colspan += row.cells[i].colSpan;
  }

  var tr = table.insertRow(row.rowIndex);
  var td = tr.insertCell(0);
  td.colSpan = colspan;
  td.className = row.cells[0].className;
  td.id = 'ds-form-cell';

  request = new Object();
	request.handler = '/resources/engines/dataset/ajax/ds_form.php?';
	request.dataset = config.dataset;
  request.field = config.field;
  request.value = config.value;
  request.table_id = table.id;
  request.row_index = row_index - 1;
  ajax(request, ds_load_form_html);
}

function ds_load_form_message(config)
{
  var table = GID(config.table);
  if (table.className == 'datasettabletable')
  {
    config.row ++;
  }
  var row = table.rows[config.row];

  var colspan = 0;
  for (var i = 0; i < row.cells.length; i ++)
  {
    colspan += row.cells[i].colSpan;
  }

  var tr = table.insertRow(config.row);
  var td = tr.insertCell(0);
  td.colSpan = colspan;
  td.className = row.cells[0].className;
  td.innerHTML = '<br>' + config.message;
  location = location;
}

function ds_module_magnify(id, config)
{
  if (config.mode == 'standard')
  {
    var options =
    {
      zoomrange: [3, 10],
      magnifiersize: [config.standard.width - 5, config.standard.height - 5],
      magnifierpos: config.standard.position,
      cursorshadecolor: 'white',
      cursorshadeopacity: 0.3,
      cursorshadeborder: '1px solid black',
      cursorshade: false
    }

    $('.image-magnify-' + id).each
    (
      function ()
      {
        options.largeimage = $(this).prop('href');
        $(this).children().addimagezoom(options);
      }
    );
  }

  /*
  if (config.mode == 'innerzoom')
  {
    $('.image-magnify-' + id).jqzoom
    (
      {
        zoomType: 'innerzoom',
        preloadImages: false
      }
    );
  }
  */

}

function dataset_search(form)
{
  var range = false;
  query = form.query.value;
  query += 'module[' + form.module.value + ']=';
  query += 'q:' + escape(form.q.value);

  for (var i = 0; i < form.elements.length; i ++)
  {
    var test_name = form.elements[i].name.split('');
    if (test_name[0] != 'f' || form.elements[i].value.length == 0)
    {
      continue;
    }

    var value = escape(form.elements[i].value);
    query += ',' + form.elements[i].name + ':' + value;
    range = true;
  }

  if (range)
  {
    for (var i = 0; i < form.range.length; i ++)
    {
      if (form.range[i].checked)
      {
        query += ',range:' + form.range[i].value;
      }
    }
  }

  location = query;
  return false;
}
