editorOptions = new Array('delete','move','add before');

function showEditorOptions(obj) {
 //alert(obj.parentNode);
 if (obj.childNodes.length == 1) {
 
	optionList = document.createElement('ul');
	for (i=0;i<editorOptions.length;i++) {
		optionItem = document.createElement('li');
		optionLink = document.createElement('a');
		thisLink = document.location + '&element=' + obj.parentNode.id + '&event=' + editorOptions[i];
		optionLink.setAttribute('href',thisLink);
		// aim to replace with call via event handler
		optionLink.setAttribute('onClick','handleEditorClick("'+obj.parentNode.id+'","'+editorOptions[i]+'");return false;');
		optionLink.appendChild(document.createTextNode(editorOptions[i]));
		optionItem.appendChild(optionLink);
		optionList.appendChild(optionItem);
	}
	obj.appendChild(optionList);
  } else {
  	// obj.removeChild(obj.lastChild);
  }
}

function handleEditorClick(element,event) {
	//alert(element + ' ' + event);
	var obj = document.getElementById(element);
	switch (event) {
		case "delete":
			obj.parentNode.removeChild(obj);
			break;	
		case "move":
			var items = obj.parentNode.getElementsByTagName('fieldset');
			var totalItems = items.length

			optionList = document.createElement('ul');
			for (i=0;i<totalItems;i++) {
				if (items[i].id != element) {
					optionItem = document.createElement('li');
					optionLink = document.createElement('a');
					optionLink.setAttribute('href','after ' + items[i].firstChild.firstChild.nodeValue);
					optionLink.appendChild(document.createTextNode('after ' + items[i].firstChild.firstChild.nodeValue));
					optionItem.appendChild(optionLink);
					optionList.appendChild(optionItem);
				}
			}
			var target = obj.firstChild.childNodes[1].childNodes[1];
			target.appendChild(optionList);
			//obj.firstChild.replaceChild(target,optionList);
			break;
	}
}


var examine = document.createElement('ul');
var lastRadioChecked = "";
var lastCheckboxChecked = "";
var defaultColour = '#000';
var alertColour = '#c00';
var defaultError = "Please enter value for ";

function validate(form) {
	errorOutput = document.getElementById('formErrorOutput');
	if (errorOutput.childNodes.length > 0) {
		errorOutput.removeChild(errorOutput.childNodes[0]);
	}
		
	for (i=0;i<form.length;i++) {
		if (form[i].id) {
			test(form,form[i],form[i].type);
		}
	}
	if (examine.childNodes.length > 0) {
		errorOutput.className = 'formErrors';
		errorOutput.appendChild(examine);
		
		examine = document.createElement('ul');
		
		lastRadioChecked = "";
		lastCheckboxChecked = "";
		return false;
	}
}

function test(form,object,type) {
	label = 'spanfor'+object.id;
	//examine += "Type of field is "+type+"<br>";
	//if (object.value) examine += "Value of field is "+object.value+"<br>";
	//if (object.id) examine += "ID of field is "+object.id+"<br>";
	//if (object.name)  examine += "Name of field is "+object.name+"<br>";
	switch (type) {
		case "text":
		if (document.getElementById(label)) {
			colourElement(label,defaultColour);
			if (object.value == "") buildError(label,defaultError);
		}					
		break;
		case "password":
		if (document.getElementById(label)) {
			colourElement(label,defaultColour);
			if (object.value == "") {
				buildError(label,defaultError);
			} else {
				passwordsMatch = 0;
				for (j=1;j<form[object.name].length;j++) {
					if (form[object.name][j].value == object.value) passwordsMatch = 1;	
				}
				if (passwordsMatch == 0) buildError(label,"Values do not match for ");
			}
		}
		break;
		case "select-one":
		if (document.getElementById(label)) {
			colourElement(label,defaultColour);
			if (object.value == "") buildError(label,defaultError);
		}
		break;		
		case "select-multiple":
		if (document.getElementById(label)) {
			colourElement(label,defaultColour);
			if (object.value == "") buildError(label,defaultError);
		}
		break;		
		case "radio":
		label = 'spanfor'+object.name;
		if (document.getElementById(label) && lastRadioChecked != object.name) {
			currentRadioSet = 0;
			for (j=0;j<form[object.name].length;j++) {
				if (form[object.name][j].checked == true) currentRadioSet = 1;
			}
			colourElement(label,defaultColour);
			if (currentRadioSet == 0) buildError(label,defaultError);
		}
		lastRadioChecked = object.name;
		break;
		case "checkbox":
		label = 'spanfor'+object.name;
		if (document.getElementById(label) && lastCheckboxChecked != object.name) {
			currentCheckboxSet = 0;
			for (j=0;j<form[object.name].length;j++) {
				if (form[object.name][j].checked == true) currentCheckboxSet = 1;
			}
			colourElement(label,defaultColour);
			if (currentCheckboxSet == 0) buildError(label,defaultError);
		}
		lastCheckboxChecked = object.name;
		break;
	}
}

