﻿
///////////////////////////////////////////////////////////
// Asynchronous method call code START                   // 
///////////////////////////////////////////////////////////

var request;
var queryString;
var lblPoll;
var bReportErrors = false; //Alert errors during the asynch call.

function showPollForJsUsers() {
	if (document.getElementById('poll')) {
		var poll = document.getElementById('poll');
		poll.style.display = 'block';
	}
}

function pollSubmit()
{			
	//Send the poll data.
	sendData('/controls/poll/submitPoll.aspx');
}

function sendData(url)
{
	// Read lblPoll's ClientID
	lblPoll = findControl("lblPoll_ClientID").value;

	if (setQueryString() > 0) {
		hideElement("pollErrorMessage");
		
		// Hide buttons
		if (elementExists("pollSubmit1")) hideElement("pollSubmit1");
		if (elementExists("pollSubmit2")) hideElement("pollSubmit2");
		
		httpRequest("POST", url, true);
	
//		setInnerHTML(lblPoll, "<span class='loadStyle'>Loading data...</span>")
	} else {
		// Nothing selected - show error message
		showElement("pollErrorMessage");
		
		// Show buttons
		if (elementExists("pollSubmit1")) showElement("pollSubmit1");
		if (elementExists("pollSubmit2")) showElement("pollSubmit2");
	}
}

//Callback function.
function displayData()
{
	//Set the inner html
	setInnerHTML(lblPoll, request.responseText);
	
	//Reset the poll styles.
	if (objInternetExplorer6Object) {
		
		//Common.refreshMe();	//Leave commented out.
		
		var poll = document.getElementById('poll');
		poll.className = 'jsPoll';
		
		var top = poll.getElementsByTagName('div')[0];
		top.className = 'jsPollTop';
		
		var h2 = top.getElementsByTagName('h2')[0];
		h2.className = 'jsH2';
		
		var span = h2.getElementsByTagName('span')[0];
		span.className = 'jsH2Span';
		
		var childDiv = top.getElementsByTagName('div')[0];
		childDiv.className = 'jsChildDiv';
		
		var ul = childDiv.getElementsByTagName('ul')[0];
		ul.className = 'jsUl';
		
		var arrLi = ul.getElementsByTagName('li');
		for (var i = 0; i < arrLi.length; i++) {
			var li = arrLi[i];
			switch (li.className) {
				case 'meter':
					li.className = 'jsLiMeter';
					break;
				case 'percent':
					li.className = 'jsLiPercent';
					break;
				case 'label':
					li.className = 'jsLiLabel';
					break;
			}
		}
		
		var pollFooter = document.getElementById('poll-footer');
		pollFooter.className = 'jsPollFooter';

		//IEPNGFix.fix(poll, '/images/callout/tip-ie.png', 1);	//Leave commented out.
	}
}

function httpRequest(reqType, url, asynch)
{
	//Mozilla base browsers
	if(window.XMLHttpRequest){
		request = new XMLHttpRequest();
	// IE browsers
	}else if ( window.ActiveXObject ){
		request = new ActiveXObject("Msxml2.XMLHTTP");
		if( !request) {
			request = new ActiveXObject("Microsoft.XMLHTTP");
		}
	}

	if( request ){
		initReq(reqType,url,asynch);
	}else{
		alert("Your browser does not permit the use of all of this application's features");
	}
}

function initReq(reqType,url,isAsynch)
{
	request.onreadystatechange = handleResponse;
	request.open(reqType,url,isAsynch);
	request.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
	request.send(queryString);
}

// Creates the querystring and returns the number of items selected on the form
function setQueryString()
{
	queryString = "";
	var form = document.forms[0];
	var numberElements = form.elements.length;
	var sepString = "";
	var numSelected = 0;
	
	for (var i=0; i < numberElements; i++){
		if( form.elements[i].name != "__VIEWSTATE")
		{
			ele = form.elements[i];			
			
			if( ( ele.type == "radio" || ele.type == "checkbox") && ele.checked == true ){
				queryString += sepString + form.elements[i].name+"="+encodeURIComponent(form.elements[i].value);
				sepString = "&";
				numSelected++;
			} 
			else if( ele.type.indexOf("select") == 0 ){
				queryString += sepString + form.elements[i].name+"="+encodeURIComponent(form.elements[i].value);
				sepString = "&";
				numSelected++;
			}
			else if(form.elements[i].name.substring(0,4) == "poll"){
				// Append only poll-related hidden input fields to querystring
				queryString += sepString + form.elements[i].name+"="+encodeURIComponent(form.elements[i].value);
				sepString = "&";
			}	
		}
	}
	return numSelected;
}

function handleResponse()
{
	if(request.readyState == 4){
 
		try {
			if(request.status == 200){			
				displayData();
			}else{			
				alert("A problem occured when attempting to communicate with the server. Error code: " + request.status);			
//				setInnerHTML(lblPoll, "")
			}
		
		} catch (err) {
			if (bReportErrors) {
				alert(err);
			}
		}
	}
}

function findControl(name)
{
	var form = document.forms[0];
	var numberElements = form.elements.length;
	
	for (var i=0; i < numberElements; i++){
		if( form.elements[i].name == name)
		{
			return form.elements[i];			
		}
	}
}

function elementExists(id)
{
	if( document.getElementById ){
		return (document.getElementById(id) != null);
	}
}

function showElement(id)
{
	if( document.getElementById ){
		ele = document.getElementById(id);
		ele.style.display = "inline-block";
		ele.style.visibility = "visible";
	}
}

function hideElement(id)
{
	if( document.getElementById ){
		ele = document.getElementById(id);
		ele.style.display = "none";
	}
}

function setInnerHTML(id, value)
{
	if( document.getElementById ){
		ele = document.getElementById(id);
		ele.innerHTML = value;
	}
}

///////////////////////////////////////////////////////////
// Asynchronous method call code END                     // 
///////////////////////////////////////////////////////////


