/**
 * This function call  used to talk to overture and now sends a query
 * to Google to generate the sponsored links on the search results page.
 * 
 * @param footerDiv
 * @param sideBarDiv
 * @param overtureDomain - No longer used
 * @param ip - No longer used
 * @param xfip - No longer used
 * @param channel
 * @param overtureAmbiguous
 * @return Nothing but populates the divs according to the values in the search form
 */
function populateOverture(pageNumber, footerDiv, sideBarDiv, overtureDomain, ip,
                          xfip, channel, overtureAmbiguous) {

    //if neither div is present, return
    if(!(divExists(footerDiv) || divExists(sideBarDiv))) {
        return;
    }

    var partnerChannel = channel;
    if(channel === "cars") {
        partnerChannel = "usedcars";
    }
	afcTraffic = 0; // should be set in adsense_keywords.js
    if (window.at2Traffic === undefined){
   		at2Traffic = 0; // should be set in adsense_keywords.js
    }
    if (window.at3Traffic === undefined){
   		at3Traffic = 0; // should be set in adsense_keywords.js
    }
    var handler = new tmg.SponsoredLinkHandler(footerDiv, sideBarDiv, partnerChannel);

	populateAFSAds(handler, pageNumber, channel, overtureAmbiguous);

}

function getAdType(){
	   	url = window.location.href;
	   	params = url.split('adtype=');
	   	if(params[1] !== undefined){
	   		return params[1].split('&')[0];
	   	} 
	   	return "";
}

function withinCutOff(cutOff) {
	var r = Math.random()*100;
	if(r < cutOff) {
		return true;
	} 
	return false;
}

function populateAFCAds(handler, pageNumber, channel, overtureAmbiguous) {
	handler.addGoogleAFCScript(pageNumber);
}

function populateAFSAds(handler, pageNumber, channel, overtureAmbiguous) {
	var randomQueryKeywords = "";    
    if(window.getGoogleQueryKeyWordsPrePendOverride !== undefined)
    {
    	randomQueryKeywords = getGoogleQueryKeyWordsPrePendOverride(channel); 
    }
    else
    {
    	randomQueryKeywords = getGoogleQueryKeyWordsPrePend(channel); 
    }

    var randomQueryKeywordsPostPend = "";    
    if(window.getGoogleQueryKeyWordsPostPendOverride !== undefined)
    {
    	randomQueryKeywordsPostPend = getGoogleQueryKeyWordsPostPendOverride(channel); 
    } 
    else
    {
    	randomQueryKeywordsPostPend = getGoogleQueryKeyWordsPostPend(channel); 
    } 
    
    var googleQueryKeyWordsNoInput = "";
    if(window.getGoogleQueryKeyWordsNoInputOverride !== undefined)
    {
    	googleQueryKeyWordsNoInput = getGoogleQueryKeyWordsNoInputOverride(channel); 
    } 
    else
    {
    	googleQueryKeyWordsNoInput = getGoogleQueryKeyWordsNoInput(channel); 
    } 

    var googleQuery = "", googleQueryMake = "", googleQueryModel = "";

    var makeElementName = "make";
    if (channel === "trucks" || channel === "vans" || channel === "plant") {
        makeElementName = "make_keyword";
    }
    var makeElement = document.getElementById(makeElementName);
    if (makeElement) {
        var make = makeElement.value;
        if (make != "") {
            googleQueryMake = make;
        }
    }   
        
    var modelElementName = "model";
    if (channel === "trucks" || channel === "caravans" || channel === "vans") {
        modelElementName = "model_keyword";                        
    }
    var modelElement = document.getElementById(modelElementName);            
    if (modelElement) {
        var model = modelElement.value;
        if(model === "Any model") {
            model = "";
        }

        if (model !== "") {
            googleQueryModel = model;
        }
    }        
    // Start building query
    var preOrPost = Math.floor(2*Math.random());
    if ((googleQueryMake || googleQueryModel) && preOrPost === 0)
    {
    	googleQuery = randomQueryKeywords;
    	randomQueryKeywordsPostPend = "";
    }
    else if ((googleQueryMake || googleQueryModel) && preOrPost === 1 && randomQueryKeywordsPostPend != "")
    {
    	// postpend will be appended later
    }
    else
    {
		googleQuery = googleQueryKeyWordsNoInput;
		randomQueryKeywordsPostPend = "";
	}

    if (googleQueryMake) {
        googleQuery = appendToString(googleQuery, googleQueryMake);
    }
    if (googleQueryModel) {
        googleQuery = appendToString(googleQuery, googleQueryModel);
    }
    
    if (channel === 'plant') {
         var plantCategory = document.getElementById('category_keyword');
         if (plantCategory && plantCategory.value!='Any Category' && plantCategory.value!="") {                     
            googleQuery +=  " " + plantCategory.value;
         }
    }
    if ((googleQueryMake || googleQueryModel) && preOrPost === 1 && randomQueryKeywordsPostPend != "")
    {
    	googleQuery = appendToString(googleQuery, randomQueryKeywordsPostPend);
    }
    
    if (googleQueryMake === "google") {
        // Override for test purposes
        googleQuery = googleQueryModel;
    }
    if (curGoogleQuery !== "") {
        // persisted value present - user must have paged through data so keep original query 
        googleQuery = curGoogleQuery;
    }
    
    googleQuery = googleQuery.replace(/'/g,"\%27");   //.replace(/'/g, "\\'");
    var googleContext = googleQuery.replace(googleQueryMake, "").replace(googleQueryModel, "").replace(/^\s\s*/, '').replace(/\s\s*$/, '');
    handler.addGoogleScript(pageNumber, googleQuery, googleContext);
}

