
var g_currentZone		= -1;
var g_currentMonth		= "";
var g_currentLength		= "0|0";
var g_currentCategory	= -1;
var g_currentVendor		= -1;
var g_currentShip		= -1;
var g_currentPort		= -1;
var g_currentSort		= 10;
var currYear			= (new Date()).getFullYear();

var arrAllVendors		= null;
var isAllCategAvailable = true;

var CruiseSearchStatus;

/**
*
*/
function Sort(sortID, sortName)
{
	this.ID		= sortID;
	this.Name	= sortName;
}
/**
*
*/
function Port(portID, portName)
{
	this.ID		= portID;
	this.Name	= portName;
}

/**
*
*/
function Dst(vID, vName, vPorts)
{
	this.ID			= vID; 
	this.Name		= vName;
	this.Ports		= vPorts;
}

/**
*
*/
function Cat(vID, vName, vVendorArray)
{
	this.ID				=	vID;
	this.Name			=	vName;
	this.VendorArray	=	vVendorArray;
}

/**
*
*/
function Vnd(vID, vName, VShipArray)
{
	this.ID				=	vID;
	this.Name			=	vName;
	this.ShipArray		=	VShipArray;
}

/**
*
*/
function Shp(vID, vName)
{
	this.ID		=	vID;
	this.Name	=	vName;
}

/**
*
*
*/
function SetSelected(cbVendorCategory, cbCruiseVendor, cbShip )
{
	//set selected options
	if(g_currentCategory==-1)
	{
		cbVendorCategory.options[0].selected=true;
	}else
	{
		for(var idx1=0;idx1<cbVendorCategory.options.length;idx1++)
		{
			if(cbVendorCategory.options[idx1].value==g_currentCategory)
			{
				cbVendorCategory.options[idx1].selected=true;
				break;
			}
		}		
	}
	
	if(g_currentVendor==-1 && cbCruiseVendor.options != null && cbCruiseVendor.options[0] != null)
	{
		cbCruiseVendor.options[0].selected=true;
	}else
	{
		for(var idx2=0;idx2<cbCruiseVendor.options.length;idx2++)
		{
			if(cbCruiseVendor.options[idx2].value==g_currentVendor)
			{
				cbCruiseVendor.options[idx2].selected=true;
				break;
			}
		}
	}
	
	if(g_currentShip==-1)
	{
		cbShip.options[0].selected=true;
	}else
	{
		for(var idx3=0;idx3<cbShip.options.length;idx3++)
		{
			if(cbShip.options[idx3].value==g_currentShip)
			{
				cbShip.options[idx3].selected=true;
				break;
			}
		}
	}
}

/**
*
*
*/
function Optimization1(cbVendorCategory, cbCruiseVendor, cbShip)
{
	var arrCategories = eval('ArrayCategoryObjects'); //get ahold of combo data
	if(arrCategories==null)
		return false;

	ClearCombo(cbShip);
	AddAllOption(cbShip, allShips);
	
	var vendorsArr = null;
	var arrShips = new Array();
	if(g_currentCategory == -1) // all categories
	{
		for(var i=0; i<arrCategories.length ;i++)
		{
			vendorsArr = arrCategories[i].VendorArray;
			for(var j=0; j<vendorsArr.length ;j++)
			{
				if(g_currentVendor == -1 && arrCategories[i].ID != 999)
				{
					arrShips = arrShips.concat(vendorsArr[j].ShipArray);
				}else
				{
					if(g_currentVendor==vendorsArr[j].ID)
					{
						arrShips = vendorsArr[j].ShipArray;
						break;
					}
				}
			}
		}
	}else
	{
		for(var i=0; i < arrCategories.length ;i++)
		{
			if(arrCategories[i].ID == g_currentCategory)
			{
				vendorsArr = arrCategories[i].VendorArray;
				for(var j=0; j<vendorsArr.length ;j++)
				{
					if(g_currentVendor == -1)
					{
						arrShips = arrShips.concat(vendorsArr[j].ShipArray);
					}else
					{
						if(g_currentVendor==vendorsArr[j].ID)
						{
							arrShips = vendorsArr[j].ShipArray;
							break;
						}
					}
				}
			}
		}	
	}
	arrShips.sort(SortShipsCriteria);
	FillCombo2(cbShip, arrShips);
}

