function addAgency( agency_id ) {
	if ( agency_id == "" ) { return false; }
	var xmlhttp = getRequestObject();
	var script = "index.cgi";
	var params = "agency_id=" + escape( agency_id );
		params += "&addagency=1";
	if ( xmlhttp ) {
		beginAddAgency();
		params += "&JSON=1";
		xmlhttp.open( 'POST', script, true );
		xmlhttp.setRequestHeader( 'Content-type', 'application/x-www-form-urlencoded' );
		xmlhttp.setRequestHeader( 'Content-length', params.length );
		xmlhttp.setRequestHeader( 'Connection', 'close' );
		xmlhttp.send( params );
		xmlhttp.onreadystatechange = function () {
			if ( xmlhttp.readyState == 4 ) {
				var json = xmlhttp.responseText;
				var jobj = eval('('+json+')');
				printAgencies( jobj.params.selectedAgencies );
				printProposals( jobj.params.selectedProposals );
			}
		}	
	} else {
		var url = script + "?" + params;
		document.location.href = url;
	}
}

function removeAgency( agency_id, node_id ) {
	var xmlhttp = getRequestObject();
	var script = "index.cgi";
	var params = "agency_id=" + escape( agency_id );
		params += "&remagency=1";
	if ( xmlhttp ) {
		beginRemoveAgency( node_id );
		params += "&JSON=1";
		xmlhttp.open( 'POST', script, true );
		xmlhttp.setRequestHeader( 'Content-type', 'application/x-www-form-urlencoded' );
		xmlhttp.setRequestHeader( 'Content-length', params.length );
		xmlhttp.setRequestHeader( 'Connection', 'close' );
		xmlhttp.send( params );
		xmlhttp.onreadystatechange = function () {
			if ( xmlhttp.readyState == 4 ) {
				var json = xmlhttp.responseText;
				var jobj = eval( '(' + json + ')' );
				printAgencies( jobj.params.selectedAgencies );
				printProposals( jobj.params.selectedProposals );
			}
		}	
	} else {
		var url = script + "?" + params;
		document.location.href = url;
	}
}

function removeProposal( proposal_id ) {
	var xmlhttp = getRequestObject();
	var script = "index.cgi";
	var params = "proposal_id=" + escape( proposal_id );
		params += "&remproposal=1";
	if ( xmlhttp ) {
		params += "&JSON=1";
		xmlhttp.open( 'POST', script, true );
		xmlhttp.setRequestHeader( 'Content-type', 'application/x-www-form-urlencoded' );
		xmlhttp.setRequestHeader( 'Content-length', params.length );
		xmlhttp.setRequestHeader( 'Connection', 'close' );
		xmlhttp.send( params );
		xmlhttp.onreadystatechange = function () {
			if ( xmlhttp.readyState == 4 ) {
				var json = xmlhttp.responseText;
				var jobj = eval( '(' + json + ')' );
				printAgencies( jobj.params.selectedAgencies );
				printProposals( jobj.params.selectedProposals );
			}
		}	
	} else {
		var url = script + "?" + params;
		document.location.href = url;
	}
}

function printAgencies( agencies ) {
	pruneNode( 'selectedAgencies' );
	addElement( 'ul', 'sagUL', 'sagUL', 'selectedAgencies' );
	if ( agencies.length <= 0 ) {
		addElement( 'li', 'liNone', 'liNone', 'sagUL' );
		addText( 'liNone', "No Agencies Selected" );
	} else {
		for ( var i = 0; i < agencies.length; i++ ) {
			addElement( 'li', 'sagLI'+i, 'sagLI'+i, 'sagUL' );
			addText( 'sagLI'+i, agencies[i].agency_name + "  " );
			addText( 'sagLI'+i, "[ " );
			addElement( 'a', 'lnkLI'+i, 'lnkLI'+i, 'sagLI'+i );
			addAttribute( 'lnkLI'+i, 'href', "javascript:removeAgency('"+agencies[i].agency_id+"', 'sagLI"+i+"' );" );
			addText( 'lnkLI'+i, "Cancel" );
			addText( 'sagLI'+i, " ]" );
		}
	}
}

