/**
 *
 * BMW Script Library
 * Copyright (c) 2005 interone worldwide
 *
 * @ignore
 *
 * This script contains all Chinese localized Javascript definition
 *
 * @usage   see individual function descriptions
 *
 * @author  Lee Yu
 * @version  1.0
 */


var browserName;    //Browser name and version . eg: Firefox2, IE6

// Add Allowed Domains (this variable is already defined in /common/html/js/bmw_scriptlib.js)
allowedDomain.push("://test1.bmw.com.cn");
allowedDomain.push("://testsecure1.bmw.com.cn");


/** overwrite the original download() with download tracking 
 * @param {String} fileUrl is the URL of the downloadable file
 */
function download(fileUrl){

  if (confPersoEngineEnabled) {
    if (typeof parent.persoDownloadEventType != "undefined") {
      if (parent.persoDownloadEventType) {
        var persoDownloadEventType = parent.persoDownloadEventType;
        var persoSeries = parent.persoSeries;
        var persoBodytype = parent.persoBodytype;
        var persoModel = parent.persoModel;
        var persoColor = parent.persoColor;
        var persoRim = parent.persoRim;
        parent.createPersoEvent(persoDownloadEventType, persoSeries, persoBodytype, persoModel, persoColor, persoRim);
      }
    } else if (typeof self.persoDownloadEventType != "undefined") {
      if (self.persoDownloadEventType) {
        var persoDownloadEventType = self.persoDownloadEventType;
        var persoSeries = self.persoSeries;
        var persoBodytype = self.persoBodytype;
        var persoModel = self.persoModel;
        var persoColor = self.persoColor;
        var persoRim = self.persoRim;
        createPersoEvent(persoDownloadEventType, persoSeries, persoBodytype, persoModel, persoColor, persoRim);
      }
    }
  }

  /* New code start : add Webtrends tracking and download iframe*/
  if(confTrackingEnabled == true){
    
    if(typeof(dcsMultiTrack)=="undefined"){
    	parent.dcsMultiTrack('DCS.file_name', fileUrl, 'DCS.referrer_page', window.location.href);
    }else{
    	dcsMultiTrack('DCS.file_name', fileUrl, 'DCS.referrer_page', window.location.href);
    }
    
  }
  
  if(document.getElementById('download_iframe') == null){
    var downloadFrame = document.createElement('iframe');
    downloadFrame.name="download_iframe";
    downloadFrame.id="download_iframe";
    downloadFrame.width="0";
    downloadFrame.height="0";
    downloadFrame.frameBorder="0"
    document.body.appendChild(downloadFrame);
  } 

  var downloadUrl = buildValidServerRelativeUrl(fileUrl) + "?download=true";
  document.getElementById('download_iframe').src = downloadUrl;
  /* New code end */
}

