/***************************************************************************
 *
 * HTML Element Manipulator: $Id: element_control.js,v 1.0 21/Mar/2007 juan Exp $
 *
 *	This Javascript file is an HTML Element manipulator that allows you to dynamically
 * add and remove elements from an already loaded page.
 *
 *	Requirements:
 *		1. A web browser with Javascript enabled
 *		2. An AJAX capable browser
 *
 *	Author:	Juan González <juan _at_ gjtech _dot_ net>
 *				G&J Technology, Inc. © 2007
 *
 *	NOTICE: In order for this script to function correctly, URLs should not be declared
 * anywhere in this script. Rather, URLs should be passed from the hyperlink functions.
 *
 *	NOTES:
 *		An example html/php page is given.
 *
 ***************************************************************************/

/***************************************************************************
 *
 *	This program is free software; you can redistribute it and/or modify
 *	it under the terms of the GNU General Public License as published by
 *	the Free Software Foundation; either version 2 of the License, or
 *	(at your option) any later version.
 *
 ***************************************************************************/

function check_os()
{
	if (navigator.userAgent.indexOf('IRIX') != -1) { return 'Irix'; }
	else if (navigator.userAgent.indexOf('Win') != -1) { return 'Win'; }
	else if (navigator.userAgent.indexOf('Mac') != -1) { return 'Mac'; }
	else if (navigator.userAgent.indexOf('Linux') != -1) { return 'Lin'; }
	else { return 'Other'; }
}


function is_explorer()
{
	return ( (document.all && (check_os() == 'Win')) ? true : false );
}

function AddNewContact(elem)
{
	/* Declare correct class method */
	var myclass = is_explorer() ? 'className' : 'class';
		
	/* Extract value from element ID to determine start value */
	var start	= document.getElementById('contactStartValue');
	var num		= (document.getElementById('contactStartValue').value -1) + 2;
	start.value	= num;
	
	/* Element ID */
	var contact_divid = 'contact'+num;
	
	/* Create Element DIV */
	var contact_div = document.createElement('div');
	contact_div.setAttribute('id',contact_divid);
	contact_div.setAttribute(myclass,'dynamic_contact');
	
	/* Create contact first name element, set attributes, append accordingly */
	var name_div			= document.createElement('div');
	var name_input_div	= document.createElement('div');
	var name_text			= document.createTextNode('* Contact '+num+' First Name:');
	var name_input			= document.createElement('input');
	
	name_div.setAttribute(myclass,'namespace');
	name_input_div.setAttribute(myclass,'inputspace');
	name_input.setAttribute('type','textbox');
	name_input.setAttribute('id','ContactFirstName');
	name_input.setAttribute('name','ContactFirstName[]');
	name_input.setAttribute('class','textfield');
	
	name_div.appendChild(name_text);
	name_input_div.appendChild(name_input);
	contact_div.appendChild(name_div);
	contact_div.appendChild(name_input_div);
	
	/* Clear line break */
	var clear_div = document.createElement('br');
	clear_div.setAttribute(myclass,'cleartag');
	contact_div.appendChild(clear_div);
	
	/* Create contact first last element, set attributes, append accordingly */
	var lastname_div			= document.createElement('div');
	var lastname_input_div	= document.createElement('div');
	var lastname_text			= document.createTextNode('* Contact '+num+' Last Name:');
	var lastname_input		= document.createElement('input');
	
	lastname_div.setAttribute(myclass,'namespace');
	lastname_input_div.setAttribute(myclass,'inputspace');
	lastname_input.setAttribute('type','textbox');
	lastname_input.setAttribute('id','ContactLastName');
	lastname_input.setAttribute('name','ContactLastName[]');
	lastname_input.setAttribute('class','textfield');
	
	lastname_div.appendChild(lastname_text);
	lastname_input_div.appendChild(lastname_input);
	contact_div.appendChild(lastname_div);
	contact_div.appendChild(lastname_input_div);
	
	/* Clear line break */
	var clear_div = document.createElement('br');
	clear_div.setAttribute(myclass,'cleartag');
	contact_div.appendChild(clear_div);
		
	/* Create 'delete contact' hyperlink element, set attributes, append accordingly */
	var hyperlink_div		= document.createElement('div');
	var hyperlink_a		= document.createElement('a');
	var hyperlink_text	= document.createTextNode('Remove this Contact');
	
	hyperlink_div.setAttribute(myclass,'delnode');
	hyperlink_a.setAttribute("href","javascript:DeleteNode('contact_node','"+contact_divid+"','annihilate')");

	hyperlink_a.appendChild(hyperlink_text);
	hyperlink_div.appendChild(hyperlink_a);
	contact_div.appendChild(hyperlink_div);
	
	/* Send new element to screen, append */
	document.getElementById(elem).appendChild(contact_div);
	
	/* Clear line break */
	var clear_div = document.createElement('br');
	clear_div.setAttribute(myclass,'cleartag');
	clear_div.setAttribute('id','tmp_cleartag');
	document.getElementById(elem).appendChild(clear_div);
}

