//<![CDATA[  

/**
 * Handles code request
 * 
 * @param integer id
 * @return boolean
 */
function code(id) {
	var xmlHttp = createHTTPHandler();
	xmlHttp.open('POST', url + 'ajax/actions/code', true);
	
	var layer = 'action-' + id;
	
	xmlHttp.onreadystatechange = function() {
		if(4 == xmlHttp.readyState && 200 == xmlHttp.status) {
			clearTimeout(timeout);
			
			// Retrieve xml
			var root     = xmlHttp.responseXML.documentElement;
			var textNode = root.getElementsByTagName('text');
			
			// Inform user
			set(layer, textNode[0].firstChild.nodeValue);
			
			// Enable layers
			$('report-' + id).style.display = 'inline';
			
			// Enable copying
			if($('copy-' + id)) {
				$('copy-' + id).style.display = 'inline';
			}
		}
		else {
			set(layer, '<img alt="" class="icon" src="' + url + 'images/icons/loader.gif" />');
		}
	}

	xmlHttp.setRequestHeader('Cache-Control', 'no-cache');
	xmlHttp.setRequestHeader('Connection',    'close');
	xmlHttp.setRequestHeader('Content-Type',  'application/x-www-form-urlencoded');
	xmlHttp.setRequestHeader('X_USERAGENT',   'ajax');

	var timeout = setTimeout(function() {
		xmlHttp.abort();
		
		set(layer, 'Timeout');
	}, 10000);

	xmlHttp.send('id=' + urlencode(id));
}

/**
 * Create new XMLHttpRequest
 * 
 * @return object
 */
function createHTTPHandler(){
	if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
		return new XMLHttpRequest();
	}
	else if (window.ActiveXObject) {// code for IE6, IE5
		return new ActiveXObject("Microsoft.XMLHTTP");
	}
	else {
		alert("Your browser does not support XMLHTTP!");
	}
}

/**
 * Handles report of dead code
 * 
 * @param integer id
 * @return boolean
 */
function report(id) {
	var xmlHttp = createHTTPHandler();
	xmlHttp.open('POST', url + 'ajax/actions/report', true);

	var layer = 'report-' + id;

	xmlHttp.onreadystatechange = function() {
		if(4 == xmlHttp.readyState && 200 == xmlHttp.status) {
			clearTimeout(timeout);
			
			// Retrieve xml
			var root     = xmlHttp.responseXML.documentElement;
			var textNode = root.getElementsByTagName('text');
			
			// Inform user
			set(layer, textNode[0].firstChild.nodeValue);
		}
		else {
			set(layer, '<img alt="" class="icon" src="' + url + 'images/icons/loader.gif" />');
		}
	}

	xmlHttp.setRequestHeader('Cache-Control', 'no-cache');
	xmlHttp.setRequestHeader('Connection',    'close');
	xmlHttp.setRequestHeader('Content-Type',  'application/x-www-form-urlencoded');
	xmlHttp.setRequestHeader('X_USERAGENT',   'ajax');

	var timeout = setTimeout(function() {
		xmlHttp.abort();
		
		set(layer, 'Timeout');
	}, 10000);

	xmlHttp.send('id=' + urlencode(id));
	
	return true;
}

/**
 * Handles action vote
 * 
 * @param integer id
 * @param boolean type
 * @return boolean
 */
function vote(id, type) {
	var xmlHttp = createHTTPHandler();
	xmlHttp.open('POST', url + 'ajax/actions/vote', true);
	
	var layer   = 'rating-' + id;
	var comment = 'rating-' + id + '-comment';
	var current = get(layer);

	xmlHttp.onreadystatechange = function() {
		if(4 == xmlHttp.readyState && 200 == xmlHttp.status) {
			clearTimeout(timeout);

			// Retrieve xml
			var root       = xmlHttp.responseXML.documentElement;
			var ratingNode = root.getElementsByTagName('rating');
			var textNode   = root.getElementsByTagName('text');
			
			// Show new rating
			if(undefined != ratingNode[0] && undefined != ratingNode[0].firstChild) {
				set(layer, ratingNode[0].firstChild.nodeValue);
			}
			else {
				set(layer, current);
			}
			
			// Inform user
			set(comment, textNode[0].firstChild.nodeValue);
		}
		else {
			set(layer, '<img alt="" class="icon" src="' + url + 'images/icons/loader.gif" />');
		}
	}
	
	xmlHttp.setRequestHeader('Cache-Control', 'no-cache');
	xmlHttp.setRequestHeader('Connection',    'close');
	xmlHttp.setRequestHeader('Content-Type',  'application/x-www-form-urlencoded');
	xmlHttp.setRequestHeader('X_USERAGENT',   'ajax');

	var timeout = setTimeout(function() {
		xmlHttp.abort();
		
		set(layer, current);
		set(comment, 'Timeout');
	}, 10000);

	xmlHttp.send('id=' + urlencode(id) + '&vote=' + urlencode(type));
	
	return true;
}

//]]>

