﻿Type.registerNamespace("SoftAIN.Controls");

SoftAIN.Controls.Dialog = function(element)
{
	SoftAIN.Controls.Dialog.initializeBase(this, [element]);

	this._activeControlClientId = null;
	this._errorMessages = null;
	this._left = -1;
	this._top = -1;
	this._leftHiddenClientId;
	this._topHiddenClientId;
	this._evalScript;
}

SoftAIN.Controls.Dialog.prototype = {

	initialize: function() {
		SoftAIN.Controls.Dialog.callBaseMethod(this, 'initialize');

		this.InitPosition();
		this.InitHider();
		this.AssignHovers();
		this.InitValidators();
		this.EvalScripts();
		this.ShowErrors();
	},

	dispose: function() {
		SoftAIN.Controls.Dialog.callBaseMethod(this, 'dispose');
	},

	InitHider: function() {
		var dialogHider = $get('dialogHider');

		if (dialogHider) {
			var contentTable = $get('DialogContentTable');
			var dialogExists = null != contentTable;

			if (dialogExists) {
				dialogHider.style.display = 'block';
				dialogHider.style.height = $(document).height() + 'px';
			}
			else {
				dialogHider.style.display = 'none';
			}
		}
	},

	FixBounds: function(left, top) {
		if (!left) {
			var element = $get('dialog');
			var thisBounds = Sys.UI.DomElement.getBounds(element);

			left = thisBounds.x;
			top = thisBounds.y;
		}

		var leftHidden = $get(this._leftHiddenClientId);
		var topHidden = $get(this._topHiddenClientId);

		if (leftHidden) leftHidden.value = left;
		if (topHidden) topHidden.value = top;
	},

	InitPosition: function() {
		var element = $get('dialog');
		var thisBounds = Sys.UI.DomElement.getBounds(element);

		element.style.visibility = 'hidden';

		var bodyBounds = Sys.UI.DomElement.getBounds(document.body);

		var scrollTop = document.body.scrollTop;

		if (scrollTop == 0) {
			if (window.pageYOffset) scrollTop = window.pageYOffset;
			else
				scrollTop = (document.body.parentElement) ? document.body.parentElement.scrollTop : 0;
		}

		if (!this._activeControlClientId) {
			if (this._left >= 0) {
				Sys.UI.DomElement.setLocation(element, this._left, this._top);
			}
			else {
				var left = Math.ceil((bodyBounds.width - thisBounds.width) / 2);

				var top = scrollTop + 100;

				Sys.UI.DomElement.setLocation(element, left, top);

				this.FixBounds(left, top);
			}

			element.style.visibility = 'visible';

			return;
		}

		var control = $get(this._activeControlClientId);
		if (!control) return;

		var controlBounds = Sys.UI.DomElement.getBounds(control);

		var x = controlBounds.x;
		var y = controlBounds.y + controlBounds.height;

		var deltaX = bodyBounds.width - x - thisBounds.width;
		var deltaY = bodyBounds.height - y - thisBounds.height;

		if (deltaX < 0) x += deltaX;
		if (deltaY < 0) y += deltaY;

		Sys.UI.DomElement.setLocation(element, x, y);

		this.FixBounds(x, y);

		element.style.visibility = 'visible';
	},

	AssignHovers: function() {
		$('.dialogButton').each(function() { RegisterPressedButton(this.id, 'pressed'); })
	},

	InitValidators: function() {
		if (typeof (ValidatorUpdateDisplay) == 'undefined') return;

		if (!window.__originalValidatorUpdateDisplay) {
			window.__originalValidatorUpdateDisplay = ValidatorUpdateDisplay;
		}

		ValidatorUpdateDisplay = this.UpdateValidator;
	},

	UpdateValidator: function(val) {
		if (val == null) return;

		var ctrl = document.getElementById(val.controltovalidate);
		if (ctrl == null) return;

		$('label').each(function() {
			if (this.attributes['for'].value == val.controltovalidate) {
				if (val.isvalid) {
					if (typeof (this.errorValidator) == 'undefined') this.style.color = 'Black';
					else {
						if (this.errorValidator == val.id) {
							$(this).css('color', this.validColor);
							this.errorValidator = null;
						}
					}
				}
				else {
					this.validColor = $(this).css('color');
					$(this).css('color', '#ff0000');

					this.errorValidator = val.id;
				}
			}
		});
	},

	EvalScripts: function() {
		if (this._evalScript) eval(this._evalScript);
	},

	ShowErrors: function() {
		if (this._errorMessages) {
			alert(this._errorMessages);
		}
	},

	get_ActiveControlClientId: function() {
		return this._activeControlClientId;
	},

	set_ActiveControlClientId: function(value) {
		this._activeControlClientId = value;
	},

	get_ErrorMessages: function() {
		return this._errorMessages;
	},

	set_ErrorMessages: function(value) {
		return this._errorMessages = value;
	},

	get_Left: function() {
		return this._left;
	},

	set_Left: function(value) {
		this._left = value;
	},

	get_Top: function() {
		return this._top;
	},

	set_Top: function(value) {
		this._top = value;
	},

	get_LeftHiddenClientId: function() {
		return this._leftHiddenClientId;
	},

	set_LeftHiddenClientId: function(value) {
		this._leftHiddenClientId = value;
	},

	get_TopHiddenClientId: function() {
		return this._topHiddenClientId;
	},

	set_TopHiddenClientId: function(value) {
		this._topHiddenClientId = value;
	},

	get_EvalScript: function() {
		return this._evalScript;
	},

	set_EvalScript: function(value) {
		this._evalScript = value;
	}
}

SoftAIN.Controls.Dialog.registerClass('SoftAIN.Controls.Dialog', Sys.UI.Control);

if (typeof (Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();




