/*
 *
 * Copyright (c) 2009 Doubleclique (dev [at] doubleclique [dot] com)
 * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license
 *
 */

/**
 *
 * jquery.dql.styledfile
 *
 * @name     jquery.dql.styledfile
 * @version  0.1
 * @author   Cam Spiers (cameron [at] doubleclique [dot] com) and James Goodman (james [at] doubleclique [dot] com)
 * @requires jQuery
 *
 */

/*global jQuery, document, navigator */
"use strict";
(function ($) {

	$.fn.styledfile = function (options) {
		var userAgent, offsets;

		options = $.extend({
			textFieldClass : 'filename',
			textFieldEnable : true
		}, options);

		userAgent = navigator.userAgent.toLowerCase();

		if (/webkit/.test(userAgent)) {
			offsets = {
				left : -70,
				top : -10
			};
		} else if (/opera/.test(userAgent)) {
			offsets = {
				left : -160,
				top : -10
			};
		} else if (/msie/.test(userAgent) && !/opera/.test(userAgent)) {
			offsets = {
				left : -180,
				top : -8
			};
		} else if (/mozilla/.test(userAgent) && !/(compatible|webkit)/.test(userAgent)) {
			offsets = {
				left : -70,
				top : -10
			};
		}

		return $(this).each(function () {
			var $field, $cover, $textField, coverOffset, coverLeft, coverTop, coverRight, coverBottom, fieldHeight;

			$field = $(this);

			$cover = $field.parent();

			if (options.textFieldEnable) {
				$textField = $('<input/>').attr({
					'type' : 'text',
					'class' : options.textFieldClass
				});

				$cover.prepend($textField);
			}

			$field.css('opacity', '0');
			
			fieldHeight = $field.outerHeight();

			coverOffset = $cover.offset();
			coverLeft = coverOffset.left;
			coverTop = coverOffset.top;
			coverRight = coverOffset.left + $cover.width();
			coverBottom = coverOffset.top + $cover.outerHeight();

			$cover.mousemove(function (event) {
				var top, left;

				top = event.pageY;
				left = event.pageX;

				if (left >= coverLeft && left <= coverRight) {
					$field.css({
						left: left + offsets.left - coverLeft
					});
				}

				if ((top + offsets.top) >= coverTop && (top + offsets.top + fieldHeight) <= coverBottom) {
					$field.css({
						top: top + offsets.top - coverTop
					});
				}
			});

			if (options.textFieldEnable) {
				$field.change(function () {
					$textField.val($field.val());
				});
			}

		});
	};

}(jQuery));
