/*
 * Java script waarmee form velden kunnen worden gemanipulleerd
 * Copyright 2003 Prezent Internet, All rights reserved
 *
 * $Id: formActions.js,v 1.6 2008-12-01 11:15:05 apex Exp $
 */
function getSelectedElement(psID) {
        if(document.all) {
			return document.all[psID];
		}
        else if(document.getElementById) {
			var children = element.childNodes;
			alert(children);
			return;
			var wantedElement = document.getElementById(psID);
			alert(wantedElement);
			return;
			return document.getElementById(psID);
		}
        else if(document.layers) {
                for (iLayer = 1; iLayer < document.layers.length; iLayer++) {
                        if(document.layers[iLayer].id == psID)
                                return document.layers[iLayer];
                }
        }
        return null;
}
function getElement(formId,key) {
        var children = document.getElementById(formId);
        for( var i = 0; i < children.length; i++ ) {
			if ( children[i].nodeName == 'INPUT' && children[i].name == key ) {
				return children[i];
			}
		}
        return true;
}


function _setElement(element,key,value) {
        var children = element.childNodes;
        for( var i = 0; i < children.length; i++ ) {
                if( children[i].childNodes.length > 0 ) {
                        if( _setElement(children[i],key,value) == false ) {
                                return false;
                        }
                }
                if ( children[i].nodeName == 'INPUT' && children[i].name == key ) {
                        children[i].value = value;
                        return false;
                }
        }
        return true;
}

function setForm() {
        myForm = getElement(arguments[0]);
        if (!myForm) {
                alert("Form '"+arguments[0]+"' not found by ID");
        }

        for( var i = 1; i < arguments.length; i+=2 ) {
                _setElement(myForm,arguments[i],arguments[i+1]);
        }
        return false;
}

function setFormAction(formId, newAction) {
		var myForm = document.forms[formId];
		myForm.action = newAction;
		return true;
}


function submitForm(formId) {
        var myForm = document.getElementById(formId);
        myForm.submit();
        return false;
}

function setFieldValue(formId,key,value) {
         var myForm = document.getElementById(formId);
         return _setElement(myForm,key,value);
}
/*
function submitForm(formId) {
         var myForm = document.getElementById(formId);
         myForm.submit();
         return false;
}
*/

function jumpDomain(domain) {
	setFieldValue('domainoverview', 'domain', domain);
	setFieldValue('domainoverview', '_submodule', 'domainDisplay');
	setFieldValue('domainoverview', '_action', 'init');
	return submitForm('domainoverview');
}

function jumpInvoice(invoice, payed) {
	setFieldValue('domainoverview', 'domain', invoice);
	setFieldValue('domainoverview', '_submodule', 'showFactuur');
	setFieldValue('domainoverview', '_action', 'init');
	setFieldValue('domainoverview', 'val', payed);
	return submitForm('domainoverview');
}

function doLogout() {
	setFieldValue('domainoverview', 'logout', 'logout');
	return submitForm('domainoverview');
}

function addNSRow() {
	var obj_table = document.getElementById('nameserver');
	var lastRow = obj_table.rows.length;
	var new_row = obj_table.insertRow(-1);
	var cell1 = new_row.insertCell(-1);
	var cell2 = new_row.insertCell(-1);

	cell1.innerHTML = 'Secundaire Nameserver:';
	cell2.innerHTML = '<input type="text" id="ns'+lastRow+'" name="ns['+lastRow+']">';
	cell1.className = "description";
	cell2.className = "userInput";
	//alert(obj_table.rows.length);
}