function printProposals( proposals ) {
	pruneNode( 'selectedProposals' );
	if ( proposals.length <= 0 ) {
		addElement( 'tr', 'trow', 'base', 'selectedProposals' )
		addElement( 'td', 'null', 'none', 'trow' );
		addAttribute( 'null', 'colspan', '11' );
		addAttribute( 'null', 'style', "text-align: left; font-weight: 700;" );
		addElement( 'ul', 'list', 'nlist', 'null' );
		addElement( 'li', 'item1', 'litem', 'list' );
		addText( 'item1', "Not Receiving Regulation Notifications" );
	} else {
		for ( var i = 0; i < proposals.length; i++ ) {
			if ( proposals[i].spacer ) {
				addElement( 'tr', 'spacer'+i, 'spacer'+i, 'selectedProposals' );
				addElement( 'td', 'spctd'+i, 'spctd'+i, 'spacer'+i );
				addAttribute( 'spctd'+i, 'colspan', '11' );
				addAttribute( 'spctd'+i, 'style', "background-color: #dfdfdf; color: #363636; font-weight: 700; text-align: left;" );
				addText( 'spctd'+i, "   " + proposals[i].spacer_text );
			}
			var pid = proposals[i].proposal_id;
			addElement( 'tr', 'p'+pid, 'row'+i, 'selectedProposals' );
			addAttribute( 'p'+pid, 'class', 'chartRow' ); 
			addAttribute( 'p'+pid, 'onmouseover', "javascript:rowHover('p"+pid+"');" );
			addAttribute( 'p'+pid, 'onmouseout', "javascript:rowHover('p"+pid+"');" );
			addAttribute( 'p'+pid, 'onclick', "javascript:rowSelect('p"+pid+"');" );
			addElement( 'td', 'p'+pid+'c0', 'agency'+i, 'p'+pid );
			addAttribute( 'p'+pid+'c0', 'valign', 'top' );
			addAttribute( 'p'+pid+'c0', 'class', 'agency' );
			addAttribute( 'p'+pid+'c0', 'title', "Agency Name" );
			addElement( 'span', 'agency_name'+i, 'agname'+i, 'p'+pid+'c0' );
			addText( 'agency_name'+i, proposals[i].agency_name ); 
			addElement( 'br', 'brlnk'+i+'1', 'brlnk'+i, 'p'+pid+'c0' );
			addElement( 'br', 'brlnk'+i+'2', 'brlnk'+i, 'p'+pid+'c0' );
			addElement( 'a', 'rlink'+i, 'remAg'+i, 'p'+pid+'c0' );
			addAttribute( 'rlink'+i, 'href', "javascript:removeProposal('"+pid+"');" );
			addAttribute( 'rlink'+i, 'title', "Stop Tracking This Proposal" );
			addText( 'rlink'+i, "( Stop Tracking )" );
			addElement( 'td', 'p'+pid+'c1', 'title'+i, 'p'+pid );
			addAttribute( 'p'+pid+'c1', 'valign', 'top' );
			addAttribute( 'p'+pid+'c1', 'class', 'title' );
			var changes = proposals[i].nac_changes;
			for ( var j = 0; j < changes.length; j++ ) {
				addElement( 'a', 'detLink'+i+j, 'link'+i+j, 'p'+pid+'c1' );
				addAttribute( 'detLink'+i+j, 'href', "../details.cgi?proposal_id="+pid );
				addAttribute( 'detLink'+i+j, 'title', "View Details (New Window)" );
				addAttribute( 'detLink'+i+j, 'target', '_new' );
				addText( 'detLink'+i+j, "Title: " + changes[j].title_number );
				addText( 'detLink'+i+j, " Chapter(s): " + changes[j].chapters );
				if ( changes[j].sections != "" ) {
					addText( 'detLink'+i+j, " Section(s): " + changes[j].sections );
				}
				addElement( 'br', 'break'+i+j, 'br'+i+j, 'p'+pid+'c1' );
			}
			addElement( 'td', 'p'+pid+'c2', 'desc'+i, 'p'+pid );
			addAttribute( 'p'+pid+'c2', 'valign', 'top' );
			addAttribute( 'p'+pid+'c2', 'class', 'description' );
			addAttribute( 'p'+pid+'c2', 'title', "Short Description" );
			addElement( 'span', 'desc'+pid, 'd'+pid, 'p'+pid+'c2' );
			addText( 'desc'+pid, proposals[i].description ); 
			addElement( 'td', 'p'+pid+'c3', 'notice'+pid, 'p'+pid );
			addAttribute( 'p'+pid+'c3', 'valign', 'top' );
			addAttribute( 'p'+pid+'c3', 'class', 'sosNotice' );
			addAttribute( 'p'+pid+'c3', 'title', "Secretary of State Received Hearing Notice" );
			addElement( 'span', 'snotice'+pid, 'sn'+pid, 'p'+pid+'c3' );
			addText( 'snotice'+pid, proposals[i].sos_received_notice );
			if ( proposals[i].sos_received_notice_comments == "" ) {
				addElement( 'br', 'breaksn'+i+'1', 'brsn'+i+'1', 'p'+pid+'c3' );
				addElement( 'br', 'breaksn'+i+'2', 'brsn'+i+'2', 'p'+pid+'c3' );
				addElement( 'span', 'sncom'+pid, 'sncom'+pid, 'p'+pid+'c3' );
				addText( 'p'+pid+'c3', proposals[i].sos_received_notice_comments );
			}
			addElement( 'td', 'p'+pid+'c4', 'hearings'+pid, 'p'+pid );
			addAttribute( 'p'+pid+'c4', 'valign', 'top' );
			addAttribute( 'p'+pid+'c4', 'class', 'hearingDate' );
			addAttribute( 'p'+pid+'c4', 'title', "Scheduled Hearing Date" );
			addElement( 'span', 'heardate'+pid, 'hear'+pid, 'p'+pid+'c4' );
			var dates = proposals[i].hearing_dates;
			for ( var k = 0; k < dates.length; k++ ) {
				addText( 'heardate'+pid, dates[k].hearing_date );
				addElement( 'br', 'breakhd'+i+k, 'brhd'+i+k, 'heardate'+pid );
			}
			addElement( 'td', 'p'+pid+'c5', 'agrec'+pid, 'p'+pid );
			addAttribute( 'p'+pid+'c5', 'valign', 'top' );
			addAttribute( 'p'+pid+'c5', 'class', 'agGet' );
			addAttribute( 'p'+pid+'c5', 'title', "Attorney General Office Received" );
			addElement( 'span', 'agrecd'+pid, 'ar'+pid, 'p'+pid+'c5' );
			addText( 'agrecd'+pid, proposals[i].ago_received );
			if ( proposals[i].ago_received_comments != "" ) {
				addElement( 'br', 'breakar'+i+'1', 'brar'+i+'1', 'p'+pid+'c5' );
				addElement( 'br', 'breakar'+i+'2', 'brar'+i+'2', 'p'+pid+'c5' );
				addElement( 'span', 'agrcd'+pid, 'agrcd'+pid, 'p'+pid+'c5' );
				addText( 'agrcd'+pid, proposals[i].ago_received_comments );
			}
			addElement( 'td', 'p'+pid+'c6', 'agcomplete'+pid, 'p'+pid );
			addAttribute( 'p'+pid+'c6', 'valign', 'top' );
			addAttribute( 'p'+pid+'c6', 'class', 'agCompleted' );
			addAttribute( 'p'+pid+'c6', 'title', "Attorney General Office Completed" );
			addElement( 'span', 'agcompl'+pid, 'ac'+pid, 'p'+pid+'c6' );
			addText( 'agcompl'+pid, proposals[i].ago_completed);
			if ( proposals[i].ago_completed_comments != "" ) {
				addElement( 'br', 'breakac'+i+'1', 'brac'+i+'1', 'p'+pid+'c6' );
				addElement( 'br', 'breakac'+i+'2', 'brac'+i+'2', 'p'+pid+'c6' );
				addElement( 'span', 'agcom'+pid, 'agcom'+pid, 'p'+pid+'c6' );
				addText( 'agcom'+pid, proposals[i].ago_received_comments );
			}
			addElement( 'td', 'p'+pid+'c7', 'govrec'+pid, 'p'+pid );
			addAttribute( 'p'+pid+'c7', 'valign', 'top' );
			addAttribute( 'p'+pid+'c7', 'class', 'govGet' );
			addAttribute( 'p'+pid+'c7', 'title', "Governor's Policy Research Office Received" );
			addElement( 'span', 'govrecd'+pid, 'gr'+pid, 'p'+pid+'c7' );
			addText( 'govrecd'+pid, proposals[i].gov_received );
			if ( proposals[i].gov_received_comments != "" ) {
				addElement( 'br', 'breakgr'+i+'1', 'brgr'+i+'1', 'p'+pid+'c7' );
				addElement( 'br', 'breakgr'+i+'2', 'brgr'+i+'2', 'p'+pid+'c7' );
				addElement( 'span', 'govrcd'+pid, 'govrcd'+pid, 'p'+pid+'c7' );
				addText( 'govrcd'+pid, proposals[i].ago_received_comments );
			}
			addElement( 'td', 'p'+pid+'c8', 'govapprvd'+pid, 'p'+pid );
			addAttribute( 'p'+pid+'c8', 'valign', 'top' );
			addAttribute( 'p'+pid+'c8', 'class', 'govApproved' );
			addAttribute( 'p'+pid+'c8', 'title', "Date Governor Approved" );
			addElement( 'span', 'govaprvd'+pid, 'ga'+pid, 'p'+pid+'c8' );
			addText( 'govaprvd'+pid, proposals[i].gov_approved );
			if ( proposals[i].gov_approved_comments != "" ) {
				addElement( 'br', 'breakga'+i+'1', 'brga'+i+'1', 'p'+pid+'c8' );
				addElement( 'br', 'breakga'+i+'2', 'brga'+i+'2', 'p'+pid+'c8' );
				addElement( 'span', 'govapp'+pid, 'govapp'+pid, 'p'+pid+'c8' );
				addText( 'govapp'+pid, proposals[i].gov_approved_comments );
			}
			addElement( 'td', 'p'+pid+'c9', 'sosfiled'+pid, 'p'+pid );
			addAttribute( 'p'+pid+'c9', 'valign', 'top' );
			addAttribute( 'p'+pid+'c9', 'class', 'sosFiled' );
			addAttribute( 'p'+pid+'c9', 'title', "Filed at Secretary of State" );
			addElement( 'span', 'sosfile'+pid, 'sf'+pid, 'p'+pid+'c9' );
			addText( 'sosfile'+pid, proposals[i].sos_filed);
			if ( proposals[i].sos_filed_comments != "" ) {
				addElement( 'br', 'breaksf'+i+'1', 'brsf'+i+'1', 'p'+pid+'c9' );
				addElement( 'br', 'breaksf'+i+'2', 'brsf'+i+'2', 'p'+pid+'c9' );
				addElement( 'span', 'sosfld'+pid, 'sosfld'+pid, 'p'+pid+'c9' );
				addText( 'p'+pid+'c9', proposals[i].sos_filed_comments );
			}
			addElement( 'td', 'p'+pid+'c10', 'effectdate'+pid, 'p'+pid );
			addAttribute( 'p'+pid+'c10', 'valign', 'top' );
			addAttribute( 'p'+pid+'c10', 'class', 'effectiveDate' );
			addAttribute( 'p'+pid+'c10', 'title', "Effective Date" );
			addElement( 'span', 'effctdate'+pid, 'ed'+pid, 'p'+pid+'c5' );
			addText( 'effctdate'+pid, proposals[i].effective_date);
			if ( proposals[i].effective_date_comments != "" ) {
				addElement( 'br', 'breaked'+i+'1', 'bred'+i+'1', 'p'+pid+'c5' );
				addElement( 'br', 'breaked'+i+'2', 'bred'+i+'2', 'p'+pid+'c5' );
				addElement( 'span', 'effdt'+pid, 'effdt'+pid, 'p'+pid+'c5' );
				addText( 'effdt'+pid, proposals[i].effective_date_comments );
			}
		}
	}
}