// Support functions ------------------------------------------------------


if (tmg == null) var tmg = {};
if (tmg.SponsoredLinkHandler == null) {

    tmg.SponsoredLinkHandler = function(footerDiv, sideBarDiv, channel) {
        this.footerDiv = footerDiv;
        this.sideBarDiv = sideBarDiv;
        this.channel = channel;
    }
    
    tmg.SponsoredLinkHandler.WIDE=5;
    tmg.SponsoredLinkHandler.NARROW=4;
    tmg.SponsoredLinkHandler.NUMADS=9;
    tmg.SponsoredLinkHandler.google_afs_client = 'autotrader-uk'; //  client ID
    tmg.SponsoredLinkHandler.google_afs_client_at2 = 'autotrader2-uk';
    tmg.SponsoredLinkHandler.google_afs_client_at3 = 'autotrader3-uk';
    tmg.SponsoredLinkHandler.google_afc_client = 'ca-autotrader-uk'; //  client ID
    tmg.SponsoredLinkHandler.google_afs_adsafe = 'high'; // Nothing dodgy!

    tmg.SponsoredLinkHandler.prototype = {
        displayGoogleLinks: function(ads) {
            var label;
            var footerHtml = '<div id="overtureOuterContainer">';
            var sideBarHtml = '<div id="overtureOuterContainer">';
            if(ads && ads.length > 0) {
                footerHtml += '<div id="overtureContainer" class="widerSideBarIframeContainer">';
                footerHtml += '<div id="overtureHeader"><h3 class="widerBgHeadingBar">Sponsored Links</h3></div>';
                footerHtml += '<div id="overtureTable">';
                footerHtml += '<div class="overtureInnerContainer">';
                sideBarHtml = footerHtml;
                var k=0, sideBarCounter = 0;
                for (k=0; k < ads.length; k++) {
                    var type = ads[k].type,
                        url = ads[k].url,
                        visibleUrl = ads[k].visible_url,
                        line1 = ads[k].line1,
                        line2 = ads[k].line2,
                        line3 = ads[k].line3;
                        
                    if (type === "text/wide" || (type == "text" && k < 5)) {
                        footerHtml += this.overtureResultRowWide(k, this.footerDiv, url, visibleUrl,
                                                        line1, line2, line3, 
                                                        'search_Footer', "overturewidetext ");
                    } else if (type === "text/narrow"||(type == "text" && k >= 5)) {
                    	sideBarCounter++;
                        var label;
                        if(this.channel === 'newcars') {
                            label = 'right_nav';
                        } else {
                            label = 'Search+Right+Nav';
                        }
                        sideBarHtml += this.overtureResultRow(k, this.footerDiv, url, visibleUrl,
                                                        line1, line2, line3,
                                                        label, "")
                    } else {
//                        console.error("Unknown ad type: " + type);
                    }                  
                }       
                footerHtml += '</div></div></div>';
                sideBarHtml += '</div></div></div>';
            }                
            footerHtml += '</div>';
            sideBarHtml += '</div>';
            if(divExists(this.footerDiv)) document.getElementById(this.footerDiv).innerHTML = footerHtml; 
            if(divExists(this.sideBarDiv) && sideBarCounter > 0) document.getElementById(this.sideBarDiv).innerHTML = sideBarHtml;
        },
        
        overtureResultRow: function(index, divName, url, visibleUrl, title, line2, line3, label, type) {        
            var showLink = title + ' - ' + visibleUrl;
            var statusText = "Go to " + visibleUrl;
            var s = '<div class="' + type + 'overtureInnerAdContainer">';
            s += '<div class="overtureItemHeader">';

            s += '<a href="' + url + '" '
              + 'target="_blank" class="topMargin7 font100Percent overtureTitleLink">';

            s += title + '</a>';
            s += '</div>';

            s += '<p class="overtureTextContainer">';      

            s += line2 + (line3 ? ' ' + line3 : '');
            s += '</p>';

            s += '<p class="redSideBarLink"><a href="'
              + url +'" target="_blank"'
              + '>';
            s += visibleUrl + '</a></p>';

            s += '<div class="theBreaker"></div>';
            s += '</div>';

            return s;
        },

        overtureResultRowWide: function(index, divName, url, visibleUrl, title, line2, line3, label, type) {        
            var showLink = title + ' - ' + visibleUrl;
            var statusText = "Go to " + visibleUrl;
            var s = '<div class="' + type + 'overtureInnerAdContainer">';
            s += '<div class="overtureItemHeader">';

            s += '<a href="' + url + '" '
              + 'target="_blank" class="topMargin7 font100Percent overtureTitleLink">';

            s += title + '</a>';
            s += '</div>';

            s += '<p class="overtureTextContainer">';      

            s += '<span class="redSideBarLink"><a href="'
              + url +'" target="_blank"'
              + '>';
            s += visibleUrl + '</a></span>';

            s += line2 + (line3 ? ' ' + line3 : '');
            s += '</p>';

            s += '<div class="theBreaker"></div>';
            s += '</div>';

            return s;
        },
    
        /**
         * Create the query object and response handler: Then create a script tag to execute the query
         */
        addGoogleScript: function(pageNumber, googleQuery, googleContext) {
            var that = this;
            if (googleContext === ""){
    			googleContext = googleQuery;
    		}
            google_afs_query = googleQuery;
            google_afs_qry_ctxt = googleContext;
            google_afs_channel = this.channel;
            google_afs_adtest = 'off';
            google_afs_adpage = pageNumber;
            if (getAdType() != ""){
            	google_afs_client = getAdType();
            } else if (withinCutOff(at2Traffic) && !(document.getElementById("make") && document.getElementById("make").value == "google")){
            	google_afs_client = tmg.SponsoredLinkHandler.google_afs_client_at2; //  client ID
            } else if (withinCutOff(at3Traffic) && !(document.getElementById("make") && document.getElementById("make").value == "google")){
            	google_afs_client = tmg.SponsoredLinkHandler.google_afs_client_at3; //  client ID
            } else {
            	google_afs_client = tmg.SponsoredLinkHandler.google_afs_client; //  client ID
            }
            google_afs_adsafe = tmg.SponsoredLinkHandler.google_afs_adsafe;
            google_afs_oe = 'latin1';
            google_afs_ad = 'w' + tmg.SponsoredLinkHandler.WIDE
                           +'n' + tmg.SponsoredLinkHandler.NARROW; // the number of ads you are requesting
            google_afs_request_done = function(ads) {that.displayGoogleLinks.apply(that, arguments)};
            google_afs_hl = 'en'; 
            that.persistQueryOnPaging(googleQuery, pageNumber, google_afs_client);
            document.write('<script type="text/javascript" src="http://www.google.com/afsonline/show_afs_ads.js"><\/script>');
        },
    
        /**
         * Create the query object and response handler for AFC ads: Then create a script tag to execute the query
         */
        addGoogleAFCScript: function(pageNumber, googleQuery) {
            var that = this;
			google_ad_client = tmg.SponsoredLinkHandler.google_afc_client;; // this is a test id but google have confirmed it will work until we get our new one
			google_ad_channel = this.channel; // see google_afs_channel in overture_v1_4.js
			google_ad_output = 'js';
			google_max_num_ads = '9'; // 5 for the bottom and 4 for the right - there is no idea of wide and narrow as in afs first 5 to go at the bottom any more on the right
			google_ad_type = 'text'; // only want text ads
			google_language = 'en';
			google_encoding = 'utf8';
			google_safe = tmg.SponsoredLinkHandler.google_afs_adsafe;
			google_adtest = 'off';
			google_ad_request_done = function(ads) {that.displayGoogleLinks.apply(that, arguments)};
			document.write('<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"><\/script>');
        }, 
                /**
	         * Persist the google query on the paging urls
	         */
	        persistQueryOnPaging: function(googleQuery, pageNumber, queryType) {
	            var startPage = 1;
	            if (startPage > 11){
	            	startPage = pageNumber - 10;
	            }
	            for(var pagenum = startPage;pagenum <= pageNumber + 10;pagenum ++){
	            	this.updatePagingLink("paging_Top_" + pagenum, googleQuery, queryType);
	            	this.updatePagingLink("paging_Bottom_" + pagenum, googleQuery, queryType);	            	
	            }	
		    this.updatePagingLink("paging_Top_Previous", googleQuery, queryType);
           	    this.updatePagingLink("paging_Top_Next", googleQuery, queryType);

		    this.updatePagingLink("paging_Bottom_Previous", googleQuery, queryType);
           	    this.updatePagingLink("paging_Bottom_Next", googleQuery, queryType);
        }, 
                /**
	         * Persist the google query on the paging urls
	         */
	        updatePagingLink: function(linkName, googleQuery, queryType) {
	            if ($(linkName)){
	            	$(linkName).href = $(linkName).href + "&googleQuery=" + encodeURIComponent(googleQuery) + "&adtype=" + queryType;
	            }
        }
        
    }
}


