//
// Send data to server, receive respond xml
//
function GetData( sendMethod, url , dataToSend, timeOut, sendAsync )
{
	var localXmlHttp;
	
	if( window.ActiveXObject )
	{
		localXmlHttp = new ActiveXObject( 'Microsoft.XMLHTTP' );
		// Specifies true for asynchronous operation (the call returns immediately)
		localXmlHttp.Open( sendMethod , url , sendAsync );
		localXmlHttp.Send( dataToSend );
		localXmlHttp.onreadystatechange = timeOut;
	}
	else if( window.XMLHttpRequest )
	{
		localXmlHttp = new XMLHttpRequest();
		// Specifies true for asynchronous operation (the call returns immediately)
		localXmlHttp.open( sendMethod, url, sendAsync );
		localXmlHttp.send( dataToSend );
		localXmlHttp.onreadystatechange = timeOut;
	}
		
	return localXmlHttp;
}

//
// Client redirect
//
function ClientRedirect( path )
{
	if ( document.location.replace != null )
		document.location.replace( path );
	else
		document.location = path;
}

// ******************************************************************************
// Cabin Categories request
// ******************************************************************************

function SearchData( ReqUrl, RedUrl )
{
	var processor = new RequestDataProcessor( ReqUrl, RedUrl );
	processor.Request( );
}

function RequestDataProcessor( ReqUrl, RedUrl )
{
	var _urlToSent = ReqUrl;
	var _urlToRedirect = RedUrl;
	var xmlhttp;
	
	this.Request = function Request( )
	{
		var Method = 'Get'
		var DataToSend = '0';
		var sendAsync = true;
				
		xmlhttp = GetData( Method, _urlToSent, DataToSend, getRequestStatus, sendAsync );
	}
	
	function getRequestStatus( )
	{
		if (xmlhttp.readyState == 4)
			completeRequest( )
		
		return;
	}
	
	function completeRequest( )
	{
		ClientRedirect( _urlToRedirect );
	}
}


// ******************************************************************************
// Get US states methods
// ******************************************************************************
function FillUSStates( StatesContainerName, StatesDDLName, URL, SelState )
{
	var StatesContainer = document.getElementById( StatesContainerName );

	if ( StatesContainer != null )
	{
		var statesList = new StatesList( SelState, URL, false, StatesContainer, StatesDDLName )
		statesList.Fill( );
	}
}

// States list prototype object
function StatesList( SelState, URL, DEBUG, StatesContainer, StatesDDLName )
{
	// Private members
	var SelectedState = SelState;
	var Url = URL;
	var Debug = DEBUG
	
	var _StatesContainer = StatesContainer;
	var _StatesDDLName = StatesDDLName;
	
	var xmlhttp;

	// Get ports xml
	function GetUSStatesListXml( )
	{
		var Method = 'GET';
		var UrlToSent = Url + '?ac=3&state=' + SelectedState;
		var DataToSend = '0';
		var sendAsync = true;
		
		// Debug
		if ( Debug ) alert( UrlToSent )
		
		xmlhttp = GetData( Method, UrlToSent, DataToSend, timeOut, sendAsync );
	}
	
	function timeOut()
	{
		//alert(xmlhttp.readyState);
		if (xmlhttp.readyState == 4)
			TransferComplete();
		
		return;
	}
	
	// fill states drop down list with async results
	function TransferComplete()
	{	
		var ResponseData = xmlhttp.responseText;
		
		if ( Debug ) alert( ResponseData + "\n SelState=" + _SelState )
		
		if ( ResponseData == '' )
			return;
		else
		{
			// Fill dropdown list	
			ResponseData = "<select name='"+ _StatesDDLName + "' style='width:120px'>" + ResponseData + "</select>";
			_StatesContainer.innerHTML = ResponseData;			
		}
	}
	
	this.Fill = function Fill( )
	{
		GetUSStatesListXml( );
	}
	
}

// ******************************************************************************
// Get ports methods
// ******************************************************************************
function FillPortsList( DestDDLName, PortsDDLName, URL, PortID  )
{
	try
	{
		var PortsDDL = document.getElementById( PortsDDLName );
		var DestDDL = document.getElementById( DestDDLName );
		
		if ( PortsDDL != null && DestDDL != null )
		{	
			var cruiseDestinationID = DestDDL[DestDDL.selectedIndex].value;
			
			var portsList = new PortsList( cruiseDestinationID, URL, false, PortsDDL, PortID );
			portsList.Fill( );
		}
	}
	catch( e )
	{
		
	}
}

