// ==UserScript==
// @name           sme.sk enhancer
// @namespace      daddy.sk
// @include        http://www.sme.sk/
// @include        *.sme.sk/*
// ==/UserScript==

debugMode		= true;

ADDITIONAL_ARTICLES = 3;

function log(msg) {
	if (debugMode) {
		GM_log(msg);
	}	
}

function xPath(query, doc) {
    var xResult, arrResult = [];
	if (!doc) {
		doc = document;
	}
	xResult = document.evaluate(query, doc, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);	
	for (i = 0; item = xResult.snapshotItem(i); i++) {
		arrResult.push(item);
	}
	return arrResult;
}

// Executes xpath query on given html (for example, the result of getUrl function)
function xPathOnHTML(query, code) {
	var divHelper;
	divHelper = document.createElement('div');
	divHelper.innerHTML = code;
	return xPath("." + query, divHelper);
}

function getURL(URL, fOnLoad, fOnError){
    GM_xmlhttpRequest({
        method: 'GET',
        url: URL,
        onload: fOnLoad,
		onerror: fOnError,
		headers: {'content':'text/html; charset=windows-1250'},
        overrideMimeType: "text/html; charset=windows-1250"
		});
}

function removeImgs(code) {
	log('removeImgs: ' + code);
	log('match: ' + code.match(/<img[^>]+>/));
	code = code.replace(/<img[^>]+>/,' ');
	log('after: ' + code);
	return code;
}

log('<sme.sk enhancer>');

locationParts		= window.location.hostname.split('.');
loc					= (locationParts[locationParts.length - 3] + "." +locationParts[locationParts.length - 2]+"."+locationParts[locationParts.length - 1]).toLowerCase();

log('location: ' + loc);

switch (loc) {
	case "www.sme.sk":
		// TODO: get urls from the page source
		urls = ['http://www.sme.sk/r/online_zdom/z_domova.html', 
				'http://www.sme.sk/r/online_zahr/zo_zahranicia.html',
				'http://ekonomika.sme.sk/',
				'http://sport.sme.sk/'];

		xpaths = [  "//div[@id='contentw']/div/div/h3",
					"//div[@id='contentw']/div/div/h3",
					//"//div[@id='contentw']//h3[position()!=1]",
					"//div[@id='contentw']//h3",
					"//div[@id='contentw']//h3"
				 ];
			   

		// TODO: get rid of the damn copy-paste
			   
		getURL(	urls[0], 
				function(responseDetails) {
					var infoHTML, infoElement, xResult, msgNode;
					xResult = xPathOnHTML(xpaths[0], responseDetails["responseText"]);
					titleXPath = "//div[@id='terazw']/div[1]/ul";
					msgNode = xPath(titleXPath)[0];
					for (var i = 0; i < ADDITIONAL_ARTICLES/*xResult.length*/; i++) {
						singleElement = removeImgs(xResult[i].innerHTML);
						
						msgLi = document.createElement("li");
						msgLi.innerHTML = singleElement;
						msgNode.appendChild(msgLi);
					}
				},
				function(responseDetails) {
					
				}
			  );

		getURL(	urls[1], 
				function(responseDetails) {
					var infoHTML, infoElement, xResult, msgNode;
					xResult = xPathOnHTML(xpaths[1], responseDetails["responseText"]);
					titleXPath = "//div[@id='terazw']/div[2]/ul";
					msgNode = xPath(titleXPath)[0];
					for (var i = 0; i < ADDITIONAL_ARTICLES/*xResult.length*/; i++) {
						singleElement = removeImgs(xResult[i].innerHTML);
						
						msgLi = document.createElement("li");
						msgLi.innerHTML = singleElement;
						msgNode.appendChild(msgLi);
					}
				},
				function(responseDetails) {
					
				}
			  );

		getURL(	urls[2], 
				function(responseDetails) {
					var infoHTML, infoElement, xResult, msgNode;
					xResult = xPathOnHTML(xpaths[2], responseDetails["responseText"]);
					titleXPath = "//div[@id='terazw']/div[3]/ul";
					msgNode = xPath(titleXPath)[0];
					for (var i = 0; i < ADDITIONAL_ARTICLES/*xResult.length*/; i++) {
						singleElement = removeImgs(xResult[i].innerHTML);
						
						msgLi = document.createElement("li");
						msgLi.innerHTML = singleElement;
						msgNode.appendChild(msgLi);
					}
				},
				function(responseDetails) {
					
				}
			  );

		getURL(	urls[3], 
				function(responseDetails) {
					var infoHTML, infoElement, xResult, msgNode;
					xResult = xPathOnHTML(xpaths[3], responseDetails["responseText"]);
					titleXPath = "//div[@id='terazw']/div[4]/ul";
					msgNode = xPath(titleXPath)[0];
					for (var i = 0; i < ADDITIONAL_ARTICLES/*xResult.length*/; i++) {
						singleElement = removeImgs(xResult[i].innerHTML);
						
						msgLi = document.createElement("li");
						msgLi.innerHTML = singleElement;
						msgNode.appendChild(msgLi);
					}
				},
				function(responseDetails) {
					
				}
			  );
	default:
		imgXPath = "//img[contains(@src,'_res.')]";
		imgs = xPath(imgXPath);
		log("found " + imgs.length + " zoomable images");
		for (var i = 0; i < imgs.length; i++) {
			img = imgs[i];			
			linkizeImg(img);
		} 
}

function linkizeImg(img) {
	newSrc = img.src.replace("_res.", ".");
	
	/*img.addEventListener("click", onImgClick, true);
	img.style.cursor = "pointer";*/
	img.style.border = "double";
	
	var link = document.createElement('a');
	link.setAttribute('href', newSrc);
	link.setAttribute('target', "_blank");
	img.parentNode.appendChild(link);
	link.appendChild(img);
	log("enhanced img " + img.src);	
}

GM_addStyle("pre.debug { display: block !important}"); 

log('</sme.sk enhancer>');
