/* Menus */

function mnhover(el) {
	if ($(el).hasClassName('Over')) $(el).removeClassName('Over');
	else $(el).addClassName('Over');
}

// Miscellaneous

function goto() {
	var querystring = '';
	if (arguments.length > 0) querystring = 'fuseaction=' + arguments[0];
	if (arguments.length > 1) for (var i = 1; i < arguments.length; i++) querystring += '&' + arguments[i];
	location.search = querystring;
}

function selectAll(id) {
	$('frmAdmin').selectToggle = !$('frmAdmin').selectToggle;
	$A($('frmAdmin').elements).each(function(el) {
		if ((el.name == id) && !el.disabled) el.checked = el.form.selectToggle;
	});
}

function selectRow(e) {

	var trigger = Event.element(e);
	if (trigger.tagName == 'INPUT') return false;

	var thisrow = Event.element(e);
	while (thisrow.tagName != 'TR') thisrow = thisrow.parentNode;
	$(thisrow).addClassName('TableRow_Selected');

	if (trigger.tagName == 'A') return false;
	else if (trigger.up().select('A').length > 0) {
		if (trigger.up().select('A')[0].onclick) trigger.up().select('A')[0].onclick();
		else window.location.href = trigger.up().select('A')[0].href;
		return false;
	}
}

// Modifiers

if (!Number.prototype.toThousands) Number.prototype.toThousands = function() {
	var n = this.toString();
	while (n.match(/^(.*\d)(\d{3}(\.|,|$).*$)/)) n = n.replace(/^(.*\d)(\d{3}(\.|,|$).*$)/, '$1,$2');
	return n;
}

if (!String.prototype.splitLine) String.prototype.splitLine = function(n) {
	var b = ''; 
	var s = this;
	while (s.length > n) {
		var c = s.substring(0, n);
		var d = c.lastIndexOf(' ');
		var e = c.lastIndexOf('\n');
		if (e != -1) d = e; 
		if (d == -1) d = n; 
		b += c.substring(0,d) + '\n';
		s = s.substring(d+1);
	}
	return b + s;
}

// Dynamic Content

function ToggleLabel(el, target) {
	$(el.id + '_Label').update(el.checked ? 'RSA ID Number' : 'Passport No');
	$(target).MESSAGE = 'Please enter a valid ' + (el.checked ? 'SA ID Number' : 'Passport Number');
}

// Form elements

function clearSelect(target, label) {
	while (target.options.length > 0) target.options[0] = null;
	if (typeof label != 'undefined') target.options[target.options.length] = new Option (label, "");
}

function checkLength(event, limit) {

	var element = Event.element(event); 
	var key = event.which || event.keyCode;

	if ((limit <= element.value.length) &&
		(key != Event.KEY_UP) && (key !=  Event.KEY_DOWN) && (key != Event.KEY_LEFT) && (key !=  Event.KEY_RIGHT) && 
		(key != Event.KEY_PAGEUP) && (key !=  Event.KEY_PAGEDOWN) &&(key != Event.KEY_HOME) && (key !=  Event.KEY_END) && 
		(key != Event.KEY_TAB) && (key !=  Event.KEY_RETURN) &&	(key != Event.KEY_ESC) &&
		(key != Event.KEY_BACKSPACE) && (key != Event.KEY_DELETE)
	) return false;
	else return true;
} 

