/******************************************
*******************     SanyoListBuilder  *
*******************************************
*******************************************
*   INCLUDE THE FOLLOWING IN THE HTML:    *
**************************** The List Selector ***********************************
<select id="sanyoListSelector" onchange="sanyoListSelectorHandler();"></select> *
******************************* The List *****************************************
<div id="sanyoList"></div>                                                       *
<script type="text/javascript" language="javascript">getSanyoList("");</script>    *
**********************************************************************************/
var SanyoListXML;
var SanyoListXMLDoc;
var SanyoListHead = "<table class='gridStatic'>" + 
					"<tr>" + 
						"<th class='salesList' width='10%'>State</th>" +
						"<th class='salesList' width='10%'>Levels</th>" +
						"<th class='salesList' width='25%'>Company</th>" +
						"<th class='salesList' width='30%'>Address</th>"+
						"<th class='salesList' width='25%'>Contact Information</th>" +
					"</tr>";
var SanyoListBody = "";
var SanyoListTail = "</table>";

function getSanyoList(url){
	SanyoListXML = getSanyoListXmlHttpReq();
	if( SanyoListXML === false ){ return false; }

	SanyoListXML.onreadystatechange = initSanyoList;
	try{
		SanyoListXML.open("GET", url, true);
	}catch(e){
		alert("Error accessing " + url);
	}
	SanyoListXML.send(null);
}

function initSanyoList(){
	if(SanyoListXML.readyState == 4){
		SanyoListXMLDoc = SanyoListXML.responseXML;

		if(typeof(SanyoListXMLDoc) == "undefined" ) return;
		fillServiceRepListSelector( SanyoListXMLDoc.getElementsByTagName( 'region' ) );
	}
}

function fillServiceRepListSelector(regions){
	if(typeof(SanyoListXMLDoc) == "undefined" ) return;
	
	var sanyoListSelector = document.getElementById( 'sanyoListSelector' );
	var name;

	sanyoListSelector.options[0] = new Option("Select A State", ""); 
	for(var i = 0; i < regions.length;i++){
		name = regions[i].attributes.getNamedItem("name").nodeValue;
        sanyoListSelector.options[i+1] = new Option(stateAbbrevToNameConverter(name), name); 
	}
}

function sanyoListSelectorHandler(){
	if(typeof(SanyoListXMLDoc) == "undefined" ) return;
	
	var sanyoListSelector = document.getElementById( 'sanyoListSelector' );
	var regions = SanyoListXMLDoc.getElementsByTagName( 'region' );
	var index = sanyoListSelector.selectedIndex;
	if(index-- == 0) return;
	var partners = regions[index].getElementsByTagName( 'partner' );
	var state = getStateFromIndex(index);
	var rowSpan = 0;
	var firstListItem = "";
	SanyoListBody = "";
	for(var i = 0; i < partners.length;i++){
		var companyName = partners.item(i).getElementsByTagName( 'CompanyName' )[0].firstChild.nodeValue;
		var address = partners.item(i).getElementsByTagName( 'Address' )[0].firstChild.nodeValue;
		var level =  partners.item(i).getElementsByTagName( 'Level' )[0].firstChild.nodeValue;
		var contactNumbers = partners.item(i).getElementsByTagName( 'ContactNumber' );
		var salesReps = partners.item(i).getElementsByTagName( 'SalesRep' );
		var siteLink = partners.item(i).getElementsByTagName( 'Link' )[0].firstChild.nodeValue;
		if(i == 0){
			firstListItem = "<td>" + award(level) + "</td>";
			firstListItem += "<td class='salesList'><h4>" + companyName + "</h4></td>";
			firstListItem += "<td class='salesList'>" + addressString(address) + "</td>";
			firstListItem += "<td class='salesList'>" + contactString(contactNumbers, salesReps, siteLink) + "</td>";
			firstListItem += "</tr>";
		}else{
			SanyoListBody += "<tr>";
			SanyoListBody += "<td>" + award(level) + "</td>";
			SanyoListBody += "<td class='salesList'><h4>" + companyName + "</h4></td>";
			SanyoListBody += "<td class='salesList'>" + addressString(address) + "</td>";
			SanyoListBody += "<td class='salesList'>" + contactString(contactNumbers, salesReps, siteLink) + "</td>";
			SanyoListBody += "</tr>";
		}
		rowSpan++;
	}
	firstListItem = "<tr><td rowspan='" + rowSpan + "' class='salesList'><h4>" + state  + "</h4></td>" +  firstListItem;
	SanyoListBody = firstListItem + SanyoListBody;
	buildSanyoList();
}

function getStateFromIndex(index){
	if(typeof(SanyoListXMLDoc) == "undefined" ) return "";
	var regions = SanyoListXMLDoc.getElementsByTagName( 'region' );
	var state = regions[index].attributes.getNamedItem("name").nodeValue;
	state = stateAbbrevToNameConverter(state);
	return state
}