var BrowserDetector = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "unknown";
		this.versionFloat = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "unknown";
		this.version = this.integerVersion();
		this.OS = this.searchString(this.dataOS) || "unknown";
	},
	searchString: function (data) { // get the browser name , and prepare the VersionSearch token
		for (var i=0;i<data.length;i++)	{
			this.versionSearchString = data[i].versionSearch || data[i].identity;    // the version search token
			
			var dataString = data[i].string;
			var dataProp = data[i].prop;

			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		if(!this.versionSearchString) return;
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	integerVersion: function (){
		return parseInt(this.versionFloat);
	},
	dataBrowser: [
		{
			string: navigator.userAgent,
			subString: "Chrome",
			identity: "Chrome"
		},
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari",
			versionSearch: "Version"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "IE",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};

/**
 * Get all URL parameter as an associative array
 * @param {Object} url to parse
 * @return associative array of name - value pairs of URL parameter
 */
function getParameterMap( url) {
	
	var parameterMap = new Object;
	var urlParts = url.split("?");
	if (urlParts==null) return null;
	if (urlParts.length<2) return null;
	
	var query = urlParts[1];
	var params = query.split("&");
	
	if (params==null) return null;
	if (params.length<1) return null;
	
	for (var i=0;i<params.length;i++) {
		var pairs = params[i].split("=");
		if (pairs.length==2) {
			parameterMap[pairs[0]]=pairs[1];		
		} else if (pairs .length>2) {
			var s = "";
			for (var j=1;j<pairs.length;j++) {
				s+=pairs[j];
				if (j<(pairs.length-1)) s+="=";	
			}
			parameterMap[pairs[0]]=s; 
		} 
	}
	
	return parameterMap;
} 

/**
 * Get a single URL parameter value
 * @param {Object} url to parse
 * @param {Object} parameterName name of the parameter
 * @return value of the parameter or null in case there is no such parameter 
 */
function getParameterFromUrl(url, parameterName) {
	
	var map = getParameterMap(url);
	if (map!=null) {
	    if (parameterName in map) {
		return map[parameterName];
	    }
	}
	return null;	
}

/**
 * changes the onLoadFunctionsAddon and adds
 * an automatic file download in case a download
 * filename is given as URL parameter, the function
 * is triggered by the body.onlad event.
 * ######################################################
 * #NOTE:						#
 * #if you want to add function calls to the 		#
 * #onLoadFunctionsAddon do it in the manner shown below#
 * #in order not to overwrite already existing code	#
 * ######################################################
 */ 
var cLoadStr = new String(onLoadFunctionsAddon.toString());
var i = cLoadStr.lastIndexOf("}");
cLoadStr=cLoadStr.substring(0,i);
var j=cLoadStr.indexOf("{");
cLoadStr =cLoadStr.substr(j);
cLoadStr+="\r\nvar url = decodeURI(document.location.href);\r\n";
cLoadStr+="var downloadFile = getParameterFromUrl(url,\"downloadFile\");\r\n";
cLoadStr+="if (downloadFile!=null) {\r\n";
cLoadStr+="download(downloadFile);\r\n";
cLoadStr+="}\r\n}";
onLoadFunctionsAddon=new Function(cLoadStr);







BrowserDetector.init();
browserName = BrowserDetector.browser + BrowserDetector.version;


/**
*	Let the page scroll to the top .
*
*/
function goToTop()
{
	if(!document.getElementById('outerDiv')) return ;
	
	if(!document.getElementById('autoTopAnchor'))
	{
	    var paragraph = document.createElement("div");
        paragraph.setAttribute('id',"autoTopAnchor");
		paragraph.setAttribute('style',"position:relative; top:0px; left:0px; height:0px; width:0px; overflow:hidden;");
	    paragraph.innerHTML = '<a name="autoTop"></a>';
	    var parentNode = document.getElementById('outerDiv');
	    parentNode.insertBefore(paragraph, parentNode.firstChild);
	}

	if(window.location.href.indexOf('#autoTop') != -1)
	{
    	window.location = window.location;
	}else{
		window.location = window.location + '#autoTop';
	}
}

function trackTeaserClick(trackingPage, trackingPageTitel, targetPageUrl){
  if (confTrackingEnabled) {
    if(trackingPage==undefined){
		//alert('ok');
		return true;
	}
    var trackingUrl = buildValidServerRelativeUrl(trackingPage) + '?target=' + escape(buildValidServerRelativeUrl(targetPageUrl)) + '&source=' + escape(self.location.pathname);
    trackAbsolute(trackingUrl, trackingPageTitel, false, false);
  }
  return true;
}


/**
 * @param {String} contentUrl
 * @param {Array} linkList
 * @return {Array} evaluatedLinks
 * @CAUTION add the feature for dealer site
 */
function evaluateHighlighting(contentUrl, linkList){
  var dealerFolderName = "dealers";
  var navLinkFull = "";
  var navLinkPath = "";
  var navLinkFile = "";
  var navLinkQuery = "";
  var navLinkPathParts = [];
  var contentLinkFull = "";
  var contentLinkPath = "";
  var contentLinkFile = "";
  var contentLinkQuery = "";
  var contentLinkPathParts = [];
  var evaluatedLinks = [];
  if (contentUrl.indexOf('?') != -1) {
    contentLinkFull = contentUrl.substring(0, contentUrl.lastIndexOf('?'));
    contentLinkQuery = contentUrl.substring(contentUrl.lastIndexOf('?'), contentUrl.length);
    if (contentLinkQuery.indexOf("&") != -1) {
      contentLinkQuery = contentLinkQuery.substring(0, contentLinkQuery.indexOf("&"));
    }
  } else {
    contentLinkFull = contentUrl;
  }
  if (contentLinkFull.charAt(contentLinkFull.length - 1) == '/') {
    contentLinkFull = contentLinkFull.substring(0, contentLinkFull.length - 1);
  }
  if (contentLinkFull.lastIndexOf('/') < contentLinkFull.lastIndexOf('.')) {
    contentLinkFile = contentLinkFull.substring(contentLinkFull.lastIndexOf('/') + 1, contentLinkFull.length);
    contentLinkPath = contentLinkFull.substring(0, contentLinkFull.lastIndexOf('/'));
  } else {
    contentLinkPath = contentLinkFull;
    contentLinkFile = "";
  }
  contentLinkPathParts = contentLinkPath.split('/');
  for (var i = 0; i < linkList.length; i++) {
    navLinkFull = linkList[i];
    if (navLinkFull.indexOf('javascript:') != -1 || navLinkFull == '') {
      evaluatedLinks.push(999);
      continue;
    }
    if (navLinkFull.indexOf('?') != -1) {
      navLinkQuery = navLinkFull.substring(navLinkFull.lastIndexOf('?'), navLinkFull.length);
      if (navLinkQuery.indexOf("&") != -1) {
        navLinkQuery = navLinkQuery.substring(0, navLinkQuery.indexOf("&"));
      }
      navLinkFull = navLinkFull.substring(0, navLinkFull.lastIndexOf('?'));
    } else {
      navLinkQuery = "";
    }
    if (navLinkFull.charAt(navLinkFull.length - 1) == '/') {
      navLinkFull = navLinkFull.substring(0, navLinkFull.length - 1);
    }
    if (navLinkFull.lastIndexOf('/') < navLinkFull.lastIndexOf('.')) {
      navLinkFile = navLinkFull.substring(navLinkFull.lastIndexOf('/') + 1, navLinkFull.length);
      navLinkPath = navLinkFull.substring(0, navLinkFull.lastIndexOf('/'));
    } else {
      navLinkPath = navLinkFull;
      navLinkFile = "";
    }
    navLinkPathParts = navLinkPath.split('/');

    var contentIndex = 0;
    var navIndex = 0;
    var bestmatchFound = false;
    var charMatch = null;

    while (navLinkPathParts[navIndex] == contentLinkPathParts[contentIndex]) {
      navIndex++;
      contentIndex++;
      if (contentIndex == contentLinkPathParts.length && navIndex == navLinkPathParts.length) {
        if (navLinkFile == contentLinkFile) {
          if (navLinkQuery == contentLinkQuery) {
            evaluatedLinks.push(-2);
            bestmatchFound = true;
          } else {
            evaluatedLinks.push(-1);
          }
        } else {
          charMatch = stringCompare(navLinkFile, contentLinkFile);
          evaluatedLinks.push(0.99 - (charMatch / 100));
        }
        break;
      } else if (contentIndex == contentLinkPathParts.length) {
        evaluatedLinks.push(999);
        break;
      } else if (navIndex == navLinkPathParts.length) {
        if (confCountryTopic != null &&
        confLanguageTopic != null &&
        navLinkPathParts.length >= 2 &&
        navLinkPathParts[navLinkPathParts.length - 1] == confLanguageTopic &&
        navLinkPathParts[navLinkPathParts.length - 2] == confCountryTopic) {
          evaluatedLinks.push(999);
        }else if(confCountryTopic != null &&
        confLanguageTopic != null &&
        navLinkPathParts.length >= 2 &&
        navLinkPathParts[navLinkPathParts.length - 2] == dealerFolderName &&
        navLinkPathParts[navLinkPathParts.length - 3] == confLanguageTopic &&
        navLinkPathParts[navLinkPathParts.length - 4] == confCountryTopic){
          evaluatedLinks.push(999);
		} else if (confCountryTopic != null && navLinkPath.indexOf("/" + confCountryTopic + "/") == -1) {
          evaluatedLinks.push(999);
        } else {
          evaluatedLinks.push(contentLinkPathParts.length - contentIndex);
        }
        break;
      } else if (navLinkPathParts[navIndex] != contentLinkPathParts[contentIndex]) {
        evaluatedLinks.push(999);
        break;
      }
    }
    if (bestmatchFound) {
      break;
    }
  }
  return evaluatedLinks;
}

function clickTracking(object){
	if(typeof(window.dcsMultiTrack) != 'undefined'){
		dcsMultiTrack('DCS.object', object);	
	}
}

var oldCheckWindowSize = checkWindowSize;
checkWindowSize = function(){
	oldCheckWindowSize();
	if(window.$ && $("#outerDiv").length > 0){
		$(document.body).css("overflow","hidden");
		$("#outerDiv").css("overflow","auto");
		
		var currentWidth =  $(window).width(); 
		var currentHeight = $(window).height();
		
		$("#outerDiv").css("position","relative");

		$("#outerDiv").css("width","100%");
		if (currentHeight != null){
			$("#outerDiv").css("height",currentHeight - 27);
		}
		
		if(currentWidth < 980 && currentWidth > 730){
			$("#metaNavigationInline").css("width",currentWidth);
		}else if(currentWidth <= 730){
			$("#metaNavigationInline").css("width",730);
		}else{
			$("#metaNavigationInline").css("width",982);
		}

	}

}

// Added for the BT Testing
// To set a baseline for behaviour testing (and perhaps determine appropriate weightings now) we can use a site-wide counter integration and then to track results from all future experiments, we will use a site-wide counter implementation.
document.write('<script language="javascript" src="http://es.optimost.com/es/497/c/1/u/counters.js" type="text/javascript"></script>');