/*
W3.org Validation Services:
	markup - http://validator.w3.org/
	links - http://validator.w3.org/checklink
	css - http://jigsaw.w3.org/css-validator/
	feed - http://validator.w3.org/feed/
	p3p - http://www.w3.org/P3P/validator.html
	semantics - http://www.w3.org/2003/12/semantic-extractor.html
*/


var validatorServices = {
	markup: 'http://validator.w3.org/check?uri=',
	links: 'http://validator.w3.org/checklink?uri=',
	css: 'http://jigsaw.w3.org/css-validator/validator?uri=',
	css1: 'http://jigsaw.w3.org/css-validator/validator?profile=css1&uri=',
	css2: 'http://jigsaw.w3.org/css-validator/validator?profile=css2&uri=',
	css21: 'http://jigsaw.w3.org/css-validator/validator?profile=css21&uri=',
	css3: 'http://jigsaw.w3.org/css-validator/validator?profile=css3&uri=',
	feed: 'http://validator.w3.org/feed/check.cgi?url=',
	p3p: 'http://validator.w3.org/p3p/20020128/p3p.pl?uri=',
	semantics: 'http://www.w3.org/2002/08/xslt4html?xslfile=http%3A%2F%2Fwww.w3.org%2F2002%2F08%2Fextract-semantic.xsl&xmlfile='
};

var validatorServicesNames = [];
for(var k in validatorServices)
	validatorServicesNames.push(k);


noun_type_validatablecode = new CmdUtils.NounType("language", validatorServicesNames);


function openUrl(url, postData) {
	var windowManager = Components.classes["@mozilla.org/appshell/window-mediator;1"]
		.getService(Components.interfaces.nsIWindowMediator);
	var browserWindow = windowManager.getMostRecentWindow("navigator:browser");
	var browser = browserWindow.getBrowser();
	
	if(browser.mCurrentBrowser.currentURI.spec == "about:blank")
		browserWindow.loadURI(url, null, postData, false);
	else
		browser.loadOneTab(url, null, null, postData, false, false);
}

function validateGetUrl(inputText) {
	if(inputText.length > 0)
		return inputText;
	else
		return context.focusedWindow.document.location.href;
}

function validateGetValidatorName(inputModifiers) {
	if(inputModifiers["using"].length > 0)
		return inputModifiers["using"];
	else
		return "markup";
}


CmdUtils.CreateCommand({
	name: "validate",
	takes: {url: noun_arb_text},
	modifiers: {using: noun_type_validatablecode},
	
	preview: function(previewBlock, inputObject, inputModifiers) {
		var previewTemplate = "Validates the <b>${validator}</b> for the following URL:<br /><br /><b>${url}</b>";
		var previewData = {
			validator: validateGetValidatorName(inputModifiers),
			url: validateGetUrl(inputObject.text)
		};
		
		previewBlock.innerHTML = CmdUtils.renderTemplate(previewTemplate, previewData);
	},
	execute: function(inputObject, inputModifiers) {
		var validatorName = validateGetValidatorName(inputModifiers);
		var validatorUrl = validatorServices[validatorName];
		
		var urlToValidate = validateGetUrl(inputObject.text);
		
		validatorUrl += encodeURIComponent(urlToValidate);
		openUrl(validatorUrl);
	}
});