Your IP : 3.148.104.165


Current Path : /home/bitrix/ext_www/klimatlend.ua/bitrix/js/main/
Upload File :
Current File : /home/bitrix/ext_www/klimatlend.ua/bitrix/js/main/clock.js

(function(){

// TODO: Replace jsFloatDiv (from utils.js) by BX.window...

if(window.JCClock)
	return;

function JCClock(config)
{
	if(typeof(BX) != "undefined")
		BX.onCustomEvent("onJCClockInit", [config]);

	this.config = config;
	this.config.AmPmMode = BX.isAmPmMode();
//	this.config.AmPmMode = false;
	this.config.AmPm = '';
	this.deltaHour = 0;
	this.MESS = this.config.MESS;
	this.bCreated = false;
	this.DATE_FORMAT = BX.date.convertBitrixFormat(BX.message("FORMAT_DATE"));
}

JCClock.prototype = {
	Create: function(cont)
	{
		this.bCreated = true;
		this.pInput = document.getElementById(this.config.inputId);
		this.pIcon = document.getElementById(this.config.iconId);

		if (cont && (cont = document.getElementById(cont)))
		{
			this.bInline = true;
			this.oDiv = cont;
			this.oDiv.className = 'bx-clock-div bx-clock-div-inline' + (this.config.AmPmMode ? '_am_pm' : '');
			this.oDiv.style.position = 'relative';
		}
		else
		{
			var zIndex = 150;
			if(typeof(this.config['zIndex']) != 'undefined')
			{
				zIndex = parseInt(this.config['zIndex']);
				if(zIndex <= 0)
					zIndex = 150;
			}

			this.oDiv = BX(this.config.inputId + '_div');
			if (this.oDiv)
				BX.cleanNode(this.oDiv, true);
			this.oDiv = BX.create('DIV', {props: {className: 'bx-clock-div', id: this.config.inputId + '_div'}, style: { zIndex: zIndex}});
			document.body.appendChild(this.oDiv);
		}

		// Create analog clock
		var clockContDiv = BX.create('DIV', {props: {className: 'bxc-clock-cont bxc-iconkit-c'}});
		this.arrowsContDiv = BX.create('DIV', {props: {className: 'bxc-arrows-cont h0 m0'}});
		this.MACDiv = this.arrowsContDiv.appendChild(BX.create('DIV', {props: {className: 'bxc-mouse-control-cont'}})); // Mouse-Arrow Control Div

		this.arrowsContDiv.appendChild(BX.create('IMG', {props:{src: '/bitrix/images/1.gif', className: 'bxc-min-arr-cont bxc-iconkit-a'}}));
		this.arrowsContDiv.appendChild(BX.create('IMG', {props: {src: '/bitrix/images/1.gif', className: 'bxc-hour-arr-cont bxc-iconkit-a'}}));
		clockContDiv.appendChild(this.arrowsContDiv);
		this.oDiv.appendChild(clockContDiv);

		this.CreateControls();

		this.InitMouseArrowControl();
	},

	CreateControls: function()
	{
		this.ControlsCont = BX.create('DIV', {props: {className: 'bxc-controls-cont'}});
		var
			i,
			arHours = [],
			arMinutes = [],
			_this = this;

		if (this.config.AmPmMode)
		{
			for (i = 0; i < 12; i++)
				arHours.push(this.Hour2Str(i, true));
		}
		else
		{
			for (i = 0; i < 24; i++)
				arHours.push(this.Int2Str(i));
		}

		for (i = 0; i < 60; i += this.config.step)
			arMinutes[i] = (this.Int2Str(i));

		var oSelH = this.CreateSelect(arHours, 1, this.MESS.Hours);
		this.hourSelect = oSelH.pSelect;
		var oSelM = this.CreateSelect(arMinutes, this.config.step, this.MESS.Minutes);
		this.minSelect = oSelM.pSelect;

		this.hourSelect.onchange = function(){
			if (!this.value || isNaN(this.value))
				this.value = 0;
			_this.SetTime(this.value, _this.curMin, true);
		};
		this.minSelect.onchange = function(){
			if (!this.value || isNaN(this.value))
				this.value = 0;
			_this.SetTime(_this.curHour, this.value, true);
		};
		this.minSelect.onfocus = function(){_this.lastArrow = 'min';};
		this.hourSelect.onfocus = function(){_this.lastArrow = 'hour';};

		if (!this.bInline)
		{
			var insBut = BX.create('INPUT', {props: {type: 'button', value: this.MESS.Insert}});
			insBut.onclick = function(){_this.Submit();};

			// Close button
			var closeImg = BX.create('IMG', {props: {src: '/bitrix/images/1.gif', className: 'bxc-close bxc-iconkit-c', title: this.MESS.Close}});
			closeImg.onclick = function(){_this.Close();};
		}

		var span = BX.create('SPAN', {props: {className: 'double-dot'}});
		span.innerHTML = ':';
		oSelH.pWnd.style.marginLeft = '11px';
		this.ControlsCont.appendChild(oSelH.pWnd);
		this.ControlsCont.appendChild(span);
		this.ControlsCont.appendChild(oSelM.pWnd);

		if (this.config.AmPmMode)
		{
			this.AmPm = BX.create('SPAN', {props: {className: 'bxc-am-pm', title: 'a.m.'}});
			this.AmPm.innerHTML = 'am';

			this.AmPm.onclick = function(){
				if (this.title == 'a.m.')
				{
					this.title = 'p.m.';
					this.innerHTML = 'pm';

					_this.config.AmPm = ' pm';
				}
				else
				{
					this.title = 'a.m.';
					this.innerHTML = 'am';
					_this.config.AmPm = ' am';
				}
				_this.SetTime(_this.curHour, _this.curMin, true);
			};


			this.ControlsCont.appendChild(this.AmPm);
		}

		if (!this.bInline)
		{
			this.ControlsCont.appendChild(insBut);
			this.ControlsCont.appendChild(closeImg);

			this.pTitle = this.ControlsCont.appendChild(BX.create('DIV', {props:{className: 'bxc-title'}}));
			this.pTitle.onmousedown = function(e) {jsFloatDiv.StartDrag(e, _this.oDiv);_this.bRecalculateCoordinates = true;};
		}

		this.oDiv.appendChild(this.ControlsCont);
	},

	CalculateCoordinates: function()
	{
		// GetPosition
		var pos = BX.pos(this.oDiv);
		this.top = pos.top;
		this.left = pos.left;

		this.centerX = pos.left + (this.bInline ? JCClock.getOption("centerXInline", 55) : JCClock.getOption("centerX", 55));
		this.centerY = pos.top + (this.bInline ? JCClock.getOption("centerYInline", 55) : JCClock.getOption("centerY", 71));

		var
			_this = this,

			mal = JCClock.getOption("minuteLength", 32), // minute arrow length (in px)
			hal = JCClock.getOption("hourLength", 25), // hour arrow length (in px)
			x = this.centerX, y = this.centerY, // Coordinates of center
			i, deg, xi, yi, abs_x, abs_y, xi1, yi1, abs_x1, abs_y1,
			delta = JCClock.getOption("inaccuracy", 8); // inaccuracy

		this.arHourCoords = [];
		this.bJumpByMinArrow30 = false;

		for(i = 0; i < 12; i++)
		{
			deg = (i * 30) * Math.PI / 180;
			xi = Math.round(hal * Math.sin(deg));
			yi = Math.round(hal * Math.cos(deg));
			abs_x = x + xi;
			abs_y = y - yi;

			xi1 = Math.round(16 * Math.sin(deg));
			yi1 = Math.round(16 * Math.cos(deg));
			abs_x1 = x + xi1;
			abs_y1 = y - yi1;

			this.arHourCoords[i] = {
				x : abs_x,
				y : abs_y,
				x_min: abs_x - delta, x_max: abs_x + delta,
				y_min: abs_y - delta, y_max: abs_y + delta,
				x_min1: abs_x1 - delta, x_max1: abs_x1 + delta,
				y_min1: abs_y1 - delta, y_max1: abs_y1 + delta
			};
		}

		this.arMinCoords = {};
		for(i = 0; i < 12; i++)
		{
			deg = (i * 30) * Math.PI / 180;
			xi = Math.round(mal * Math.sin(deg));
			yi = Math.round(mal * Math.cos(deg));
			abs_x = x + xi;
			abs_y = y - yi;

			xi1 = Math.round(18 * Math.sin(deg));
			yi1 = Math.round(18 * Math.cos(deg));
			abs_x1 = x + xi1;
			abs_y1 = y - yi1;

			this.arMinCoords[i * 5] =
			{
				x : abs_x,
				y : abs_y,
				x_min: abs_x - delta, x_max: abs_x + delta,
				y_min: abs_y - delta, y_max: abs_y + delta,
				x_min1: abs_x1 - delta, x_max1: abs_x1 + delta,
				y_min1: abs_y1 - delta, y_max1: abs_y1 + delta
			};
		}
		this.bRecalculateCoordinates = false;
	},

	Show: function(cont)
	{
		if (!this.bCreated)
			this.Create(cont);

		this.lastArrow = 'min';
		var startValue = this.pInput.value.toString();
		if (startValue.indexOf(':') == -1)
		{
			if (this.config.initTime.length <= 0 || this.config.initTime.indexOf(':') == -1)
				startValue = new Date().getHours() + ':' + new Date().getMinutes();
			else
				startValue = this.config.initTime;
		}

		startValue = this.parseTime(startValue);
		this.SetTime(startValue.h, startValue.m);

		if (this.bInline)
		{
			this.oDiv.style.display = 'block';
		}
		else
		{
			var alignItem = this.pIcon || this.pInput;
			var pos = this.AlignToPos(BX.pos(alignItem));
			this.top = pos.top;
			this.left = pos.left;

			jsFloatDiv.Show(this.oDiv, this.left, this.top);
			this.oDiv.style.display = 'block';
			jsFloatDiv.AdjustShadow(this.oDiv);
		}

		var _this = this;
		setTimeout(function() {
			_this.CalculateCoordinates();
		}, 20);

		window['_bxc_onmousedown' + this.config.inputId] = function(e){_this.CheckClick(e);};
		window['_bxc_onkeypress' + this.config.inputId] = function(e){_this.OnKeyDown(e);};

		setTimeout(function(){BX.bind(document, "mousedown", window['_bxc_onmousedown' + _this.config.inputId])}, 10);
		BX.bind(document, "keypress", window['_bxc_onkeypress' + this.config.inputId]);
	},

	AlignToPos: function(pos)
	{
		var
			h = JCClock.getOption("popupHeight", 250),
			x = pos.left,
			y = pos.top - h,
			scroll = BX.GetWindowScrollPos();

		if (scroll.scrollTop > y || y < 0)
			y = pos.top + 40;

		return {left: x, top: y};
	},

	Close: function()
	{
		if (this.bInline)
			return;

		BX.unbind(document, "mousedown", window['_bxc_onmousedown' + this.config.inputId]);
		BX.unbind(document, "keypress", window['_bxc_onkeypress' + this.config.inputId]);
		jsFloatDiv.Close(this.oDiv);
		this.oDiv.style.display = 'none';
	},

	Submit: function()
	{
		var mt = this.config.AmPmMode ? this.config.AmPm : '';
		this.pInput.value = this.Hour2Str(this.curHour, this.config.AmPmMode) + ':' + this.Int2Str(this.curMin) + mt;
		BX.fireEvent(this.pInput, 'change');

		if (!this.bInline)
			this.Close();
	},

	SetTime: function(h, m, bDontSetDigClock, bJumpByHourArrow)
	{
		//console.info(h, m);
		//console.trace();
		h = parseInt(h, 10);
		if (this.config.AmPmMode)
		{
			if (h >= 12)
			{
				if (h > 12)
					h = h - 12;
				if (this.config.AmPm == '')
					this.config.AmPm = ' pm';
			}
			else if (this.config.AmPm == '')
			{
				this.config.AmPm = ' am';
			}
			if (h < 1 || h > 12)
			{
				h = 12;
				this.config.AmPm = ' am';
			}
		}
		else
			if (h < 0 || h > 23)
				h = 0;

		m = parseInt(m, 10);
		var step = this.config.step;
		if (Math.round(m / step) != m / step)
			m = Math.round(m / step) * step;
		if (m < 0 || m > 59)
			m = 0;

		if (!bJumpByHourArrow)
			this.deltaHour = h >= 12 ? 12 : 0;

		this.curMin = m;
		this.curHour = h;

		if (this.pTitle)
			this.pTitle.innerHTML = this.Hour2Str(h, this.config.AmPmMode) + ':' + this.Int2Str(m);

		this.SetTimeAn(h, m);
		if (!bDontSetDigClock)
			this.SetTimeDig(h, m);

		if (this.bInline)
			this.Submit();
	},

	SetTimeAnH: function(h, m)
	{
		if (h == 0)
		{
			if(this.curHour < 12 && this.curHour > 6)
				this.deltaHour = 12;
			if(this.curHour < 24 && this.curHour > 18)
				this.deltaHour = 0;
		}

		if (this.curHour == 0 && h == 11)
		{
			h = 23;
			this.deltaHour = 12;
		}
		else if (this.curHour == 12 && h == 11)
		{
			h = 11;
			this.deltaHour = 0;
		}
		else
		{
			h += this.deltaHour;
		}
		this.SetTime(h, m, false, true);
	},

	SetTimeAnM: function(h, m)
	{
		m = parseInt(m, 10);
		var step = this.config.step;
		if (Math.round(m / step) != m / step)
			m = Math.round(m / step) * step;
		if (m < 0 || m > 59)
			m = 0;

		if (m == 30)
		{
			this.bJumpByMinArrow30 = true;
		}
		else if (this.bJumpByMinArrow30 && m == 0)
		{
			if (this.curMin > 30 && this.curMin < 59)
			{
				this.bJumpByMinArrow30 = false;
				this.SetTime(++h, m);
				return;
			}
			if (this.curMin > 0 && this.curMin < 30)
			{
				this.bJumpByMinArrow30 = false;
				if (h == 0)
					h = 24;
				this.SetTime(--h, m);
				return;
			}
		}
		this.SetTime(h, m);
	},

	SetTimeAn: function(h, m)
	{
		h = parseInt(h, 10);

		if (isNaN(h))
			h = 0;
		m = parseInt(m, 10);
		if (isNaN(m))
			m = 0;

		if (h >= 12)
			h -= 12;
		var cn = 'bxc-arrows-cont';
		if (h * 5 == m)
			cn += ' hideh hm' + h;
		else
			cn += ' h' + h + ' m' + m;
		this.arrowsContDiv.className = cn;
	},

	CreateSelect: function(arValues, step, title)
	{
		var bAmPmMode = !!this.config.AmPmMode;
		var select = BX.create('INPUT', {props: {type: 'text', className: 'bxc-cus-sel', size: "1", title: title}});
		var spinStop = function(d)
		{
			select._bxmousedown = false;
			if (window.bxinterval)
				clearTimeout(window.bxinterval);
		};
		var spinChange = function(d)
		{
			if (!select._bxmousedown)
			{
				spinStop();
				return;
			}

			var k = parseInt(select.value, 10);

			if (isNaN(k))
				k = 0;

			k = k + d;

			if (k >= arValues.length)
				k = 0;
			else if (k < 0)
				k = arValues.length - 1;

			if (typeof arValues[k] == 'undefined')
			{
				k -= d; // return old value
				select.value = k - (d > 0 ? 1 : -1); // one step in reverse direction
				spinChange(d); // try again
				return;
			}
			else
			{
				// hacks for AM/PM 00->12
				if (select.value == '11' && arValues[k] == '00' || select.value == '01' && arValues[k] == '00' && bAmPmMode)
				{
					select.value = '12';
				}
				else if (select.value == '12' && arValues[k] == '00')
				{
					select.value = '01';
				}
				else
					select.value = arValues[k];
				select.onchange();
			}

			if (window.bxinterval)
				clearTimeout(window.bxinterval);
			window.bxinterval = setTimeout(function(){spinChange(d);}, 100);
		};
		var spinStart = function(d)
		{
			if (window.bxinterval)
				spinStop();
			select._bxmousedown = true;
			BX.bind(document, "mouseup", spinStop);

			spinChange(d);

			if (window.bxinterval)
				clearTimeout(window.bxinterval);
			window.bxinterval = setTimeout(function(){spinChange(d);}, 800);
		};
		select.onkeydown = function(e)
		{
			if(!e) e = window.event;
			if(!e) return;
			if(e.keyCode == 38) // Up
			{
				spinStart(step);
				spinStop();
			}
			else if (e.keyCode == 40) // Down
			{
				spinStart(-step);
				spinStop();
			}
		};

		var
			tbl = BX.create('TABLE', {props: {className: 'bxc-cus-sel-tbl'}}),
			r = tbl.insertRow(-1),
			c = r.insertCell(-1);

		//tbl.border = "1";
		//c.setAttribute("rowSpan", "2");
		c.rowSpan = 2;
		c.appendChild(select);


		c = r.insertCell(-1);
		c.appendChild(BX.create('IMG', {props: {src: '/bitrix/images/1.gif', className: 'bxc-slide-up bxc-iconkit-c'}}));
		c.title = this.MESS.Up;
		c.className = 'bxc-pointer';
		c.onmousedown = function(){spinStart(step)};
		c = tbl.insertRow(-1).insertCell(-1);
		c.appendChild(BX.create('IMG', {props: {src: '/bitrix/images/1.gif', className: 'bxc-slide-down bxc-iconkit-c'}}));
		c.title = this.MESS.Down;
		c.className = 'bxc-pointer';
		c.onmousedown = function(){spinStart(-step)};

		return {pSelect: select, pWnd: tbl};
	},

	SetTimeDig: function(h, m)
	{
		this.hourSelect.value = this.Hour2Str(h, this.config.AmPmMode);
		this.minSelect.value = this.Int2Str(m);

		if (this.config.AmPmMode)
		{
			if (this.config.AmPm == ' pm')
			{
				this.AmPm.title = 'p.m.';
				this.AmPm.innerHTML = 'pm';
			}
			else
			{
				this.AmPm.title = 'a.m.';
				this.AmPm.innerHTML = 'am';
			}
		}

		if (this.bInline)
			this.Submit();
	},

	InitMouseArrowControl: function()
	{
		var _this = this;
		this.MACDiv.onmousedown = function(e){_this.MACMouseDown(e)};
		this.MACDiv.ondrag = BX.False;
		this.MACDiv.onselectstart = BX.False;
		this.MACDiv.style.MozUserSelect = 'none';
	},

	MACMouseDown: function(e)
	{
		if (this.bRecalculateCoordinates)
			this.CalculateCoordinates();

		if(!e) e = window.event;
		var
			_this = this,
			ar,
			windowSize = BX.GetWindowSize(),
			mouseX = e.clientX + windowSize.scrollLeft,
			mouseY = e.clientY + windowSize.scrollTop;

		this.ddMode = false;
		ar = this.arMinCoords[this.curMin];
		if ((mouseX > ar.x_min && mouseX < ar.x_max && mouseY > ar.y_min && mouseY < ar.y_max) ||
			(mouseX > ar.x_min1 && mouseX < ar.x_max1 && mouseY > ar.y_min1 && mouseY < ar.y_max1))
		{
			this.ddMode = 'min';
			this.lastArrow = 'min';
		}

		if (!this.ddMode)
		{
			ar = this.arHourCoords[this.curHour >= 12 ? this.curHour - 12 : this.curHour];
			if ((mouseX > ar.x_min && mouseX < ar.x_max && mouseY > ar.y_min && mouseY < ar.y_max) ||
				(mouseX > ar.x_min1 && mouseX < ar.x_max1 && mouseY > ar.y_min1 && mouseY < ar.y_max1))
			{
				this.ddMode = 'hour';
				this.lastArrow = 'hour';
			}
		}

		if (this.ddMode === false)
		{
			var i,
				dist,
				min = 1000,
				min_ind = 0;

			if (this.lastArrow == 'hour')
			{
				for(i = 0; i < 12; i++)
				{
					dist = this.GetDistance(this.arHourCoords[i].x, this.arHourCoords[i].y, mouseX, mouseY);
					if (dist <= min)
					{
						min = dist;
						min_ind = i;
					}
				}
				this.SetTimeAnH(min_ind, this.curMin);
			}
			else if (this.lastArrow == 'min')
			{
				for(i = 0; i < 12; i++)
				{
					dist = this.GetDistance(this.arMinCoords[i * 5].x, this.arMinCoords[i * 5].y, mouseX, mouseY);
					if (dist <= min)
					{
						min = dist;
						min_ind = i;
					}
				}
				this.SetTimeAnM(this.curHour, min_ind * 5);
			}
			return;
		}

		this.ControlsCont.style.zIndex = '145'; // Put controls div under MACDiv
		this.MACDiv.onmousemove = function(e){_this.MACMouseMove(e)};
		this.MACDiv.onmouseup = function(e){_this.MACMouseUp(e)};
	},

	MACMouseMove: function(e)
	{
		if (!this.ddMode)
		{
			this.StopDD();
			return;
		}

		if(!e) e = window.event;
		var i,
			dist,
			min = 1000,
			min_ind = 0,
			windowSize = BX.GetWindowSize(),
			mouseX = e.clientX + windowSize.scrollLeft,
			mouseY = e.clientY + windowSize.scrollTop;

		if (this.ddMode == 'hour')
		{
			for(i = 0; i < 12; i++)
			{
				dist = this.GetDistance(this.arHourCoords[i].x, this.arHourCoords[i].y, mouseX, mouseY);
				if (dist <= min)
				{
					min = dist;
					min_ind = i;
				}
			}
			this.SetTimeAnH(min_ind, this.curMin);
		}
		else if (this.ddMode == 'min')
		{
			for(i = 0; i < 12; i++)
			{
				dist = this.GetDistance(this.arMinCoords[i * 5].x, this.arMinCoords[i * 5].y, mouseX, mouseY);
				if (dist <= min)
				{
					min = dist;
					min_ind = i;
				}
			}
			this.SetTimeAnM(this.curHour, min_ind * 5);
		}
	},

	GetDistance: function(x1, y1, x2, y2)
	{
		return Math.round(Math.sqrt((Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2))));
	},

	MACMouseUp: function(e)
	{
		this.StopDD();
	},

	StopDD: function()
	{
		this.ddMode = false;
		this.ControlsCont.style.zIndex = '156';  // Put controls div over MACDiv
		this.MACDiv.onmousemove = null;
		this.MACDiv.onmouseup = null;
		return false;
	},

	Int2Str: function(i)
	{
		i = parseInt(i, 10);
		if (isNaN(i))
			i = 0;
		return i < 10 ? '0' + i.toString() : i.toString();
	},

	Hour2Str: function(i, ampm)
	{
		i = parseInt(i, 10);
		if (isNaN(i))
			i = 0;
		return i < 10 && !ampm ? '0' + i.toString() : i.toString();
	},

	CheckClick: function(e)
	{
		if (this.bRecalculateCoordinates || this.bInline)
			return;
		if(!e)
			e = window.event;
		if(!e)
			return;

		var target;
		if (e.target)
			target = e.target;
		else if (e.srcElement)
			target = e.srcElement;
		if (target.nodeType == 3)
			target = target.parentNode;

		if (target != this.oDiv && !BX.findParent(target, {attribute: {id: this.oDiv.id}}))
			this.Close();
	},

	OnKeyDown: function(e)
	{
		if(!e) e = window.event;
		if(!e) return;
		if(e.keyCode == 27)
			this.Close();
	},

	parseTime: function(str)
	{
		var date = this.parseDate(BX.date.format(this.DATE_FORMAT, new Date()) + ' ' + str, false);
		return date ? {
			h: date.getHours(),
			m: date.getMinutes()
		} : date;
	},

	parseDate: function(str, format, trimSeconds)
	{
		var
			i, cnt, k,
			regMonths,
			bUTC = false;

		if (!format)
			format = BX.message('FORMAT_DATETIME');

		str = BX.util.trim(str);

		if (trimSeconds !== false)
			format = format.replace(':SS', '');

		if (BX.type.isNotEmptyString(str))
		{
			regMonths = '';
			for (i = 1; i <= 12; i++)
			{
				regMonths = regMonths + '|' + BX.message('MON_'+i);
			}

			var
				expr = new RegExp('([0-9]+|[a-z]+' + regMonths + ')', 'ig'),
				aDate = str.match(expr),
				aFormat = BX.message('FORMAT_DATE').match(/(DD|MI|MMMM|MM|M|YYYY)/ig),
				aDateArgs = [],
				aFormatArgs = [],
				aResult = {};

			if (!aDate)
			{
				return null;
			}

			if(aDate.length > aFormat.length)
			{
				aFormat = format.match(/(DD|MI|MMMM|MM|M|YYYY|HH|H|SS|TT|T|GG|G)/ig);
			}

			for(i = 0, cnt = aDate.length; i < cnt; i++)
			{
				if(BX.util.trim(aDate[i]) != '')
				{
					aDateArgs[aDateArgs.length] = aDate[i];
				}
			}

			for(i = 0, cnt = aFormat.length; i < cnt; i++)
			{
				if(BX.util.trim(aFormat[i]) != '')
				{
					aFormatArgs[aFormatArgs.length] = aFormat[i];
				}
			}

			var m = BX.util.array_search('MMMM', aFormatArgs);
			if (m > 0)
			{
				aDateArgs[m] = BX.getNumMonth(aDateArgs[m]);
				aFormatArgs[m] = "MM";
			}
			else
			{
				m = BX.util.array_search('M', aFormatArgs);
				if (m > 0)
				{
					aDateArgs[m] = BX.getNumMonth(aDateArgs[m]);
					aFormatArgs[m] = "MM";
				}
			}

			for(i = 0, cnt = aFormatArgs.length; i < cnt; i++)
			{
				k = aFormatArgs[i].toUpperCase();
				aResult[k] = k == 'T' || k == 'TT' ? aDateArgs[i] : parseInt(aDateArgs[i], 10);
			}

			if(aResult['DD'] > 0 && aResult['MM'] > 0 && aResult['YYYY'] > 0)
			{
				var d = new Date();

				if(bUTC)
				{
					d.setUTCDate(1);
					d.setUTCFullYear(aResult['YYYY']);
					d.setUTCMonth(aResult['MM'] - 1);
					d.setUTCDate(aResult['DD']);
					d.setUTCHours(0, 0, 0);
				}
				else
				{
					d.setDate(1);
					d.setFullYear(aResult['YYYY']);
					d.setMonth(aResult['MM'] - 1);
					d.setDate(aResult['DD']);
					d.setHours(0, 0, 0);
				}

				if(
					(!isNaN(aResult['HH']) || !isNaN(aResult['GG']) || !isNaN(aResult['H']) || !isNaN(aResult['G']))
					&& !isNaN(aResult['MI'])
				)
				{
					if (!isNaN(aResult['H']) || !isNaN(aResult['G']))
					{
						var bPM = (aResult['T']||aResult['TT']||'am').toUpperCase()=='PM';
						var h = parseInt(aResult['H']||aResult['G']||0, 10);
						if(bPM)
						{
							aResult['HH'] = h + (h == 12 ? 0 : 12);
						}
						else
						{
							aResult['HH'] = h < 12 ? h : 0;
						}
					}
					else
					{
						aResult['HH'] = parseInt(aResult['HH']||aResult['GG']||0, 10);
					}

					if (isNaN(aResult['SS']))
						aResult['SS'] = 0;

					if(bUTC)
					{
						d.setUTCHours(aResult['HH'], aResult['MI'], aResult['SS']);
					}
					else
					{
						d.setHours(aResult['HH'], aResult['MI'], aResult['SS']);
					}
				}

				return d;
			}
		}

		return null;
	},
};


JCClock.options = {};
JCClock.setOptions = function(options)
{
	if (!options || typeof(options) != "object")
		return;

	for (var option in options)
		JCClock.options[option] = options[option];
};

JCClock.getOption = function(option, defaultValue)
{
	if (typeof(JCClock.options[option]) != "undefined")
		return JCClock.options[option];
	else
		return defaultValue;
};

window.JCClock=JCClock;})();