function formDuplicate(e) {
	removeDefault(e);
	var parid
	if (window.event) {
		if(window.event.srcElement.id) { 
			parid = window.event.srcElement.id.substr(4);
		} else if(window.event.srcElement.nodeName.toLowerCase() == 'img' || window.event.srcElement.nodeName.toLowerCase() == 'span') {
			parid = window.event.srcElement.parentNode.id.substr(4);
		} else if (window.event.srcElement.nodeName == '#text') {
			// Safari takes the text within the span as window.event.srcElement
			parid = window.event.srcElement.parentNode.parentNode.id.substr(4);
		}
	} else if(e.target) {
		if(e.target.id) {
			parid = e.target.id.substr(4);
		} else if(e.target.nodeName == '#text' || e.target.nodeName.toLowerCase() == 'img' || e.target.nodeName.toLowerCase() == 'span') {
			parid = e.target.parentNode.id.substr(4);
		}
	}
	//get the paragraph with fields that has to be copied
	var formPart = document.getElementById(parid);
	
	var newFormPart = formPart.cloneNode(true);
	if(newFormPart) {
		var testId = newFormPart.id;
		while(document.getElementById(testId)) { // get a none existing id
			testId += '1';
		}
		newFormPart.id = testId;
		var labelCount = newFormPart.getElementsByTagName('label');
		//INDEX FIELDS
		var allBoxes = new Array();
	 	var allBoxes1 = formPart.parentNode.getElementsByTagName('input');
	 	var allBoxes2 = formPart.parentNode.getElementsByTagName('select');
	 	var allBoxes3 = formPart.parentNode.getElementsByTagName('textarea');
	 	var j=0;
	 	for(var i = 0; i<allBoxes1.length; i++, j++) {
	 		allBoxes[j] = allBoxes1[i];
	 	}	
	 	for(var i = 0; i<allBoxes2.length; i++, j++) {
	 		allBoxes[j] = allBoxes2[i];
	 	}
	 	for(var i = 0; i<allBoxes3.length; i++, j++) {
	 		allBoxes[j] = allBoxes3[i];
	 	}
	 	boxNames = new Array();
	 	fieldIds = new Array();
	 	var j=0;
	 	for(i=0; i<allBoxes.length; i++) {
	 		if(allBoxes[i].type && allBoxes[i].type.toLowerCase() == "checkbox") {
	 			var tmpName = allBoxes[i].name.replace(/\]/g,"");
	 			tmpName = tmpName.split('[');
	 			boxNames[j++] = tmpName[0]+'['+tmpName[1]+']['+tmpName[2]+']['+tmpName[3]+']['+tmpName[4]+']';
	 		}
	 		var tmpId = allBoxes[i].id.substr(2).split('_');
	 		fieldIds[i] = tmpId[2]+'_'+tmpId[3]+'_'+tmpId[1];
	 	}
	 	// Change field id's
	 	for(i=0; i<labelCount.length; i++) {
			if(labelCount[i].getAttribute('for') || labelCount[i].getAttribute('htmlFor')) {
	 			//IE (again) uses a different value for the 'for' attribute of a label
	 			var forValue = labelCount[i].getAttribute('for')?labelCount[i].getAttribute('for'):labelCount[i].getAttribute('htmlFor');
				if(('id="'+forValue+'"').indexOf(newFormPart.innerHTML)) { // if field exists
					testId = forValue.split('_');
					testId[1] = Number(testId[1])+1;
		 			var namePassed = 0;
					while(namePassed != 1 && testId[1] < 50) {
			 			var testPass = 1;
			 			for(j=0; j<fieldIds.length && testPass>0; j++) {
							if(fieldIds[j] == testId[2]+'_'+testId[3]+'_'+testId[1]) {
								testPass = 0;
							}
						}
						if(testPass == 1) {
							namePassed = 1;
						} else {
							testId[1] = Number(testId[1])+1;
						}
					}
					newFormPart.innerHTML = eval('newFormPart.innerHTML.replace(/'+forValue+'/g,"'+testId[0]+'_'+testId[1]+'_'+testId[2]+'_'+testId[3]+(testId[4]?'_'+testId[4]:'')+'")');
//					newFormPart.innerHTML = newFormPart.innerHTML.replace(eval('/'+forValue+'/g'),eval('"'+testId+'"'));
				}
	 		}
	 	}
	 	// Change checkbox names and remove buttons
	 	var inputFields = newFormPart.getElementsByTagName('input');
	 	for(i=0; i<inputFields.length; i++) {
	 		if(inputFields[i].type && inputFields[i].type.toLowerCase() == "checkbox") {
	 			// CHECKBOX NAMEN WIJZIGEN
				var tmpName = inputFields[i].name.replace(/\]/g,"");
	 			tmpName = tmpName.split('[');
	 			tmpNum = Number(tmpName[4])+1;
	 			var namePassed = 0;
				while(namePassed != 1 && tmpNum < 50) {
		 			var testPass = 1;
					for(j=0; j<boxNames.length && testPass>0; j++) {
						if(boxNames[j] == tmpName[0]+'['+tmpName[1]+']['+tmpName[2]+']['+tmpName[3]+']['+tmpNum+']') {
							testPass = 0;
						}
					}
					if(testPass == 1) {
						namePassed = 1;
					} else {
						tmpNum++;
					}
				}
				inputFields[i].name = tmpName[0]+'['+tmpName[1]+']['+tmpName[2]+']['+tmpName[3]+']['+tmpNum+']['+tmpName[5]+']';
	 		}
	 		// change radiobutton names by group
	 		if(inputFields[i].type && inputFields[i].type.toLowerCase() == "radio") {
				var radioFollowUp = inputFields[i].id.split('_');
	 			var radioId = inputFields[i].name.replace(/\]/g,"");
	 			radioId = radioId.split('[');
				inputFields[i].name = radioId[0]+'['+radioId[1]+']['+radioId[2]+']['+radioId[3]+']['+radioFollowUp[1]+']['+radioId[5]+']';
	 		}
	 		// don't allow submit and reset buttons to be duplicated
	 		if(inputFields[i].name && inputFields[i].name.toLowerCase() == "button") {
	 			inputFields[i].parentNode.removeChild(inputFields[i]);
	 		}
	 	}
	 	formPart.parentNode.insertBefore(newFormPart,document.getElementById('divdup_'+parid));
	 	formParent = formPart.parentNode;
	 	reOrderNames(formParent, parid);
		var delBut = document.createElement('img');
		delBut.id = 'deldup_'+newFormPart.id;
		delBut.src = 'http://edit.sitespirit.net/img/partool_close.gif';
		delBut.alt = 'remove';
		delBut.align = 'right';
		delBut.style.cursor = 'pointer';
		delBut.style.width = '1.1875em';
		delBut.style.height = '1.1875em';
		addEvent(delBut, 'click', removeDuplicate, false);
		newFormPart.lastChild.appendChild(delBut);
		//fitheight opnieuw om achterkant te herberekenen!!!
	 	fitHeight();
	 	//if(window.navigator.appName != 'Microsoft Internet Explorer') alert(document.getElementById('bckdiv').id);
	}
}

