var Xmlreq = getXMLHTTPRequest();
var req = getXMLHTTPRequest();
var arrFromCity;
var arrToCity;
var arrFMixCodes;
var fMixCodes;
var TcvRb;
var TempMixcode;
fmixcodes ="";
arrFromCity = new Array();
arrToCity = new Array();
//alert(InputFromBestSellers);

function getXMLHTTPRequest() 
{
	try 
	{
		req = new XMLHttpRequest();
	} 
	catch(err1) 
	{
		try 
		{
			req = new ActiveXObject('Msxml2.XMLHTTP');			
		} 
		catch (err2) 
		{
			try 
			{
				req = new ActiveXObject("Microsoft.XMLHTTP");
			} 
			catch (err3) 
			{
				req = false;
			}
		}
	}
	return req;
}

function loadFromCities() 
{
  try
	{
	if (Xmlreq.readyState == 4) 
		{
			if(Xmlreq.status == 200) 
			{			
				var xml = Xmlreq.responseText;
				//alert(xml);
				if (xml=='') arrFromCity = new Array();			
				else arrFromCity = xml.split(",");			
			}
			/*else
			{
				alert("Xmlreq.status:" + Xmlreq.status);
			}*/
		} 
		else 
		{
			var x;
			x=Xmlreq.readyState;
			//alert('Xmlreq.readyState:' + x);		
		}
    }
    catch(e){alert("loadFromCities: " + e.description);}
}

function loadToCities() 
{	
	try
		{
		if (Xmlreq.readyState == 4) 
		{
			if(Xmlreq.status == 200) 
			{			
				var xml = Xmlreq.responseText;
				if (xml=='') arrToCity = new Array();			
				else arrToCity = xml.split(",");			
			}
			/*else
			{
				alert("Xmlreq.status:" + Xmlreq.status);
			}*/
		} 
		else 
		{
			var x;
			x=Xmlreq.readyState;
			//alert('Xmlreq.readyState:' + x);
			//for (var x=0;x<1000000;x++);
		}
	}
    catch(e){alert("loadToCities: " + e.description);}	
}

function loadFromCityMixCodes() 
{	
	try
		{
			if (req.readyState == 4) 
			{
				if(req.status == 200) 
				{			
					var xml = req.responseText;					
					if (xml=='') arrFMixCodes = new Array();			
					else arrFMixCodes = xml.split(",");			
				}
				/*else
				{
					alert("req.status:" + req.status);
				}*/
			} 
			else 
			{
				var x;
				x=req.readyState;
				//alert('req.readyState:' + x);
				//for (var x=0;x<100000;x++);
			}
	}
    catch(e){alert("loadFromCityMixCodes: " + e.description);}	
}

// Code added for Browser Compilablity
function ClearTextBoxForBrowserCompitable()
{	try
	{
		document.getElementById('ToCity').value="";
		document.getElementById('ToCity').focus();
		document.getElementById('BookingEngine1').value="";
		document.getElementById('BookingEngine2').value="";
	}
    catch(e){alert("ClearTextBoxForBrowserCompitable: " + e.description);}	
}

function ClearFromAndToCitiesForBrowserCompitable()
{
	try
	{
		document.getElementById('FromCity').value="";
		document.getElementById('ToCity').value="";
		document.getElementById('FromCity').focus();
	}
    catch(e){alert("ClearFromAndToCitiesForBrowserCompitable: " + e.description);}	

}
function ClearTextBoxes(objName)
{
	try
	{
		if (objName == "FromCity")
		{
			document.all['FromCity'].value="";
			document.all['ToCity'].value="";
			//document.getElementById('ToCity').disabled=true;
		}
		else if (objName == "ToCity")
		{
			document.all['ToCity'].value="";		
		}
		document.all['BookingEngine1'].value="unknown";
		document.all['BookingEngine2'].value="unknown";
		Check("ClearTextBoxes");
	}
	catch(e){alert("ClearTextBoxes: " + e.description);}
}

