/*Some functions taken from Fotki.com Core JS classes. 
See http://www.fotki.com - the perfect photo-hosting portal. 
Just take a glance, you won't be able to withstand.

Taken by ALeX inSide. */

function Core() {
}

Core.escape = function Core_escape(data) {
	if (data != null && data != "" && data != 'undefined') { 
		data = encodeURIComponent(data);
		return data;
	} else {
		return "";
	}
}

Core.unescape = function Core_unescape(data) {
	if (data != null && data != "" && data != 'undefined') { 
		try {
			data = decodeURIComponent(data);
			return data;
		} catch(e) {
			try {
				data = decodeURI(data);
				Logger.log("incorrect bytecode in : " + data + " explain: " + e + "trying again ...");
				return data;
			} catch(e) {
				Logger.log("fatal error");
				return data;
			}
		}
	} else {
		return "";
	}
}

Core.location = document.location + '';

Core.isFunction = function Core_isFunction(f) {
	if (f != null) {
		var f = f + '';
		return (f.indexOf("function") > -1);
	}
}

Core.windowOnload= function Core_windowOnload(f) {
	var prev = window.onload;

	window.onload = function() { 
		try {        
			if (prev) prev(); 
			if (f) f(); 
		} catch(e) {
			Logger.log("error putting function to window.onload");
		}
	}
}

// work with DOM elements
Core.elementCache = new Array();

Core.dump= function Core_dump(obj) {
	if (obj != null) {
		Logger.log('dumping object: ' + obj + '---------------');

		for (var i in obj) {
			if (i > -1) {
				Logger.log(i + ":" + obj[i]);
			} else {
				Logger.log(i + ':' + eval("obj." + i));
			}
		}

		Logger.log('---------------------------------------');
	}
}

Core.getElementWidth= function Core_getElementWidth(e) {
        if (e != null) {
		var el = Core.getElementU(e);

		if(el != null) {
			if (el.tagName == "TD") {
				return el.clientWidth;
			}

			// TODO: write for other objects as well
		}
	}
}

Core.setFocus = function(e) {
        if (e != null) {
		var el = Core.getElementU(e);

		if(el != null) {
			if (el.tagName == "INPUT") {
				el.focus();
			}
		}
	}
}

Core.flushElementCache = function() {
	Core.elementCache = new Array();
}

Core.getElementU = function Core_getElementU(e) {
	if (e != null) {
		if (Core.elementCache[e] == null) {
			var el = (document.all) ? document.all[e] : document.getElementById(e);
			Core.elementCache[e] = el;
			return el;
		} else {
			return Core.elementCache[e];
		}
	}
}

Core.showElement = function Core_showElement(e, forced_display) {
	if (e != null) {
		var el = Core.getElementU(e);

		if (el != null) {
			if (forced_display != null && forced_display != '') {
				el.style.display = forced_display;
			} else if (el.tagName == "DIV" || el.tagName == "UL" || el.tagName == "FIELDSET" || el.tagName == "LI") {
				el.style.display = "block";
			} else if (el.tagName == "SPAN" || el.tagName == "INPUT" || el.tagName == "TEXTAREA" || el.tagName == "IMG" || el.tagName == "A" || el.tagName == "SELECT" ) {
				el.style.display = "inline";
			} else if (el.tagName == "TR") {
				el.style.display = "table-row";
			} else if (el.tagName == "TD" || el.tagName == "TH") {
				el.style.display = "table-cell";
			} else {
				el.style.display = "";
			}
		}
	}
}

Core.hideElement = function Core_hideElement(e) {
	if (e != null) {
		var el = Core.getElementU(e);

		if (el != null) {
			if (el.tagName == "DIV" || el.tagName == "UL" || el.tagName == "SPAN" || el.tagName == "INPUT" || el.tagName == "TEXTAREA" || el.tagName == "IMG" || el.tagName == "FIELDSET" || el.tagName == "A" || el.tagName == "SELECT" || el.tagName == "TR" || el.tagName == "TD" || el.tagName == "TH" || el.tagName == "DD" || el.tagName == "LI" || el.tagName == "FORM") {
				el.style.display = "none";
			} else {
				el.style.display = "none";
				Logger.log("hideElement doesn't support " + el.tagName + " type of objects yet");
			}
		}
	}
}

Core.toggleShowElement = function (e, forced_display) {
	if (e != null) {
		var el = Core.getElementU(e);

		if (el != null) {
			if (el.style.display == "none") {
				Core.showElement(e, forced_display);
			} else {
				Core.hideElement(e);
			}
		}
	}
}

Core.setText = function (e, text) {
	if (e != null) {
		var el = (typeof(e) == 'object') ? e : Core.getElementU(e);
		if (el != null && text != null) {
			if(el.tagName == "DIV" || el.tagName == "SPAN" || el.tagName == "TR" || el.tagName == "DD" || el.tagName == "TD" || el.tagName == "A") {
				el.innerHTML = text;
			} else if (el.tagName == "INPUT" || el.tagName == "TEXTAREA" || el.tagName == "SELECT") {
				el.value = text;
			}
		}
	}
}

