
function Site() { }

Site.Util = {

	loadingDiv : null,

	makeXmlHttpRequest : function() { 
		if (window.XMLHttpRequest) return new XMLHttpRequest();
		if (window.ActiveXObject) return new ActiveXObject("Microsoft.XMLHTTP");
	},
	
	addUrlParameters : function(url, paramString) {
		var anchor = "";
		if ((pound=url.indexOf("#"))>=0) {
			anchor = url.substring(pound);
			url = url.substring(0,pound);
		}
		if (url.indexOf("?")>=0) {
			url += "&"+paramString;
		}else{
			url += "?"+paramString;
		}
		return url+anchor;
	},
	
	removeUrlParameter : function(url, name) {
		if ((q=url.indexOf('?'))>=0) {
			if ((m=url.indexOf(name+"=", q+1))>=0) { //there is a bug when searching for param, u will get myparam, todo: replace with regex?
				if ((end=url.indexOf("&",m))>=0) {
					return url.substring(0,m) + url.substring(end+1);
				}else{
					if ((end = url.indexOf('#',m)) >= 0) {
						return url.substring(0,m-1) + url.substring(end);
					}else{
						return url.substring(0,m-1);
					}
				}
			}
		}
		return url;
	},
	
	addUrlAnchor : function(url, anchor) {
		if ((a=url.indexOf('#'))>=0) {
			return url.substring(0, a+1) + anchor;
		}else{
			return url + '#' + anchor;
		}
	},
	
	removeUrlAnchor : function(url) {
		if ((a=url.indexOf('#'))>=0) {
			return url.substring(0, a);
		}else{
			return url;
		}
	},
	
	getUrlParameter : function(name) {
		if ((q=window.location.href.indexOf("?"))>=0) {
			var query = window.location.href.substring(q+1);
			if ((pound = query.indexOf("#"))>=0) query = query.substring(0,pound);
			if ((m=query.indexOf(name+"="))>=0) {
				end = query.indexOf("&",m);
				if (end>=0) {
					return unescape(query.substring(m+name.length+1,end));
				}
				return unescape(query.substring(m+name.length+1));
			}
		}
		return null;
	},
	
	attributesToArray : function(node) {
		var res = new Array();
		for (var i=0; i<node.attributes.length; i++) {
			a = node.attributes[i];
			res[a.nodeName] = a.nodeValue;
		}
		return res;
	},
	
	getElementByClass : function(parentNode, tagName, className) {
		var tags = parentNode.getElementsByTagName(tagName);
		for (var i=0; i<tags.length; i++) {
			var c = tags[i].className.split(' ');
			for (var j=0; j<c.length; j++) {
				if (c[j] == className) {
					return tags[i];
				}
			}
		}
		return null;
	},
	
	getElementsByClass : function(parentNode, tagName, className) {
		var res = new Array();
		var tags = parentNode.getElementsByTagName(tagName);
		for (var i=0; i<tags.length; i++) {
			//if (tagName == 'select') alert(tags[i].className);
			var c = tags[i].className.split(' ');
			for (var j=0; j<c.length; j++) {
				if (c[j] == className) {
					res.push(tags[i]);
					break;
				}
			}
		}
		return res;
	},
	
	getIndexOfChild : function(parentNode, childNode) {
		for (var i=0; i<parentNode.childNodes.length; i++) {
			if (parentNode.childNodes[i] == childNode) return i;
		}
		return null;
	},
	
	escapeAttribute : function(val) {
		if (!val) return val;
		return Site.Util.stringReplaceAll(Site.Util.stringReplaceAll(val, '"', "&quot;"), "'", "&#039;");
	},
	
	escapeHtml : function(html) {
		if (!html) return html;
		return Site.Util.stringReplaceAll(Site.Util.stringReplaceAll(html, '<', "&lt;"), ">", "&gt;");
	},
	
	stringReplaceAll : function(str, find, replaceWith) {
		while (str.indexOf(find) != -1) str = str.replace(find,replaceWith);
		return str;
	},
	
	scrambledEmailLink : function(p3, p2, p1) {
		return "<a href='mailto:"+p1+'@'+p2+'.'+p3+"'>"+p1+'@'+p2+'.'+p3+"</a>";
	},
	
	/* not really util functions, but nowhere else to go */
	
	showLoading : function() {
		if (!this.loadingDiv) {
			this.loadingDiv = document.createElement('div');
			this.loadingDiv.id = 'loading';
			var inner = document.createElement('div');
			inner.appendChild(document.createTextNode('loading...'));
			this.loadingDiv.appendChild(inner);
			document.body.appendChild(this.loadingDiv);
		}else{
			this.loadingDiv.style.display = 'block';
		}
		this.loadingDiv.style.top = ToolMan.coordinates().scrollOffset().y + 'px';
	},
	
	hideLoading : function() {
		if (this.loadingDiv) {
			this.loadingDiv.style.display = 'none';
		}
	}

}

