// Change these values for marking some websites in Google results:
var linksUnderTheSupervision = new Array(
'habrahabr.ru',
'www.techcrunch.com',
'en.wikipedia.org'
);
//
// ==UserScript==
// @name          Tuned Google SERPs
// @namespace     tunedGoogleSERPs
// @description	  Script numbering websites in Google search results, marking websites
// @description	  which you had placed to "linksUnderTheSupervision" list, adding "Cached Text-only" link to snippets.
// @description	  Also script adds new search operators, which you can use in queries:
// @description	  co:us - set your location (good if you want to check your site positions for country different than your current
// @description	  lang:en - set language of webpages in results
// @description	  loc:uk - set physical location of websites in results
// @description	  num:30 - set number of pages in results
// @description	  
// @include       http*://www.google.*/search?*
// @include       http*://www.google.*/custom?*
// @include       http*://www.google.*/
// @version       1.7
// @source       http://with.in/
// @author       samlowry
// ==/UserScript==

(function() {
	var p_result=document.getElementById('ssb');
	if (!p_result) return;
	var i;
	var g_start = 0;
	var m = p_result.innerHTML.match(/<b>(\d+)<\/b> - <b>(\d+)<\/b>/i);
	if (m)
	{
		g_start = m[1];
	}

	//Create Array of All HTML Tags
	var allLiTags=document.getElementsByTagName("li");

	//Loop through all tags using a for loop
	for (i=0; i<allLiTags.length; i++)
	{
		//if ( /\bg\b/.test(allLiTags[i].className)){alert(allLiTags[i].className)};


		//Get all tags with the specified class name.
		if (allLiTags[i].className=='g w0' || allLiTags[i].className=='g s w0')
		{
			var h3=allLiTags[i].getElementsByTagName('h3');
			h3[0].innerHTML=g_start+'.&nbsp;' + h3[0].innerHTML;
			g_start++;
			for (var j = 0; j < linksUnderTheSupervision.length; j++)
			{
				var re = new RegExp('<a href=".*?'+linksUnderTheSupervision[j]+'.*?"\\s', 'i');
				if(h3[0].innerHTML.match(re))
				{
					//Yes, this is on of links under supervision
					h3[0].style.background='#FCEBEB';
					break;
				}
			}

			var allSpanTags=allLiTags[i].getElementsByTagName("span");
			for (var j=0; j<allSpanTags.length; j++){
				if (allSpanTags[j].className=='gl')
				{
					allSpanTags[j].innerHTML=allSpanTags[j].innerHTML.replace(
						/<a href="(.*?search\?q=cache.*?)"(?:.*?)>(.*?)<\/a>/i,
						'$& - <a href="$1&amp;strip=1">$2 Text-only</a>'
					);
				}
			}

		}

	}

})();




(function() {
	var searchButtonFunction='\
		var q=this.qq.value;\
		var queryWords=q.split(/\\s+/);\
		var operatorExp=/^(co|lang|loc|num):(.+)$/;\
		for (i=0; i<queryWords.length; i++)\
		{\
			if( operatorExp.test(queryWords[i])==true )\
			{\
				switch(RegExp.$1)\
				{\
					case "co":\
						var paramName="cr";\
						var paramValue="country"+RegExp.$2.toUpperCase();\
						break;\
					case "lang":\
						var paramName="lr";\
						var paramValue="lang_"+RegExp.$2.toLowerCase();\
						break;\
					case "loc":\
						var paramName="gl";\
						var paramValue=RegExp.$2.toLowerCase();\
						break;\
					case "num":\
						var paramName="num";\
						var paramValue=RegExp.$2;\
						break;\
					default:\
				}\
				var allInputs=this.getElementsByTagName("input");\
				var valueWasSet=0;\
				for (j=0; j<allInputs.length; j++)\
				{\
					if(allInputs[j].getAttribute("name")==paramName)\
					{\
						allInputs[j].setAttribute("value", paramValue);\
						valueWasSet=1;\
					}\
				}\
				if(!valueWasSet)\
				{\
					var input = document.createElement("input");\
					input.setAttribute("type", "hidden");\
					input.setAttribute("name", paramName);\
					input.setAttribute("value", paramValue);\
					this.appendChild(input);\
				}\
			queryWords[i]="";\
			}\
			this.q.value=queryWords.join(" ");\
		}\
	';


	if (/(?:\?|&)qq=([^&]+)(?:&|$)/.test(document.location) == true )
	{
		var rawQQ=RegExp.$1;
		var qq=unescape(decodeURI(RegExp.$1.replace(/\+/g,' ')));
	}

	var allForms=document.getElementsByTagName("form");
	for (i=0; i<allForms.length; i++)
	{
		allForms[i].setAttribute('onsubmit', searchButtonFunction);
		allForms[i].q.setAttribute('name', 'qq');
		var input = document.createElement("input");
		input.setAttribute("type", "hidden");
		input.setAttribute("name", "q");
		input.setAttribute("value", allForms[i].qq.value);
		allForms[i].appendChild(input);
		if(qq){
			allForms[i].qq.setAttribute('value', qq );
		}
	}

	if(rawQQ){
		var paginatorBlock=document.getElementById('nav');
		var paginatorLinks=paginatorBlock.getElementsByTagName("a");
		for (i=0; i<paginatorLinks.length; i++){
			//alert(paginatorLinks[i]);
			paginatorLinks[i].setAttribute('href', paginatorLinks[i].href+"&qq="+rawQQ );
		}
	}


})();