/**
*
*/
function LoadRelatedCombos(cbVendorCategory, cbCruiseVendor, cbShip, caller)
{
	var arrCategories = eval('ArrayCategoryObjects'); //get ahold of combo data

	if(arrCategories==null)
	{
		return;
	}

	//optimization 1
	//&& g_currentCategory==-1
	if(caller=='OnVendorChange')
	{
		Optimization1(cbVendorCategory, cbCruiseVendor, cbShip);
		SetSelected(cbVendorCategory, cbCruiseVendor, cbShip );
		return;
	}

	if(caller=='OnCategoryChange')
	{
		ClearCombo(cbCruiseVendor);
		ClearCombo(cbShip);
		if(isAllCategAvailable)
		{
			AddAllOption(cbCruiseVendor, allCruiselines);
		}
		AddAllOption(cbShip, allShips);
	}else // first Load
	{
		//prepare combos
		ClearCombo(cbVendorCategory);
		ClearCombo(cbCruiseVendor);
		ClearCombo(cbShip);
		if(isAllCategAvailable)
		{
			AddAllOption(cbVendorCategory,	allCategories);
		}
		AddAllOption(cbCruiseVendor, allCruiselines);
		AddAllOption(cbShip, allShips);
		FillCombo2(cbVendorCategory, arrCategories);
	}
	if(g_currentCategory == -1)
	{
		//load all options
		var arrShips = new Array();
		FillAllVendors(cbCruiseVendor, arrCategories);
		
		for(var i=0; i<arrCategories.length ;i++)
		{
			if(arrCategories[i].ID != 999)
			{
				var arrVendors = arrCategories[i].VendorArray;
				if(g_currentVendor == -1)
				{
					for(var j=0;j<arrVendors.length;j++)
					{
						arrShips = arrShips.concat(arrVendors[j].ShipArray);
					}
				}else // Fill the Ships Drop Down with a particular array
				{
					for(var j=0;j<arrVendors.length;j++)
					{
						if(arrVendors[j].ID==g_currentVendor)
						{
							arrShips = arrVendors[j].ShipArray;
							break;
						}
					}	
				}
			}
		}
		
		arrShips.sort(SortShipsCriteria);
		FillCombo2(cbShip, arrShips);
	}else
	{
		var vendorsArr = null;
		for(var i = 0; i < arrCategories.length; i++)
		{
			if(arrCategories[i].ID == g_currentCategory)
			{
				vendorsArr = arrCategories[i].VendorArray;
				break;
			}
		}
		
		if(vendorsArr==null)
		{
			alert('cannot find any vendors for category' + g_currentCategory);
			return;
		}
		
		FillCombo2(cbCruiseVendor, vendorsArr);
		if(g_currentVendor==-1)
		{
			//load all vendors
			var arrShips = new Array();
			for(var j=0;j<vendorsArr.length;j++)
			{
				arrShips = arrShips.concat(vendorsArr[j].ShipArray);
			}
			arrShips.sort(SortShipsCriteria);
			FillCombo2(cbShip, arrShips);
		}else
		{
			for(var j=0;j<vendorsArr.length;j++)
			{
				if(vendorsArr[j].ID==g_currentVendor)
				{
					var arrShips = vendorsArr[j].ShipArray;
					FillCombo2(cbShip, arrShips);
					break;
				}
			}
		}
	}
	SetSelected(cbVendorCategory, cbCruiseVendor, cbShip );
}


/**
*
*/
function LoadRoyalOlympiaCombos(cbVendorCategory, cbCruiseVendor, cbShip, caller)
{
	var arrCategories = eval('ArrayCategoryObjects'); //get ahold of combo data
	if(arrCategories==null)
	{
		return;
	}

	var vendorsArr = null;
	for(var i = 0; i < arrCategories.length; i++)
	{
		if(arrCategories[i].ID == g_currentCategory)
		{
			vendorsArr = arrCategories[i].VendorArray;
			break;
		}
	}
	if(vendorsArr==null)
	{
		alert('cannot find any vendors for category' + g_currentCategory);
		return;
	}
	
	for(var j=0;j<vendorsArr.length;j++)
	{
		if(vendorsArr[j].ID == g_currentVendor)
		{
			var arrShips = vendorsArr[j].ShipArray;
			FillCombo2(cbShip, arrShips);
			break;
		}
	}
	for(var idx3=0;idx3<cbShip.options.length;idx3++)
	{
		if(cbShip.options[idx3].value==g_currentShip)
		{
			cbShip.options[idx3].selected=true;
			break;
		}
	}
}

