/* 
-  Breeze Content Management Common Functions
-  
-  Author: Yuri_S
-  E-mail: blodo@poczta.fm
-
----------------------------------------------------------------------- */

if (typeof Breeze === 'undefined') {
	var Breeze = new Object();
}

Breeze.onInit = function () {
	this.callbacks = new Array();
	var isWebkit = /WebKit|Konqueror/i.test(navigator.userAgent) ? true : false;
	
	// For IE
	/*@cc_on @*/
	/*@if (@_win32)
	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") {
			Breeze_onInit.run(); // call the onload handler
		}
	};
	/*@end @*/
	
	// For Mozilla and Opera
	if (document.addEventListener && !isWebkit) {
		document.addEventListener("DOMContentLoaded", function () { Breeze_onInit.run() }, false);
	}
	
	// For Safari
	if (isWebkit) {
		var _timer = setInterval(function () {
			if (/loaded|complete/.test(document.readyState)) {
				clearInterval(_timer);
				Breeze_onInit.run();
			}
		}, 500);
	}

}
Breeze.onInit.prototype = {
	add: function (callback) {
		this.callbacks[this.callbacks.length] = callback;
	},
	
	run: function () {
		var len = this.callbacks.length;
		for (var i = 0; i < this.callbacks.length; i++) {
			this.callbacks[i]();
		}
	}
	
}
var Breeze_onInit = new Breeze.onInit();


// Functions
function eventAttach (obj, event, handler) {
	if (obj.addEventListener) {
		obj.addEventListener(event, handler, false);
		return true;
	} else if (obj.attachEvent) {
		var r = obj.attachEvent('on' + event, handler);
		return r;
	} else {
		obj['on' + event] = handler;
	}
}
	
function eventDetach (obj, event, handler) {
	if (obj.removeEventListener) {
		obj.removeEventListener(event, handler, false);
		return true;
	} else if (obj.detachEvent) {
		var r = obj.detachEvent('on' + event, handler);
		return r;
	} else {
		obj['on' + event] = '';
	}
}
	
function browserDetect () {
	if (window.opera) {
		return 'opera';
	} else if (window.sidebar && navigator.product == 'Gecko' && window.find && !navigator.savePreferences) {
		return 'mozilla';
	} else if (window.console && !document.all) {
		return 'safari';
	} else if (document.all) {
		return 'ie';
	} else {
		return 'undefined';
	}
}

function delegateFunction (scope, func) {
	var args = new Array();
	for (var i = 2, len = arguments.length; i < len; i++) {
		args.push(arguments[i]);
	}
	return function () {
		return func.apply(scope, args);
	};
}

function $ (id) {
	return document.getElementById(id);
}

function isset (varobj) {
	if (typeof varobj === 'undefined' || varobj === null) {
		return false;
	} else {
		return true;
	}
}

function str_replace (from, to, subject) {
	if (typeof from != 'object') from = new Array(new String(from));
	if (typeof to != 'object') to = new Array(new String(to));
	for (var i = 0; i <= from.length; i++) {
		var fi = new String(from[i]);
		var ti = new String(to[i]);
		while (subject.indexOf(fi.valueOf()) != -1) {
			subject = subject.replace(fi.valueOf(), ti.valueOf());
		}
	}
	return subject;
}

function html_entities_decode (str) {
	var ta = document.createElement('textarea');
	ta.innerHTML = str.replace(/</g, '&lt;').replace(/>/g, '&gt;');
	return ta.value;
}

function set_cookie (name, value, expire, path, domain, secure) {
	if (expire) {
		var date = new Date();
		date.setTime(date.getTime() + (expire * 1000));
	}
	document.cookie = name + "=" + escape(value) +
	(expire ? ";expires=" + date.toGMTString() : "") + 
	(path ? ";path=" + path : "") + 
	(domain ? ";domain=" + domain : "") +
	(secure ? ";secure" : "");
}

function unset_cookie (name) {
	set_cookie(name, '', -1);
}

function read_cookie (name) {
	var name = name + '=';
	var ca = document.cookie.split(';');
	for (var i = 0; i < ca.length; i++) {
	var c = ca[i];
		while (c.charAt(0) == ' ') {
			c = c.substring(1, c.length);
		}
		if (c.indexOf(name) == 0) {
			return c.substring(name.length, c.length);
		}
	}
	return null;
}

Object.prototype.nextElement = function () {
	var obj = this;
	do {
		obj = obj.nextSibling;
	} while (obj && obj.nodeType != 1);
	return obj;
}

Object.prototype.previousElement = function () {
	var obj = this;
	do {
		obj = obj.previousSibling;
	} while (obj && obj.nodeType != 1);
	return obj;
}

function nextElement (obj) {
	do {
		obj = obj.nextSibling;
	} while (obj && obj.nodeType != 1);
	return obj;
}

function previousElement (obj) {
	do {
		obj = obj.previousSibling;
	} while (obj && obj.nodeType != 1);
	return obj;
}
