var loader = new YAHOO.util.YUILoader();
loader.filter = 'MIN';
loader.loadOptional = true;
loader.insert
(
{
    require:
    [
		'button'
		, 'container'
    	, 'dom'
    	, 'element'
    	, 'event'
    	, 'fonts'
    	, 'grids'
    	, 'json'
    	, 'reset'
    	, 'utilities'
    	, 'yahoo-dom-event'
		, 'cookie'
	]
	, base: 'http://yui.yahooapis.com/2.8.0/build/'
	// Configure the Get utility to timeout after 100 seconds for any given node insert
	, timeout: 100000
	, onSuccess: function(loader)
	{
		(function ()
		{
			/**
			* init diaolg form from a JSON-compatible data structure.
			* @method setData
			*/
			YAHOO.widget.Dialog.prototype.setData = function(data, enabled)
			{
				var form = this.form;
				enabled = enabled || null;
				data = data || null;
				//alert(YAHOO.lang.dump(data));

				var needInitValue = function(nm)
				{
					return (data === null || typeof(data[nm]) != 'undefined');
				}

				var getEnabled = function(nm)
				{
					return (enabled === null || typeof(enabled[nm]) == 'undefined' || enabled[nm] == true);
				}

				if (form) {
					var formItem = 0;
					var uaIe = YAHOO.env.ua.ie > 0;
					var container = form;

					if (uaIe)
					{
						container = data;

						for (var j in enabled)
						{
							if (!needInitValue(j))
							{
								formItem = form.namedItem(j);
								formItem.disabled = !getEnabled(formItem.name);
							}
						}
					}

					for (var i in container)
					{
						if (uaIe)
						{
							formItem = form.namedItem(i);
						}
						else
						{
							formItem = form[i];
						}

						if (formItem) {
							formItem.disabled = !getEnabled(formItem.name);
							if (needInitValue(formItem.name)) {
								//alert(YAHOO.lang.dump(formItem.name));
								if (formItem.tagName) { // Got a single form item
									var ival = data[formItem.name];
									switch (formItem.tagName) {
										case "INPUT":
											switch (formItem.type) {
												case "checkbox":
													formItem.checked = ival;
													break;
												case "textbox":
												case "text":
												case "hidden":
													formItem.value = ival;
													break;
											}
											break;
										case "TEXTAREA":
											formItem.value = ival;
											break;
										case "SELECT":
											for (var x=0;x<formItem.options.length;x++)	{
												var option = formItem.options[x];
												var selval = option.value;
												if (! selval || selval === "") {
													selval = option.text;
												}
												if (selval == ival) {
													option.selected = true;
												}
											}
											break;
									}
								} else if (formItem[0] && formItem[0].tagName) { // this is an array of form items
									if (formItem[0].tagName == "INPUT") {
										switch (formItem[0].type) {
											case "radio":
												for (var r=0; r<formItem.length; r++) {
													var radio = formItem[r];
													if (data[radio.name] == radio.value) {
														radio.checked = true;
														break;
													}
												}
												break;
											case "checkbox":
												for (var c=0; c<formItem.length; c++) {
													var check = formItem[c];
													check.checked = data[formItem[0].name];
												}
												break;
										}
									}
								}
							}
						}
					}
				}
			}

			var makeFeedback = function()
			{
				var hSubmit = function()
				{
					//YAHOO.util.Event.preventDefault(e);
					this.submit();
				};

				var hCancel = function()
				{
					this.cancel();
				};

				var elfeedbackDlg = new YAHOO.util.Element('feedbackDlg');
				elfeedbackDlg.setStyle('display', 'block');

				var feedbackDlg = new YAHOO.widget.Dialog
				(
					"feedbackDlg",
					{
						fixedcenter: true
						, modal: true
						, visible: false
						, draggable: true
						//, underlay: "shadow"
						, autofillheight: "body"
						, width: "760px"
						//, constraintoviewport : true
						, buttons: [
							{ text: 'Submit', handler: hSubmit, isDefault: true }
							, { text: 'Cancel', handler: hCancel }
						]
					}
				);

				feedbackDlg.validate = function()
				{
					var data = this.getData();
					var err = false;

					if (data.rwName == '')
					{
						err = true;
					}

					if (data.rwDuration == '')
					{
						err = true;
					}

					if (data.rwCaptureR == '')
					{
						err = true;
					}

					if (data.rwRating < '1' || data.rwRating > '5')
					{
						err = true;
					}

					if (err)
					{
						alert('Please enter your name, duration of product used, a rating and the spam code to post your review.');
						return false;
					}

					return true;
				}

				var kl = new YAHOO.util.KeyListener
				(
					document
					, { keys:27 }
					, {
						fn: feedbackDlg.hide
						, scope: feedbackDlg
						, correctScope: true
					}
				);

				feedbackDlg.cfg.queueProperty("keylisteners", kl);

				var hSuccess = function(o)
				{
					try
					{
						var response = YAHOO.lang.JSON.parse(o.responseText);

						if (response.result == 0)
						{
							// registered, try to login
							var arg = o.argument;
							var dlgData = arg[0].getData();
							window.location.reload();
						}
						else if (response.result == 2)
						{
							alert(response.err);
						}
						else
						{
							// show error
							alert(response.err);
						}
					}
					catch (e)
					{
						alert("Invalid response");
					}
				};

				var hFailure = function(o)
				{
					alert("Submission failed: " + o.status);
				};

				feedbackDlg.callback =
				{
					success: hSuccess
					, failure: hFailure
					, argument: [ feedbackDlg ]
					, scope: this
				};

				feedbackDlg.render();
				feedbackDlg.getButtons()[0].addClass('imgDlgBtn imgAccept');
				feedbackDlg.getButtons()[1].addClass('imgDlgBtn imgCancel');

				var aImgStarsList = YAHOO.util.Dom.getElementsBy
				(
					function (el)
					{
						var starNum = 0;

						try
						{
							starNum = parseInt(el.id.match(/imgStar(\d)/)[1]);
						}
						catch (e)
						{
						}

						if (starNum >= 1 && starNum <= 5)
						{
							return true;
						}

						return false;
					}
					, 'img'
					, 'fmFeedback'
				);

				var newRating = function(e)
				{
					YAHOO.util.Event.preventDefault(e);
					var rating = 0;

					try
					{
						rating = parseInt(this.get('id').match(/imgStar(\d)/)[1]);
					}
					catch (e)
					{
					}

					var initValues = {
						rwRating: rating
					};
					var enabled = {
					};
					feedbackDlg.setData(initValues, enabled);

					for (var i = 0; i != aImgStarsList.length; ++i)
					{
						var el = new YAHOO.util.Element(aImgStarsList[i]);
						var starNum = 0;

						try
						{
							starNum = parseInt(el.get('id').match(/imgStar(\d)/)[1]);
						}
						catch (e)
						{
						}

						if (starNum <= rating)
						{
							el.removeClass('stars-empty');
							el.addClass('stars-full');
						}
						else
						{
							el.removeClass('stars-full');
							el.addClass('stars-empty');
						}
					}
				}

				for (var i = 0; i != aImgStarsList.length; ++i)
				{
					var el = new YAHOO.util.Element(aImgStarsList[i]);

					el.on
					(
						"click"
						, newRating
					);
				}

				return feedbackDlg;
			}

			var feedbackDlg = makeFeedback();
			var elSubmitFeedback = new YAHOO.util.Element('submitReview');

			elSubmitFeedback.on
			(
				'click'
				, function (e)
				{
					YAHOO.util.Event.preventDefault(e);

					var initValues = {
						rwSid: rwSid
						, rwCapture: rwCapture
					};
					var enabled = {
					};
					feedbackDlg.setData(initValues, enabled);
					feedbackDlg.show();
				}
				, this
				, true
			);

			/*if (YAHOO.util.Dom.inDocument('submitReviewNew'))
			{
				var elSubmitFeedbackNew = new YAHOO.util.Element('submitReviewNew');

				elSubmitFeedbackNew.on
				(
					'click'
					, function (e)
					{
						YAHOO.util.Event.preventDefault(e);

						var initValues = {
							rwSid: rwSid
							, rwCapture: rwCapture
						};
						var enabled = {
						};
						feedbackDlg.setData(initValues, enabled);
						feedbackDlg.show();
					}
					, this
					, true
				);
			}*/
		}
		)();
	}
	, onFailure: function(err)
	{
		alert('Unable load module: ' + err['module']);
	}
	, onTimeout: function(err)
	{
		alert('Timeout reached: ' + err['module']);
	}
	, onProgress: function(state)
	{
	}
}
);