/**
*
*
*/
function FillAllVendors(cbCruiseVendor, arrCategories)
{
	if(arrAllVendors != null)
	{
		FillCombo2(cbCruiseVendor, arrAllVendors);
	}else
	{
		var arrVendors = new Array();
		for(var i=0; i<arrCategories.length ;i++)
		{
			if(arrCategories[i].ID != 999)
			{
				arrVendors = arrVendors.concat(arrCategories[i].VendorArray);
			}
		}
		
		arrAllVendors = arrVendors.sort(SortShipsCriteria);
		FillCombo2(cbCruiseVendor, arrAllVendors);
	}
}

/**
*
*
*/
function SortShipsCriteria(obj1, obj2)
{
	var Obj1_Name = obj1.Name.toUpperCase();
	var Obj2_Name = obj2.Name.toUpperCase();
	
	if(Obj1_Name < Obj2_Name)
		return -1;
	if(Obj1_Name == Obj2_Name)
		return 0;
	if(Obj1_Name > Obj2_Name)
		return 1;
}

/**
*
*
*/
function OnCategoryChange(VendorCategoryID, CruiseVendorID, ShipID)
{
	var cbVendorCategory	= getElement(VendorCategoryID);
	var cbCruiseVendor		= getElement(CruiseVendorID);
	var cbShip				= getElement(ShipID);
	var optCategory			= cbVendorCategory.options[cbVendorCategory.selectedIndex];	
	
	if(optCategory!=null)
	{
		g_currentCategory	= optCategory.value;
		g_currentVendor		= -1;
		g_currentShip		= -1;
		LoadRelatedCombos(cbVendorCategory, cbCruiseVendor, cbShip, 'OnCategoryChange');
	}
}

/**
*
*
*/
function OnVendorChange(CruiseVendorID, VendorCategoryID,  ShipID)
{
	var cbCruiseVendor	= getElement(CruiseVendorID);
	var cbShip			= getElement(ShipID);
	var cbCategory		= getElement(VendorCategoryID);
	var optVendor		= cbCruiseVendor.options[cbCruiseVendor.selectedIndex];

	if(optVendor!=null)
	{
		g_currentVendor = optVendor.value;
		if(g_currentVendor=='-1')//all ships
		{
			g_currentShip  = -1;
		}
		LoadRelatedCombos(cbCategory, cbCruiseVendor, cbShip, 'OnVendorChange');
	}	
}

/**
*
*
*/
function OnShipChange(ShipID)
{
	var cbShip		= getElement(ShipID);
	var optShip		= cbShip.options[cbShip.selectedIndex];
}

/**
*
*
*/
function OnStartupLoad(VendorCategoryID, CruiseVendorID, ShipID, MonthID, LengthID)
{	
	var cbVendorCategory	= getElement(VendorCategoryID);
	var cbCruiseVendor		= getElement(CruiseVendorID);
	var cbShip				= getElement(ShipID);
	var cbMonth				= getElement(MonthID);
	var cbLength			= getElement(LengthID);
	
	if(cbMonth != null)
	{	
		setDefaultSelection(cbMonth, g_currentMonth);	 
	}
	
	if(cbLength != null)
	{
		setDefaultSelection(cbLength, g_currentLength);	 
	}
	
	LoadRelatedCombos(cbVendorCategory, cbCruiseVendor, cbShip, 'OnStartupLoad');
}

/**
*
*
*/
function OnRoyalStartupLoad(ShipID)
{	
	var cbShip				= getElement(ShipID);
	LoadRoyalOlympiaCombos(null, null, cbShip, 'OnRoyalStartupLoad');
}

/**
*
* 
*/
function OnStartupZonesLoad(ZoneDropDownID, EmbarkDropDownID, ShowPort, allDest)
{	
	var cbEmbarkDropDown				= getElement(EmbarkDropDownID);
	var cbZonesDropDown					= getElement(ZoneDropDownID);

	if(ShowPort != "")
		cbEmbarkDropDown.style.display	= getElement(ShowPort).value;
	
	var zonesArray						= eval("ArrayDestinationsObjects");
	if(allDest == "true")
	{
		var oOption						= new Option(allDestinations, "-1")
		cbZonesDropDown.options[cbZonesDropDown.length]	= oOption;
	}
	
	if(zonesArray != null && zonesArray.length > 0)
	{
		FillCombo2(cbZonesDropDown, zonesArray);
	}else if(allDest != "true")
	{
		var oOption						= new Option(allDestinations, "-1")
		cbZonesDropDown.options[cbZonesDropDown.length]	= oOption;
	}
	setDefaultSelection(cbZonesDropDown, g_currentZone);
}


