// ==UserScript==
// @name           GraphSense
// @namespace      AdGFX
// @description    Adsense graf enchancer.
// @include        https://www.google.com/adsense/report/aggregate
// @include        https://www.google.com/adsense/report/view-custom.do?reportId=*
// ==/UserScript==

function xpath(query) {
    return document.evaluate(query, document, null,
        XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
}


function insertAfter(parent, node, referenceNode) {
  parent.insertBefore(node, referenceNode.nextSibling);
}

function updateAdGFX(cont) {
 	ret = false;			
	if (adGFXMenu = document.getElementById('adgfxholder')) {
		adGFXMenu.innerHTML = cont;
		ret = true;
	} else {
		adGFXMenu = document.createElement('div');
		adGFXMenu.setAttribute('id','adgfxholder');
		adGFXMenu.innerHTML = cont;
		if (e_report = document.getElementById('reportData')) {
			e_report.parentNode.insertBefore(adGFXMenu,e_report);	
			ret = true;
		}
	}

	if (ret) {
		statusImg = document.getElementById('adgfx_img');
		statusImg.style.display = 'none';	
	}
	
	return ret;
}

function phoneHome(zeData) {
	//console.log(zeData);
	//console.log(utf16to8(zeData));
	//alert('encodeURI: ' + encodeURI(zeData));
	GM_xmlhttpRequest({
    method: 'POST',
    url: 'http://www.graphsense.com/input.php',
    headers: {
        'Content-type' :  'application/x-www-form-urlencoded'
    },
    data: 'data='+encodeURI(zeData),
    onload: function(responseDetails) {
      updateAdGFX(responseDetails.responseText);
    }
});
	return true;
}

function loadCSV() {
	//console.log('loadCSV');
  var reportForm = unsafeWindow.document.getElementById('reportsettings');
  //console.log(reportForm);
	reportForm.outputFormat.value="TSV_EXCEL"; // google does this, so do i.
	
	var reportParams = '';
	for (i=0;i<reportForm.elements.length;i++) {
		if ((reportForm.elements[i].type == 'radio' && reportForm.elements[i].checked) ||
				(reportForm.elements[i].type == 'checkbox' && reportForm.elements[i].checked) ||
				(reportForm.elements[i].type == 'hidden') ||				
				(reportForm.elements[i].type == 'text')) {
					reportParams += reportForm.elements[i].name + '=' + reportForm.elements[i].value + '&';
		} else if (reportForm.elements[i].tagName == 'SELECT') {
				reportParams += reportForm.elements[i].name + '=' + reportForm.elements[i][reportForm.elements[i].selectedIndex].value + '&';
		}				
		//console.log(reportForm.elements[i].name + ' => ' + reportForm.elements[i].value);
	}

	
	//console.log(reportParams);
	
	//reportParams = 'sortColumn=0&reverseSort=false&outputFormat=TSV_EXCEL&storedReportId=-1&isOldReport=false&product=afc&dateRange.dateRangeType=simple&dateRange.simpleDate=today&dateRange.customDate.start.month=8&dateRange.customDate.start.day=13&dateRange.customDate.start.year=2007&dateRange.customDate.end.month=8&dateRange.customDate.end.day=13&dateRange.customDate.end.year=2007&unitPref=page&reportType=property&searchField=&groupByPref=date';
	//console.log(reportParams);
	
	statusImg = document.getElementById('adgfx_img');
	statusImg.style.display = 'block';

	GM_xmlhttpRequest({
    method: 'POST',
    url: reportForm.action,
    headers: {
        'Content-type' :  'application/x-www-form-urlencoded'
    },
    data: reportParams,
    onload: function(responseDetails) {
       // alert('Request for Atom feed returned ' + responseDetails.status +
       //       ' ' + responseDetails.statusText + '\n\n' +
        //      'Feed data:\n' + responseDetails.responseText);
        //console.log(responseDetails.responseText);
       phoneHome(responseDetails.responseText);       
            
    }
});

}	

function generateAnchor() {
	myTD = document.createElement('td');
	myTD.style.textAlign = 'right';

	myImg = document.createElement('img');
	myImg.setAttribute('src','http://www.graphsense.com/i.gif');
	myImg.setAttribute('id','adgfx_img');

	myImg.style.paddingTop = '4px';
	myImg.style.display = 'none';
	myA = document.createElement('a');
	
	myA.href = 'javascript:void(0);'; 
	myA.addEventListener("click", loadCSV, true);	
	myA.appendChild(document.createTextNode(''));
	myTD.appendChild(myA);
	myTD.appendChild(myImg);
	return myTD;
}

var scripts = [
    'http://www.graphsense.com/common.js'
];
for (i in scripts) {
    var script = document.createElement('script');
    script.src = scripts[i];
    document.getElementsByTagName('head')[0].appendChild(script);
}


var entryPoint = xpath('/html/body/div[2]/table[2]/tbody');
var baselineTR; // make it a itzy bitzy global.
if (entryPoint.snapshotLength>0) {
   baselineTR = entryPoint.snapshotItem(0);
   //console.log(baselineTR);
   //baselineTR.appendChild(generateAnchor());
}

if (updateAdGFX('<h2>GraphSense</h2><img src="http://www.graphsense.com/i.gif" style="display: none" id="adgfx_img" />')) {
	loadCSV();
}
