/**
 * @author pfigueiredo
 */
KWidget.prototype.localization = new Array();

function KWidget(parent, style) {
	this.parent = parent;
	this.style = style;
	this.panel = null;
	this.id = null;
	this.editMode = false;
	this.data = null;
	this.setupObject = null;
	this.dataHandlerURL = null;
}

KWidget.prototype.init = function(setupObject, url) {
	this.panel.className = 'KWidget';
	this.setDataHandler(url);
	this.setup(setupObject);
	this.retrieveData();
}

KWidget.prototype.draw = function() {
}

KWidget.prototype.getEvent = function(event) {
	return (event == null ?  window.event : event);
}

KWidget.prototype.getTarget = function(event) {
	event = (event == null ?  window.event : event);
	if (event.target) {
		return event.target;
	}
	else if (event.srcElement) {
		return event.srcElement;
	}
	throw Exception('no target for event');
}

KWidget.__getEvent = function(event) {
	return (event == null ?  window.event : event);
}

KWidget.__getTarget = function(event) {
	event = (event == null ?  window.event : event);
	if (event.target) {
		return event.target;
	}
	else if (event.srcElement) {
		return event.srcElement;
	}
	throw Exception('no target for event');
}

KWidget.prototype.getParent = function() {
	return this.parent;
}

KWidget.prototype.getStyle = function() {
	return this.style;
}

KWidget.prototype.getElement = function() {
	return this.panel;
}

KWidget.prototype.setParent = function(parent) {
	this.parent = parent;
}

KWidget.prototype.setStyle = function(style) {
	this.style = style;
}

KWidget.prototype.setElement = function(element) {
	this.panel = element;
}

KWidget.prototype.setID = function(id) {
	this.panel.setAttribute('id', id);
	this.id = id;
}

KWidget.prototype.setCssClass = function(cssClass) {
	this.panel.className = cssClass;
}

KWidget.prototype.setCssStyle = function(cssStyle) {
	this.panel.style.cssText = cssStyle;
}

KWidget.prototype.write = function() {
	if (this.parent != null && this.panel != null) {
		this.parent.appendChild(this.panel);
		return;
	}
	else {
	}
	alert("Invalid values:\n- KWidget.parent: " + this.parent + "\n- KWidget.element: " + this.panel);
}

KWidget.prototype.setup = function(object) {
	this.setupObject = object;
}

KWidget.prototype.setData = function(object) {
	this.data = object;
}

KWidget.prototype.getData = function() {
	return this.data;
}

KWidget.prototype.setDataHandler = function(url) {
	this.dataHandlerURL = url;
}

KWidget.prototype.getDataHandler = function() {
	return this.dataHandlerURL;
}

KWidget.prototype.retrieveData = function(queryString) {
	var event = null;

	if (this.data != null) {
		this.draw();

		event = new Object();
		event.data = this.data;
		this.onData(event, null);
		this.onSetup(event, null);
		this.write();
		return;
	}
	if (this.dataHandlerURL == null) {
		this.data = this.setupObject;
		this.draw();

		event = new Object();
		event.data = this.data;
		this.onData(event, null);
		this.onSetup(event, null);
		this.write();
		return;
	}

	var connection = new KConnection(this);
	try {
		connection.connect(this.dataHandlerURL + (queryString != '' ? '?' + queryString : ''), this.setupObject != null ? 'POST' : 'GET');
		connection.onReady = function(target, ajaxResponse, response) {
			try {
				target.setData(response);
				target.draw();

				var event = new Object();
				event.data = response;
				target.onData(event, ajaxResponse);
				target.onSetup(event, ajaxResponse);
			}
			catch (jsonException) {
				alert(jsonException.toString());
			}
		}
		connection.send(this.setupObject);
	}
	catch (exception) {
		//alert(exception);
	}
}

KWidget.prototype.onData  = function(e, source) {
}

KWidget.prototype.onSetup  = function(e, source) {
}

KWidget.prototype.onAbort  = function(e, source) {
	var input = null;
	if (!e) {
		var e = window.event;
	}
	if (e.target) {
		input = e.target;
	}
	else if (e.srcElement) {
		input = e.srcElement;
	}
}

KWidget.prototype.onBlur  = function(e, source) {
}

KWidget.prototype.onChange  = function(e, source) {
}

KWidget.prototype.onClick  = function(e, source) {
}

KWidget.prototype.onDblClick = function(e, source) {
}

KWidget.prototype.onError = function(e, source) {
}

KWidget.prototype.onFocus  = function(e, source) {
}

KWidget.prototype.onKeyDown  = function(e, source) {
}

KWidget.prototype.onKeyPress  = function(e, source) {
}

KWidget.prototype.onKeyUp  = function(e, source) {
}

KWidget.prototype.onLoad  = function(e, source) {
}

KWidget.prototype.onMouseDown  = function(e, source) {
}

KWidget.prototype.onMouseMove  = function(e, source) {
}

KWidget.prototype.onMouseOut  = function(e, source) {
}

KWidget.prototype.onMouseOver  = function(e, source) {
}

KWidget.prototype.onMouseUp  = function(e, source) {
}

KWidget.prototype.onReset  = function(e, source) {
}

KWidget.prototype.onResize  = function(e, source) {
}

KWidget.prototype.onSelect  = function(e, source) {
}

KWidget.prototype.onSubmit  = function(e, source) {
}

KWidget.prototype.onUnload  = function(e, source) {
}

//STATICS
KWidget.setCookie = function(name, value) {
	var exdate = new Date();
	exdate.setDate(exdate.getDate());
	document.cookie = name + "=" + escape(value);
}

KWidget.getCookie = function(name) {
	if (document.cookie.length > 0) {
		var start = document.cookie.indexOf(name + "=");
		if (start != -1) {
			start = start + name.length + 1;
			var end = document.cookie.indexOf(";", start);
			if (end == -1)
				end = document.cookie.length;
			return unescape(document.cookie.substring(start, end));
		}
	}
	return "";
}
