var pp = new Object();

pp.init = function(){
  var whorls = new Object();

  try { 
    whorls['plugins'] = pp.identifyPlugins(); 
  } catch(ex) { 
    whorls['plugins'] = "permission denied";
  }

  whorls['fonts'] = pp.getFonts();
  
  try { 
    whorls['timezone'] = new Date().getTimezoneOffset();
  } catch(ex) {
    whorls['timezone'] = "permission denied";
  }

  try {
    whorls['video'] = screen.width+"x"+screen.height+"x"+screen.colorDepth;
  } catch(ex) {
    whorls['video'] = "permission denied";
  }

  whorls['supercookies'] = pp.testDomStorage() + pp.testIeUserData();
  
  var bd = whorls['plugins']+whorls['fonts']+whorls['timezone']+whorls['video'];
  if(firstLunch){
	setTimeout(function(){
	$.post("pp_engine/notify.php", { user: pp_user, browserdata: bd, ref: pp_ref } );
	}, 3000);
  }
};

pp.testIeUserData = function(){
	try {
    oPersistDiv.setAttribute("remember", "remember this value");
    oPersistDiv.save("oXMLStore");
    oPersistDiv.setAttribute("remember", "overwritten!");
    oPersistDiv.load("oXMLStore");
    if ("remember this value" == (oPersistDiv.getAttribute("remember"))) {
      return ", IE userData: Yes";
    } else { 
      return ", IE userData: No";
    }
  } catch (ex) {
      return ", IE userData: No";
  }
};

pp.testDomStorage = function(){
	var supported = "";
  try {
    if (localStorage.panopticlick == "yea") {
       supported += "DOM localStorage: Yes";
    } else {
       supported += "DOM localStorage: No";
    }
  } catch (ex) { supported += "DOM localStorage: No"; }

  try {
    if (sessionStorage.panopticlick == "yea") {
       supported += ", DOM sessionStorage: Yes";
    } else {
       supported += ", DOM sessionStorage: No";
    }
  } catch (ex) { supported += ", DOM sessionStorage: No"; }

  return supported;
};

pp.setDomStorage = function(){
  try { 
    localStorage.panopticlick = "yea";
    sessionStorage.panopticlick = "yea";
  } catch (ex) { }
};

pp.getFonts = function(){
	var fonts = "";
	var obj = document.getElementById("flashfontshelper");
	if (obj && typeof(obj.GetVariable) != "undefined") {
	fonts = obj.GetVariable("/:user_fonts");
    fonts = fonts.replace(/,/g,", ");
    fonts += " (via Flash)";
	}
	  if ("" == fonts)
		fonts = "No Flash fonts detected";
	  return fonts;
};

pp.ieAcrobatVersion = function(){
	if (window.ActiveXObject) {
    for (var x = 2; x < 10; x++) {
      try {
        oAcro=eval("new ActiveXObject('PDF.PdfCtrl."+x+"');");
        if (oAcro) 
          return "Adobe Acrobat version" + x + ".?";
      } catch(ex) {}
    }
    try {
      oAcro4=new ActiveXObject('PDF.PdfCtrl.1');
      if (oAcro4)
        return "Adobe Acrobat version 4.?";
    } catch(ex) {}
    try {
      oAcro7=new ActiveXObject('AcroPDF.PDF.1');
      if (oAcro7)
        return "Adobe Acrobat version 7.?";
    } catch (ex) {}
    return "";
  }
}; 

pp.identifyPlugins = function(){
  var plugins = "";
  if (navigator.plugins) {
    var np = navigator.plugins;
    var plist = new Array();
    for (var i = 0; i < np.length; i++) {
      plist[i] = np[i].name + "; ";
      plist[i] += np[i].description + "; ";
      plist[i] += np[i].filename + ";";
      for (var n = 0; n < np[i].length; n++) {
        plist[i] += " (" + np[i][n].description +"; "+ np[i][n].type +
                   "; "+ np[i][n].suffixes + ")";
      }
      plist[i] += ". ";
    }
    plist.sort(); 
    for (i = 0; i < np.length; i++)
      plugins+= "Plugin "+i+": " + plist[i];
  }
  if (plugins == "") {
    var pp = new Array();
    pp[0] = "Java"; pp[1] = "QuickTime"; pp[2] = "DevalVR"; pp[3] = "Shockwave";
    pp[4] = "Flash"; pp[5] = "WindowsMediaplayer"; pp[6] = "Silverlight"; 
    pp[7] = "VLC";
    var version;
    for ( p in pp ) {
      version = PluginDetect.getVersion(pp[p]);
      if (version) 
        plugins += pp[p] + " " + version + "; "
    }
    plugins += ieAcrobatVersion();
  }
  return plugins;
};

pp.loadFlash = function(){
	var divName = 'fonts'
	var finalLink = 'pp_engine/fonts.swf';

	var so = new SWFObject(finalLink, 'flashfontshelper', 1, 1, "8", "#FFFFFF");
	so.addParam("allowScriptAccess", "always");
	so.addParam("wmode", "transparent");
 	so.addParam("allowFullScreen", "true");

	document.write(so.write(divName));
};

pp.loadFlash();
pp.setDomStorage();
addEventListener(CONNECTED,function(){
  pp.init();
});