function award(level){
	level = level.toUpperCase();
	if(level == "BRONZE") return "<div class='bronze'></div>";
	if(level == "SILVER") return "<div class='silver'></div>";
	if(level == "GOLD") return "<div class='gold'></div>";
	return "";
}

function addressString(address){
	var addressParts = address.split(',');
	var finalAddress = "";
	if(addressParts.length < 2 ) return "";
	var partToModify = addressParts.length - 2;
	var lineBreakIndex = addressParts[partToModify].lastIndexOf(' ');
	for(var i = 0; i < addressParts.length; i++){
		finalAddress += addressParts[i];
		if(i+1 < addressParts.length) finalAddress += ", ";
	}
	return finalAddress;
}

function contactString(contactNumbers, salesReps, siteLink) {
	var contactString = "Contact: ";
	var attribute;
	for(var i = 0; i < salesReps.length; i++){
		attribute = salesReps[i].attributes.getNamedItem("email").nodeValue;
		if(attribute.length > 0) contactString += "<a href='mailto:" + attribute + "'>";
		contactString += salesReps[i].firstChild.nodeValue;
		if(attribute.length > 0) contactString += "</a>";
		if(i+1 < salesReps.length) contactString += ", ";
	}
	contactString += "<br />";
	for(var i = 0; i < contactNumbers.length; i++){
		attribute = contactNumbers[i].attributes.getNamedItem("type").nodeValue;
		attribute = attribute.toUpperCase();
		if(attribute == "TEL" ) contactString += "Tel: ";
		else if(attribute == "FAX" ) contactString += "Fax: ";
		contactString += contactNumbers[i].firstChild.nodeValue;
		if(i+1 < contactNumbers.length)
			contactString += "<br />";
	}
	if(siteLink.length > 0)
		contactString += "<br /><a href='" + siteLink + "'>" + siteLink + "</a>";
		
	return contactString;
}

function buildSanyoList(){
	var sanyoList = document.getElementById( 'sanyoList' );
	sanyoList.innerHTML = SanyoListHead + SanyoListBody + SanyoListTail;
}

function stateAbbrevToNameConverter(abbrev){
	var original = abbrev;
	abbrev = abbrev.toUpperCase();
	if(abbrev == "AL") return "Alabama";
	if(abbrev == "AK") return "Alaska";
	if(abbrev == "AZ") return "Arizona";
	if(abbrev == "AR") return "Arkansas";
	if(abbrev == "CA") return "California";
	if(abbrev == "CO") return "Colorado";
	if(abbrev == "CT") return "Connecticut";
	if(abbrev == "DE") return "Delware";
	if(abbrev == "DC") return "District Of Colunbia";
	if(abbrev == "FL") return "Florida";
	if(abbrev == "GA") return "Georgia";
	if(abbrev == "HI") return "Hawaii";
	if(abbrev == "ID") return "Idaho";
	if(abbrev == "IL") return "Illinois";
	if(abbrev == "IN") return "Indiana";
	if(abbrev == "IA") return "Iowa";
	if(abbrev == "KS") return "Kansas";
	if(abbrev == "KY") return "Kentucky";
	if(abbrev == "LA") return "Louisiana";
	if(abbrev == "ME") return "Maine";
	if(abbrev == "MD") return "Maryland";
	if(abbrev == "MA") return "Massachusetts";
	if(abbrev == "MI") return "Michigan";
	if(abbrev == "MN") return "Minnesota";
	if(abbrev == "MS") return "Mississippi";
	if(abbrev == "MO") return "Missouri";
	if(abbrev == "MT") return "Montana";
	if(abbrev == "NE") return "Nebraska";
	if(abbrev == "NV") return "Nevada";
	if(abbrev == "NH") return "New Hampshire";
	if(abbrev == "NJ") return "New Jersey";
	if(abbrev == "NM") return "New Mexico";
	if(abbrev == "NY") return "New York";
	if(abbrev == "NC") return "North Carolina";
	if(abbrev == "ND") return "North Dakota";
	if(abbrev == "OH") return "Ohio";
	if(abbrev == "OK") return "Oklahoma";
	if(abbrev == "OR") return "Oregon";
	if(abbrev == "PA") return "Pennsylvania";
	if(abbrev == "RI") return "Rhode Island";
	if(abbrev == "SC") return "South Carolina";
	if(abbrev == "SD") return "South Dakota";
	if(abbrev == "TN") return "Tennessee";
	if(abbrev == "TX") return "Texas";
	if(abbrev == "UT") return "Utah";
	if(abbrev == "VT") return "Vermont";
	if(abbrev == "VA") return "Virginia";
	if(abbrev == "WA") return "Washington";
	if(abbrev == "WV") return "West Virginia";
	if(abbrev == "WI") return "Wisconsin";
	if(abbrev == "WY") return "Wyoming";
	return original;
}

function getSanyoListXmlHttpReq(){
	var xmlHttp;
	try{
		xmlHttp = new XMLHttpRequest();
	}catch(e){
		try{
			xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
		}catch(e){
			try{
				xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
			}catch(e){
				return false;
			}
		}
	}
	return xmlHttp;
}