function AddNewLocation(elem)
{
	/* Declare correct class method */
	var myclass = is_explorer() ? 'className' : 'class';
	
	/* Extract value from element ID to determine start value */
	var start	= document.getElementById('locationStartValue');
	var num		= (document.getElementById('locationStartValue').value -1) + 2;
	start.value	= num;

	/* Element ID */
	var location_divid = 'location'+num;
	
	/* Create container elemeent */
	var location_div = document.createElement('div');
	location_div.setAttribute('id',location_divid);
	location_div.setAttribute(myclass,'dynamic_location');

	/* Create Address Type element */
	var addrtype_div					= document.createElement('div');
	var addrtype_select_div			= document.createElement('div');
	var addrtype_select				= document.createElement('select');
	var addrtype_option1				= document.createElement('option');
	var addrtype_option2				= document.createElement('option');
	var addrtype_option2_text		= document.createTextNode('Mailing Address');
	var addrtype_option1_text		= document.createTextNode('Physical Address');
	var addrtype_text					= document.createTextNode("Address "+num+" Type:");
	
	addrtype_div.setAttribute(myclass,'namespace');
	addrtype_select_div.setAttribute(myclass,'inputspace');
	addrtype_select.setAttribute(myclass,'address_select');
	addrtype_select.setAttribute('name','AddressType[]');
	addrtype_select.setAttribute('id','AddressType');
	addrtype_option1.setAttribute('value','Physical Address');
	addrtype_option2.setAttribute('value','Mailing Address');
	
	addrtype_div.appendChild(addrtype_text);
	location_div.appendChild(addrtype_div);	
	addrtype_option1.appendChild(addrtype_option1_text);
	addrtype_select.appendChild(addrtype_option1);
	addrtype_option2.appendChild(addrtype_option2_text);
	addrtype_select.appendChild(addrtype_option2);
	addrtype_select_div.appendChild(addrtype_select);
	location_div.appendChild(addrtype_select_div);

	/* Clear line break */
	var clear_div = document.createElement('br');
	clear_div.setAttribute(myclass,'cleartag');
	location_div.appendChild(clear_div);
	
	/* Create Address 1 element */
	var address1_div			= document.createElement('div');
	var address1_input_div		= document.createElement('div');
	var address1_text			= document.createTextNode('* Address 1:');
	var address1_input			= document.createElement('input');
	var address1_text_span		= document.createElement('span');
	var address1_text_explain	= document.createTextNode('\u00A0\u00A0(Street address, P.O. Box)');
	
	address1_div.setAttribute(myclass,'namespace');
	address1_input_div.setAttribute(myclass,'inputspace');
	address1_input.setAttribute('type','textbox');
	address1_input.setAttribute('id','Address1');
	address1_input.setAttribute('name','Address1[]');
	address1_input.setAttribute('size','33');
	address1_input.setAttribute('maxlength','100');
	address1_input.setAttribute('class','textfield');
	address1_div.appendChild(address1_text);
	address1_input_div.appendChild(address1_input);
	
	address1_text_span.setAttribute(myclass,'explain');
	address1_text_span.appendChild(address1_text_explain);
	address1_input_div.appendChild(address1_text_span);
	
	location_div.appendChild(address1_div);
	location_div.appendChild(address1_input_div);
	
	/* Clear line break */
	var clear_div = document.createElement('br');
	clear_div.setAttribute(myclass,'cleartag');
	location_div.appendChild(clear_div);
	
	/* Create Address 2 element */
	var address2_div			= document.createElement('div');
	var address2_input_div		= document.createElement('div');
	var address2_text			= document.createTextNode('Address 2:');
	var address2_input			= document.createElement('input');
	var address2_text_span		= document.createElement('span');
	var address2_text_explain	= document.createTextNode('\u00A0\u00A0(Suite,Unit,Building,Apartment,etc)');
	
	address2_div.setAttribute(myclass,'namespace');
	address2_input_div.setAttribute(myclass,'inputspace');
	address2_input.setAttribute('type','textbox');
	address2_input.setAttribute('id','Address2');
	address2_input.setAttribute('name','Address2[]');
	address2_input.setAttribute('size','33');
	address2_input.setAttribute('maxlength','100');
	address2_input.setAttribute('class','textfield');
	
	address2_div.appendChild(address2_text);
	address2_input_div.appendChild(address2_input);
	
	address2_text_span.setAttribute(myclass,'explain');
	address2_text_span.appendChild(address2_text_explain);
	address2_input_div.appendChild(address2_text_span);
	
	location_div.appendChild(address2_div);
	location_div.appendChild(address2_input_div);
	
	/* Clear line break */
	var clear_div = document.createElement('br');
	clear_div.setAttribute(myclass,'cleartag');
	location_div.appendChild(clear_div);
	
	/* Create City element */
	var city_div			= document.createElement('div');
	var city_input_div	= document.createElement('div');
	var city_text			= document.createTextNode('* City:');
	var city_input			= document.createElement('input');
	
	city_div.setAttribute(myclass,'namespace');
	city_input_div.setAttribute(myclass,'inputspace');
	city_input.setAttribute('type','textbox');
	city_input.setAttribute('id','City');
	city_input.setAttribute('name','City[]');
	city_input.setAttribute('size','18');
	city_input.setAttribute('maxlength','100');
	city_input.setAttribute('class','textfield');
	
	city_div.appendChild(city_text);
	city_input_div.appendChild(city_input);
	location_div.appendChild(city_div);
	location_div.appendChild(city_input_div);

	/* Clear line break */
	var clear_div = document.createElement('br');
	clear_div.setAttribute(myclass,'cleartag');
	location_div.appendChild(clear_div);
	
	/* Create State element */
	var state_div			= document.createElement('div');
	var state_input_div	= document.createElement('div');
	var state_text			= document.createTextNode('* State:');
	var state_input		= document.createElement('input');
	
	state_div.setAttribute(myclass,'namespace');
	state_input_div.setAttribute(myclass,'inputspace');
	state_input.setAttribute('type','textbox');
	state_input.setAttribute('id','State');
	state_input.setAttribute('name','State[]');
	state_input.setAttribute('size','5');
	state_input.setAttribute('maxlength','2');
	state_input.setAttribute('class','textfield');
	
	state_div.appendChild(state_text);
	state_input_div.appendChild(state_input);
	location_div.appendChild(state_div);
	location_div.appendChild(state_input_div);
		
	/* Clear line break */
	var clear_div = document.createElement('br');
	clear_div.setAttribute(myclass,'cleartag');
	location_div.appendChild(clear_div);
	
	/* Create Zip Code element */
	var zipcode_div			= document.createElement('div');
	var zipcode_input_div	= document.createElement('div');
	var zipcode_text			= document.createTextNode('* Zip Code:');
	var zipcode_input			= document.createElement('input');
	
	zipcode_div.setAttribute(myclass,'namespace');
	zipcode_input_div.setAttribute(myclass,'inputspace');
	zipcode_input.setAttribute('type','textbox');
	zipcode_input.setAttribute('id','ZipCode');
	zipcode_input.setAttribute('name','ZipCode[]');
	zipcode_input.setAttribute('size','10');
	zipcode_input.setAttribute('maxlength','10');
	zipcode_input.setAttribute('class','textfield');
	
	zipcode_div.appendChild(zipcode_text);
	zipcode_input_div.appendChild(zipcode_input);
	location_div.appendChild(zipcode_div);
	location_div.appendChild(zipcode_input_div);
		
	/* Clear line break */
	var clear_div = document.createElement('br');
	clear_div.setAttribute(myclass,'cleartag');
	location_div.appendChild(clear_div);
	
	/* Create Phone 1 element */
	var phone1_div			= document.createElement('div');
	var phone1_input_div	= document.createElement('div');
	var phone1_text			= document.createTextNode('* Phone 1:');
	var phone1_input			= document.createElement('input');
	
	phone1_div.setAttribute(myclass,'namespace');
	phone1_input_div.setAttribute(myclass,'inputspace');
	phone1_input.setAttribute('type','textbox');
	phone1_input.setAttribute('id','Phone1');
	phone1_input.setAttribute('name','Phone1[]');
	phone1_input.setAttribute('size','18');
	phone1_input.setAttribute('maxlength','12');
	phone1_input.setAttribute('class','textfield');
	
	phone1_div.appendChild(phone1_text);
	phone1_input_div.appendChild(phone1_input);
	location_div.appendChild(phone1_div);
	location_div.appendChild(phone1_input_div);
		
	/* Clear line break */
	var clear_div = document.createElement('br');
	clear_div.setAttribute(myclass,'cleartag');
	location_div.appendChild(clear_div);

	/* Create Fax element */
	var fax_div			= document.createElement('div');
	var fax_input_div	= document.createElement('div');
	var fax_text			= document.createTextNode('Fax:');
	var fax_input			= document.createElement('input');
	
	fax_div.setAttribute(myclass,'namespace');
	fax_input_div.setAttribute(myclass,'inputspace');
	fax_input.setAttribute('type','textbox');
	fax_input.setAttribute('id','Fax');
	fax_input.setAttribute('name','Fax[]');
	fax_input.setAttribute('size','18');
	fax_input.setAttribute('maxlength','12');
	fax_input.setAttribute('class','textfield');
	
	fax_div.appendChild(fax_text);
	fax_input_div.appendChild(fax_input);
	location_div.appendChild(fax_div);
	location_div.appendChild(fax_input_div);
		
	/* Clear line break */
	var clear_div = document.createElement('br');
	clear_div.setAttribute(myclass,'cleartag');
	location_div.appendChild(clear_div);
	
	/* Create Phone 2 element */
	var phone2_div			= document.createElement('div');
	var phone2_input_div	= document.createElement('div');
	var phone2_text			= document.createTextNode('Phone 2:');
	var phone2_input			= document.createElement('input');
	
	phone2_div.setAttribute(myclass,'namespace');
	phone2_input_div.setAttribute(myclass,'inputspace');
	phone2_input.setAttribute('type','textbox');
	phone2_input.setAttribute('id','Phone2');
	phone2_input.setAttribute('name','Phone2[]');
	phone2_input.setAttribute('size','18');
	phone2_input.setAttribute('maxlength','12');
	phone2_input.setAttribute('class','textfield');
	
	phone2_div.appendChild(phone2_text);
	phone2_input_div.appendChild(phone2_input);
	location_div.appendChild(phone2_div);
	location_div.appendChild(phone2_input_div);
		
	/* Clear line break */
	var clear_div = document.createElement('br');
	clear_div.setAttribute(myclass,'cleartag');
	location_div.appendChild(clear_div);
	
	/* Create Email Address element */
	var email_div			= document.createElement('div');
	var email_input_div	= document.createElement('div');
	var email_text			= document.createTextNode('Email:');
	var email_input			= document.createElement('input');
	
	email_div.setAttribute(myclass,'namespace');
	email_input_div.setAttribute(myclass,'inputspace');
	email_input.setAttribute('type','textbox');
	email_input.setAttribute('id','Email');
	email_input.setAttribute('name','Email[]');
	email_input.setAttribute('size','33');
	email_input.setAttribute('maxlength','100');
	email_input.setAttribute('class','textfield');
	
	email_div.appendChild(email_text);
	email_input_div.appendChild(email_input);
	location_div.appendChild(email_div);
	location_div.appendChild(email_input_div);
		
	/* Clear line break */
	var clear_div = document.createElement('br');
	clear_div.setAttribute(myclass,'cleartag');
	location_div.appendChild(clear_div);
		
	/* Create public email select element */
	var pub_email_div				= document.createElement('div');
	var pub_email_select_div		= document.createElement('div');
	var pub_email_select			= document.createElement('select');
	var pub_email_option1			= document.createElement('option');
	var pub_email_option1_text		= document.createTextNode('Yes');
	var pub_email_option2			= document.createElement('option');
	var pub_email_option2_text		= document.createTextNode('No');
	var pub_email_text				= document.createTextNode('Private Email?');
	var pub_email_text_span			= document.createElement('span');
	var pub_email_text_explain		= document.createTextNode('\u00A0\u00A0(Select YES to keep your email private)');
	
	pub_email_div.setAttribute(myclass,'namespace');
	pub_email_select_div.setAttribute(myclass,'inputspace');
	pub_email_select.setAttribute(myclass,'publick_email_select');
	pub_email_select.setAttribute('name','pub_email[]');
	pub_email_select.setAttribute('id','pub_email');
	pub_email_option1.setAttribute('value','y');
	pub_email_option2.setAttribute('value','n');
	pub_email_option2.setAttribute('selected','selected');
		
	pub_email_div.appendChild(pub_email_text);
	location_div.appendChild(pub_email_div);
	pub_email_option1.appendChild(pub_email_option1_text);
	pub_email_select.appendChild(pub_email_option1);
	pub_email_option2.appendChild(pub_email_option2_text);
	pub_email_select.appendChild(pub_email_option2);
	pub_email_select_div.appendChild(pub_email_select);	
	location_div.appendChild(pub_email_select_div);
	pub_email_text_span.setAttribute(myclass,'explain');
	pub_email_text_span.appendChild(pub_email_text_explain);
	location_div.appendChild(pub_email_text_span);
	
	/* Clear line break */
	var clear_div = document.createElement('br');
	clear_div.setAttribute(myclass,'cleartag');
	location_div.appendChild(clear_div);
	
	/* Create remove link element */
	var hyperlink_div		= document.createElement('div');
	var hyperlink_a		= document.createElement('a');
	var hyperlink_text	= document.createTextNode('Remove this Location');
	
	hyperlink_div.setAttribute(myclass,'delnode');
	hyperlink_a.setAttribute("href","javascript:DeleteNode('location_node','"+location_divid+"','annihilate')");

	hyperlink_a.appendChild(hyperlink_text);
	hyperlink_div.appendChild(hyperlink_a);
	location_div.appendChild(hyperlink_div);
	
	/* Send new element to screen, append */
	document.getElementById(elem).appendChild(location_div);
	
	/* Clear line break */
	var clear_div = document.createElement('br');
	clear_div.setAttribute(myclass,'cleartag');
	clear_div.setAttribute('id','tmp_cleartag');	
	document.getElementById(elem).appendChild(clear_div);
}