function documentFormsInit() {

	$A(document.forms).each(function(form) {

		// Browser inconsistency fix

		if (!Prototype.Browser.IE || (navigator.appVersion.indexOf('MSIE 8') >= 0)) {

			for (var i = 0; i < form.elements.length; i++) 
				if (form.elements[i].type == 'text') $(form.elements[i]).setStyle({ 'margin': '1px 0px 1px 0px' }); 
				else if (form.elements[i].type == 'password') $(form.elements[i]).setStyle({ 'margin': '1px 0px 1px 0px' }); 
				else if (form.elements[i].type == 'checkbox') $(form.elements[i]).setStyle({ 'margin': '3px 3px 4px 4px' }); 
				else if (form.elements[i].type == 'radio') $(form.elements[i]).setStyle({ 'margin': '3px 3px 4px 4px' }); 
				else if (form.elements[i].type == 'textarea') $(form.elements[i]).rows = $(form.elements[i]).rows - 1; 

		}

		// Form globals

		form.selectToggle = false;

		form.hasChanged = false;

		$A(form.elements).each(function(el) { 
			Event.observe(el, 'change', function() { form.hasChanged = true; });
		});
		
		// Extended functions

		form.cancel = function () {
			if (!this.hasChanged) return true;
			else return confirm('You have made changes to this form, if you proceed you will lose these changes.\nDo you wish to proceed?');
		}

		form.clear = function () {
			this.hasChanged = true;
			for (var i = 0; i < this.elements.length; i++) {
				switch (this.elements[i].type) {
					case 'checkbox':	this.elements[i].checked = false; break;
					case 'radio':		this.elements[i].checked = false; break;
					case 'select-one':	this.elements[i].options[0].selected = true; break;
					case 'submit':		break;
					case 'reset':		break;
					case 'button':		break;
					case 'hidden':		break;
					default:			this.elements[i].value = ''; break;
				}
			}
			if (typeof this.clearExtra != 'undefined') this.clearExtra();
		}

		form.proceed = function () {
			if (this.onsubmit()) this.submit();
		}

		form.revert = function () {
			this.reset();
			this.hasChanged = false;
			if (typeof this.revertExtra != 'undefined') this.revertExtra();
		}

		// Load additional form defaults (if specified)

		if (typeof form.revertExtra != 'undefined') form.revertExtra();

		// $$('UL.Buttons A').invoke('observe', 'click', function() { this.blur(); });

	});

}

// AJAX

function help(type) {

	var msg = '';

	switch(type) {

		case 'reference':

			msg  = 'Legal City Reference\n\n';
			msg += 'This is your reference for the search and is used when auditing your account.';
			msg += '\nStart typing and a list of previous matching references will appear.';
			alert(msg);

			break;

		case 'township':

			msg  = arguments[1] + '\n\n';
			msg += 'This is the name as it appears on the title deed; it is important that you enter it accurately.';
			msg += '\nStart typing and a list of matching names will appear.';
			alert(msg);

			break;

		default:

			new Ajax.Request('/?fuseaction=ajax.proceed&SKU=' + type, {
				method: 'get',
				onComplete: function (transport) {
					var service = eval('(' + transport.responseText + ')');
					msg  = service.name + '\n\n';
					msg += service.description.splitLine(90) + '\n\n';
					msg += 'This service costs ' + service.credits + ' Legal Credit' + (service.credits == 1 ? '' : 's') + '.\n';
					alert(msg);
				}
			});

			break;
	}

}

function consumeService(url, proceed, fail) {

	new Ajax.Request(url, {
		method: 'get',
		onComplete: function (transport) {

			var service = eval('(' + transport.responseText + ')');

			if (service.free) {
				service.message = 'Important Notice!\n\n';
				service.message += 'This "' + service.name + '" service usually costs ' + service.credits + ' Legal Credit' + (service.credits == 1 ? '' : 's') + '.\n';
				service.message += 'You currently have free access to this service and your account will NOT be debited.\n';
				service.message += 'Are you sure you wish to proceed?';
				if (confirm(service.message)) { proceed(); } else alert('Request cancelled');
			} else if (service.affordable) {
				service.message = 'Important Notice!\n\n';
				service.message += 'This "' + service.name + '" service costs ' + service.credits + ' Legal Credit' + (service.credits == 1 ? '' : 's') + '.\n';
				service.message += 'If you proceed your account will be debited. Are you sure you wish to proceed?';
				if (confirm(service.message)) { proceed(); } else alert('Request cancelled');
			} else {
				service.message = 'Important Notice!\n\n';
				service.message += 'You do not have enough Legal Credits in your account to proceed.\n';
				service.message += 'Would you like to purchase more Legal Credits?';
				if (confirm(service.message)) fail(); else alert('Transaction cancelled');
			}

		}
	});
}