function buildError(label,message) {
	fieldName = document.getElementById(label).innerHTML;
	stripAsterisk = fieldName.indexOf(" *");
	if (stripAsterisk != -1) fieldName = fieldName.substring(0,stripAsterisk);
	
	errorItem = document.createElement('li');
	errorText = document.createTextNode(message+fieldName);
	errorItem.appendChild(errorText);
	examine.appendChild(errorItem);
	
	colourElement(label,alertColour);
}

function colourElement(name,colour) {
	document.getElementById(name).style.color = colour;
}

// create iFrame with detail page
function detailFrame(page) {
	var xPos = (document.documentElement.offsetWidth - 428)/2;
	var yPos = (document.documentElement.scrollTop + 32);

	if (document.getElementById('detailFrame')) {
		var thisdetail = document.getElementById('detailFrame');
		if (thisdetail.src != page) {
			thisdetail.src = page;
		}
	} else {
		if (document.createElement) {
			var thiscontainer1 = document.createElement('div');
			thiscontainer1.setAttribute('class','outerpair1');
			thiscontainer1.setAttribute('id','detailContainer');
			
			var thiscontainer2 = document.createElement('div');
			thiscontainer2.setAttribute('class','outerpair2');

			var thiscontainer3 = document.createElement('div');
			thiscontainer3.setAttribute('class','shadowbox');

			var thiscontainer4 = document.createElement('div');
			thiscontainer4.setAttribute('class','innerbox');
			
			var thiscloselink = document.createElement('a');
			thiscloselink.setAttribute('href',document.location);
			thiscloselink.setAttribute('class','closeDetail');
			thiscloselink.setAttribute('onclick','removeDetail();return false;');
			thiscloselink.appendChild(document.createTextNode('Close'));
			thiscontainer4.appendChild(thiscloselink);

			var thisdetail = document.createElement('iframe');
			thisdetail.setAttribute('id', 'detailFrame');
			thisdetail.setAttribute('src', page);
			thisdetail.setAttribute('width', '420');
			thisdetail.setAttribute('height', '650');		
			thisdetail.setAttribute('frameBorder', '0');
			thisdetail.setAttribute('scrolling', 'no');
		
			thiscontainer4.appendChild(thisdetail);
			thiscontainer3.appendChild(thiscontainer4);
			thiscontainer2.appendChild(thiscontainer3);
			thiscontainer1.appendChild(thiscontainer2);
		
			thiscontainer1.style.left = xPos+'px';
			thiscontainer1.style.top = yPos+'px';
					
			var target = document.getElementById('content');
			
			target.appendChild(thiscontainer1);
		}
	}
	if (document.getElementById('detailFrame')) {
		var frameContainer = document.getElementById('detailFrame');
		if (frameContainer.addEventListener) {
			frameContainer.addEventListener("load", readjustIframe, false);
		} else if (frameContainer.attachEvent) {
			frameContainer.detachEvent("onload", readjustIframe) // Bug fix line
			frameContainer.attachEvent("onload", readjustIframe)
		}
	}
}

// remove iFrame with detail page
function removeDetail() {
	var target = document.getElementById('content');
	//alert(target.lastChild.id);
	target.removeChild(target.lastChild);
}

// read iFrame document size and adjust iFrame size to fit
function readjustIframe(loadevt) {
	var crossevt = (window.event) ? event : loadevt
	var iframeroot = (crossevt.currentTarget) ? crossevt.currentTarget : crossevt.srcElement
	if (iframeroot) resizeIframe(iframeroot.id);
}
function resizeIframe(frameid) {
	var frameContainer = document.getElementById(frameid);
	if (frameContainer) {
		if (frameContainer.contentDocument && frameContainer.contentDocument.documentElement.offsetHeight) { //moz/op/saf syntax
			frameContainer.height = frameContainer.contentDocument.documentElement.offsetHeight;
			var frameHolder = document.getElementById('detailContainer');
			var yPos = (document.documentElement.scrollTop + 32);
//			var xPos = (document.documentElement.offsetWidth - frameHolder.offsetWidth)/2;
			frameHolder.style.top = yPos+'px';
		} else if (frameContainer.Document && frameContainer.Document.body.scrollHeight) { //ie5+ syntax
			frameContainer.height = frameContainer.Document.body.scrollHeight;
		}
	}	
}
