// STYLING FILE INPUTS 1.0 | Shaun Inman <http://www.shauninman.com/> | 2007-09-07
if (!window.SI) { var SI = {}; };
SI.Files =
{
	htmlClass : 'SI-FILES-STYLIZED',
	fileClass : 'formFileInput',
	wrapClass : 'formFileInputStyled',
	
	fini : false,
	able : false,
	init : function()
	{
		this.fini = true;
		
		var ie = 0 //@cc_on + @_jscript_version
		if (window.opera || (ie && ie < 5.5) || !document.getElementsByTagName) { return; } // no support for opacity or the DOM
		this.able = true;
		
		var html = document.getElementsByTagName('html')[0];
		html.className += (html.className != '' ? ' ' : '') + this.htmlClass;
	},
	
	stylize : function(elem)
	{
		if (!this.fini) { this.init(); };
		if (!this.able) { return; };

		SI.Files.setFileLabel(elem,'(nothing selected)');
		SI.Files.setRadioLabels(elem.id);

		elem.parentNode.file = elem;
		elem.parentNode.onmousemove = function(e)
		{
			if (typeof e == 'undefined') e = window.event;
			if (typeof e.pageY == 'undefined' &&  typeof e.clientX == 'number' && document.documentElement)
			{
				e.pageX = e.clientX + document.documentElement.scrollLeft;
				e.pageY = e.clientY + document.documentElement.scrollTop;
			};

			var ox = oy = 0;
			var elem = this;
			if (elem.offsetParent)
			{
				ox = elem.offsetLeft;
				oy = elem.offsetTop;
				while (elem = elem.offsetParent)
				{
					ox += elem.offsetLeft;
					oy += elem.offsetTop;
				};
			};

			var x = e.pageX - ox;
			var y = e.pageY - oy;
			var w = this.file.offsetWidth;
			var h = this.file.offsetHeight;

			this.file.style.top		= y - (h / 2)  + 'px';
			this.file.style.left	= x - (w - 30) + 'px';
		};
	},
	
	stylizeById : function(id)
	{
		this.stylize(document.getElementById(id));
	},
	
	stylizeAll : function()
	{
		if (!this.fini) { this.init(); };
		if (!this.able) { return; };
		
		var inputs = document.getElementsByTagName('input');
		for (var i = 0; i < inputs.length; i++)
		{
			var input = inputs[i];
			if (input.type == 'file' && input.className.indexOf(this.fileClass) != -1 && input.parentNode.className.indexOf(this.wrapClass) != -1)
			{
				this.stylize(input);
			};
		};
	},
	
	xtractFile : function(data)
	{
		if(data.indexOf('/') > -1 || data.indexOf('\\') > -1)
			var m = data.match(/(.*)[\/\\]([^\/\\]+\.[a-zA-Z0-9_-]+)$/);
		else
			var m = new Array();
		return (m.length > 1)? m[2]:data;
	},
	
	clearSelection : function(ID)
	{
		var elem = document.getElementById(ID);
		elem.value = null;
		SI.Files.setFileLabel(elem,'(nothing selected)');
		if(document.getElementById(ID+'_HANDLE_clear'))
			document.getElementById(ID+'_HANDLE_clear').checked = true;
	},
	
	setRadioLabels : function(ID)
	{
		//all of this is done by the DHTML, so hide these items
		if(!document.getElementById(ID+'_HANDLE_temp'))
		{
			if(document.getElementById(ID+'_HANDLE_clear'))
				document.getElementById(ID+'_HANDLE_clear').parentNode.style.display = 'none';
			if(document.getElementById(ID+'_HANDLE_new'))
				document.getElementById(ID+'_HANDLE_new').parentNode.style.display = 'none';
		}
		//same as "(remove)" link
		if(document.getElementById(ID+'_HANDLE_clear'))
		{
			document.getElementById(ID+'_HANDLE_clear').FileID = ID;
			document.getElementById(ID+'_HANDLE_clear').onclick = function(){ SI.Files.clearSelection(this.FileID); };
		}
	},
	
	setFileLabel : function(elem,Html)
	{
		document.getElementById(elem.id+'-filename').innerHTML=Html;
	},
	
	showSelected : function(elem)
	{
		SI.Files.setFileLabel(elem,SI.Files.xtractFile(elem.value)+' <span style="padding-left:2em">(<a href="javascript:SI.Files.clearSelection(\''+elem.id+'\')">remove<\/a>)</span>');
	}
};