/*
 * grid.js
 * ---
 * EZEL 08/2010
 * clickable grid
 * ---
 * requires:
 *   jquery.js
 * ---
 */

/*jslint browser: true */
/*global window: false, $: false, ESSENCE: true */
/**/

if (typeof ESSENCE === 'undefined') { 
	ESSENCE = {}; 
}
ESSENCE.ClickableGrid = (function () {
    'use strict';
    var CONST, MAIN;
	
	CONST = {
	};
	
	MAIN = {
		clsSelected: 'selected',
		clsLinkRow: 'rowLink',
		selExclude: '.footer'
	};
	
	function getLink(qrow) {
		return qrow.find('td a:not(.unlink)').eq(0);
	}
	
	function getCheck(qrow) {
		return qrow.find('td input[type="checkbox"]').eq(0);
	}

	function clickLink(evnt) {
		var qrow, link, hndlr;
		qrow = $(evnt.currentTarget);
		if (evnt.target.tagName.toLowerCase() !== 'a') {
			link = getLink(qrow);
			hndlr = link.attr('onclick');
			link.attr('onclick', null);
			if (typeof hndlr === 'function') {
				hndlr.call(link[0]);
			} else {
				if (ESSENCE.ModalSubmit && ESSENCE.ModalSubmit.go) {
					ESSENCE.ModalSubmit.go();
				}
				window.location = link.attr('href');
			}
			return false;
		}
	}
	
	function clickCheck(evnt) {
		var start, qrow, qchk, echk;
		start = +new Date();
		qrow = $(evnt.currentTarget);
		qchk = getCheck(qrow);
		echk = qchk[0];
		if (evnt.target !== echk) {
			echk.checked = !echk.checked;
		}
	}

	function setLinkRow(qrow) {
		var link, chk;
		link = getLink(qrow);
		if (link.length > 0) {
			qrow.click(clickLink);
			qrow.addClass(MAIN.clsLinkRow);
		} else {
			chk = getCheck(qrow);
			if (chk.length > 0) {
				qrow.click(clickCheck);
				qrow.attr('title', chk.attr('title'));
				qrow.addClass(MAIN.clsLinkRow);
			}
		}
	}

	function init(target) {
		if (typeof target === 'undefined') {
			target = 'table.grid';
		}
		$(target).find('tr:not(' + MAIN.selExclude + ')').each(function () {
			var qrow = $(this);
			setLinkRow(qrow);
		});
	}
	
	$(function() { init(); });
	
	MAIN.init = init;
	return MAIN;
}());