function GetMixCode(city)
{
  try
   {
	
		if ( city!='')
		{
			var url;							
			url="/sitecore/client/GetData/GetP2PData.aspx?type=2&input=&AFF=" + AFF + "&fromcity=" + city;//&cacheclear=true";   			  						
			//alert("readystate  "+req.readyState );				
			arrFMixCodes =new Array();
			req.open("GET", url, false);
			//req.onreadystatechange = loadFromCityMixCodes;
			req.send(null);			
			if(req.status == 200) 
				{							
				var xml = req.responseText;
				//window.status ="Mixcodes for "+ city +"    " +xml;               
				if (xml=='') arrFMixCodes = new Array();			
				else arrFMixCodes = xml.split(",");											
				}        		 		
		}
	}
    catch(e){alert("GetMixCode: " + e.description);}
}

function GetBlockedRoutes(FromCity,ToCity)
{
  try
   {
	//alert(city);
		if ( FromCity!='' && ToCity!='')
		{
			var url;					
			url="/sitecore/client/GetData/GetP2PData.aspx?type=4&input=&fromcity=" + FromCity + "&tocity=" + ToCity;//&cacheclear=true";
			//alert("readystate  "+req.readyState );				
			arrFMixCodes =new Array();
			req.open("GET", url, false);
			//req.onreadystatechange = loadFromCityMixCodes;
			req.send(null);
			if(req.status == 200) 
				{			
				var xml = req.responseText;
				//window.status ="Mixcodes for "+ city +"    " +xml;
				//alert("responseText  :"+xml);
				if (xml!='') return xml;
				else return 0;			
				}        		 		
		}
	}
    catch(e){alert("GetBlockedRoutes: " + e.description);}
    return 0;
}
function GetTcvRbValidRailCode(FromCity,ToCity)
{
try
   {
	//alert(FromCity);
	if ( FromCity!='' && ToCity!='')
	{
		var url;		
		//url="GetP2PData.asp?type=5&input=&fromcity=" + FromCity + "&tocity=" + ToCity;
		url="/sitecore/client/GetData/GetP2PData.aspx?type=6&input=&fromcity=" + FromCity + "&tocity=" + ToCity;		
		//alert(url);		
		//alert("readystate  "+req.readyState );		
		req.open("GET", url, false);
		//req.onreadystatechange = loadFromCityMixCodes;
		req.send(null);			
		if(req.status == 200) 
			{			
			var xml = req.responseText;			
			//alert("responseText  :"+req.responseText);
			if (xml!='') return xml;
			else return 0;			
			}        		 		
	}
  }
    catch(e){alert(e.description);}
    return 0;
}	

function isAvailableRoute(Source,Target,RouteCode)
{
  try
   {	
		if (Source!='' && Target!='' && RouteCode!='')
		{
			var url,Result;			
			//url="GetP2PData.asp?type=7&input=&AFF=" + AFF + "&fromcity=" + Source + "&tocity=" + Target + "&mixcode=" + RouteCode;//&cacheclear=true";
			url="/sitecore/client/GetData/GetP2PData.aspx?type=7&input=&AFF=" + AFF + "&fromcity=" + Source + "&tocity=" + Target + "&mixcode=" + RouteCode;		
			//alert(url);
			req.open("GET", url, false);			
			req.send(null);
			if(req.status == 200) 
			{			
				var xml = req.responseText;
				if (xml=='') Result=0;			
				else Result=xml;
				//window.status = " FromCity  :" + Source + " tCity :" + Target + " Mixcode: " + RouteCode;
				if (Result==1) return true;
				else return false;
			}
		}
	}
    catch(e){alert(e.description);}
}

function GetMixCodeType(MixCode)
{
	try
	{
		if (MixCode==1) return "amtrak";
		else if (MixCode==2) return "elgar";
		else if (MixCode==3) return "ukopentickets";
		else if (MixCode==4) return "railbest";
		else if (MixCode==5) return "swan";
		else if (MixCode==6) return "tcv";
		else if (MixCode==7) return "AusP2P";
		else if (MixCode==8) return "ViaP2P";
		else return "unknown";		
	}
    catch(e){}	
}