function checkServer(domainString) {
	// split domains
	var domains = domainString.split('[]');

	// get nameservers
	var obj_table = document.getElementById('nameserver');
	var lastRow = obj_table.rows.length-1;
	var nameServers = new Array();
	var i = 0;
	var Baseurl = '';
	while(lastRow > 0) {
		var test = document.getElementById('ns'+lastRow);
		Baseurl += 'ns['+(lastRow-1)+']='+test.value+'&';
		lastRow--;
		i++;
	}
	var objOutputTable = document.getElementById('nameserverOutput');
	// leegjoppen tabel
	var lastRow = objOutputTable.rows.length;
	while(lastRow > 0) {
		objOutputTable.deleteRow(-1);
		lastRow--;
	}
	// loading image
	var lastRow = objOutputTable.rows.length;
	var new_row = objOutputTable.insertRow(-1);
	var headercell1 = new_row.insertCell(-1);
	var headercell2 = new_row.insertCell(-1);
	headercell1.innerHTML = '';
	headercell2.innerHTML = '<img border="0" alt="" src="/images/load.gif"/> Bezig met controle...';
	headercell1.className = "description";
	headercell2.className = "error";
	var check = true;
	var thisTime = new Date();
	var ms = thisTime.getTime();

	for(i=0; i<domains.length; i++) {
		new Ajax.Request('/nameserverCheck.php?'+Baseurl+'domain='+domains[i]+'&t='+ms, {
  		method:'get',
    		onSuccess: function(transport){
      			var response = transport.responseText || "no response text";
     			splitResponse = response.split('*');
     			var lastRow = objOutputTable.rows.length;
				var new_row = objOutputTable.insertRow(-1);
				var cell1 = new_row.insertCell(-1);
				var cell2 = new_row.insertCell(-1);
     			if(splitResponse[0] == "error") {
	     			check = false;
					cell1.innerHTML = splitResponse[2]+':';
					cell2.innerHTML = '<span class="bezet"><img width="14" height="14" border="0" alt="" src="/images/domainRequest/error.gif"/>'+splitResponse[1]+'</span>';
					cell1.className = "description";
					cell2.className = "error";
					if(i == domains.length) {
						// laatste
						headercell2.innerHTML = '<b>Uw servers voldoen niet aan de eisen. Registratie niet mogelijk!</b>';
					}
     			} else {
     				cell1.innerHTML = splitResponse[2]+':';
					cell2.innerHTML = '<span class="vrij">OK.</span>';
					cell1.className = "description";
					cell2.className = "error";
					if(i == domains.length) {
						// laatste
						if(check) {
							headercell2.innerHTML = '<b>Uw servers voldoen aan de eisen.</b>';
							var button = document.getElementById('button');
							button.innerHTML = "<input type=\"submit\" class=\"buttonSubmit\" value=\"Opslaan >>\" onClick=\'JavaScript:setFieldValue(\"domainForm\", \"view\", \"display_naamEnAdresGegevens\"); setFieldValue(\"domainForm\", \"_action\", \"validate_nameservers\"); submitForm(\"domainForm\"); return false;\'>";
							// en submitten maar he
							setFieldValue("domainForm", "view", "display_naamEnAdresGegevens");
							setFieldValue("domainForm", "_action", "validate_nameservers");
							submitForm("domainForm");
						} else {
							headercell2.innerHTML = '<b>Uw servers voldoen niet aan de eisen. Registratie niet mogelijk!</b>';
						}

					}
     			}
    		},
    		onFailure: function(){ alert('Something went wrong...') }
  		});
	}
}

function deleteNSRow() {
	var obj_table = document.getElementById('nameserver');
	var lastRow = obj_table.rows.length;
 	if (lastRow > 3) {
 		obj_table.deleteRow(lastRow - 1);
 	} else {
 		alert('Minimaal 2 nameservers vereist!');
 	}
}

function disableBedrijf(idcheck, idtext) {
	var obj_text = document.getElementById(idtext);
	var obj_check = document.getElementById(idcheck);
	obj_text.disabled = obj_check.checked;
	//alert(obj_text.disabled);
}

/*
 * Javascript code for the DNS editor
 * $Id: formActions.js,v 1.6 2008-12-01 11:15:05 apex Exp $
 */

/* preload buttons */
img1 = new Image();
img1.src = '/images/icons/arrowOn.gif';
img2 = new Image();
img2.src = '/images/icons/arrowOff.gif';

/* Get unique id for reference later */
function getUniqueID() {
	var chars = "abcdefghijklmnopqrstuvwxyz";
	var id = '';

	for (var i=0; i<10; i++) {
		id = id+chars.charAt(Math.floor(Math.random()*26));
	}

	return id;
}

/* Add a new nameserver */
function addNameserver(level) {
	var id;

	nsTable = document.getElementById('ns_view_table');

	// create new row
	row = document.createElement('tr');
	id = 'ns_'+getUniqueID();
	row.id = id;

	var cellTTL = document.createElement('td');
	cellTTL.innerHTML = getTTLElement(id);

	var cellType = document.createElement('td');
	cellType.innerHTML = 'NS'+getIdElement(id)+getTypeElement(id,'NS');

	var cellData = document.createElement('td');
	cellData.innerHTML = getDataElement(id);

	var cellRemove = document.createElement('td');
	cellRemove.innerHTML = getRemoveJS(id);

	if (level >= 80) {
		row.appendChild(cellTTL);
	}
	row.appendChild(cellType);
	row.appendChild(cellData);
	row.appendChild(cellRemove);

	nsTable.appendChild(row);
}