function getRequestObject() {
	var xmlhttp = false;
	var msTypes =	[	'Microsoft.XMLHTTP',
						'MSXML2.XMLHTTP.5.0',
						'MSXML2.XMLHTTP.4.0',
						'MSXML2.XMLHTTP.3.0',
						'MSXML2.XMLHTTP'
					]
	// Microsoft Browsers
	if ( window.ActiveXObject ) {
		for ( var i = 0; i < msTypes.length; i++ ) {
			xmlhttp = new ActiveXObject( msTypes[i] );
			if ( xmlhttp ) {
				i = msTypes.length + 1;
			}
		}
	}
	// Mozilla / Firefox / Netscape
	if ( !xmlhttp && typeof( XMLHttpRequest ) != 'undefined' ) {
		xmlhttp = new XMLHttpRequest();
	}
	// Ice Browser
	if ( !xmlhttp && window.createRequest ) {
		xmlhttp = window.createRequest();
	}
	return xmlhttp;
}

function rowHover( id ) {
	var className = document.getElementById(id).className;
	if ( className == "chartRowSelectedHover" ) {
		document.getElementById(id).className = "chartRowSelected";
	} else if ( className == "chartRowSelected" ) {
		document.getElementById(id).className = "chartRowSelectedHover";
	} else if ( className == "chartRow" ) {
		document.getElementById(id).className = "chartRowHover";
	} else {
		document.getElementById(id).className = "chartRow";
	}
	var endClassName = document.getElementById(id).className;
}