Core.getText= function Core_getText(e) {
	if (e != null) {
		var el = (typeof(e) == 'object') ? e : Core.getElementU(e);
		var text = null;

		if (el != null ) {
			if(el.tagName == "DIV" || el.tagName == "SPAN" || el.tagName == "DD" || el.tagName == "TD") {
				 text = el.innerHTML;
			} else if (el.tagName == "INPUT" || el.tagName == "TEXTAREA" || el.tagName == "SELECT") {
				if(el.type == "radio") {
					if(el.checked) {
						text = el.value;
					} else {
						text = '';
					}
				} else {            
					ext = el.value;
				}
			} 
			return text;
		}
	}
}

Core.setClassName = function(e, className) {
	if (e != null && className != null) {
		var text = null;
		var el = Core.getElementU(e);

		if (el != null ) {
			el.className = className;
		}
	}
}

Core.switchClassNames = function(e, from_className, to_className) {
	if (e != null && from_className != null && to_className !=null) {
		var el = Core.getElementU(e);

		if (el != null && el.className == from_className) {
			el.className = to_className;
		} else {
			el.className = from_className;
		}
	}
}

Core.getClassName = function(e) {
	if (e != null) {
		var el = Core.getElementU(e);

		if (el != null ) {
			return el.className;
		}
	}
}

Core.addToClassName = function(e, className) {
	if (e != null && className != null) {
		Core.setClassName(e, Core.getClassName(e)+className);
	}
}

Core.replaceInClassName = function(e, replace_what, replace_to) {
	if (e != null && replace_what != null && replace_to != null) {
		var el = Core.getElementU(e);

		if (el != null) {
			el.className = el.className.replace(replace_what, replace_to);
		}
	}
}

Core.clearTail = function Core_clearTail(e, numberOfLinesToLeave) {
	var all_lines = Core.getText(e);

	if (all_lines != null) {
		var lines = all_lines.split("<br>");

		if (lines.length > numberOfLinesToLeave) {
			lines = lines.slice(0, numberOfLinesToLeave);
		}

		Core.setText(e, lines.join("<br>"));
	}
}

Core.appendText= function Core_appendText(e, text) {
	Core.setText(e, Core.getText(e) + text);
}

Core.appendTextToTop= function Core_appendTextToTop(e, text) {
	Core.setText(e, text + Core.getText(e));
}

Core.parseInt = function(s) {
	if (s != null && s != "") {
		return s.replace(/[^\d]/g, "");
	}
}

//Rounds up the float or int value. precision - is amount of digits after the comma. May be negative.
Core.round = function Core_round(value, precision) {
	if (precision == undefined){
		precision = 0;
	}

	precision = Math.pow(10, precision);
	return Math.round(value*precision)/precision;
}

Core.formatMoney = function formatMoney(value) {
	value = Core.round(value, 2);
	var v = value * 100;
	var return_string = value;

	if (v % 100 == 0) return_string += '.00';
	else if (v % 10 == 0) return_string += '0';
	return return_string;
}

//Adds event listener for elOn object. strEventType = 'scroll', 'resize', 'hover', etc.
Core.addEvent = function Core_addEvent(elOn, strEventType, ptrFunction) {
	if(elOn.addEventListener) {
		elOn.addEventListener(strEventType, ptrFunction, false);
	} else if (elOn.attachEvent) {
		elOn.attachEvent('on' + strEventType, ptrFunction);
	}
}

Core.removeEvent = function Core_removeEvent(elOn, strEventType, ptrFunction) {
	if (elOn.removeEventListener) {
		elOn.removeEventListener(strEventType, ptrFunction, false);
	} else if (elOn.detachEvent) {
		elOn.detachEvent('on' + strEventType, ptrFunction);
	}
}





// eats object with parameters or url, window name, size (deprecated);
Core.openWindow = function Core_openWindow(a,b,c) {
	if(a == null) { return };
	var popupWin;
	if (typeof(a) == 'object') {
		if (a.url == null ) { return; }
		a.winname     = a.winname || "";
		a.scrollbars  = a.scrolbars || "yes";
		a.resizable   = a.resizable || "yes";
		a.width       = a.width || "400";
		a.height      = a.height || "500";
		a.raised      = a.raised || "yes"; // always raised
		a.dependent   = a.dependent || "yes";
		a.zlock       = a.zlock || "yes";

		popupWin = window.open(a.url,a.winname,'scrollbars=' + a.scrollbars + ', resizable = ' + a.resizable + ', width = ' + a.width + ', height = ' + a.height + ', alwaysRaised = ' + a.raised + ', dependent = ' + a.dependent + ', z-lock = ' + a.zlock);
	} else if (typeof(a) == 'string'){
		if (b == null) { b = ""; };
		popupWin = window.open(a, b, 'scrollbars=yes,resizable=yes, width=400,height=500 alwaysRaised=yes,dependent=yes,z-lock=yes');
	}
	popupWin.focus();
	return false;
}

Core.validateEmail = function Core_validateEmail(email) {
	if (/^[^@\s]+@([A-Za-z0-9\-]+\.)+[A-Za-z]{2,4}$/.test(email)) {
		return true;
	} else {
		return false;
	}
}

Core.getArrayUnique = function Core_getArrayUnique(array) {
	// making a hash of array
	var hash_from_array = new Array();
	var array_from_hash = new Array();
	if (typeof(array) == 'object') {
		for (a in array) {
			hash_from_array[array[a]] = 1;
		}
		for (b in hash_from_array) {
			array_from_hash.push(b);
		}
		return array_from_hash;
	}
	return false;
}
