var __dataform_element_id;

function __dataform_dependency(field, value, ajax_call, form_name, params, delim)
{
	var f = document.getElementById("dataform_field_"+field);
	var fdata = document.getElementById("dataform_dependency_"+field).getAttribute("value").split(",");

	if(fdata[1]!="")
		var elem = document.getElementById(fdata[1]);

	//checking if multiple dependencies exist
	var dValues = new Array();
	if(fdata[0].indexOf(delim) != -1)
	{
		dValues = fdata[0].split(delim);
	}
	else
	{
		dValues[0] = fdata[0];
	}	
	
	for(var valPos=0; valPos < dValues.length; valPos++)
	{
		var dValue = dValues[valPos];
		if(dValue == value || (dValues.length == 1 && fdata[0] == "*"))
		{
			if(fdata[2] == "true")
			{
				//reload the element via xmlrpc
				var fields = document.forms[form_name];
				var nfields = new Object();
				for(var i=0; i<fields.length; i++)
				{	
					//TODO: add all other special types here
					if(fields[i].type=="radio"||fields[i].type=="checkbox")
					{
						if(fields[i].checked)
							nfields[fields[i].name] = fields[i].value;
					}
					else 
						nfields[fields[i].name] = fields[i].value;
				}
				nfields['__SUBMIT_TYPE'] = "RELOAD_FIELD";
				nfields['__RELOAD_FIELDNAME'] = field;
				nfields['__RELOAD_VALUE'] = value;
				
				__dataform_element_id = field;
				
				var xclient = new xmlrpc_client("xmlremote", document.location.hostname);
				//xclient.debug = true;
				xclient.addParam(ajax_call);
				xclient.addParam(nfields);
				xclient.addParam(params);
				
				//xclient.debug = true;
				xclient.call("ajaxformremote.call", __dataform_reload_field_handler);
			}
			
			if(fdata[1] != "")
				elem.style.display = document.all ? "block" : "TABLE-ROW";//FIREFOX doesn't like block instead prefers TABLE-ROW, but ie doesn't support TABLE-ROW
			
			if(f != null)
				f.style.visibility = "visible";
				
			//removing field from hidden_dependent_fields list (so dataform knows this value is supposed to be submitted)
			var hidDepFields = document.getElementById('hidden_dependent_fields');
			if(hidDepFields != null && hidDepFields.value.indexOf(field) != -1)
			{
				var replaceVal = delim + field;
				var tmpVal = hidDepFields.value.replace(replaceVal, "");
				hidDepFields.value = tmpVal;
			}
			break; // ending once a match is found		
		}
		else
		{
			if(fdata[1]!="")
				elem.style.display = "none";
			
			if(f!=null)
				f.style.visibility = "hidden";
				
			//adding field to hidden_dependent_fields so dataform knows this doesn't need a value (because it is hidden)
			var hidDepFields = document.getElementById('hidden_dependent_fields');
			if(hidDepFields != null && hidDepFields.value.indexOf(field) == -1)
			{
				hidDepFields.value += delim + field;
			}
		}
	}
}

function __dataform_reload_field_handler(val)
{
	var field_div = document.getElementById("dataform_field_div_"+__dataform_element_id);
	field_div.innerHTML = val;
}

function __dataform_on_submit(id)
{	
	var theform = document.getElementById(id);
	
	if (document.all || document.getElementById)
	{
		for (i = 0; i < theform.length; i++) 
		{
			var tempobj = theform.elements[i];
			
			if(tempobj.tagName == 'INPUT' )
			{
				idx = parseInt(tempobj.id.indexOf('_final_tags'));
				if(idx > 0)
				{
					tag_field_id = tempobj.id.substring(0,idx);
					tempobj.value = collectTags(tag_field_id);			
				}
				else if (tempobj.type.toLowerCase() == "submit")
				{
					tempobj.disabled = true;
					tempobj.value = "Processing...";
				}
			}
			else if(tempobj.tagName == "SELECT" && tempobj.disabled)
			{
				//enabling disabled select fields so that current value is submitted w/ form
				// (we use 'disabled' when we want to make the field read-only)
				tempobj.disabled = false;
			}
		}
	}
	return false;
}


// Textarea length verifier
function changedTextareaLen (form, txtField, fieldName, maxTextLen) 
{
	var s = txtField.name;
	var index;
	if (s.indexOf('[') == -1) 
	{
		index = 0;
	} 
	else 
	{
		index = s.substring( s.indexOf('[')+1,s.indexOf(']') );
	}
	checkTextareaLen(txtField, index, fieldName, maxTextLen);
}

function checkTextareaLen(txtField, zindex, fieldName, maxTextLen) 
{
	if (!(zindex >= 0)) 
	{
		zindex = '';
	}
	var s = txtField.name;
	var zindex;
	if (s.indexOf('[') == -1) 
	{
		zindex = 0;
	}
	else
	{
		zindex = s.substring( s.indexOf('[')+1,s.indexOf(']') );
	}
	if (txtField.value.length > maxTextLen) 
	{
		txtField.value = txtField.value.substring(0,maxTextLen);
	}
	if (document.getElementById('charCount'+fieldName)) 
	{
		document.getElementById('charCount'+fieldName).innerHTML = txtField.value.length;
	}
}