function removeDuplicate(e) {
	removeDefault(e);
	var parid
	if (window.event) {
		if(window.event.srcElement.id) { 
			parid = window.event.srcElement.id.substr(7);
		} else if(window.event.srcElement.nodeName == '#text') {
			// Safari has srcElement but not srcElement.id and takes the text within the a as window.event.srcElement
			parid = window.event.srcElement.parentNode.id.substr(7);
		}
	} else if(e.target) {
		parid = e.target.id.substr(7);
	}	
	var formPart = document.getElementById(parid);
	formParent = formPart.parentNode;
	formParent.removeChild(formPart);
	reOrderNames(formParent, parid);
	//fitheight opnieuw om achterkant te herberekenen!!!
 	eval('fitHeight()');
}

function reOrderNames(formParent, parid) {
 	// reorder checkbox and radio names in logical order
 	var inputFields = formParent.getElementsByTagName('input');
 	fli = new Array();
 	for(i=0, j=0, h=0; i<inputFields.length; i++) {
 		if(inputFields[i].type && (inputFields[i].type.toLowerCase() == "checkbox" || inputFields[i].type.toLowerCase() == "radio")) {
 			var tmpName = inputFields[i].name.replace(/\]/g,"");
 			tmpName = tmpName.split('[');
 			if(!fli[tmpName[2]] || fli[tmpName[2]] != tmpName[4]) {
 				fli[tmpName[2]] = tmpName[4];
 				if(tmpName[4] > 0 && inputFields[i].type.toLowerCase() == "checkbox") j++;
 				if(tmpName[4] > 0 && inputFields[i].type.toLowerCase() == "radio") h++;
 			}
 			if(inputFields[i].type.toLowerCase() == "checkbox") inputFields[i].name = tmpName[0]+'['+tmpName[1]+']['+tmpName[2]+']['+tmpName[3]+']['+j+']['+tmpName[5]+']';
			if(inputFields[i].type.toLowerCase() == "radio") {
				if(browser['id'] == 'IE') { // replace radio buttons by new elements to split groups
					var newRadioButton = document.createElement('<input name="' + tmpName[0]+'['+tmpName[1]+']['+tmpName[2]+']['+tmpName[3]+']['+h+']['+tmpName[5]+']' +'">');
					var temp = inputFields[i].id;
					newRadioButton.type = 'radio';
					newRadioButton.value = inputFields[i].value;
					inputFields[i].parentNode.appendChild(newRadioButton);
					inputFields[i].parentNode.removeChild(inputFields[i]);
					newRadioButton.id = temp;
				} else {
					inputFields[i].name = tmpName[0]+'['+tmpName[1]+']['+tmpName[2]+']['+tmpName[3]+']['+h+']['+tmpName[5]+']';
				}
			}
 		}
 	}
}

