/***************************************************************************
*                            Dolphin Smart Community Builder
*                              -------------------
*
*  (C) BoonEx Ltd., 2006
***************************************************************************/
// ---] Variables [---
var XMLHtppReqObj = false;
var XMLUrl = 'locident/liXMLgenerator.php';
var XMLTagName = 'option';

var fCountryID = 'Country';
var fStateID = 'State';
var fCityID = 'City';
var fOtherCityID = 'liOtherCity';
var divOtherCityID = 'liOtherCityDiv';

var fUIDValID = 'liUIDVal';
var fStateValID = 'liStateVal';
var fCityValID = 'liCityVal';
var fIsSearchPageValID = 'liIsSearchPageVal';
var fCurLangValID = 'liCurLangVal';

var fLoadingMsgValID = 'liLoadingMsg';
var fInputCityMsgValID = 'liInputCityMsg';

// ---] Creating XMLHttpRequestObject [---
/*var el = document.getElementsByName("City");


if (el != null)
{
	
	if (el.type == 'hidden' && el.value != "") alert("Yes"); else alert('Not exists');
}*/

if ( window.XMLHttpRequest )
	XMLHttpReqObj = new XMLHttpRequest();
else if ( window.ActiveXObject )
	XMLHttpReqObj = new ActiveXObject("Microsoft.XMLHttp");
else
	alert('Your browser doesn\'t support XMLHttpRequest');

var Request = new Request('get_states');

if (document.addEventListener) {
    document.addEventListener("DOMContentLoaded", Request.start, false);
}

/*@cc_on @*/
/*@if (@_win32)
document.write("<script id=__ie_onload defer src=javascript:void(0)>");
document.write("<\/script>");
var script = document.getElementById("__ie_onload");
script.onreadystatechange = function() {
    if (this.readyState == "complete") {
       Request.start();
    }
};
/*@end @*/

//window.onload = Request.start;
// ---] Action functions [---

//
function doSendRequest( action )
{
	
    Request.action = action;
	if ( action == 'get_states' )
		Request.start = getStates;
	else if ( action == 'get_cities' )
		Request.start = getCities;
	Request.start();
}

// this object contains some imporataint variables
function Request( action )
{	
	this.action = action;

	switch ( action )
	{
		case "get_states":
			this.start = getStates;
		break;
		
		case "get_cities":
			this.start = getCities;
		break;
	}
}

// function sends request to get data for 'State' field
function getStates()
{
 try
{ 
	if (document.getElementById('liStateVal').value != '' && document.getElementById('State').type != 'select-one' ) return 0; 
	if ( !validateObject(fCountryID, 'select-one') ) return 0;

	showLoadingMsg( fStateID );
	clearSelection( fStateID );
	showLoadingMsg( fStateID );

	var countryVal = validateObject(fCountryID, 'select-one').value;
	var action = Request.action;
	var UIDVal = document.getElementById(fUIDValID).value;
	var argVal = document.getElementById(fStateValID).value;
	var isSearchPageVal = document.getElementById(fIsSearchPageValID).value;
	var curLangVal = document.getElementById(fCurLangValID).value;
	
	var filterFlag = 'action=' + action + '&UID=' + UIDVal + '&country=' + countryVal + '&arg=' + argVal + '&isSearchPage=' + isSearchPageVal + '&curLang=' + curLangVal;
	
	//window.open(XMLUrl + "?" + filterFlag); // for debuging

	sendRequest( filterFlag );
	}catch(ex)
	{
		return 0;
	}
}

// function sends request to get data for 'City' field
function getCities()
{
	showLoadingMsg( fCityID );
	clearSelection( fCityID );
	showLoadingMsg( fCityID );
	
	var countryVal = validateObject(fCountryID, 'select-one').value;
	var stateVal = validateObject(fStateID, 'select-one').value;
	var action = Request.action;
	var UIDVal = document.getElementById(fUIDValID).value;
	
	if ( stateVal == document.getElementById(fStateValID).value )
		var argVal = document.getElementById(fCityValID).value;
	else
		var argVal = 0;
	
	var isSearchPageVal = document.getElementById(fIsSearchPageValID).value;
	var curLangVal = document.getElementById(fCurLangValID).value;
	
	var filterFlag = 'action=' + action + '&UID=' + UIDVal + '&country=' + countryVal + '&state=' + stateVal + '&arg=' + argVal + '&isSearchPage=' + isSearchPageVal + '&curLang=' + curLangVal;
		
	//window.open(XMLUrl + "?" + filterFlag); // for debuging
	
	sendRequest( filterFlag );
}

// sends request to XML generator and passes result to function getData
function sendRequest( filterFlag )
{
	if ( !XMLHttpReqObj )
	{
		alert("Can't create XMLHttpRequest object!");
		return 0;
	}
	
	XMLHttpReqObj.open("POST", XMLUrl);
	XMLHttpReqObj.setRequestHeader ( 'Content-type', 'application/x-www-form-urlencoded' );
	
	XMLHttpReqObj.onreadystatechange = function()
	{
		if ( XMLHttpReqObj.readyState == 4 && XMLHttpReqObj.status == 200 )
			getData();
	}
	
	XMLHttpReqObj.send( filterFlag );
}

