//QTag v. 1310371232321
(function () {
    
  var debug = false;

  try {
      
  var qTagClientId = "edsa-fon-fi";
  var urlFilters = [
  {
    matchType:"SUBSTRING",
    filterType:"EXCLUDE",
    pattern:"www.kojalait.fi",
    priority:"1",
    scriptLoaderKeys:[
      "aghxdWJpdHRhZ3IgCxIGQ2xpZW50GJFODAsSDFNjcmlwdExvYWRlchjpBww",
    ]},
  {
    matchType:"ALL",
    filterType:"INCLUDE",
    pattern:"*",
    priority:"2",
    scriptLoaderKeys:[
      "aghxdWJpdHRhZ3IfCxIGQ2xpZW50GJFODAsSDFNjcmlwdExvYWRlchgBDA",
      "aghxdWJpdHRhZ3IgCxIGQ2xpZW50GJFODAsSDFNjcmlwdExvYWRlchihHww",
      "aghxdWJpdHRhZ3IgCxIGQ2xpZW50GJFODAsSDFNjcmlwdExvYWRlchjpBww",
    ]}
  ];
  var scriptLoaders = {
    aghxdWJpdHRhZ3IfCxIGQ2xpZW50GJFODAsSDFNjcmlwdExvYWRlchgBDA:{
      name:"QTracker",
      pre:"qTracker_data={domain:\"\",serverUrl:\"pong.qubitproducts.com/t\",pattern:\".*\",clientId: \"edsa-fon-fi\"};",
      url:"18.qubitanalytics.appspot.com/test/qtracker.js",
      post:"",
      html:"",
      async:true
    },
    aghxdWJpdHRhZ3IgCxIGQ2xpZW50GJFODAsSDFNjcmlwdExvYWRlchjpBww:{
      name:"QFeedback",
      pre:"",
      url:"edsafeedbackbox.appspot.com/qtag.js?client_id=edsa-fon-fi",
      post:"",
      html:"",
      async:true
    },
    aghxdWJpdHRhZ3IgCxIGQ2xpZW50GJFODAsSDFNjcmlwdExvYWRlchihHww:{
      name:"MouseMaps",
      pre:"window._qHf = [];window._qHf.push(['_qHfAccount', 'edsa-fon-fi-promo']);",
      url:"s3-eu-west-1.amazonaws.com/qbit-pingserver-cdn/fp.js",
      post:"",
      html:"",
      async:true
    }
  }    
    var qTagLoaders = (function () {
      var NO_MATCHING_PATTERN = "";
      var MATCH_ALL_PATTERN = ".*";
      var EXACT_MATCH = "EXACT_MATCH";
      var SUBSTRING = "SUBSTRING";
      var REGEX = "REGEX";
      var ALL = "ALL";
      
      var FILTER_TYPE_EXCLUDE = "EXCLUDE";
      var FILTER_TYPE_INCLUDE = "INCLUDE";
    
      /**
       * @param urlFilter An array containing objects which have a pattern and a matchType
       */
      var getLoaders = function(urlFilters, url) {
        var i, ii, j, jj, urlFilter, loaderKeysSet = {}, matchedFilters = [], loaders = [];
        if ((urlFilters == null) || (url == null)) {
          return loaders;
        }
        for (i = 0, ii = urlFilters.length ; i < ii; i += 1) {
          urlFilter = urlFilters[i];
          if (doesUrlFilterMatch(urlFilter, url)) {
            //TODO: don't store loaders, just yet, only do filters,
            //do loaders after we have done them all so we can take into account 
            //PRIORITY!
            matchedFilters.push(urlFilter);
          }
        }
        //The matched filters are sorted into reverse order
        //So that the least important one is done first and 
        //more important ones overwrite them.
        matchedFilters.sort(function (a, b) {
          return b.priority - a.priority;
        });
        //Update the loader key set with the matched filter 
        //Note that the order that they load is not important.
        //Only the priority of the filters.
        for (i = 0, ii = matchedFilters.length; i < ii; i += 1) {
          updateLoaders(matchedFilters[i], loaderKeysSet);
        }
        //TODO: take into account priority
        //Oh for underscore...
        for (i in loaderKeysSet) {
          if (loaderKeysSet.hasOwnProperty(i)) {
            loaders.push(scriptLoaders[i]);
          }
        }
        return loaders;
      };
      /**
       * Checks to see if a url filter matches a url
       */
      var doesUrlFilterMatch = function (urlFilter, url) {
        var matches = false;
        switch (urlFilter.matchType) {
        case EXACT_MATCH:
          if (url.toLowerCase() === urlFilter.pattern.toLowerCase()) {
            matches = true;
          }
          break;
        case SUBSTRING:
          if (url.toLowerCase().indexOf(urlFilter.pattern.toLowerCase()) >= 0) {
            matches = true;
          }
          break;
        case REGEX:
          // compile url pattern
          if (new RegExp(urlFilter.pattern).test(url)) {
            matches = true;
          }
          break;
        case ALL:
          matches = true;
          break;
        }
        return matches;
      };
      /**
       * Update the loader key set with the given filter
       */
      var updateLoaders = function (urlFilter, loaderKeysSet) {
        var i, ii, scriptLoaderKeys = urlFilter.scriptLoaderKeys;
        if (urlFilter.filterType === FILTER_TYPE_INCLUDE) {
          for (i = 0, ii = scriptLoaderKeys.length; i < ii; i += 1) {
            if (scriptLoaderKeys.hasOwnProperty(i)) {
              loaderKeysSet[scriptLoaderKeys[i]] = true;
            }
          }
        }
        else if (urlFilter.filterType === FILTER_TYPE_EXCLUDE) {
          for (i = 0, ii = scriptLoaderKeys.length; i < ii; i += 1) {
            if (scriptLoaderKeys.hasOwnProperty(i)) {
              delete loaderKeysSet[scriptLoaderKeys[i]];
            }
          }
        }
      };
      return getLoaders(urlFilters, document.URL);
    }());
    
    //Assign functions to this variable as to not pollute the global namespace.
    var fileLoader = {};
    /**
     * Load a file at url, optionally calling functions before and after it is loaded
     * @param url The url to load
     * @param preLoadAction A function called before the url is loaded. If it 
                            returns false or throws an exception it will prevent 
                            the url from loading. Takes the url as an argument.
     * @param postLoadHandler A function called after the url is loaded. Takes 
                              the url as an argument.
     */
    fileLoader.load = function (url, preLoadAction, postLoadHandler) {
      var scriptEl, preLoadResult;
      
      //try to run the preLoadAction.
      try {
        if (preLoadAction) {
          preLoadResult = preLoadAction(url);
        }
      }
      catch (ex) {
        preLoadResult = false;
      }
      finally {
        if (preLoadResult !== false) {
          //create the javascript element.
          var scriptEl = fileLoader.createScriptEl(url);
          //assign the post load handler to run when it has loaded, if it exists.
          if (postLoadHandler) {
            scriptEl.onload = function () {
              postLoadHandler(url);
              incrementLoadCounter();
            };
            scriptEl.onreadystatechange = function () {
              if ((this.readyState === "complete") || (this.readyState === "loading")) {
                setTimeout(function() {
                  postLoadHandler(url);
                  incrementLoadCounter();
                }, 1);
              }
            }
          }
          //The script is not loaded until it is added to the script.
          document.getElementsByTagName("head")[0].appendChild(scriptEl);
        }
      }
    };
    fileLoader.createScriptEl = function (url, async, forceReload) {
      var scriptEl = document.createElement("script");
      scriptEl.type = "text/javascript";
      scriptEl.src = "//" + url + (forceReload ? ("?" + new Date().getTime()) : "")
      //Makes FF (version < 4) behave like IE/WebKit (this is on bydefault on FF4+)
      //See: https://developer.mozilla.org/en/html/element/script
      scriptEl.async = async === false;
      return scriptEl;
    };
    var loadersFinished = 0;
    var incrementLoadCounter = function () {
      loadersFinished += 1;
      if (loadersFinished === qTagLoaders.length) {
        if (qTag_allLoaded) {
          qTag_allLoaded();
        }
      }
    };
    var createStatementEvaluator = function (statement) {
      if ((!!statement) && (statement.length > 0)) {
        var fn, toRun = 'fn = function() {\n' + statement + '\n};';
        eval(toRun);
        return fn;
      }
    }
    
    var init = function () {
      var i, ii, qTagLoader;
      for (i = 0, ii = qTagLoaders.length; i < ii; i += 1) {
        qTagLoader = qTagLoaders[i];
        fileLoader.load(
          qTagLoader.url, 
          createStatementEvaluator(qTagLoader.pre),
          createStatementEvaluator(qTagLoader.post));
      }
    };
  
    init();
  }
  catch (e) {
    if (debug) {
        console.log(e);
    }   
  }
}());
 