Site.Event = {

	onload : function(f, afterEverythingLoads) {
		if (afterEverythingLoads) {
			ToolMan.events().register(window, 'load', f);
		}else{
			// Safari
			if (/WebKit/i.test(navigator.userAgent)) { // sniff
				if (!Site.Event._safariOnDomLoads) {
					Site.Event._safariOnDomLoads = new Array();
					var _timer = setInterval(function() {
						if (/loaded|complete/.test(document.readyState)) {
							clearInterval(_timer);
							for (var i=0; i<Site.Event._safariOnDomLoads.length; i++) {
								var f = Site.Event._safariOnDomLoads[i];
								f();
							}
						}
					}, 10);
				}
				Site.Event._safariOnDomLoads.push(f);
			}
			// Mozilla
			else if (document.addEventListener) {
				document.addEventListener("DOMContentLoaded", f, false);
			}
			else {
				window._isIe = false;
				// for Internet Explorer (using conditional comments)
				/*@cc_on @*/
				/*@if (@_win32)
				window._isIe = true;
				if (!this._ieOnDomLoads) {
					Site.Event._ieOnDomLoads = new Array();
					document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
					var script = document.getElementById("__ie_onload");
					script.onreadystatechange = function() {
						if (this.readyState == "complete" && Site.Event._ieOnDomLoads) {
							for (var i=0; i<Site.Event._ieOnDomLoads.length; i++) {
								var f = Site.Event._ieOnDomLoads[i];
								f();
							}
						}
					};
				}
				Site.Event._ieOnDomLoads.push(f);
				/*@end @*/
				if (!window._isIe) {
					ToolMan.events().register(window, 'load', f);
				}
			}
		}
	},
	
	onunload : function(f) {
		ToolMan.events().register(window, 'unload', f);
	},
	
	onresize : function(f) {
		ToolMan.events().register(window, 'resize', f);
	}

}

String.prototype.trim = function() { return this.replace(/^\s+|\s+$/, ''); };

function print_r(obj) {
	var str="";
	for(prop in obj) {
		str += prop + "\n"; //+ " value :" + obj[prop] + "\n";//Concate prop and its value from object
	}
	alert(str);
}

function _submitInlineComment(entityType, entityId) {
	var params = '';
	var inputs = document.getElementsByTagName('input');
	for (var i=0; i<inputs.length; i++) {
		if (inputs[i].getAttribute('name') == 'author') {
			params += "name=" + escape(inputs[i].value) + "&";
		}
		else if (inputs[i].getAttribute('name') == 'email') {
			params += "email=" + escape(inputs[i].value) + "&";
		}
	}
	var textareas = document.getElementsByTagName('textarea');
	for (var i=0; i<textareas.length; i++) {
		if (textareas[i].getAttribute('name') == 'comment') {
			params += "body=" + escape(textareas[i].value) + "&";
		}
	}
	Site.Mini.open(_siteBaseUrl+"admin/comments/add?si=" + site_id + "&" + params + "et=" + entityType + "&ei=" + entityId + "&from_inline&s");
}
