var ACUtil = {
	httpRequest: null,
	
	'reportView': function(formElement, callback, rating, comment, remoteIP, cmntMail, contactMe) {
		var currentUri = ACUtil.getCurrentUri();
		var url = '/utils/index.php?page=reportview&url=' + currentUri +'&rate=' + rating +'&remoteIP=' + remoteIP +'&cmnt=' + comment +'&cmntMail=' + cmntMail +'&contactMe=' + contactMe;
		var fileName = currentUri.substring(currentUri.lastIndexOf('/') + 1, currentUri.lastIndexOf('.'));
		if (rating != 6) {
			setCookie(fileName, rating, 7);
			new Ajax.Request(url, { method:'get', 
				onSuccess: function(transport, json){ 
					callback.done('Success', rating);
				}
			});
		} else if (comment != '') {
			new Ajax.Request(url, { method:'get', 
				onSuccess: function(transport, json){ 
					callback.done('Success', rating);
				}
			});
		}
	},
	
	'getCurrentUri' : function() {
		var uri = ACUtil.parseUri();
		var port = (uri.port!="80" && uri.port!="") ? ":" + uri.port: "";
		uri.fileName = (uri.fileName ? uri.fileName : "index.php");
		var currentUri = uri.domain + uri.directoryPath + uri.fileName;
		return currentUri;
	},
	
	'parseUri' : function(sourceUri) {
		sourceUri = sourceUri==undefined ? window.location.href : sourceUri;
		var uriPartNames = ["source","protocol","authority","domain","port","path","directoryPath","fileName","query","anchor"];
		var uriParts = new RegExp("^(?:([^:/?#.]+):)?(?://)?(([^:/?#]*)(?::(\\d*))?)?((/(?:[^?#](?![^?#/]*\\.[^?#/.]+(?:[\\?#]|$)))*/?)?([^?#/]*))?(?:\\?([^#]*))?(?:#(.*))?").exec(sourceUri);
		var uri = {};
		
		for(var i = 0; i < 10; i++) {
			uri[uriPartNames[i]] = (uriParts[i] ? uriParts[i] : "");
		}
		
		if(uri.directoryPath.length > 0) {
			uri.directoryPath = uri.directoryPath.replace(/\/?$/, "/");
		}
		return uri;
	},
	
	
	'open' : function(element) {
		$(element).style.display = "block";
	},
	
	'close' : function(element) {
		$(element).style.display = "none";
	},
	
	'callInProgress' : function(xmlhttp) {
		switch (xmlhttp.readyState) {
			case 1: case 2: case 3:
				return true;
				break;
			// Case 4 and 0
			default:
				return false;
				break;
		}
	},
	
	'toggleCollapse': function (divBox, quickie) {
		var collapsedDiv = divBox.nextSibling;
		
		while(collapsedDiv.nodeName=="#text"){
			collapsedDiv=collapsedDiv.nextSibling;
		}
		
		Element.removeClassName(divBox, "collapse");
		Element.removeClassName(divBox, "collapse-down");
		
		if(collapsedDiv.style.display=="" || collapsedDiv.style.display=="block") {
			if(quickie!==undefined) Effect.BlindDown(collapsedDiv, { delay:0.2 } );
			else collapsedDiv.style.display = "none";
				divBox.addClassName("collapse");
		} else {
			if(quickie!==undefined) Effect.BlindUp(collapsedDiv, { delay:0.2 } );
			else collapsedDiv.style.display = "block";
				divBox.addClassName("collapse collapse-down");
		}
	}
};

Ajax.Responders.register({
	onCreate: function(request) {
		request['timeoutId'] = window.setTimeout( function() {
			// If we have hit the timeout and the AJAX request is active, abort it and let the user know
			if (ACUtil.callInProgress(request.transport)) {
				request.transport.abort();
				// Run the onFailure method if we set one up when creating the AJAX object
				if (request.options['onFailure']) {
					request.options['onFailure'](request.transport, request.json);
				}
			}
		},
			60000 // 60 seconds 
		);
	},
	onComplete: function(request) {
		// Clear the timeout, the request completed ok
		window.clearTimeout(request['timeoutId']);
	}
});

Event.observe(window, 'load', function() {
	// check for collapseable headings if this is an article
	if($('articlecontent') && $('articlecontent').getElementsByClassName("collapse").length!=0) {
		var collapsable = $('articlecontent').getElementsByClassName("collapse");
		for(var i=0; i<collapsable.length; i++) {
			collapsable[i].innerHTML = "<a href=\"javascript:void(0);\" onclick=\"ACUtil.toggleCollapse(this.parentNode);return false;\" style=\"margin-left:-20px;padding-left:20px;\">" + collapsable[i].innerHTML + "</a>";
			ACUtil.toggleCollapse(collapsable[i]);
		}
		
		if($('collapser')) {
			$('collapser').style.display = 'block';
		}
	}
	
	Event.observe(document, 'keypress', function(e) { 
		var code;
		if (!e) var e = window.event;
		if (e.keyCode) code = e.keyCode;
		else if (e.which) code = e.which;
		
		// disable any shortcuts when in a textarea/field:
		var element;
		if(e.target) element=e.target;
		else if(e.srcElement) element=e.srcElement;
		if(element.nodeType==3) element=element.parentNode;
		var character = String.fromCharCode(code);
		
		if((character=="" || character=="")) {
			// if user presses escape (empty character means escape in Safari)
			if((element.name=="recipient" || element.name=="email_sendto") && $('email-open')) {
				ACEmail.open();
				element.blur();
			}
			
		} else if((element.tagName == 'INPUT' || element.tagName == 'TEXTAREA')) {
			return;
		} else {
			if($('email-open') && !$('email-open').visible() && (character=="e" || character=="E")) {
				scroll(0,0);
				ACEmail.open();
			} else if($('email-open') && $('email-open').visible() && (character=="e" || character=="E")) {
				scroll(0,0);
				window.setTimeout("$('email-address').focus();", 5);
			}
		}
	});
});

function setCookie (name, val, expDays) {
	var exp = new Date();
	var cookieTimeToLive = exp.getTime() + (expDays * 24 * 60 * 60 * 1000);
	exp.setTime(cookieTimeToLive);
	document.cookie = name + "=" + escape(val) + "; expires=" + exp.toGMTString();
}