// 
function getData()
{
	var XMLNodes = XMLHttpReqObj.responseXML.getElementsByTagName(XMLTagName);
	var action = Request.action;
	var SID = '';
	//alert(XMLNodes.length); // for debugging
	
	divCloser( 1, 0 )
	
	switch ( action )
	{
		case "get_states":
			SID = fStateID;
		break;
		
		case "get_cities":
			SID = fCityID;
			createInputCity();
		break;
	}
	
	fillSelection( SID, XMLNodes );
	
	if( action == 'get_states' )
	{
		Request.action = 'get_cities';
		Request.start = getCities;
		Request.start();
	}
}

// ---] Utilites [---

//
function createInputCity()
{
	var obj = validateObject(fCityID, 'select-one');
	
	var parentNode = obj.parentNode;
	var inputCityMsg = document.getElementById(fInputCityMsgValID).value;
	var fID = fOtherCityID;
	var divID = divOtherCityID;
	var ret ='';
	
	if ( document.getElementById(divID) )
	{
		return 0;
	}
	
	ret = "<div id=\"" + divID + "\" style=\"display: none;\">" + inputCityMsg + "&nbsp;";
	ret = ret + "<input type=\"text\" name=\"City\" id=\"" + fID + "\" value='' size=\"20\">";
	ret = ret + "</div>";
	
	//alert(ret); //for debuging

	parentNode.innerHTML = parentNode.innerHTML + ret;
	divCloser( 1, 0 )
}

//
function divCloser( doHide, newVal )
{
	var div = document.getElementById(divOtherCityID);
	var field = document.getElementById(fOtherCityID);
	
	if ( !newVal ) newVal = '';
	
	if ( !div )
		return 0;
	
	if ( doHide == 1 )
	{
		div.style.display = 'none';
		field.disabled = true;
	}
	else
	{
		div.style.display = 'block';
		field.disabled = false;
	}
	
	field.value = newVal;
}

//
function clearSelection( SID )
{
	var obj = validateObject(SID, 'select-one');
	
	for ( var loopIndex = obj.options.length - 1; loopIndex >= 0; loopIndex-- )
	{
		obj.options[loopIndex] = null;
	}
}

//
function fillSelection( SID, XMLNodes )
{
	var obj = validateObject(SID, 'select-one');
	var action = Request.action;
	var loopIndex = 0;
	var selIndex = 0;
	
	switch ( action )
	{
		case "get_states":
		
			for ( loopIndex = 0; loopIndex < XMLNodes.length; loopIndex++ )
			{
				var XMLNode = XMLNodes[loopIndex]; 
				var value = XMLNode.getAttribute('value');
				var text = XMLNode.getAttribute('text');
				var selected = XMLNode.getAttribute('selected');
				
				if ( selected == '1' )
					selIndex = loopIndex;
					
				newOption = new Option( text, value );
				obj.options.add(newOption);
			}
			
		break;
		
		case "get_cities":
			
			for ( loopIndex = 0; loopIndex < XMLNodes.length; loopIndex++ )
			{
				var XMLNode = XMLNodes[loopIndex];
				var value = XMLNode.getAttribute('value');
				var text = XMLNode.getAttribute('text');
				var selected = XMLNode.getAttribute('selected');
				
				if ( value == "0" ) 
				{
					if ( selected == 1 ) 
					{	
						var value2 = XMLNode.getAttribute('value2');
						if ( value2 == '0' ) value2 = null;
						
						divCloser( 0, value2 );
					}
					reaction = 0;
				}
				else 
					reaction = 1;
				
				if ( selected == '1' )
					selIndex = loopIndex;
				
				newOption = new Option( text, value );
				obj.options.add(newOption);
				
				obj.options[loopIndex+1].reaction = reaction;

			}
		break;	
	}
	
	hideLoadingMsg( SID );
	obj.options[selIndex].selected = true;
	//alert(obj.innerHTML); // for debuging
}

function divCloserM( index )
{
	var options = validateObject(fCityID, 'select-one');

	var value = document.getElementById(fOtherCityID).value;

	if ( !value )
		value = null;
	divCloser(options[index].reaction, value);
}

//
function showLoadingMsg( SID )
{
	var obj = validateObject(SID, 'select-one');
	var msg = document.getElementById(fLoadingMsgValID).value;
	
	obj.style.background = '#FFB4B4';
	obj.disabled = true;
	
	newOption = new Option( msg, 0, true, true);
	obj.options[0] = newOption;
}

//
function hideLoadingMsg( SID )
{
	var obj = validateObject(SID, 'select-one');
	
	obj.disabled = false;
	obj.style.background = '';
	obj.options[0] = null;
}

//
function validateObject( SID, fieldType )
{
	var obj = document.getElementById(SID);
	
	if ( !obj ) return 0;
	
	if (obj.type != fieldType)
	{
		var objs = document.getElementsByName(SID);
		for ( var i = 0; i < objs.length; i++ )
		{
			if ( objs[i].type == fieldType & objs[i].id == SID )
				obj = objs[i];
		}
	}
	else
		return obj;
	
	if ( obj.type != fieldType )
	{
		//alert("Element '" + SID + "' isn't a select-one menu! Aborting.");
		return obj;
	}
	
	return obj;
}