/**
 * Extended method for String class
 *
 * @param integer limit - max string length
 * @return string - original string with '...' in the middle instead of excess chars
 */
String.prototype.ellipsis = function (limit) {
    var center = '...';
    var len = this.length;
    if (len > limit) {
        var half = Math.floor( (limit - center.length)/2 );
        return this.substr(0, half) + center + this.substr(len-half, half);
    }
    return this.toString();
}
/**
 * Adds 'hover' class to an element - fix for ie
 *
 */
$.fn.hoverable = function () {
    return this.each(function () {
        var _this = $(this);
        _this.hover(
            function () { _this.addClass('hover'); },
            function () { _this.removeClass('hover'); }
        );
        return _this;
    });
}

$.fn.quest = function (options) {
    var settings = $.extend({
        active_class : 'act',
        options_selector : '#questblock > li',
        button_selector : '.nextbtn > input:image',
        single_option : false,
        on_click : function (el) {},
        elements : 3
    }, options);

    return $(this).each(function () {
        var _this = $(this);
        var options = _this.find(settings.options_selector);
        var submit  = $(settings.button_selector);

        options.find('span').hoverable().click(function () {
            var option = $(this).parent();
            option.toggleClass(settings.active_class);
            
            if(options.filter('.' + settings.active_class).length) {
                _this.addClass(settings.active_class);
            } else {
                _this.removeClass(settings.active_class);
            }
            
            option.find('input:hidden').attr('disabled', !option.hasClass(settings.active_class));

            if(settings.single_option === true) {
                option.siblings().each(function() {
                    $(this)
                    .removeClass(settings.active_class)
                    .find('input:hidden').attr('disabled', 'disabled');
                });
            } else if(settings.single_option === false) {
            } else {
                $.each(settings.single_option, function(key, value) {
                    if(_this.hasClass(value)) {
                        option.siblings().each(function() {
                            $(this)
                            .removeClass(settings.active_class)
                            .find('input:hidden').attr('disabled', 'disabled');
                        });
                    }
                });
            }
            
            submit.css(
                'visibility',
                $('.quest').filter('.' + settings.active_class).length == settings.elements ? 'visible' : 'hidden'
            );
            
            settings.on_click(option);
        });
    });
}

$.fn.setAnchor = function () {
    //goto that anchor by setting the body scroll top to anchor top
    $('html, body').animate({ scrollTop: $(this).offset().top }, 1);
};

$.fn.BMI = function(options) {
    var settings = $.extend({
        weight_id: 'weight',
        length_id: 'length'
    }, options);
	var length = $('#' + settings.length_id);
	var weight = $('#' + settings.weight_id);
	var _this = $(this);

    weight.keypress(function (e) {
		// allow digits only
		if (e.which!=8 && e.which!=0 && (e.which<48 || e.which>57)) {
			return false;
		}
    });
    length.keypress(function (e) {
		// allow digits only
		if (e.which!=8 && e.which!=0 && (e.which<48 || e.which>57)) {
			return false;
		}
    });

    weight.keyup(function() {
    	weight_val = parseFloat($(this).val());
    	length_val = parseFloat(length.val());

        if(!isNaN(weight_val) && !isNaN(length_val) && length_val != 0) {
            _this.val((weight_val / ((length_val/100) * (length_val/100))).toPrecision(4));
            $('div.nextbtn input').css('visibility', 'visible');
        } else {
        	_this.val(0);
        	$('div.nextbtn input').css('visibility', 'hidden');
        }
    });

    length.keyup(function() {
    	length_val = parseFloat($(this).val());
    	weight_val = parseFloat(weight.val());
        if(!isNaN(weight_val) && !isNaN(length_val) && length_val != 0) {
            _this.val((weight_val / ((length_val/100) * (length_val/100))).toPrecision(4));
            $('div.nextbtn input').css('visibility', 'visible');
        } else {
        	_this.val(0);
        	$('div.nextbtn input').css('visibility', 'hidden');
        }
    });

    return $(this);
};

$(function() {
    $('.edit_content').click(function() {
        var url = $(this).attr('alt');

        $.nyroModalManual({
            width     : 800,
            height    : 600,
            url       : url,
            forceType : 'iframe'
        });
    });
});
