/*
 * tracking for farefinders
 * depends on: jQuery.tracking.js
 */
;(function($){
	
	var AIRNZ		= "airnz";
	var QANTAS 		= "qantas";
	var VIRGINBLUE	= "virginblue";
	var EMIRATES	= "emirates";
	
	var SINGAPORE	= "singapore";
	var KOREAN		= "korean";
	var CATHAYPAC	= "cathay";
	var CHINASOUTHERN = "chinasouthern";
	var AIRASIA		 = "airasia";
		
	$.extend({
		ffTracking: {
			init : function(){
				$("#farefinder").load( $.ffTracking.onLoadFF );
				//now reload the iFrame to make sure we have it bound OK
				try{ $("#farefinder").attr({src:$("#farefinder").attr("src")}); } catch (e){/* assuming it hadn't already loaded */}
			}
			, onLoadFF : function(){
				if( __hasAccess( this ) )
				{
					
					switch( __resolveFF( $(this).attr("src") ) )
					{
						case AIRNZ:
							$.ffTracking.initAIRNZTracking( this );
						break;
						case QANTAS:
							$.ffTracking.initQantasTracking( this );
						break;
						case EMIRATES:
							$.ffTracking.initEmiratesTracking( this );
						break;
						case SINGAPORE:
							$.ffTracking.initSingaporeAirTracking( this );
						break;	
						case KOREAN:
							$.ffTracking.initKoreanAirTracking( this );
						break;
						case CATHAYPAC:
							$.ffTracking.initCathayTracking( this );
						break;
						case CHINASOUTHERN:
							$.ffTracking.initChinaSouthernTracking( this );
						break;
						case AIRASIA:
							$.ffTracking.initAirAsiaTracking( this );
						break;
						default:
							$.ffTracking.initDefaultTracking( this );
						break;
					}
					
				}
			}
			, track : function( airline , elem , params ){
				
				var sTrack = "Fare Finder: " + airline;
				var oData = { eVar48 : sTrack , events : "event11" };
				$.extend(oData,params);
				$.tracking.omniture( oData , sTrack , elem );
			}
			, initAIRNZTracking : function( frame ){
				try{
					var _sent = false;
					if(  $(frame).attr("src").toLowerCase().indexOf( "korea" ) != -1 )
					{
						var aForms = window.frames['farefinder'].document.getElementsByTagName("form");
						
						for (var i = 0; i < aForms.length; i++) {

							$( frame ).contents().find("img[src*='button.gif']").click(function(){
								var sDate = (new Date().getUTCFullYear()) + "-" +
								$(frame).contents().find('[name=mon1]').val() +
								"-" + $(frame).contents().find('[name=day1]').val();
								var bReturn = ($(frame).contents().find("input[name='Round_Trip']:checked").val() != 1);//1="oneway", 2 or "undefined" = "return"  ticket type
								if (bReturn == true) {
									sDate += "|" + (new Date().getUTCFullYear()) + "-" +
									$(frame).contents().find('[name=mon2]').val() +
									"-" +
									$(frame).contents().find('[name=day2]').val();
								}
								
								var oData = {
									eVar49: $(frame).contents().find('[name=o_city1]').val() + "|" + $(frame).contents().find('[name=d_city1]').val(),
									eVar47: sDate
								
								};
								if( _sent == false ){
									$.ffTracking.track(AIRNZ, aForms[i], oData);									
									_sent = true;
								}
							});
						}
					} 
					else
					{
						window.frames['farefinder'].__submitForm = window.frames['farefinder'].submitForm;
						window.frames['farefinder'].submitForm = function(  a , b , c ){
							var bReturn = ( $( frame ).contents().find("input[name='fare_type']:checked").val() == "return" );
	
							var sDate = $( frame ).contents().find('[name=depart_yearmonth]').val() + "-" + $( frame ).contents().find('[name=depart_date]').val();
							
							if( bReturn == true )
							{
								sDate+= "|" + $( frame ).contents().find('[name=arrival_yearmonth]').val() + "-" + $( frame ).contents().find('[name=arrival_date]').val()
							}
							var oData = {
								eVar49 : $( frame ).contents().find('#departure_point').val() + "|" + $( frame ).contents().find('#arrival_point').val() 
								, eVar47 : sDate
							};
							
							$.ffTracking.track( AIRNZ , frame , oData );
							window.frames['farefinder'].__submitForm( a , b , c );
						}
					}
					
				} catch(e){}
				
			}
			, initQantasTracking : function( frame ){
				try{
					window.frames['farefinder'].__submitMyForm = window.frames['farefinder'].submitMyForm;
					window.frames['farefinder'].submitMyForm = function(){ 
						window.frames['farefinder'].__submitMyForm();
						
						var bReturn = ( $( frame ).contents().find("input[name='intTripType']:checked").val() == "R" );
						var sDepartDate = $( frame ).contents().find('#intDepDay').val() + "," +  $( frame ).contents().find('#intDepMonthYear').val(); 
						
						var sDate = sDepartDate.split(",").reverse().join("-");
						
						if( bReturn == true )
						{

							var sReturnDate = $( frame ).contents().find('#intRetDay').val() + "," +  $( frame ).contents().find('#intRetMonthYear').val(); 
							sReturnDate = sReturnDate.split(",").reverse().join("-");
							
							sDate += "|" + sReturnDate;
							
						}
						
						var oData = {
							eVar49 :	$( frame ).contents().find('#intFrom').val() + "|" + $( frame ).contents().find('#intTo').val() 
							, eVar47 : sDate
						};
						
						$.ffTracking.track( QANTAS , frame , oData );
					}
				} catch(e){}
				
			}
			, initEmiratesTracking : function( frame ){//emirates has is a form submission
				try{
					
					var aForms = window.frames['farefinder'].document.getElementsByTagName("form");
					
					for( var i = 0 ; i < aForms.length ; i++ )
					{
						$( aForms[ i ] ).submit(
							function(){
								
								var sDate = $( frame ).contents().find('[name=seldyear1]').val() + "-" 
													+  $( frame ).contents().find('[name=seldmonth1]').val() + "-" 
													+  $( frame ).contents().find('[name=seldday1]').val();
								var bReturn = ( $( frame ).contents().find("input[name='triptype']:checked").val() != 1 );//1="oneway", 2 or "undefined" = "return"  ticket type
								if( bReturn == true )
								{
									sDate += "|" +  $( frame ).contents().find('[name=seldyear2]').val() + "-" 
													+  $( frame ).contents().find('[name=seldmonth2]').val() + "-" 
													+  $( frame ).contents().find('[name=seldday2]').val();
								}
													
								var oData = {
									eVar49 :	$( frame ).contents().find('[name=seldcity1]').val() + "|" + $( frame ).contents().find('[name=selacity1]').val() 
									, eVar47 : sDate
									
								};
								$.ffTracking.track( EMIRATES , aForms[ i ] , oData );
							}
						);
					}
				} catch(e){}
				
			}
			, initSingaporeAirTracking : function( frame ){
				try{
					
					var aForms = window.frames['farefinder'].document.getElementsByTagName("form");

					for( var i = 0 ; i < aForms.length ; i++ )
					{
						$( aForms[ i ] ).submit(
							function(){
								var aDepYearMonth = ($( frame ).contents().find('[name=ondCityCode[0].month]').val()).split("/");
								
								var sDate = aDepYearMonth[1] + "-" 
													+  aDepYearMonth[0] + "-" 
													+  $( frame ).contents().find('[name=ondCityCode[0].day]').val();
								var bReturn = true; //there is no one way or return option
								if( bReturn == true )
								{
									var aArriveYearMonth = ($( frame ).contents().find('[name=ondCityCode[1].month]').val()).split("/");
									sDate += "|" + aArriveYearMonth[1] + "-" 
													+  aArriveYearMonth[0]  + "-" 
													+  $( frame ).contents().find('[name=ondCityCode[1].day]').val();
								}
													
								var oData = {
									eVar49 :	$( frame ).contents().find('[name=ondCityCode[0].origin]').val() + "|" + $( frame ).contents().find('[name=ondCityCode[0].destination]').val() 
									, eVar47 : sDate
									
								};
								$.ffTracking.track( SINGAPORE , aForms[ i ] , oData );
							}
						);
					}
				} catch(e){}				
				
			}
			, initKoreanAirTracking : function( frame ) {
				try{
					var aForms = window.frames['farefinder'].document.getElementsByTagName("form");
					
					for( var i = 0 ; i < aForms.length ; i++ ){
						window.frames['farefinder'].__submitForm = window.frames['farefinder'].submitForm;
						
						window.frames['farefinder'].submitForm = function(){
							window.frames['farefinder'].__submitForm();
							
							var bReturn = ($(frame).contents().find("input[name='itineraryType']:checked").val() == "round");
							
							//Year logic replicated from farefinder javascript since it doesnt have year in the form
							var orgYear = new Date().getUTCFullYear();
							var orgMonth = (new Date().getMonth())+1;
							var orgUserMonth = window.frames['farefinder'].getNumMonth( aForms[0].orgMonth[0].value );
							
							var destYear = orgYear;
							var destMonth = orgMonth;
							var destUserMonth = window.frames['farefinder'].getNumMonth( aForms[0].orgMonth[1].value );
							
							if ( eval(orgUserMonth) < eval(orgMonth) ){
								orgYear++;
							}
							
							if (eval(destUserMonth) < eval(destMonth)) {
								destYear++;
							}
	
							var sDate = orgYear + "-" +  
										orgUserMonth + "-" +
										aForms[0].orgDay[0].value;
														
							if (bReturn == true) {
								var sReturnDate = destYear + "-" + 
										destUserMonth + "-" +
										aForms[0].orgDay[1].value;
								
								sDate += "|" + sReturnDate;
							}
							
							var oData = {
								eVar49: $(frame).contents().find('[name=orgCityCode]').val() + "|" + $(frame).contents().find('[name=destCityCode]').val(),
								eVar47: sDate
							};
							$.ffTracking.track( KOREAN , frame , oData );
						}
					}
				} catch(e){}
			}
			, initCathayTracking: function(frame){
					
				try{
					var aForms = window.frames['farefinder'].document.getElementsByTagName("form");
	
					window.frames['farefinder'].__fnSubmitAirAvail = window.frames['farefinder'].fnSubmitAirAvail;
					window.frames['farefinder'].fnSubmitAirAvail = function(theForm){
						var oData = __getCathayData(frame);
						
						$.ffTracking.track(CATHAYPAC, aForms[i], oData);
						window.frames['farefinder'].__fnSubmitAirAvail(theForm);
					}
				} catch(e){}
			}
			, initChinaSouthernTracking: function(frame){				
				try{
					
					var aForms = window.frames['farefinder'].document.getElementsByTagName("form");
					
					for( var i = 0 ; i < aForms.length ; i++ )
					{
						$( aForms[ i ] ).submit(
							function(){
								
								var aDepartYear = $( frame ).contents().find('[name=date1_year]').val();
								var aDepartMonth =  $( frame ).contents().find('[name=date1_month]').val();
								var aDepartDay =  $( frame ).contents().find('[name=date1_day]').val();
													
								var sDate = aDepartYear + "-" + aDepartMonth + "-" + aDepartDay;	
								
								var bReturn = ( $( frame ).contents().find('[name=segtype]:checked').val() == "R" );								
								if( bReturn == true )
								{
									
									var aArriveYear = $( frame ).contents().find('[name=date2_year]').val();
									var aArriveMonth = $( frame ).contents().find('[name=date2_month]').val();
									var aArriveDay = $( frame ).contents().find('[name=date2_day]').val();
									
									sDate = sDate + "|" + aArriveYear + "-" + aArriveMonth + "-" + aArriveDay;
									
								}
													
								var oData = {
									eVar49 :	$( frame ).contents().find('[name=city1]').val() + "|" + $( frame ).contents().find('[name=city2]').val() 
									, eVar47 : sDate
									
								};
								
								$.ffTracking.track( CHINASOUTHERN , aForms[ i ] , oData );
							}
						);
					}
				} catch(e){}
			}
			, initAirAsiaTracking: function(frame){				
				try{
					
					var aForms = window.frames['farefinder'].document.getElementsByTagName("form");
					
					for( var i = 0 ; i < aForms.length ; i++ )
					{						
						$( aForms[ i ] ).submit(
							function(){		
								
								var aDepartMonth =  $( frame ).contents().find('[name=MonthYear1]').val();
								var aDepartDay =  $( frame ).contents().find('[name=day1]').val();
													
								var sDate = aDepartMonth + "-" + aDepartDay;									
								
								var aArriveMonth = $( frame ).contents().find('[name=MonthYear1]').val();
								var aArriveDay = $( frame ).contents().find('[name=day2]').val();
								
								sDate = sDate + "|" + aArriveMonth + "-" + aArriveDay;	
													
								var oData = {
									eVar49 :	$( frame ).contents().find('[name=origin1]').val() + "|" + $( frame ).contents().find('[name=Destination1]').val() 
									, eVar47 : sDate
									
								};
								
								$.ffTracking.track( AIRASIA , aForms[ i ] , oData );
							}
						);
					}
				} catch(e){}
			}
			
			, initDefaultTracking : function( frame ){//default to a form submission
				try{
					
					var aForms = window.frames['farefinder'].document.getElementsByTagName("form");
					
					for( var i = 0 ; i < aForms.length ; i++ )
					{
						$( aForms[ i ] ).submit(
							function(){
								$.ffTracking.track( "[unknown] " + $( frame ).attr("src") , aForms[ i ] );
							}
						);
					}
				} catch(e){}
				
			}
		}
	});
	
	function __getCathayData( theIFrame ){
		
		var aDepYearMonth =  $( theIFrame ).contents().find('[name=d_month]').val();;
								
			var sDate = aDepYearMonth.substring(0,4) + "-" 
								+  aDepYearMonth.substring(4,6)  + "-" 
								+  $( theIFrame ).contents().find('[name=d_day]').val();
			
			var bReturn = ( $( theIFrame ).contents().find('[name=tripType]').val() == "R" );
			if( bReturn == true )
			{
				var aArriveYearMonth = $( theIFrame ).contents().find('[name=r_month]').val();;
				sDate += "|" + aArriveYearMonth.substring(0,4) + "-" 
								+  aArriveYearMonth.substring(4,6)  + "-" 
								+  $( theIFrame ).contents().find('[name=r_day]').val();
			}
								
			var oData = {
				eVar49 :	$( theIFrame ).contents().find('[name=d_city]').val() + "|" + $( theIFrame ).contents().find('[name=r_city]').val() 
				, eVar47 : sDate
				
			};
		
		return oData;
	}
	
	function __resolveFF( url ){
		var sReturn	= url;//default it to returning the URL...
		
		if( url.toLowerCase().indexOf( AIRNZ ) != -1 ){
			sReturn = AIRNZ;
		} else if( url.toLowerCase().indexOf( QANTAS ) != -1 ) {
			sReturn = QANTAS;
		} else if( url.toLowerCase().indexOf( EMIRATES ) != -1 ) {
			sReturn = EMIRATES;
		} else if( url.toLowerCase().indexOf( SINGAPORE ) != -1 ) {
			sReturn = SINGAPORE;
		} else if( url.toLowerCase().indexOf( KOREAN ) != -1 ) {
			sReturn = KOREAN;
		} else if( url.toLowerCase().indexOf( CATHAYPAC ) != -1 ) {
			sReturn = CATHAYPAC;
		} else if( url.toLowerCase().indexOf( CHINASOUTHERN ) != -1 ) {
			sReturn = CHINASOUTHERN;
		} else if( url.toLowerCase().indexOf( AIRASIA ) != -1 ) {
			sReturn = AIRASIA;	
		}			
		return sReturn;
	}
	
	//check if we have access to this fare finder
	function __hasAccess( iframe ){
		var bReturn = false;
		try{
			$( iframe ).contents().find('body');
			bReturn = true;
		} catch (e){
			bRetrun = false;
		}
		return bReturn;
	}
	
})( jQuery );
jQuery( function(){ jQuery.ffTracking.init();} );
