﻿var SIFRButton = new Class(
{
	initialize: function()
	{
		this.typeID = "sifrBtn";
		this.initializingButtons = [];

		uiDialog.registerPreInitHandler(this.typeID, this.preInit);
		uiDialog.registerInitHandler(this.typeID, this.init);
	},

	preInit: function(control, clientData)
	{
		ajaxCssButton.preInit(control, clientData);

		var data = {};

		$extend(data, clientData[sifrButton.typeID]);

		control.store("sifrBtn_data", data);

		control.removeEvent('mouseenter', ajaxCssButton.onMouseEnter);
		control.removeEvent('mouseleave', ajaxCssButton.onMouseLeave);
		control.removeEvent('activate', ajaxCssButton.activate);
		control.removeEvent('deactivate', ajaxCssButton.deactivate);
		control.removeEvent('click', ajaxCssButton.onClick);

		control.addEvent('mouseenter', sifrButton.onMouseEnter);
		control.addEvent('mouseleave', sifrButton.onMouseLeave);
		control.addEvent('activate', sifrButton.activate);
		control.addEvent('deactivate', sifrButton.deactivate);
		control.addEvent('click', sifrButton.onClick);

		sifrButton.initializingButtons.push(control);

		var innerControl = control.getElement("." + data.sifrClass);

		if (innerControl != null)
		{
			var styles = sifrButton.getCssStyles(innerControl);
			styles["leading"] = data.leading;

			sIFR.replace(sifrElements[data.sifrFlash],
				{
					elements: [innerControl],
					css:
					{
						'.sIFR-root': styles
					},
					forceSingleLine: data.singleLine,
					selectable: false,
					wmode: 'transparent',
					onRelease: function(callbackInfo)
					{
						if (Browser.Engine.trident == true)
						{
							var parentDiv = $(callbackInfo.getAlternate()).getParent();
							var ieRouteFunc = parentDiv.click;

							if (ieRouteFunc)
							{
								ieRouteFunc();
							}
						}
					},
					onReplacement: function(callbackInfo)
					{
						//ui.onResize();
						sifrButton.onReplacement(control);
					}
				}
			);
		}
	},

	init: function(control, clientData)
	{
		ajaxCssButton.init(control, clientData);
	},

	onReplacement: function(control)
	{
		sifrButton.updateSifr(control, control.retrieve("sifrBtn_data"));

		sifrButton.initializingButtons.remove(sifrButton.initializingButtons.indexOf(control));

		if (sifrButton.initializingButtons.length == 0)
		{
			//document.title += ", Resizing";
			ui.onResize();
		}
	},

	getCssStyles: function(el)
	{
		var styles = el.getStyles("color", "font-weight", "font-style");

		if (styles["font-weight"] == 700)
		{
			styles["font-weight"] = "bold";
		}

		return styles;
	},

	getCssString: function(el, data)
	{
		var cssString = "";
		var elStyles = sifrButton.getCssStyles(el);

		cssString += "color:" + elStyles["color"];
		cssString += ";font-weight:" + elStyles["font-weight"];
		cssString += ";font-style:" + elStyles["font-style"];
		cssString += ";leading:" + data.leading;

		return cssString;
	},

	updateSifr: function(button, data)
	{
		var flashEl = button.getElement(".sIFR-flash");
		var alternateEl = button.getElement(".sIFR-alternate");

		if (flashEl == null || alternateEl == null || $type(flashEl.changeCSS) != "function")
		{
			if (sIFR.ua.supported)
			{
				//document.title = "not ready yet " + sIFR.ua.supported;
				return;
			}

			//document.title = 'nja';
			return;
		}

		//document.title = 'working';

		var cssString = sifrButton.getCssString(alternateEl, data);
		flashEl.changeCSS(".sIFR-root{" + cssString + "}");
	},

	onMouseEnter: function()
	{
		var data = this.retrieve("sifrBtn_data");

		if (data == null || data.activated)
		{
			return;
		}

		ajaxCssButton.onMouseEnter.bind(this)();
		sifrButton.updateSifr(this, data);
	},

	onMouseLeave: function()
	{
		var data = this.retrieve("sifrBtn_data");

		if (data == null || data.activated)
		{
			return;
		}

		ajaxCssButton.onMouseLeave.bind(this)();
		sifrButton.updateSifr(this, data);
	},

	deactivate: function(button, updateGroup)
	{
		var data = button.retrieve("sifrBtn_data");

		if (data == null)
		{
			return;
		}

		ajaxCssButton.deactivate(button, updateGroup);
		sifrButton.updateSifr(button, data);
	},

	activate: function(button, updateGroup)
	{
		var data = button.retrieve("sifrBtn_data");

		if (data == null)
		{
			return;
		}

		ajaxCssButton.activate(button, updateGroup);
		sifrButton.updateSifr(button, data);
	},

	onClick: function()
	{
		var data = this.retrieve("sifrBtn_data");

		if (data == null)
		{
			return;
		}

		sifrButton.activate(this, true);
	}
});

var sifrButton = new SIFRButton();