function confirmCache(url) {
	if (confirm('Are you sure you wish to view this cached entry?'))
		window.location = url;
}

// Onload

Event.observe(window, 'load', function() { 

	documentFormsInit();

	// Document Overlay

	var Overlay = Class.create({

		initialize: function() {

			if (arguments.length > 0) this.id = arguments[0];
			else this.id = 'Overlay';

			this.dialog = this.id + '_Dialog';
	
			this.content = '&nbsp;';
	
			var overlay = $(document.createElement('div'));
			overlay.id = this.id;
			overlay.update('&nbsp;');
			overlay.hide();
		
			var dialog = $(document.createElement('div'));
			dialog.id = this.dialog;
			dialog.align = 'center';
			dialog.update(this._corners(this.content));
			dialog.hide();
		
			var body = document.getElementsByTagName('BODY')[0];
			body.appendChild(overlay);
			body.appendChild(dialog);
			
		},

		show: function() {

			var body = document.getElementsByTagName('BODY')[0];

			var height = parseInt($(body).getHeight()) + ((!Prototype.Browser.IE) ? 10 : 0);
			if (height < document.viewport.getHeight()) height = '100%';
			else height += 'px';
		
			$(this.id).setStyle({ 'height': height });

			$(this.dialog).setStyle({
				left: ((document.viewport.getWidth() - $(this.dialog).getWidth()) / 2) + document.viewport.getScrollOffsets().left + 'px',
				top: (document.viewport.getHeight() * 0.1 ) + document.viewport.getScrollOffsets().top + 'px'
			});

			$(this.dialog).show();
			$(this.id).show();
		},
		
		hide: function() {
			$(this.dialog).hide();
			$(this.id).hide();
		},
		
		setContent: function(html) {
			this.content = this._corners(html);
			$(this.dialog).update(this.content);
		},
		
		_corners: function(html) {
			var content  = '<table width="770" border="0" cellspacing="0" cellpadding="0" align="center">';
				content += '<tr><td width="20" height="20" valign="top"><img src="Images/cnrtl.gif" width="20" height="20" border="0"></td><td bgcolor="white" align="right"><a href="" onclick="document.overlay.hide();return false;"><img src="Images/icon_close.gif" width="16" height="16" border="0" align="texttop" style="margin-right:2px;"></a><a href="" onclick="document.overlay.hide();return false;" style="color:black;text-decoration:none;">Close Window</a></td><td width="20" height="20" valign="top"><img src="Images/cnrtr.gif" width="20" height="20" border="0"></td></tr>';
				content += '<tr><td width="20" bgcolor="white">&nbsp;</td><td bgcolor="white" align="left"><div style="overflow:auto;height:' + (document.viewport.getHeight() * 0.75 - 40) + 'px;">' + html + '</div></td><td width="20" bgcolor="white">&nbsp;</td></tr>';
				content += '<tr><td width="20" height="20" valign="top"><img src="Images/cnrbl.gif" width="20" height="20" border="0"></td><td bgcolor="white">&nbsp;</td><td width="20" height="20" valign="top"><img src="Images/cnrbr.gif" width="20" height="20" border="0"></td></tr>';
				content += '</table>';
			return content;
		}

	});
	
	document.overlay = new Overlay();

});

/**
 * RUZEE.Ellisis 0.1
 * (c) 2007 Steffen Rusitschka
 *
 * RUZEE.Ellipsis is freely distributable under the terms of an MIT-style license.
 * For details, see http://www.ruzee.com/
 */

(function() {
  function ellipsis(e) {
    var w = e.getWidth() - 10000;
    var t = e.innerHTML;
    e.innerHTML = "<span>" + t + "</span>";
    e = e.down();
    while (t.length > 0 && e.getWidth() >= w) {
      t = t.substr(0, t.length - 1);
      e.innerHTML = t + "...";
    }
  }
  document.write('<style type="text/css">' +
    '.ellipsis { margin-right:-10000px; }</style>');
  Event.observe(window, "load", function() {
    $$('.ellipsis').each(ellipsis);
  });
})();