function collectTags(id)
{
	tags = getTagsSelected(id);
	return tags.join(',');
}

function previewImageTagInit() 
{
	id = 'dataform_field_photo_tags';
	window[id+'_selected_tags'] = undefined;
	scanForUsed(id, '_pop');
	scanForUsed(id, '_freq');
	scanForUsed(id, '_rec');
}

function addTag(el, id, tag)
{
	sTags = getTagsSelected(id);
	$(el).addClassName('usedTag');
	if(sTags.indexOf(tag) < 0)
	{
		addSelectedTag(id, tag);
	}	
}

function addCustomTags(id)
{
	//get the new custom tags from the text box and add them to the selected tags area
	//then clear out the text box
	customTags = id + '_custom';
	
	cTags = $(customTags).value;
	cTags = cTags.replace(/^\s+|\s+$/g,""); //php-like trim
	if (cTags.match(/[^,0-9a-zA-Z\s -]+/))
	{
		alert('Tags can only contain numbers and letters.');
	}
	else
	{
		cTagsA = cTags.split(',');
		
		sTags = getTagsSelected(id);
		
		for(i=0;i<cTagsA.length; i++)
		{
			tag = cTagsA[i];
			//add to the seleted tags list if not already there
			if(sTags.indexOf(tag) < 0 && tag.strip().length > 0)
			{
				addSelectedTag(id, tag);
			}
		}
		$(customTags).value = '';
	}
}

function addSelectedTag(id, tag)
{
	selectedTags = id + '_selected';
	
	el = $(document.createElement('li'));
	el.className = id + '_selected_tag';
	el.id = tag+ '_added_tag';
	el.addClassName('removable');
	//Event.observe(el, 'click', createRemoveTag);
	el.onclick = function(){removeTag(this);};
		
	el.appendChild(document.createTextNode(tag));
	$(selectedTags).appendChild(el);
	
	var size = window[id + '_selected_tags'].length;
	window[id + '_selected_tags'][size] = tag;
}

function createRemoveTag(e)
{	
	if (!e) var e = window.event;
	var tg = (window.event) ? e.srcElement : e.target;

	removeTag(tg);
}

function removeTag(el)
{
	var id = el.className;
	id = id.sub('_selected_tag removable', '').strip();
	var tag = el.innerHTML;
	
	sTags = getTagsSelected(id);
	var index = sTags.indexOf(tag);
	
	if(index >= 0)
	{
		var selectedTags = 'li.'+id + '_selected_tag';
		
		el.parentNode.removeChild(el.parentNode.childNodes[index]);
		delete window[id + '_selected_tags'][index];
		window[id + '_selected_tags'] = window[id + '_selected_tags'].compact();
		
		scanForUsed(id, '_pop');
		scanForUsed(id, '_freq');
		scanForUsed(id, '_rec');
	}
}

function getTagsSelected(id)
{
	if(!window[id + '_selected_tags'] || typeof(window[id + '_selected_tags']) == 'undefined')
	{
		window[id + '_selected_tags'] = new Array();
		var selectedTags = 'li.'+id + '_selected_tag';
		selectedTags = $$(selectedTags);
			
		for(i=0;i<selectedTags.length;i++)
		{
			
			window[id + '_selected_tags'][i] = selectedTags[i].innerHTML;
		}
	}
	return window[id + '_selected_tags'];
}

function showTagTab(id, tab)
{
	var tabs = 'div.' + id;
	tabs = $$(tabs);
	var tabName = 'li.' + id;
	tabName = $$(tabName);
	var i = 0;
	for(i; i< tabs.length && tabName[i]; i++)
	{
		if(tabName[i].id == id + tab)
		{
			tabName[i].addClassName('selected');
		}
		else
		{
			tabName[i].removeClassName('selected');
		}
		
		if(tabs[i].id == (id + tab + '_d'))
		{
			scanForUsed(id, tab);
			tabs[i].show();
		}
		else
		{
			tabs[i].hide();
		}
	}
}

function scanForUsed(id, tab)
{	
	var el = $(id + tab + '_d').down();

	if(el.tagName == 'UL')
	{
		var tags = getTagsSelected(id);
		var size = (el.childNodes.length);
		var i = 0;
		var item;
		for(i;i < size; i++)
		{	
			item = $(el.childNodes[i]);
			if( tags.indexOf(item.innerHTML) >= 0)
			{
				item.addClassName('usedTag');
				item.removeClassName('availableTag');
			}
			else
			{
				item.addClassName('availableTag');
				item.removeClassName('usedTag');
			}
		}
	}
}

function keyPress(event) {
	var keycode;
	if(window.event) 
	{
		keycode = window.event.keyCode;
		event = window.event;
	}
	else if(event) keycode = event.which;
	else return true;
	if(keycode == 13)
	{
		event.returnValue=false;
		event.cancel = true;
		if(event.preventDefault) event.preventDefault();
		return false;
	}
	return true;
}