/*
*
*
*/
function FillPortsDropDown(ZonesDropDownID, EmbarkDropDownID)
{
	var cbZonesDropDown		= getElement(ZonesDropDownID);
	var cbEmbarkDropDown	= getElement(EmbarkDropDownID);
	
	var cbZonesDropDownVal	= cbZonesDropDown.value;
	var zonesArray			= eval("ArrayDestinationsObjects");	
	var portsArray			= eval("ArrayPortsObjects");
	
	var portList			= "";

	if(cbZonesDropDownVal != -1 && cbZonesDropDownVal != -2)
	{
		for(var zoneIdx = 0; zoneIdx < zonesArray.length; zoneIdx++)
		{
			if(zonesArray[zoneIdx].ID == cbZonesDropDownVal)
			{
				portList = zonesArray[zoneIdx].Ports;
				break;
			}
		}
		
		var arrPortID		= portList.split(",");
		var destPortsArr	= new Array();
		if(arrPortID != null && arrPortID.length > 0)
		{
			for(var portIdx=0; portIdx < arrPortID.length; portIdx++)
			{
				for(var k =0; k < portsArray.length; k++)
				{
					if(arrPortID[portIdx] == portsArray[k].ID)
					{
						var port	= new Port(arrPortID[portIdx], portsArray[k].Name);
						destPortsArr[destPortsArr.length] = port;
						break;
					}
				}			
			}
		}
	}else
	{
		destPortsArr = portsArray;
	}
	
	ClearCombo(cbEmbarkDropDown);
	var oOption											= new Option(allPorts, "-1")
	cbEmbarkDropDown.options[cbEmbarkDropDown.length]	= oOption;
	destPortsArr.sort(SortShipsCriteria);
	FillCombo2(cbEmbarkDropDown, destPortsArr);
	setDefaultSelection(cbEmbarkDropDown, g_currentPort);
}


/**
*
*
*/
function AddNewElement(arrObjects, object)
{
	var found = false;
	for(var idx=0; idx < arrObjects.length; idx++)	
	{
		if(arrObjects[idx].ID == object.ID)
		{
			found = true;
			return;
		}
	}
	arrObjects[arrObjects.length] = object;
	return arrObjects;
}

////////////////////////////////////////////////////////////////////////
var newwindow;
			

function poptastic(url, width, height)
{
	newwindow=window.open(url,'name','height='+height+ ',width='+width+',resizable=0,scrollbars=yes');
	if (window.focus) {newwindow.focus()}
}


function setDefaultSelection(cb, defSel)
{
	for(var i = 0; i < cb.options.length; i++)
	{
		var op = cb.options[i];
		if(defSel == op.value)
		{
			cb.options[i].selected = true;
		}
	}
}



function OpenPortExplorer(cbPortID, LocationURL, wndProp)
{
	var cbPort	= getElement(cbPortID);
	var portVal	= cbPort.value;
	
	if(portVal != "-1")
	{
		var url		= LocationURL + "&LocationID=" + portVal;
		newwindow=window.open(url,'win',wndProp);
		if (window.focus) {newwindow.focus()}
	
	}else
	{
		alert("Please choose a port of departure!");
	}
}