// PortList prototype object
function PortsList( CruiseDestinationID, URL, DEBUG, PortsDDL, PortID )
{
	// Private members
	var DestID = CruiseDestinationID;
	var Url = URL;
	var Debug = DEBUG
	
	var _PortsDDL = PortsDDL;
	var _PortID = PortID;
	
	var xmlhttp;
	
	// Get ports xml
	function GetPortsListXml( )
	{
		var Method = 'GET';
		var UrlToSent = Url + '?ac=2&cruisedestid=' + DestID;
		var DataToSend = '0';
		var sendAsync = true;
		
		// Debug
		if ( Debug ) alert( UrlToSent )
			
		xmlhttp = GetData( Method, UrlToSent, DataToSend, timeOut, sendAsync );
	}
		
	function timeOut()
	{
		//alert(xmlhttp.readyState);
		if (xmlhttp.readyState == 4)
			TransferComplete();
		
		return;
	}
	
	// fill ports drop down list with async results
	function TransferComplete()
	{
		var ResponseData = xmlhttp.responseText;
		
		if ( Debug ) alert( ResponseData + "\n PortID=" + PortID )
		
		if ( ResponseData == '' )
			return;
		else
		{			
			// Fill dropdown list
			var delim = "||";
			var option = ResponseData.split( delim );
			var j = 0;
			var comboLength = option.length/2;

			_PortsDDL.length = comboLength;

			for ( i = 0; i < comboLength; i++ )
			{
				_PortsDDL.options[i].value = option[j];
				_PortsDDL.options[i].text = option[j+1];
				
				if ( _PortID == option[j] )
					_PortsDDL.options[i].selected = true;
				
				j +=2;
			}
			
			if ( _PortID == 0 )
				_PortsDDL.options[0].selected = true;
		}
	}

	this.Fill = function Fill( )
	{
		GetPortsListXml( );
	}
	
}
//******************************************************************************

// PortList prototype object
function OrderReport_SendMail(lblMessageId, lblGeneralErrorMessage, emailAddress, hidePrice)
{	
	var _lblMessageId = lblMessageId;
	var _emailAddress = emailAddress;
	var _lblGeneralErrorMessage = lblGeneralErrorMessage;
	
	// Get ports xml
	this.GetResponseText = function GetResponseText( )
	{
		var Method = 'GET';
		var UrlToSent = 'PageReservationsPrinter.aspx?EmailAddress=' + _emailAddress + '&hp=' + hidePrice;
		var DataToSend = '0';
		
		GetData( Method, UrlToSent, DataToSend );
	}
	
	//
	// Send data to server, receive respond xml
	//
	
	var xmlhttp;
	
	function GetData( sendMethod, url , dataToSend )
	{
		if( window.ActiveXObject )
		{
			xmlhttp = new ActiveXObject( 'Microsoft.XMLHTTP' );
			// Specifies true for asynchronous operation (the call returns immediately)
			xmlhttp.Open( sendMethod , url , true );
			xmlhttp.Send( dataToSend );
			xmlhttp.onreadystatechange = timeOut;
		}
		else if( window.XMLHttpRequest )
		{
			xmlhttp = new XMLHttpRequest();
			// Specifies true for asynchronous operation (the call returns immediately)
			xmlhttp.open( sendMethod, url, true );
			xmlhttp.send( dataToSend );
			xmlhttp.onreadystatechange = timeOut;
		}
	}
	
	function timeOut()
	{
		//alert(xmlhttp.readyState);
		if (xmlhttp.readyState == 4)
			TransferComplete();
		
		return;
	}
	
	function TransferComplete()
	{
	
		var ResponseData = xmlhttp.responseText;		
		var lblMessageObject = document.getElementById(_lblMessageId);
		var lblGeneralErrorMessageObject = document.getElementById(_lblGeneralErrorMessage);
		var index = ResponseData.indexOf("Message:");
		if (index == 0)
			ResponseData = ResponseData.substring(("Message:").length);
		else
		{
			ResponseData = '';
			lblGeneralErrorMessageObject.style.display = '';
			lblMessageObject.style.display = 'none';
		}
			
		var agt=navigator.appName.toLowerCase();
		if (agt.indexOf('microsoft')!=-1)
		{
			lblMessageObject.innerText = ResponseData;
		}
		else 
		{
			lblMessageObject.firstChild.data = ResponseData;
		}


	}
	
}
