/*
	(c) Mr.A [enyim.com], All rights reserved
*/

var Enyim = {};
Enyim.Web = {};
Enyim.Web.Client = {};

Enyim.$ = function(e) { return (typeof(e) == "string") ? document.getElementById(e) : e; };
Enyim.isDefined = function(e) { return typeof(e) != "undefined"; };

if (Array.prototype.push == null)
{
	Array.prototype.push = function(item)
	{
		this[this.length] = item;
		return this.length;
	}
}

Enyim.Web.Client.Swf = function(swfUri, width, height, variables)
{
	this.construct(swfUri, width, height, variables);
};

Enyim.Web.Client.Swf.prototype = 
{
	_parameters: {},
	_variables: {},
	_attributes: {},
	_version: "8.0.0.0",
	_swfUri: null,

	construct: function(swfUri, width, height, variables)
	{
		this._swfUri = swfUri;
		
		if ((width + "").match(/^\d+$/))
			width += "px";
		if ((height + "").match(/^\d+$/))
			height += "px";
		
		this._attributes["width"] = width;
		this._attributes["height"] = height;

		// here goes the validity
		if (navigator.userAgent.match(/MSIE/))
			this._attributes["codebase"] = "http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,22,0";
		this._attributes["type"] = "application/x-shockwave-flash";
		
		this._parameters["quality"] = "high";
		this._parameters["scale"] = "noscale";
		this._parameters["allowScriptAccess"] = "sameDomain";
		this._parameters["salign"] = "lt";
		this._parameters["menu"] = "false";
		
		if (variables)
			for(var key in variables)
				this._variables[key] = variables[key];
	},
	
	setVariable: function(name, value)
	{
		this._variables[name] = value;
	},
	
	getVariable: function(name)
	{
		return this._variables[name];
	},
	
	setParameter: function(name, value)
	{
		this._parameters[name] = value;
	},
	
	getParameter: function(name)
	{
		return this._parameters[name];
	},
	
	formatList: function(list, formatter, encodeValue)
	{
		var _encode = (encodeValue == false) ? function(s) { return s; } : (encodeURIComponent ? encodeURIComponent : escape);
		var retval = [];
		var tmp;
		
		for(var key in list)
		{
			tmp = list[key] || "";
	
			if (tmp.length > 0)
				retval.push(formatter(key, key == "FlashVars" ? tmp : _encode(tmp)));
		}
		
		return retval;
	},
	
	buildQueryString: function()
	{
		return this.formatList(this._variables, function(key, value) { return key + "=" + value; }).join("&");
	},

	buildAttributes: function()
	{
		return this.formatList(this._attributes, function(key, value) { return key + "=\"" + value + "\""; }, false).join(" ");
	},

	buildParamsList: function()
	{
		return this.formatList(this._parameters, function(key, value) { return ["<param name=\"", key, "\" value=\"", value, "\" />"].join(""); }, false).join("");
	},
	
	getHtml: function()
	{
		var src = this._swfUri;
		var queryParams = this.buildQueryString(this._variables);
		if (queryParams && queryParams.length > 0)
			this._parameters["FlashVars"] = queryParams;
			// src += "?" + queryParams;
			
		this._attributes["data"] = src;
		this._parameters["movie"] = src;
		
		return ["<object ", this.buildAttributes(), ">", this.buildParamsList(), "</object>"].join("");
	},
	
	write: function(element)
	{
		var s = this.getHtml();

		if (typeof(element) == "undefined" || element == null)
		{
			document.write(s);
			
			return true;
		}

		if (typeof(element) == "string")
		{
			if (document.getElementById)
			{
				element = document.getElementById(element)
			}
			else if (document.all)
			{
				element = document.all[element];
			}
			else
			{
				return false;
			}
		}
			
		element.innerHTML = s;

		return true;
	}
};

Enyim.Web.Client.VideoContainer = function(movieUri, width, height)
{
	this.construct(movieUri, width, height);
};

Enyim.Web.Client.VideoContainer.prototype = 
{
	_movieUri: null,
	_width: 0,
	_height: 0,
	
	construct: function(movieUri, width, height)
	{
		this._movieUri = movieUri;
		this._width = width;
		this._height = height;
	},
	
	write: function(id)
	{
		var swf = new Enyim.Web.Client.Swf("http://admin.freeblog.hu/flavors/video/player.swf", this._width, this._height,
					{
						movieUri: this._movieUri,
						logoUri: "http://admin.freeblog.hu/flavors/video/logo.png"
					});

		swf.setParameter("bgcolor", "#000000");
					
		swf.write(id);
	}
};

Enyim.Web.Client.AudioContainer = function(audioUri)
{
	this.construct(audioUri);
};

Enyim.Web.Client.AudioContainer.prototype = 
{
	_audioUri: null,
	
	construct: function(audioUri)
	{
		this._audioUri = audioUri;
	},
	
	write: function(id)
	{
		var swf = new Enyim.Web.Client.Swf("http://admin.freeblog.hu/flavors/audio/player.swf", 174, 32, { audioUri: this._audioUri });

		swf.setParameter("bgcolor", "#000000");
		swf.setParameter("wmode", "transparent");
		
		swf.write(id);
	}
};

Enyim.Web.Client.Forms = {

	_reqData: {},
	
	requireField: function(field, message)
	{
		// debugger;
	
		var tb = Enyim.$(field);
		var form = Enyim.Web.Client.Forms._findForm(tb);
		
		if (!Enyim.isDefined(form))
			return;

		var tmp = Enyim.Web.Client.Forms._reqData[form];
		if (!Enyim.isDefined(tmp))
		{
			// never saw this form, hook it
			tmp = [];
			Enyim.Web.Client.Forms._reqData[form] = tmp;
			
			var eh = Enyim.Web.Client.Forms._bindObserver(Enyim.Web.Client.Forms._validateForm, form);
			Enyim.Web.Client.Forms._observe(form, "submit", eh);
		}
		
		tmp.push({ input: tb, message: message });
	},
	
	_bindObserver: function(callback, target)
	{
		return function()
		{
			return callback.apply(target, [event || window.event]);
		};
	},
	
	_observe: function(element, eventName, callback)
	{
		if (element.attachEvent)
			element.attachEvent("on" + eventName, callback);
		else if (element.addEventListener)
			element.addEventListener(eventName, callback, false);
	},

	_validateForm: function(e)
	{
		// debugger;
	
		var myData = Enyim.Web.Client.Forms._reqData[this];
		
		for(var i = 0; i < myData.length; i++)
		{
			var info = myData[i];
			
			if (Enyim.Web.Client.Forms._isEmpty(info.input))
			{
				alert(info.message);
				
				if (e.preventDefault) { e.stopPropagation(); e.preventDefault(); } else { e.returnValue = false; e.cancelBubble = true; }
				return;
			}
		}
	},

	_findForm: function(input)
	{
		var p = input.parentNode;

		while(p && (p.tagName != "FORM"))
			p = p.parentNode;
			
		return p;
	},
	
	_isEmpty: function(field)
	{
		field = Enyim.$(field);
			
		if (!Enyim.isDefined(field))
			return false;
			
		return (field.value || "").length == 0;
	}
};


