﻿var inputsToDiv = new function () {

    defaultClasses = {
        radio: 'spec_radio',
        checkbox: 'spec_checkbox',
        checked: 'checked',
        disabled: 'disabled'
    };

    this.radios = [];
    this.checks = [];

    this.init = function (container) {
        var self = this;
        var newChecks;
        var newRadios;
        if (!container) newRadios = self.radios = $('input[type="radio"]');
        else {
            self.radios = $(self.radios);
            newRadios = $('input[type="radio"]', container);
            self.radios = self.radios.add(newRadios);
        }

        newRadios.each(function () {
            var radio = this;
            radio.style.display = 'none';
            var newdiv = document.createElement('div');
            var className = radio.className.length > 0 ? radio.className : defaultClasses.radio;
            if (radio.checked) className += ' ' + defaultClasses.checked;
            if (radio.disabled) className += ' ' + defaultClasses.disabled;
            newdiv.className = className;
            this.parentNode.insertBefore(newdiv, this);
            radio.bindedDiv = newdiv;
            $(newdiv).click(
            function () {
                var elem = $(this);
                if (elem.hasClass(defaultClasses.checked)) return;
                //radio.checked = true;
                radio.click();
                self.radios.filter('[name="' + radio.name + '"]').each(function () {
                    if (this.bindedDiv) {
                        var div = $(this.bindedDiv);
                        if ((div.hasClass(defaultClasses.checked) && !this.checked) || (!div.hasClass(defaultClasses.checked) && this.checked)) {
                            div.toggleClass(defaultClasses.checked);
                        }
                    }
                });
            }
        );
        });

        //var checks;
        if (!container) newChecks = self.checks = $('input[type="checkbox"]');
        else {
            self.checks = $(self.checks);
            newChecks = $('input[type="checkbox"]', container);
            self.checks = self.checks.add(newChecks);
        }
        newChecks.each(function () {
            var check = this;
            check.style.display = 'none';
            var newdiv = document.createElement('div');
            var className = check.className.length > 0 ? check.className : defaultClasses.checkbox;
            if (check.checked) className += ' ' + defaultClasses.checked;
            if (check.disabled) className += ' ' + defaultClasses.disabled;
            newdiv.className = className;
            this.parentNode.insertBefore(newdiv, this);
            check.bindedDiv = newdiv;
            $(newdiv).click(
            function () {
                var elem = $(this);
                $(newdiv).toggleClass(defaultClasses.checked);
                //check.checked = $(newdiv).hasClass(defaultClasses.checked);
                check.click();
            });
        });
    }

    this.setStatus = function (elements, status) {
        if (!elements) return;
        if (status == undefined || status == null || typeof status != 'string') status = 'none';
        if (status.toLowerCase() != 'disabled' && status.toLowerCase() != 'enabled' && status.toLowerCase() != 'checked' && status.toLowerCase() != 'notchecked') status = 'none';

        var elements = jQuery(elements);
        elements.each(function () {
            var input;
            

            if (this.tagName && this.tagName.toLowerCase() == 'div' && this.bindedDiv) input = this.bindedDiv;
            if (this.tagName && this.tagName.toLowerCase() == 'input' && (this.type == 'checkbox' || this.type == 'radio')) input = this;
            if (!input) return;

            if (status == 'disabled') {
                input.disabled = true;
                return;
            }
            if (status == 'enabled') {
                input.disabled = false;
                return;
            }

            //input.disabled = false;
            if (status == 'checked') {
                input.checked = true;
                return;
            }
            if (status == 'notchecked') {
                input.checked = false;
                return;
            }
            //input.checked = status == 'checked';
        });

        this.radios.add(this.checks).each(function () {
            var div = $(this.bindedDiv);
            div.removeClass(defaultClasses.checked).removeClass(defaultClasses.disabled);
            if (this.checked) div.addClass(defaultClasses.checked);
            if (this.disabled) div.addClass(defaultClasses.disabled);

        });
    }

};

$(function () {
    inputsToDiv.init();
});