function findMixCode(FromMixCode,ToMixCode)
{
	try
	{   
	    var JourneyType;
        JourneyType=GetJourneyClirntyID();
		fCity=document.getElementById('FromCity');
		tCity=document.getElementById('ToCity');		
			var mixCode;
			mixCode=0;
			var found=new Array();
			var arrOrder=new Array(1,3,5,2,6,4,7,8);	
			if (ToMixCode.length != 0 && FromMixCode.length!=0)
			{		
				for (var i =0;i< FromMixCode.length; i++)
					for (var j =0; j< ToMixCode.length; j++)
					{
						if (FromMixCode[i]== ToMixCode[j]) 
							found.push(FromMixCode[i]);
					}
//				alert("FromMixCode: " + FromMixCode);
//				alert("ToMixCode: " + ToMixCode);
				if (found.length>0 && found.length==1)
				{ 
				    mixCode=found[0];
				    //Swan Logic
				    if (mixCode==5)	if (isAvailableRoute(fCity.value,tCity.value,"5")==false) mixCode=0;
				    //End of Swan Logic
				}    
				else if (found.length>=2)
			    {
				    for (var i =0;i< arrOrder.length; i++)
				    {				
					    for (var j =0; j< found.length; j++)
						    if (arrOrder[i]==found[j])
						    {
							    mixCode=found[j];
							    //Swan Logic							
							    if (mixCode==5)	if (isAvailableRoute(fCity.value,tCity.value,"5")==false) mixCode=0;							
							    //End of Swan Logic
							    if (mixCode!=0) break;
						    }
					    if (mixCode!=0) break;
				    }
			    }
			}			
		var conBlocked;
		conBlocked = document.getElementById("BlockedRoute");				
		if (conBlocked!=null) conBlocked.value="false";
			var code,ToCity,FromCity;
			FromCity =document.getElementById("FromCity").value;
			ToCity =document.getElementById("ToCity").value;				
			code=GetBlockedRoutes(FromCity,ToCity);				
			if (code!=0 && mixCode!=5)
			{
				if (conBlocked!=null) conBlocked.value="true";
				mixCode=code;
				//alert('MixC ' + mixCode);
			}     
        document.getElementById(JourneyType).options[0].text ="Ticket + Seat Reservation";	
		if ((mixCode == 4 || mixCode == 6) && (conBlocked.value != "true"))
		{
		    TcvRb=GetTcvRbValidRailCode(fCity.value,tCity.value);			
			if (TcvRb == 0)
			{
				document.getElementById("RailCode").value = "true";
				document.getElementById(JourneyType).options[0].text ="Ticket Only";
				mixCode=6;
			}
			else if (TcvRb == 1)
			{	
				document.getElementById("RailCode").value = "true";
				mixCode=4;							
				document.getElementById(JourneyType).options[0].text ="Ticket Only";
			}
		}
		TempMixcode = mixCode;
		//alert(mixCode);
		return mixCode;
	}
	catch(e){alert("findMixCode   :" + e.description);}
}

	
function ToCityMixCode()
{	
try
	{
	var MixCode,MixCodeType;
	var FromMixCode,ToMixCode,MixCode;	
	ToCity =document.getElementById("ToCity").value;	
//	alert('fMixCodes: ' + fMixCodes);	
	if (fMixCodes!=null && fMixCodes!=0) FromMixCode = fMixCodes.split(",");	
	else
	{
		FromCity =document.getElementById("FromCity").value;
		arrFMixCodes=new Array();
		GetMixCode(FromCity);		
		if (arrFMixCodes!=null && arrFMixCodes.length!=0) 
		{
			FromMixCode =arrFMixCodes;
			fMixCodes = arrFMixCodes.join(",");
		}
		else FromMixCode = new Array();
	}	
	GetMixCode(ToCity);
	ToMixCode = new Array();	
	if (arrFMixCodes!=null && arrFMixCodes.length!=0) ToMixCode = arrFMixCodes;	
	ToMixCode.sort();
	FromMixCode.sort();
	
//    alert("FromMixCode  " + FromMixCode);
//    alert("ToMixCode  " + ToMixCode);
    
	MixCode = findMixCode(FromMixCode,ToMixCode);
	TempMixcode =MixCode; 		
	MixCodeType = GetMixCodeType(MixCode);
	
//    alert("MixCodeType    " + MixCodeType);
	document.getElementById('BookingEngine1').value=MixCodeType;
	document.getElementById('BookingEngine2').value=MixCodeType;
	Check("ToCityMixCode");
	}
	catch (e){alert(e.description);}
}

