/**
 * Code developed by: Abinadi Rendon
 * version 0.1.1, Oct 10, 2008
 */

var first_click = Array();

function add_dyndns()
{
	var dyndns = $( 'form_dyndns' );
	var zone = $( 'zone' );
	var record = $( 'record' );

	if ( record.value != "" || zone.value != "" )
	{
		dyndns.submit();
	}
	else
	{
		alert( 'Please select a zone and record to use with dynamic DNS.' );
	}
}

function add_free_record()
{
	var freerec		= $( 'form_free_record' );
	var name		= $( 'name' );
	var ip			= $( 'ip' );
	var zone		= $( 'zone' );
	
	var alertText	= "";
	var dosubmit	= false;

	if ( name.value == "" || name.value == "Hostname" )
	{
		alertText += "Hostname is required.\n";
	}
	if ( ip.value == "" || ip.value == "IP Address" )
	{
		alertText += "IP Address is required.\n";
	}
	if ( zone.value == "" )
	{
		alertText += "Zone is required.\n";
	}
	if ( !isValidIP( ip.value ) )
	{
		alertText += "IP is not valid.\n";
	}
	if ( !isAlphanumeric( name.value ) )
	{
		alertText += "Hostname has invalid characters.";
	}
	
	if ( alertText != "" )
	{
		alert( alertText );
	}
	else
	{
		dosubmit = true;
	}
	
	if ( dosubmit )
	{
		freerec.submit();
	}
}

function isAlphanumeric( text )
{
	if ( /[^a-zA-Z0-9\-]/.test( text ) )
	{
		// Not alphanumeric
		return false;
	}
	else
	{
		return true;
	}
}

function isValidIP( ip_address )
{
	if ( ip_address.search( /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/ ) != -1 )
	{
		var myArray = ip_address.split( /\./ );
		if ( myArray[0] > 255 || myArray[1] > 255 || myArray[2] > 255 || myArray[3] > 255 )
		{
			return false;
		}
		
		if ( myArray[0] == 0 && myArray[1] == 0 && myArray[2] == 0 && myArray[3] == 0 )
		{
			return false;
		}
		
		return true;
	}
	else
	{
		return false;
	}
}

function zone_records( elem )
{
	var zone = elem.value;
	
	new Ajax.Request('./dyndns.php?js=1&zone=' + zone,
	{
		method:'get',
		onSuccess: function( transport )
		{
			var response = transport.responseText;
			change_records( response );
		}
	});
}

function change_records( js )
{
	var record_select = $( 'record' );
	record_select.options.length = 0;
	
	/* Eval JSON */
	var zone = js.evalJSON( true );
	
	for ( var i=0; i < zone.records.length; i++ )
	{
		record_select.options[i] = new Option( zone.records[i].value, zone.records[i].id, false, false);
	}
}

function to_zone( elem )
{
	var zone = elem.value;
	var string_vars = query_string_array();
	var url_string = "";
	
	if ( string_vars != "" )
	{
		for ( i=0; i < string_vars.length; i++ )
		{
			var pagevars = string_vars[i].split( "=" );

			if ( pagevars[0] == "page" )
			{
				url_string += "&page=1";
			}
			else if ( pagevars[0] == "per_page" )
			{
				url_string += "&per_page=" + pagevars[1];
			}
		}
	}
	
	window.location = "?action=zone&zone=" + zone + url_string;
}

function per_page()
{
	var page = 1;
	var page_vars = 0;
	var per_page = $( 'per_page' ).value;
	var string_vars = query_string_array();
	var url_string = "";
	
	if ( string_vars != "" )
	{
		for ( i=0; i < string_vars.length; i++ )
		{
			var varname = string_vars[i].split( "=" );

			if ( varname[0] == "page" )
			{
				url_string += "&page=" + page;
				page_vars++;
			}
			else if ( varname[0] == "per_page" )
			{
				url_string += "&per_page=" + per_page;
				page_vars++;
			}
			else
			{
				url_string += "&" + string_vars[i]; 
			}
		}
	}
	
	if ( page_vars == 0 )
	{
		url_string += "&page=" + page + "&per_page=" + per_page;
	}
	
	if ( url_string != "" )
	{
		window.location = "?" + url_string.substr(1);
	}
}

function query_string_array()
{
	url_string = window.location.search.substring(1);
 	string_vars= url_string.split( "&" );

	return string_vars;
}

function checkbox_select()
{
	var rows = $$('table tr');
	
	for ( var i=0; i < rows.length; i++ )
	{
		$( rows[i].identify() ).observe( 'click', check_click );
	}
}

function check_click( event )
{
	var element = Event.element( event );
	
	if ( element.tagName != "INPUT" && element.tagName != "A" )
	{
		var trElement = Event.findElement( event, 'tr' );
		var elem_id = trElement.identify().substr(4);
	
		if ( $( 'check_' + elem_id ) )
		{
			$( 'check_' + elem_id ).checked = ( $( 'check_' + elem_id ).checked ) ? false : true;
		}
	}
}

function checked_elements()
{
	var rows = $$('td input');
	var checked_elems = 0;
	
	for ( var i=0; i < rows.length; i++ )
	{
		if ( $( rows[i].id ).checked )
		{
			checked_elems++;
		}
	}
	
	return checked_elems;
}

function delete_zones()
{
	var form = $('modify_entries');
	var method = $('method');
	
	/* If elements are checked */
	if ( checked_elements() )
	{
		/* Update Method */
		method.value = "delete";
	
		/* Submit Form */
		form.submit();
	}
	else
	{
		alert( "You must select at least one zone to delete." );
	}
}

function delete_records()
{
	var form = $('modify_entries');
	var method = $('method');
	
	/* If elements are checked */
	if ( checked_elements() )
	{
		/* Update Method */
		method.value = "delete";
	
		/* Submit Form */
		form.submit();
	}
	else
	{
		alert( "You must select at least one record to delete." );
	}
}

function edit_records()
{
	var form = $('modify_entries');
	var method = $('method');
	
	/* If elements are checked */
	if ( checked_elements() )
	{
		/* Update Method */
		method.value = "edit";
	
		/* Submit Form */
		form.submit();
	}
	else
	{
		alert( "You must select at least one record to edit." );
	}
}

function less_records()
{
	var recordRows = $$('tbody tr');
	var first = recordRows.first();
	var last = recordRows.last();
	
	if ( first != last )
	{
		first.parentNode.removeChild( last );
	}
	else
	{
		alert( "Cannot remove the last element!" );
	}
}

function more_records()
{
	var recordRows = $$('tbody tr');
	var template = recordRows.first();
	var templateClone = template.cloneNode(true);
	
	/* Empty input values */
	var inputs = templateClone.getElementsByTagName('input');
	for ( var i=0; i < inputs.length; i++ )
	{
		inputs[i].value = "";
	}
	
	template.parentNode.appendChild( templateClone );
}

function first_input_clear( elem )
{
	var elem_name = elem.name;
	
	if ( $P.in_array( elem_name, first_click ) == false )
	{
		elem.value = "";
		first_click.push( elem_name );
		
		elem.className = "dark_input";
	}
}