function removeDefault(e) {
	if(window.event) {
		window.event.returnValue = false;
	} else if(e && e.preventDefault) {
		e.preventDefault();
	}
}

function cancelClickSafari() {
	return false;
}

function addListeners(e) {
	var dupla = document.getElementsByTagName('a');
	for (i = 0; i < dupla.length; i++) {
		if(dupla[i].className && (' ' + dupla[i].className + ' ').indexOf(' duplicator ') != -1) {
			addEvent(dupla[i], 'click', formDuplicate, false);
		}
	}
}

addEvent(window, 'load', addListeners, false);
var browser = detectBrowser();

function addEvent(elm, evType, fn, useCapture)
// cross-browser event handling for IE5+, NS6+ and Mozilla/Gecko
// By Scott Andrew
{
	if(elm.addEventListener) {
		elm.addEventListener(evType, fn, useCapture);
		return true;
	} else if (elm.attachEvent) {
		var r = elm.attachEvent('on' + evType, fn);
		return r;
	} else {
		eval(elm+'.on'+evType+' = fn');
	}
}

function detectBrowser()
{
	var browser = new Array();
	if((navigator.userAgent).indexOf(' Opera') != -1) { // BEFORE MSIE
		browser['id'] = 'OP';
		browser['name'] = 'Opera';
		browser['vers'] = navigator.userAgent.substr(((navigator.userAgent).indexOf(' Opera')+6));
	} else if((navigator.userAgent).indexOf(' MSIE ') != -1) {
		browser['id'] = 'IE';
		browser['name'] = 'Microsoft Internet Explorer';
		browser['vers'] = navigator.userAgent.substr(((navigator.userAgent).indexOf(' MSIE ')+6),(((navigator.userAgent).indexOf(';',(navigator.userAgent).indexOf(' MSIE ')))-((navigator.userAgent).indexOf(' MSIE ')+6)));
	} else if((navigator.userAgent).indexOf(' Firefox') != -1) {
		browser['id'] = 'FF';
		browser['name'] = 'Mozilla Firefox';
		browser['vers'] = (navigator.userAgent).indexOf(' ',(navigator.userAgent).indexOf(' Firefox')+8) != -1 ? navigator.userAgent.substr(((navigator.userAgent).indexOf(' Firefox')+9),(((navigator.userAgent).indexOf(' ',(navigator.userAgent).indexOf(' Firefox')+8))-((navigator.userAgent).indexOf(' Firefox')+9))) : navigator.userAgent.substr(((navigator.userAgent).indexOf(' Firefox')+9));
	} else if((navigator.userAgent).indexOf(' Netscape') != -1 && navigator.vendor == 'Netscape') {
		browser['id'] = 'NS';
		browser['name'] = 'Netscape Navigator';
		browser['vers'] = navigator.vendorSub;
	} else if((navigator.userAgent).indexOf(' Safari') != -1) {
		browser['id'] = 'SA';
		browser['name'] = 'Safari';
		browser['vers'] = (navigator.userAgent).indexOf(' ',(navigator.userAgent).indexOf(' Safari')+7) != -1 ? navigator.userAgent.substr(((navigator.userAgent).indexOf(' Safari')+8),(((navigator.userAgent).indexOf(' ',(navigator.userAgent).indexOf(' Safari')+7))-((navigator.userAgent).indexOf(' Safari')+8))) : navigator.userAgent.substr(((navigator.userAgent).indexOf(' Safari')+8));
	}
	if((navigator.userAgent).indexOf('Windows') != -1) {
		browser['OS'] = 'Microsoft Windows';
	} else if((navigator.userAgent).indexOf('Macintosh') != -1) {
		if((navigator.userAgent).indexOf('Mac OS X') != -1) {
			browser['OS'] = 'Mac OS X';
		} else {
			browser['OS'] = 'Mac OS';
		}
	}
	return browser;
}