/* Add a new mailserver */
function addMXServer(level) {
	var id;

	nsTable = document.getElementById('mx_view_table');

	// create new row
	row = document.createElement('tr');
	id = 'ns_'+getUniqueID();
	row.id = id;

	var cellTTL = document.createElement('td');
	cellTTL.innerHTML = getTTLElement(id);

	var cellHost = document.createElement('td');
	if (level >= 60) {
		cellHost.innerHTML = getHostElement(id);
	} else {
		cellHost.innerHTML = '<input type="hidden" name="host["'+id+']" value="@">';
	}

	var cellPrio = document.createElement('td');
	cellPrio.innerHTML = getMXPrioElement(id);

	var cellType = document.createElement('td');
	cellType.innerHTML = 'MX'+getIdElement(id)+getTypeElement(id,'MX');

	var cellData = document.createElement('td');
	cellData.innerHTML = getDataElement(id);

	var cellRemove = document.createElement('td');
	cellRemove.innerHTML = getRemoveJS(id);

	if (level >= 80) {
		row.appendChild(cellTTL);
	}
	row.appendChild(cellHost);
	row.appendChild(cellPrio);
	row.appendChild(cellType);
	row.appendChild(cellData);
	row.appendChild(cellRemove);

	nsTable.appendChild(row);
}

/* Add a new host in DNS profile */
function addHostDNSProfile() {
	var id;

	nsTable = document.getElementById('dns_view_table');

	// create new row
	row = document.createElement('tr');
	id = 'dns_'+getUniqueID();
	row.id = id;

	var cellPrio = document.createElement('td');
	cellPrio.innerHTML = getMXPrioElement(id);

	var cellType = document.createElement('td');
	cellType.innerHTML = getTypeSelectNS(id)+getIdElement(id);

	var cellHost = document.createElement('td');
	cellHost.innerHTML = getHostElement(id);

	var cellData = document.createElement('td');
	cellData.innerHTML = getDataElement(id);

	var cellRemove = document.createElement('td');
	cellRemove.innerHTML = getRemoveJS(id);

	row.appendChild(cellPrio);
	row.appendChild(cellType);
	row.appendChild(cellHost);
	row.appendChild(cellData);
	row.appendChild(cellRemove);

	nsTable.appendChild(row);
}

/* Add a new host */
function addRRHost(level) {
	var id;

	nsTable = document.getElementById('rr_view_table');

	// create new row
	row = document.createElement('tr');
	id = 'rr_'+getUniqueID();
	row.id = id;

	var cellTTL = document.createElement('td');
	cellTTL.innerHTML = getTTLElement(id);

	var cellType = document.createElement('td');
	var innerHtml = getTypeSelect(id);
	cellType.innerHTML = getTypeSelect(id)+getIdElement(id);

	var cellHost = document.createElement('td');
	cellHost.innerHTML = getHostElement(id);

	var cellData = document.createElement('td');
	cellData.innerHTML = getDataElement(id);

	var cellRemove = document.createElement('td');
	cellRemove.innerHTML = getRemoveJS(id);

	if (level >= 80) {
		row.appendChild(cellTTL);
	}
	row.appendChild(cellType);
	row.appendChild(cellHost);
	row.appendChild(cellData);
	row.appendChild(cellRemove);
	nsTable.appendChild(row);
}

/* Generate link for removing of a row */
function getRemoveJS(id) {
	return '<a href="#" onClick="javascript: deleteHost(\''+id+'\'); return false;">X</a>';
}

/* Remove a row in a table */
function deleteHost(id) {
	var row = document.getElementById(id);

	if (row) {
		var table = row.parentNode;
		table.removeChild(row);
	}
}

/* functions which generate form elements */
function getIdElement(id) {
	return '<input type="hidden" name="id[]" value="'+id+'">';
}

function getTypeElement(id,type) {
	return '<input type="hidden" name="type['+id+']" value="'+type+'">';
}

function getHostElement(id) {
	return '<input type="input" name="host['+id+']" value="" class="hostdata">';
}

