﻿(function($) {
    $.fn.form = function() {


        return this.each(function() {

            var $form = $(this),
        inputs = $form.find("input, select, textarea");


            $form.find("fieldset").addClass("ui-widget-content");
            $form.find("legend").addClass("custom-legend");
            $form.addClass("ui-widget");


            $.each(inputs, function() {
                $(this).addClass('ui-state-default ui-corner-all');
                $(this).wrap("<label />");

                if ($(this).is(":reset, :submit")) {
                    buttons(this);
                }
                else if ($(this).is(":checkbox"))
                    checkboxes(this);
                else if ($(this).is("input[type='text']") || $(this).is("textarea") || $(this).is("input[type='password']")) {
                    textelements(this);
                    $(this).addClass('text');
                }
                else if ($(this).is(":radio")) {
                    radio(this);
                    $(this).addClass('radiobutton');
                }
                else if ($(this).is("select")) {
                    selector(this);
                    $(this).addClass('selectbox');
                }
                if ($(this).hasClass("date")) {
                    datepicker();


                }

            });



            function textelements(element) {


                $("#" + $(element).attr("id")).removeClass("ui-state-focus");

                $(element).bind({

                    focusin: function() {
                        $(this).addClass('ui-state-focus');
                    },
                    focusout: function() {
                        $(this).removeClass('ui-state-focus');
                    }
                });

            }

            function buttons(element) {
                $(this).removeClass("ui-state-focus");

                $(element).bind({

                    mouseover: function() {
                        $(this).addClass('ui-state-focus');
                    },
                    mouseout: function() {
                        $(this).removeClass('ui-state-focus');
                    }
                });

                if ($(element).is(":submit")) {
                    $(element).addClass("ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only");
                    /* $(element).bind("click", function(event) {
                    event.preventDefault();
                    });*/
                }
                else if ($(element).is(":reset"))
                    $(element).addClass("ui-priority-secondary ui-corner-all ui-button-text-only hover");
                $(element).bind('mousedown mouseup', function() {
                    $(this).toggleClass('ui-state-active');
                }

			  );
            }

            function checkboxes(element) {


                $(element).parent().next().addClass("checkLabel");

                $(element).addClass("ui-helper-hidden");
                $(element).css({ display: "none" });
                $(element).parent("label").after("<span />");
                var parent = $(element).parent("label").next();

                parent.css({ width: 17, height: 17, display: "block" });


                parent.wrap("<span class='ui-state-default ui-corner-all' style='display:inline-block;width:16px;height:16px;margin-right:5px;'/>");

                parent.parent().addClass('hover');

                parent.parent().next().click(function() {
                    parent.parent("span").click();
                });

                parent.parent("span").click(function(event) {


                    $(this).toggleClass("ui-state-active");
                    parent.toggleClass("ui-icon ui-icon-check");
                    $(element).click();

                    var $options = $(element).parent().parent().find("label input");
                    var $wrapper = $(element).parent().parent();
                    var isChecked = false;
                    var c = 0;
                    $options.each(function() {

                        if (this.checked) {
                            isChecked = true;
                            c++;
                        }
                    });

                    if (isChecked && c == $options.length) {
                        $(element).trigger("checkboxes_all_checked");
                        //console.log("checkboxes_all_checked");
                    } else if (isChecked) {
                        $(element).trigger("checkboxes_some_checked");
                        //console.log("checkboxes_some_checked");
                    } else {
                        $(element).trigger("checkboxes_none_checked");
                        //console.log("checkboxes_none_checked");
                    }


                });
                if (element.checked) {
                    parent.toggleClass("ui-icon ui-icon-check");
                }


            }

            function radio(element) {

                $(element).parent("label").after("<span />");
                var parent = $(element).parent("label").next();
                $(element).addClass("ui-helper-hidden");
                parent.addClass("ui-icon ui-icon-radio-off");
                parent.wrap("<span class='ui-state-default ui-corner-all' style='display:inline-block;width:16px;height:16px;margin-right:5px;cursor:pointer;'/>");

                parent.parent().next().css({ "position": "relative", "bottom": "3px", "padding-right": "5px", "cursor": "pointer" });

                parent.parent().addClass('hover');

                parent.parent().next().click(function() {
                    parent.parent("span").click();
                });
                parent.parent("span").click(function(event) {

                    if (element.checked) { return; }



                    $(this).parent().siblings("span").each(function() {



                        $(this).children("span").removeClass("ui-state-active");
                        $(this).children("span").children("span").removeClass("ui-icon-bullet ui-icon-radio-off ui-state-active");
                        $(this).children("span").children("span").addClass("ui-icon-radio-off");
                    });


                    $(this).parent().children().filter("span").each(function() {

                        $(this).removeClass("ui-state-active");
                        $(this).children("span").removeClass("ui-icon-bullet ui-icon-radio-off ui-state-active");
                        $(this).children("span").addClass("ui-icon-radio-off");

                    });

                    $(this).toggleClass("ui-state-active");
                    parent.toggleClass("ui-icon-radio-off ui-icon-bullet");

                    $(element).parent().parent().parent().find("input:radio").each(function() {
                        $(this).removeAttr("checked");
                    });

                    $(element).click();



                    $(element).trigger("radios_checked");
                });
                if (element.checked) {
                    parent.toggleClass("ui-icon-radio-off ui-icon-bullet");

                }

            }


            function selector(element) {
                var parent = $(element).parent();
                var selectWidth = $(element).outerWidth() + 40;
                parent.css({ "display": "block", width: selectWidth, height: 23, marginTop: 7, marginBottom: 0, "cursor": "pointer" }).addClass("ui-state-default ui-corner-all selectarea");
                $(element).addClass("ui-helper-hidden");
                parent.append("<span class='labeltext' style='float:left;'></span><span style='float:right;display:inline-block margin-right: 4px; margin-top: 4px;cursor:pointer;' class='ui-icon ui-icon-triangle-1-s' ></span>");
                parent.after("<ul class=' ui-helper-reset ui-widget-content ui-helper-hidden' style='position:absolute;z-index:50;width:" + (selectWidth-10) + "px;padding:2px 5px 2px 5px;cursor:pointer;' ></ul>");



                var selectedtext = $('#' + $(element).attr('id') + ' :selected').text();
                var defaultSelectedText = selectedtext;


                $(parent).find(".labeltext").html(selectedtext);


                //console.log($(element).find("option"));
                $.each($(element).find("option"), function() {
                    var selectedtext = $(this).text();

                    if (selectedtext == "") {
                        selectedtext = "&nbsp;";
                    }

                    $(parent).next("ul").addClass("selectbox").append("<li>" + selectedtext + "</li>");

                    if (selectedtext == defaultSelectedText) {
                        $(parent).next("ul").find("li:last").addClass("selected");
                    }
                });

                $(parent).next("ul").find("li.selected").removeClass("selected");
                $(parent).next("ul").find("li.hover").removeClass("hover");

                $(parent).next("ul").find("li").click(function() {
                    $(parent).find(".labeltext").html($(this).html());

                    $(this).parent().find("li.selected").removeClass("selected");

                    $(this).addClass("selected");

                    var value = $(this).html();
                    $(element).val($(this).html());
                    $(parent).click();

                    


                    $.each($(element).find("option"), function(index) {

                        if (jQuery.trim($(this).text()) == jQuery.trim(value)) {

                            $(this).parent().find("li:selected").removeAttr("selected");
                            $(this).attr("selected", "selected");

                            if ($(this).val() == "") {
                                $(element).trigger("option_empty_value");
                            } if ($(this).val().length > 0) {
                                $(element).trigger("option_has_value");
                            }

                        }
                    });
                });

                $(parent).next("ul").find("li").hover(function() {

                    $(this).parent().find("li.hover").removeClass("hover");

                    if (!($(this).hasClass("selected"))) {
                        $(this).addClass("hover");
                    }
                    
                });



                $(parent).click(function(event) {
                    $(this).next().slideToggle('fast');
                    event.preventDefault();
                });

            }




        });

    };

})(jQuery);