function FromCityMixCode()
{
	try
	{	
		FromCity =document.getElementById("FromCity").value;					
		var MixCode,MixCodeType;				
		if (FromCity!='') GetMixCode(FromCity);
		else arrFMixCodes = new Array();
		if (arrFMixCodes.length==0) fMixCodes=0;
		else fMixCodes = arrFMixCodes.join(",");
		//alert("arrFMixCodes: " + arrFMixCodes);		
		oTextbox1 = new AutoSuggestControl(document.getElementById('ToCity'), new ToCitySuggestions());
	}
	catch(e) { a=e;}
}

function FromCitySuggestions() 
{		
	this.states=new Array();
}

FromCitySuggestions.prototype.requestSuggestions = function (oAutoSuggestControl /*:AutoSuggestControl*/,bTypeAhead /*:boolean*/)
{
 
	try
	{
	var aSuggestions = [];
	var sTextboxValue = oAutoSuggestControl.textbox.value;		
	var ch,rest
	ch=sTextboxValue.substring(0,1);	
	ch=ch.toUpperCase();	
	rest=sTextboxValue.substring(1);									
	sTextboxValue = ch + rest;								
	if (sTextboxValue.length == 1)
	{									
		var Found;
		Found=false;		
		if (this.states.length > 0)
			if (ch==this.states[0].substring(0,1)) Found = true;
			
		if (!Found)
		{										
			var url;			
			//alert("Populating From Cities");	
    		url="/sitecore/client/GetData/GetP2PData.aspx?type=1&input=" + ch + "&AFF=" + AFF;//&cacheclear=true";
//			url="http://localhost/GetP2PData.aspx?type=1&input=" + ch + "&AFF=" + AFF;//&cacheclear=true";			
			//sendRequest(url,&loadFromCities);						
			arrFromCity=new Array();			 
			Xmlreq.open("GET", url, false);
			//Xmlreq.onreadystatechange = loadFromCities;			
			Xmlreq.send(null);
			/*if (xml=='') arrFromCity = new Array();			
			else arrFromCity = xml.split(",");	*/			
			if (Xmlreq.readyState == 4) 
					{	
					    			
						if(Xmlreq.status == 200) 
						{			
							var xml = Xmlreq.responseText;                            
							if (xml=='') arrFromCity = new Array();			
							else arrFromCity = xml.split(",");			
						}
						
					} 
					
			//for (var x=0;x<1000000;x++);			
			this.states = new Array();
			for (var i=0; i < arrFromCity.length; i++) 
			{
			//this.states.push(arrFromCity[i]);
			//if (aSuggestions.length <= 15) aSuggestions.push(arrFromCity[i]);
			   this.states.push(arrFromCity[i].replace("$$$",","));
			   	if (aSuggestions.length <= 15) aSuggestions.push(arrFromCity[i].replace("$$$",","));										
			}			
		}
		else
		{										
			for (var i=0; i < this.states.length; i++)
			{
				aSuggestions.push(this.states[i]);
				if (aSuggestions.length > 15) break;
			}			
		}								
	}
	if (sTextboxValue.length > 1)
	{
		//search for matching states												
		for (var i=0; i < this.states.length; i++) {
			if (this.states[i].indexOf(sTextboxValue) == 0)
			{
				aSuggestions.push(this.states[i]);
			}
			if (aSuggestions.length > 15) break;
		}
	}
	//provide suggestions to the control
	//alert(aSuggestions);
	// = aSuggestions.length + " Cities found";								
	oAutoSuggestControl.autosuggest(aSuggestions, bTypeAhead);
	}
	catch(e){ a=e;}
};


function ToCitySuggestions()
{		
	this.states = new Array();
}