function SendState_Adv(strFile, agency, target)
{
	var strUrl		= strFile + "?";
	var cbDest		= getElement("DestinationDropDown");
	var cbLen		= getElement("LenDropDown");
	var cbVndCat	= getElement("VndCatDropDown");
	var cbVnd		= getElement("VndDropDown");
	var cbShp		= getElement("ShipsDropDown");
	var cbSort		= getElement("SortByDropDown");
	var cbPort		= getElement("PortDropDown");
	var cbSenior	= getElement("Seniors");
	var cbMilitary	= getElement("Military");
	var cbZip1		= getElement("Zip1");
	var cbZip2		= getElement("Zip2");
	var cbPromoCode	= getElement("PromoCode");
	var cbAdvSrc	= getElement("Ref");
	var cbPIN		= getElement("PIN");
	var cbPhone		= getElement("Phone");
	var cbHome		= getElement("Home");
	var cbLID		= getElement("LID");
	var cbDate		= getElement("DateDropDown");
	
	if(agency != null)
	{
	    if (agency != '')
	    strUrl   += "skin=" + agency;
	}
	
	if (cbDest != null && cbDest.value != null && cbDest.value != '')
	{
	    strUrl   += "&CD="	+ escape(cbDest.value);
	}
	
	if(null != cbDate && cbDate.value != null && cbDate.value != '')
	{
		strUrl   += "&DF="	+ escape(cbDate.value);
	}
	else
	{
		strUrl   += "&DF="	+ getFullDate("DateFromMonth", "DateFromDay", "DateFromYear");// 
		strUrl   += "&DT="	+ getFullDate("DateToMonth", "DateToDay", "DateToYear");// 	
	}
	
	if(cbLen != null)
	{
	    if(cbLen.value!='')
	    strUrl   += "&CL="	+escape(cbLen.value);
	}
	if(cbVndCat != null)
	{
	    if(cbVndCat.value!='')
	    strUrl   += "&CVC=" +escape(cbVndCat.value);
	}
	if(cbVnd != null)
	{
	    if(cbVnd.value!='')
	    strUrl   += "&CV="	+escape(cbVnd.value)
	}
	if(cbShp != null)
	{
	    if(cbShp.value!='')
	    strUrl   += "&ships=" +escape(cbShp.value)
	}
	if(cbSort != null)
	{
	    if(cbSort.value!='')
	    strUrl   += "&sort=" +escape(cbSort.value);
	}
	if(cbPort != null)
	{
	    if(cbPort.value!='')
	    strUrl   += "&ports="	+escape(cbPort.value)
	}
	if(cbSenior != null)
	{
	    if(cbSenior.value!='')
	    strUrl   += "&SN="	+escape(cbSenior.value);
	}
	if(cbMilitary != null)
	{
	    if(cbMilitary.value!='')
	    strUrl   += "&MT="	+escape(cbMilitary.value);
	}		
	if(cbZip1 != null)
	{
	    if(cbZip1.value!='')
	    strUrl   += "&ZP1="	+escape(cbZip1.value);
	}	
	if(cbZip2 != null)
	{
	    if(cbZip2.value!='')
	    strUrl   += "&ZP2="	+escape(cbZip2.value);
	}
	if(cbPromoCode != null)
	{
	    if(cbPromoCode.value!='')
	    strUrl   += "&PC="	+escape(cbPromoCode.value);
	}		
	if(cbAdvSrc != null)
	{
	    if (cbAdvSrc.value!='')
	    strUrl   += "&Ref="	+escape(cbAdvSrc.value);
	}
	if(cbPIN != null)
	{
	    if(cbPIN.value!='')
	    strUrl   += "&PIN=" +escape(cbPIN.value);
	}
	if(cbPhone != null)
	{
	    if(cbPhone.value!='')
	    strUrl   += "&Phone=" +escape(cbPhone.value);
	}
	if(cbHome != null)
	{
	    if(cbHome.value!='')
	    strUrl   += "&Home=" + escape(cbHome.value);  
	}
	if(cbLID != null)
	{
	    if(cbLID.value!='')
	    strUrl   += "&LID=" +escape(cbLID.value)
	}	
	
	if (target && target == "_blank")
		window.open(strUrl);
	else if (target && target == "_top")
		window.top.location.href = strUrl;
	else
		window.location.href = strUrl;
}

function GoToPage(strURL)
{
	if(window.parent != null)
	{
		window.parent.location.href = strURL;
	}else
	{
		window.location.href = strURL;
	}
}


function getFullDate(cbMonthID, cbDayID, cbYearID)
{
	var cbYear	= getElement(cbYearID);
	var cbMonth	= getElement(cbMonthID);
	var cbDay	= getElement(cbDayID);
	
	
	var date	= new Date();
	var strDate = date.getMonth() + "/" + date.getDate() + "/" + date.getYear();
		
	if(cbMonth != null && cbDay != null && cbYear != null)
	{
		strDate = cbMonth.value + "/" + cbDay.value + "/" + cbYear.value;
	}
	return escape(strDate);
}