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);});	
	}
}

var gm_latlng = new GLatLngBounds();
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;
}