function divExists(divName) {
    return document.getElementById(divName);    
}

		function getGoogleQueryKeyWordsPrePend(channel){
     		var appends;
     		if(channel == "cars") {
		    	appends = ['used', 'used cars',  'pre-owned', 'secondhand', 'cheap', 'buy used', ''];    
		    } else if (channel === "newcars") {
				appends = ['cars', 'new cars', 'deals for new',  'new', ''];
		    } else if (channel === "bikes") {
				appends = ['used motorbikes', 'used motorbikes for sale', ''];
		    } else if (channel === "plant") {
				appends = ['plant machinery', 'second hand tractors', 'second hand forklift',  'tractors', ''];
		    } else if (channel === "vans") {
				appends = ['used vans', 'used vans for sale',  'cheap vans', 'cheap vans for sale', ''];
		    } else if (channel === "trucks") {
				appends = ['trucks', 'used trucks', 'used trucks for sale',  'cheap trucks',  'cheap trucks for sale', 'second hand', ''];
     		} else if (channel === "caravans") {
				appends = ['used caravans', 'used motorhomes', ''];
     		} else {
     			return "";
     		}
	      var rand_keyword = appends[Math.floor((appends.length)*Math.random())];
	      return rand_keyword;
}

		function getGoogleQueryKeyWordsPostPend(channel){
     		var appends;
     		if(channel === "cars") {
		    	appends = ['deals', 'sales', 'for sale'];    
		    } else if (channel === "bikes") {
				appends = ['bikes', 'motorbike tyres', 'motorbike theory test', 'motorbike insurance'];
		    } else {
     			return "";
     		}
		    var rand_keyword = appends[Math.floor((appends.length)*Math.random())];
		    return rand_keyword;
		}
		
		function getGoogleQueryKeyWordsNoInput(channel){
     		var appends, googleQueryChannel, googleQueryUsed;
     		if(channel === "cars") {
		    	appends = ['pre-owned','buy used','cheap','secondhand','previously owned','old','used', 'used car'];    
		    } else if (channel === "bikes") {
				appends = ['motorcycles'];
		    } else {
			    if (channel === "newcars") {
			        googleQueryChannel = "cars";
			        googleQueryUsed = "new";
			    } else if (channel === "bikes") {
			        googleQueryChannel = "motorbikes";
			        googleQueryUsed = "used";
			    } else if (channel === "plant") {
			        googleQueryChannel = "plant machinery";
			        googleQueryUsed = "used";
			    } else {
			        googleQueryChannel = channel;
			        googleQueryUsed = "used";
			    }
			    return googleQueryUsed + " " + googleQueryChannel;
     		}
		    var rand_keyword = appends[Math.floor((appends.length)*Math.random())];
		    return rand_keyword;
		}
		
		function appendToString(mainString, append)
		{
			if (append == null || append == "")
			{
				return mainString;
			}
			if (mainString != null && mainString !== "")
			{
				mainString = mainString + " " + append;
			}
			else
			{
				mainString = "" + append;
			}
			return mainString;
		}