ToCitySuggestions.prototype.requestSuggestions = function (oAutoSuggestControl /*:AutoSuggestControl*/,bTypeAhead /*:boolean*/) 
{
	try
	{
	var aSuggestions = [];
	var sTextboxValue = oAutoSuggestControl.textbox.value;
	var ch,rest;
	ch=sTextboxValue.substring(0,1);
	rest=sTextboxValue.substring(1);
	ch=ch.toUpperCase();
	//alert(ch);
	sTextboxValue = ch + rest;		
	//alert(sTextboxValue);
	if (sTextboxValue.length == 1)
	{									
		var Found;		
		Found=false;
		if (this.states.length > 0)
			if (ch==this.states[0].substring(0,1)) Found = true;
			
		if (Found==false)
		{										
			var url;						
			if (fMixCodes==null) FromCityMixCode();
			//window.status="fMixCodes: " + fMixCodes;			
			//alert(fMixCodes);
			//alert("Populating To Cities");						
			url="/sitecore/client/GetData/GetP2PData.aspx?type=3&input=" + ch + "&AFF=" + AFF + "&fmixcodes=" + fMixCodes;//&cacheclear=true";
			//alert(url);					
			arrToCity=new Array();
			this.states = new Array();
			//xmlreq = getXMLHTTPRequest();			
			Xmlreq.open("GET", url, false);
			//Xmlreq.onreadystatechange = loadToCities;
			Xmlreq.send(null);
			//alert(XMLreq.status);
			if(Xmlreq.status == 200) 
		        {			
	     			var xml = Xmlreq.responseText;
				if (xml=='') arrToCity = new Array();			
				else arrToCity = xml.split(",");			
        		}
			//alert(arrToCity);
			for (var i=0; i < arrToCity.length; i++) 
			{
				this.states.push(arrToCity[i].replace("$$$",","));
				if (aSuggestions.length <= 15)aSuggestions.push(arrToCity[i].replace("$$$",","));
			}
		}
		else
		{										
			for (var i=0; i < this.states.length; i++)
			{
				aSuggestions.push(this.states[i]);
				if (aSuggestions.length > 15) break;
			}
		}								
	}
	if (sTextboxValue.length > 1)
	{
		//search for matching states												
		for (var i=0; i < this.states.length; i++) {
			if (this.states[i].indexOf(sTextboxValue) == 0)
			{
				aSuggestions.push(this.states[i]);
			}
			if (aSuggestions.length > 15) break;
		}
	}
	/*if (sTextboxValue.length > 0){
		//search for matching states
		for (var i=0; i < this.states.length; i++) {
			if (this.states[i].indexOf(sTextboxValue) == 0)
			{
				aSuggestions.push(this.states[i]);
			}
		}
	}*/
	//provide suggestions to the control
	//window.status = aSuggestions.length + " Cities found";
	oAutoSuggestControl.autosuggest(aSuggestions, bTypeAhead);
	}
	catch(e){ a=e;}
};


function ShowElgarOptions(show)
{	
	try
	{
		var controlstyle,k;
		var divVisible;
		if(navigator.appName.indexOf("Microsoft") > -1){ 
		controlstyle = "block";}
		else{
		controlstyle = 'table-row'; 
		}			
		if (!show) controlstyle ="none";		
		trTicket.style.display = controlstyle;		
		if (document.getElementById('ReturnFare').checked )
		{
			Single.style.display = controlstyle;
			myreturn.style.display = controlstyle;
			Swantext.style.display=controlstyle;
		}
		else
		{		
			myreturn.style.display = "none";
			Swantext.style.display="none";
			Swantext_test.style.display="none";
		}		
		trPassengers.style.display=controlstyle;
		document.getElementById("StoreMixcode").value=TempMixcode;
		if(TempMixcode==2)
		{				
			while(document.getElementById("up2padults").length)
			{
				document.getElementById("up2padults").remove(0);
				document.getElementById("up2pseniors").remove(0);
				document.getElementById("up2pyouths").remove(0);
				document.getElementById("up2pchildren").remove(0);
			}			
			for( k=0;k<7;k++)
			{		
				document.getElementById("up2padults").options[k] = new Option(k,k);
				document.getElementById("up2pseniors").options[k] = new Option(k,k);
				document.getElementById("up2pyouths").options[k] = new Option(k,k);
				document.getElementById("up2pchildren").options[k] = new Option(k,k);
			}
			document.getElementById("up2padults").options[1].selected=true;
		}
	}
    catch(e){alert("ShowElgarOptions    "+e.description);}	
}