function rowSelect( id ) {
	var className = document.getElementById(id).className;
	if ( className == "chartRowSelectedHover" ) {
		document.getElementById(id).className = "chartRowHover";
	} else {
		document.getElementById(id).className = "chartRowSelectedHover";
	}
}

function addElement( type, id, name, parentId ) {
	if ( !parentId ) { return false; }
	var node = document.createElement( type );
	node.setAttribute( "name", name );
	node.setAttribute( "id", id );
	document.getElementById( parentId ).appendChild( node );
}

function addAttribute( id, name, value ) {
	var node = document.getElementById( id );
	node.setAttribute( name, value, 0 );
}

function addText( id, text ) {
	if ( text == null ) { text = " "; };
	document.getElementById( id ).appendChild( document.createTextNode( unescape( text ) ) );
}

function pruneNode( id ) {
	var node = document.getElementById( id );
	while ( node.firstChild ) {
		node.removeChild( node.firstChild );
	}
}

function beginAddAgency( ) {
	pruneNode( 'selectedAgencies' );
	addElement( 'ul', 'sagUL', 'sagUL', 'selectedAgencies' );
		addElement( 'li', 'liNone', 'liNone', 'sagUL' );
		addText( 'liNone', "Loading your Selection(s) please wait..." );
		addAttribute( 'liNone', 'style', 'font-weight: 700; color: #cd0000;' );
}

function beginRemoveAgency( node_id ) {
	pruneNode( node_id );
	addText( node_id, "Removing Agency..." );
}

