/**
 * 
 * Copyright (c) 2009, NVIDIA Corporation.  All rights reserved.
 *
 * THE INFORMATION CONTAINED HEREIN IS PROPRIETARY AND CONFIDENTIAL TO
 * NVIDIA, CORPORATION.  USE, REPRODUCTION OR DISCLOSURE TO ANY THIRD PARTY
 * IS SUBJECT TO WRITTEN PRE-APPROVAL BY NVIDIA, CORPORATION.
 * 
 * @author shaworth
 * 
 * @version 0.2
 *
 */
var scan = new function() {
	
	this.lang;
	this.scanValues = new Array();
	this.hwObject = new Object();
	this.scanQuery = '';
	this.offerID = '';
	
	
	this.init = function(incoming) {
		this.hwObject = incoming;
		scan.requestQuery();
	};
	
	this.checkProgress = function() {
		var scanTool = $('scanApplet');
		if (scanTool.scanComplete == true) {
			scan.init(scanTool.getHardwareObject());
		} else {
			scan.startScan();
		}
	};
	
	this.startProgress = function() {
		$('popupContainerContent2').style.textAlign = "center";
		$('popupContainerContent2').innerHTML = '<br /><br /><span style="width:100%;text-align:center;"><img src="/content/includes/gpudiscount/resources/images/ajax-loading-bar.gif" id="imgLoader" alt="Scanning..."/></span>';
		Popup('popupContainer2').show();
	};
	
	this.startScan = function() {
		setTimeout("scan.checkProgress()", 2000);
	};
	
	this.checkOS = function() {
		var osname="Unknown OS";
		if (navigator.appVersion.indexOf("Win")!=-1) osname="Windows";
		if (navigator.appVersion.indexOf("Mac")!=-1) osname="MacOS";
		if (navigator.appVersion.indexOf("X11")!=-1) osname="UNIX";
		if (navigator.appVersion.indexOf("Linux")!=-1) osname="Linux";	
		return osname;
	};
	
	this.returnError = function(response) {
		alert('An error occured when loading the scan tool:\n\n' + response.responseText + '\n\nPlease contact support@nvidia.com');
	};
	
	this.requestQuery = function() {
		new Ajax.Request('/content/includes/gpudiscount/resources/bin/values.xml',
				{
					method: 'get',
					onSuccess: scan.generateQuery,
					onFailure: scan.returnError
				}
		);
	};
	
	this.generateQuery = function(response) {
		// we have to parse here and reflect on the object
		var responseXML = response.responseXML;
		var queryString = '';
		var values = responseXML.getElementsByTagName('values')[0];
		var items = values.getElementsByTagName("item");
		for (var i = 0; i < items.length; i++) {
			var currentValue = items[i].getAttribute("value");
			scan.scanValues.push(currentValue);
			if (i == items.length - 1) { // last one
				// important that we make sure the mappings are correct
				// the script dies without error on Firefox mac if not
				queryString += currentValue + '=' + eval("scan.hwObject." + currentValue);
			} else {
				queryString += currentValue + '=' + eval("scan.hwObject." + currentValue) + '&';
			}
		}
		scan.scanQuery = queryString; // Store this query for later use
		if (scan.offerID != '') {
			scan.submitQuery(queryString);	
		}
	};
	
	this.submitQuery = function(queryString) {
		var isMac = "false";
		if (scan.checkOS() == "MacOS") {
			isMac = "true";
		}
		new Ajax.Request('/content/includes/gpudiscount/gateway.php?func=submitQueryWithID&' + queryString + '&lang=' + scan.lang + '&offer_id=' + scan.offerID,
				{
					method: 'get', // Debugging the PHP object
					onSuccess: scan.queryCallback,
					onFailure: scan.returnError
				}
		);	
	};
	
	this.queryCallback = function(response) {	
		var xmlTransformer = new transformer('/content/includes/gpudiscount/resources/xsl/requirements.xsl');
		var transformed = xmlTransformer.transform(response);
		$('popupContainerContent2').style.textAlign = "left";
		$('popupContainerContent2').innerHTML = transformed;
		// This callback should _only_ be used for the submitQueryById, anything else is uncivilized
		if (scan.offerID != ""){
			//Popup('popupContainer2').show();
			eval($('evalQuery').innerHTML);
			scan.offerID = "";
		} else {
			alert('Fatal error: Missing offerID. Please email support@nvidia.com describing this issue');  		
		}
	};

	
	this.getQueryVariable = function(variable) {
		var query = window.location.search.substring(1);
		var vars = query.split("&");
		for (var i=0;i<vars.length;i++)  {
			var pair = vars[i].split("=");
			if (pair[0] == variable) {
				return pair[1];
			}
		} 
	};
	
	this.handleAddToCart = function(productID) {
		if (MiniCart != undefined) {
			MiniCart.add(productID, 1);	
		}
	};
	
	this.displayProductInfo = function(imageURL, name, shortDescription, longDescription) {
		$('moreInfoImage').innerHTML = '<img src="' + imageURL + '" alt="' + name + '" />';
		$('moreInfoProductName').innerHTML = "<b>" + name + "</b>";
		var endingStyleLoc = longDescription.indexOf('</STYLE>');
		var trimmedLongDsc = longDescription.substring(endingStyleLoc, longDescription.length);
		$('moreInfoLongDsc').innerHTML = '<dl id="content_header">' +				
						  '<dt id="nav_overview"><a href="javascript:overview_open();" title="Overview" onfocus="this.blur();">OVERVIEW</a></dt>' +
						  '<dt id="nav_tech"><a href="javascript:tech_open();" title="Tech Spec" onfocus="this.blur();">TECH SPECS</a></dt>' + 
						  '<dt id="nav_features"><a href="javascript:features_open();" title="Features" onfocus="this.blur();">FEATURES</a></dt>' + 
						  '</dl>';
		$('moreInfoLongDsc').innerHTML += trimmedLongDsc;
		$('popupContainer1').style.zIndex = '600';
		$('popupContainer1').style.display = 'block';
		//Popup('popupContainer1').show();
		return true;
	}

	
	this.deployApplet = function() {
		var theOS = scan.checkOS();
		var attributes;
		var parameters;
		var version;
		var appletCode;
		if (theOS != "Unknown OS") {
			if (theOS == "MacOS") { // JRE 1.5 compliance
				attributes = {
					id: 'scanApplet',
					style: 'visibility: hidden',
	                code:'ScanApplet.class',
	                archive:'/content/includes/gpudiscount/resources/bin/nvscan-0.2/NVScan-15.jar'
				};
				version = '1.5';
			} else if (theOS == "Windows") { // JRE 1.6 compliance
				attributes = {
					id: 'scanApplet',
					style: 'visibility: hidden',
	                code:'ScanApplet.class',
	                archive:'/content/includes/gpudiscount/resources/bin/nvscan-0.2/NVScan-16.jar'
				};
				version = '1.6';
			}
		} else {
			alert('There was a problem determining your operating system.\n\n' +
					'Please note: This tool will not work correctly with false browser headers.\n' +
					'Contact support@nvidia.com for more help.')
		}
		appletCode = deployJava.runApplet(attributes, parameters, version);
		$('scanContainer').innerHTML = appletCode;
	};
	
}