/* Delete node from screen and SQL, if applicable*/
function DeleteNode(container,id,url)
{
	var xmlHttp = GetXmlHttpObject();
	
	/* If url is not null, initialize XML class */
	if (url != 'annihilate' && xmlHttp != null)
	{
		xmlHttp.open("POST",url,true);
		xmlHttp.send(null);
	}
	
	/* Delete node from window */
	var parentNode	= document.getElementById(container);
	var deleteNode	= document.getElementById(id);
	parentNode.removeChild(deleteNode);
	
	var deletetag	= document.getElementById('tmp_cleartag');
	parentNode.removeChild(deletetag);
}

function ResourceCheckBoxModifier(elem,id,rid,type,url)
{
	var xmlHttp	= GetXmlHttpObject();

	if (rid == 0 || xmlHttp == null)
	{
		return false;
	}

	var mode		= (document.getElementById(elem).checked == false) ? 'delete' : 'insert';			
	var update_url = url+"?ajaxmode="+mode+"&ajaxtype="+type+"&ajaxid="+id+"&ajaxrid="+rid;
	
	/* If url is not null, initialize XML class */
	xmlHttp.open("POST",update_url,true);
	xmlHttp.send(null);
}

/* Function verifies AJAX interoperability */
function GetXmlHttpObject()
{
	var xmlHttp = null;
	try
	{
		/* Firefox, Opera 8.0+, Safari */
		xmlHttp = new XMLHttpRequest();
	}
	catch (e)
	{
		try
		{
			/* Internet Explorer */
			xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			/* Internet Explorer */
			xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	
	if (xmlHttp == null)
	{
		alert ("Your browser does not support AJAX! Try Firefox 2.0 or greater.");
		return false;
	}
	
	return xmlHttp;
}