function getDataElement(id) {
	return '<input type="input" name="data['+id+']" value="" class="hostdata">';
}

function getTTLElement(id) {
	return '<input type="input" name="ttl['+id+']" value="" class="TTL">';
}

function getMXPrioElement(id) {
	return '<input type="input" name="mx_priority['+id+']" value="" class="mxprio">';
}

function getTypeSelect(id) {
	var html = '<select name="type['+id+']" class="type">'
		+	'<option value="A" selected>A</option>'
		+	'<option value="CNAME">CNAME</option>'
		+	'<option value="AAAA">AAAA</option>'
		+	'<option value="TXT">TXT</option>'
		+	'<option value="NS">NS</option>'
		+'</select>';
	return html;
}

function getTypeSelectNS(id) {
	return 
		'<select name="type['+id+']" class="type">'
		+	'<option value="A" selected>A</option>'
		+	'<option value="CNAME">CNAME</option>'
		+	'<option value="AAAA">AAAA</option>'
		+	'<option value="NS">NS</option>'
		+	'<option value="MX">MX</option>'
		+	'<option value="TXT">TXT</option>'
		+'</select>';
}

/* toggle/untoggle a row for deletion */
function toggleDelete(id, prefix) {
	var row = document.getElementById(prefix+'_'+id);
	var enable;

	if (!row) {
		return;
	}

	var deleted = document.getElementsByName('deleted['+id+']')[0];
	if (deleted.value == 0) {
		deleted.value = 1;
		row.className = 'rowDeleted';
		enable = false;
	} else {
		deleted.value = 0;
		row.className = '';
		enable = true;
	}

	// get form elements
	var formElements = row.getElementsByTagName("input");
	for (var i=0; i < formElements.length; i++) {
		if (formElements[i].type != 'hidden') {
			formElements[i].disabled = !enable;
		}
	}
	var formElements = row.getElementsByTagName("select");
	for (var i=0; i < formElements.length; i++) {
		formElements[i].disabled = !enable;
	}
}

/* hide/unhide parts of the UI */
function toggleHide(id) {
	div = document.getElementById(id);
	img = document.getElementById('img' + id);

	if (div.style.display == 'block') {
		div.style.display = 'none';
		img.src = '/images/icons/arrowOff.gif';
	} else {
		div.style.display = 'block';
		img.src = '/images/icons/arrowOn.gif';
	}
}

// add webforward
function addWebforward(domain) {
	table = document.getElementById('webforward_table');
	buttons = document.getElementById('webforward_buttons');
	id = getUniqueID();

	row = document.createElement('tr');
	row.id = 'webforward_'+id;
	cell = document.createElement('td');
	cell.innerHTML = '<table width="100%" class="infomodule"><tr><th>Redirect type</th><th width="75%">' +
					selectRedirect(id)+'&nbsp;<a href="#" onClick="deleteForward(\''+id+'\'); return false;" title="'+trans['delete']+'">X</a></th>'+
					'</tr><tr><td><span class="verklaring" title="'+trans['FromHover']+'">'+trans['From']+'</span></td>'+
					'<td>http:// <input type="text" class="frontend" name="host['+id+']" value="" style="width: 70px;">.'+
					domain+'/</td></tr><tr><td>'+trans['To']+'</td><td><input type="text" class="frontend" name="destination['+id+']" value="http://"></td></tr>'+
					'<tr><td><span class="verklaring" title="'+trans['TitleHover']+'">'+trans['Title']+'</span></td><td>'+
					'<input type="text" class="frontend" name="title['+id+']" value=""></td></tr></table>';
	row.appendChild(cell);

	table.insertBefore(row, buttons);
}

function selectRedirect(id) {
	return '<select name="webforward_frame['+id+']" class="frontend"><option value="frame">Frame redirect</option><option value="redirect" selected>Redirect</option></select>';
}

// delete webforward
function deleteForward(id) {
	var deleted = document.getElementById('webforward_delete');

	if (deleted && isInteger(id)) {
		if (deleted.value.length) {
			deleted.value += ';'+id;
		} else {
			deleted.value = id;
		}
	}

	// remove the table from screen
	forwardTable = document.getElementById('webforward_'+id);
	if (forwardTable) {
		var table = forwardTable.parentNode;
		table.removeChild(forwardTable);
	}
}

// check if string is an integer
function isInteger(s) {
	if (!s.length)
		return false;

	var regex = /^\d+$/;
	return regex.test(s);
}