function ShowSwanOptions(show)
{ 
var k;
	try
		{
		document.getElementById("chkRailPass").checked = false;
		document.getElementById("chkFixed").checked = false;
		//window.status ="ShowSwanOptions			:"+show;
		if(navigator.appName.indexOf("Microsoft") > -1)
			{ controlstyle = "block"; }
		else
			{controlstyle = 'table-row'; }
		if (!show)
		{	trRailPass.style.display="none";
			Swantext.style.display="none";
			Swantext_test.style.display="none";			
		}	
		else
		{
			trRailPass.style.display=controlstyle;
			Swantext.style.display=controlstyle;						
			if(TempMixcode==5)
			{			
				while(document.getElementById("up2padults").length)
				{
					document.getElementById("up2padults").remove(0);
					document.getElementById("up2pseniors").remove(0);
					document.getElementById("up2pyouths").remove(0);
					document.getElementById("up2pchildren").remove(0);
				}				
				for( k=0;k<=36;k++)
				{		
					document.getElementById("up2padults").options[k] = new Option(k,k);
					document.getElementById("up2pseniors").options[k] = new Option(k,k);
					document.getElementById("up2pyouths").options[k] = new Option(k,k);
					document.getElementById("up2pchildren").options[k] = new Option(k,k);
				}
				document.getElementById("up2padults").options[1].selected=true;
			}
		}
		//document.getElementById("up2padults").options[1].selected=true;
	}
	catch(e){alert("ShowSwanOptions		:" + e.description);}	
}

function hideSwanText()
{
	Swantext_test.style.display="none";
}

function ShowRailbestOptions(show)
{
	if (show)
	{

		if(navigator.appName.indexOf("Microsoft") > -1){ 
			trFare.style.display = "block";}
		else{
			trFare.style.display = "table-row";}
	}
	else
	{
	    trFare.style.display = "none";
	
	}	
	
}
function showControls(show){}

function showControls1(show)
{
	var controlstyle;
	if(navigator.appName.indexOf("Microsoft") > -1)
	{ 
	    controlstyle="block";}
	else
	{
	    controlstyle = 'table-row'; 
	}
	if (!show) controlstyle = "none";
	
	trClass.style.display=controlstyle;
	trLeave.style.display=controlstyle;
	if (!show)
	{
		ShowElgarOptions(show);
		ShowSwanOptions (show);
		ShowRailbestOptions(show);
	}
	else Check("showControls");
	if (show)
	{
        if (document.getElementById("ToCity").value!='') document.getElementById('class').focus();
	}
}

function Check(msg)
{		
	try
	{
	var fCity,tCity,Type;
	fCity=document.getElementById('FromCity');
	tCity=document.getElementById('ToCity');
	type1=document.getElementById('BookingEngine1');
	type2=document.getElementById('BookingEngine2');
	ShowElgarOptions(false);
	ShowSwanOptions(false);
	ShowRailbestOptions(false);
	if (fCity!=null && tCity!=null && type1!=null && type2!=null)
	{
		if (fCity.value == '' || tCity.value == '')
		{
			ShowElgarOptions(false);
			ShowSwanOptions(false);
			ShowRailbestOptions(false);
		}
		else
		{
			//alert(fCity.value +' '+ tCity.value + ' ' + type.value);
			if (fCity.value != '' && tCity.value != '' && ((type1.value=='elgar' && type2.value=='elgar') || (type1.value=='swan' && type2.value=='swan')))
			//if (fCity.value != '' && tCity.value != '' && (type1.value=='elgar' && type2.value=='elgar')) 
			{
				ShowElgarOptions(true);
				if(type1.value=='swan' && type2.value=='swan')
				{				
				    ShowSwanOptions(true);
				}    
				//ShowRailbestOptions(true);
				var seladults;
				seladults = document.getElementById('SmartP2P_AD');
				if (seladults!=null)
				{
					seladults.options[1].selected=true;			
				}
			}
			else if ((fCity.value != '' && tCity.value != '' ) &&((type1.value=='railbest' && type2.value=='railbest') || (type1.value=='tcv' && type2.value=='tcv')))
			{
				ShowRailbestOptions(true);
			}
		}
	}
	else
	{
		ShowElgarOptions(false);
		ShowSwanOptions(false);
		ShowRailbestOptions(false);
	}
 }
 catch(e){alert("Check: " + e.description);}
}