// eSKY Feedback v1.1
// (c) eSKY 2010, www.esky.pl
// requires: livequery

(function($) {
	
	//Global vars & cached jQ objects
	var	opts,
		$fb,
		$fbToggler,
		$fbContent,
		$fbComment,
		$fbOverlay,
		$body,
		$window;

	//Default settings
	defaults = {
		action: '/feedback/send',	//default form action
		minViewportWidth: 1000,		//min. viewport width to display feedback toggler
		minViewportHeight: 400,		//min. viewport height to display feedback toggler
		tyTime: 2000				//thankyou note display time (ms)
	};

	$.fn.eskyfeedback = function(options){
		if ($.browser.msie && $.browser.version.substr(0, 1) < 7) { //No support for IE6 and older - just let them die already
			return;
		}
		opts = $.extend({}, defaults, options);
		$body = $('body');
		$window = $(window);
		$window.resize(fbToggle);
		fbToggle();
	}

	//Show/hide toggle button depending on viewport size
	function fbToggle(){
		var	winWidth = $window.width(),
			winHeight = $window.height();
		if ($fbToggler === undefined) {
			$fbToggler = $('<a id="fbToggler" href="javascript:void(0)" title="Zgłoś uwagi do strony">Zgłoś uwagi do strony</a>').click(fbOpen);
			$body.append($fbToggler);
		}
		if (winWidth > opts.minViewportWidth && winHeight > opts.minViewportHeight) {
			$fbToggler.show();
		}
		else {
			$fbToggler.hide();
		}
	}

	//Open feedback form
	function fbOpen(){
		$fb = $('<div id="fbWrapper">').append(
			$('<div id="fbWindow"/>').append(
				$('<div id="fbInnerWindow"/>').append(
					$fbContent = $('<div id="fbContent"/>').append(
						$('<a id="fbClose" href="javascript:void(0)" title="Zamknij">Zamknij</a>"').click(fbClose),
						$('<form id="fbForm" action="' + opts.action + '"><fieldset><legend>wyraź swoją opinię</legend><h2>Podziel się z nami...</h2><p id="fbTabs"><label id="fbIdeaLabel" class="selected" title="Pomysłem"><input type="radio" id="fbTypeIdea" name="fbType" value="idea" checked="checked" />Pomysłem</label><label id="fbProblemLabel" title="Problemem"><input type="radio" id="fbTypeProblem" name="fbType" value="problem" />Problemem</label></p><div id="fbCommentWrapper"><textarea id="fbComment" class="virgin" name="fbComment" rows="4" cols="50">Opisz swój pomysł...</textarea><label class="error"></label><p>E-mail:<br /> <input id="fbEmail" name="fbEmail" maxlength="64" /></p><p class="phone">Telefon:<br /> <input id="fbPhone" name="fbPhone" maxlength="32" /></p></div><p><button type="submit" id="fbSend" name="fbSend" title="Wyślij">Wyślij</button></p></fieldset></form>').submit(fbSend)
					)
				)
			)
		);
		$fbOverlay = $('<div id="fbOverlay">');
		$body.append($fb);
		$body.append($fbOverlay);
		$fbComment = $('textarea#fbComment');
		$fbComment.livequery('focus',function(){
			if ($(this).hasClass('virgin')) {
				$(this).val('').removeClass('virgin');
			}
		});
		$fbIdeaLabel = $fbContent.find('#fbIdeaLabel');
		$fbProblemLabel = $fbContent.find('#fbProblemLabel');
		$fbIdeaLabel.click(function(){
			fbTabClick($(this), $fbProblemLabel, 'Opisz swój pomysł...');
		});
		$fbProblemLabel.click(function(){
			fbTabClick($(this), $fbIdeaLabel, 'Opisz swój problem...');
		});
		if ($.browser.msie && $.browser.version.substr(0, 1) == 7) { //Fix for CSS vertical-align quirk in IE7
			$fbContent.css('margin-top', '10%');
		}
		$fb.show();
		$fbOverlay.show();
	}

	//Tab click event
	function fbTabClick($this, $rel, cta){
		if (!$this.hasClass("selected")) {
			$this.addClass("selected").find('input').select();
			$rel.removeClass("selected");
			if ($fbComment.hasClass("virgin")) {
				$fbComment.text(cta);
			}
		}
		return false;
	}

	//Validate comment
	function fbValidateComment(commentField){
		if ((commentField.val().length > 5) && !commentField.hasClass('virgin')) {
			return true;
		}
		else {
			commentField.focus().next('label.error').text('Prosimy o uzupełnienie treści opinii');
			return false;	
		}
	}

	//Send feedback
	function fbSend(params){
		var	$fbType = $fb.find(':input:checked'),
			$fbComment = $fb.find('textarea');
			$fbEmail = $fb.find('#fbEmail');
			$fbPhone = $fb.find('#fbPhone');
		if (fbValidateComment($fbComment)) {
			$.post(opts.action, {type: $fbType.val(), comment: $fbComment.val(), email: $fbEmail.val(), phone: $fbPhone.val()});
			fbThanks();
		}
		return false;
	}

	//Display thank you note
	function fbThanks(){
		$fbContent.addClass('fbThankyou').find('form').remove();
		setTimeout(fbClose, opts.tyTime);
	}

	//Close feedback form
	function fbClose(){
		$fb.hide();
		if ($.browser.msie) {
			$fbOverlay.hide(1, fbCleanup);
		}
		else {
			$fbOverlay.fadeOut("fast", fbCleanup);
		}
	}

	//Remove feedback from DOM
	function fbCleanup(){
		$fb.remove();
		$fbOverlay.remove();
	}

})(jQuery);