// Jet JavaScript library (uses JQuery)
var Jet =
{
    ajax : function (params) {
//        data, vars, params, method, callback, module, func, async
        var url=(!(undefined === params.module && undefined === params.func))?
            "/:ajax:/"+params.module+"/"+params.func+":"+params.vars :
            "/:ajax:/"+params.params['__class']+"/"+params.params['__function']+":"+params.vars;
        var settings={};
        settings['data']=[];
        if(! (undefined === params.data) ) {
            switch(typeof(params.data)) {
                case "array":
                case "object":
                    for(j in params.data) {
                        if(j=='0' || parseInt(j)>0) {
                            settings['data'].push({"name": params.data[j].name, "value": params.data[j].value});
                        }
                        else {
                            settings['data'].push({"name": j, "value": params.data[j]});
                        }
                    }
                break;

                case "string":
                    url+=(url.indexOf('?')!=-1)? "&"+params.data : "?"+params.data;
                break;
            }
        }
        if(! (undefined === params.async) ) settings['async']=params.async;
        if(! (undefined === params.method) ) settings['type']=params.method;
        if(! (undefined === params.callback) ) settings['success']=params.callback;
        settings['contentType']=(undefined === params.contentType)? 'application/x-www-form-urlencoded' : params.contentType;
        settings['dataType']="json";
        settings['url']=url;
        for(i in params.params)
        {
            settings['data'].push({"name":"params["+i+"]", "value":params.params[i]});
        }
        $.ajax(settings);
    },

    validate : function(inputs, submit_button, submit_class) {
        $(submit_button).addClass(submit_class).attr("disabled", 'true');
        for(i in inputs) {
            $(inputs[i][0]).attr("data-jet-valid-pattern", inputs[i][1]).bind("keyup change", function(){
                var pattern=new RegExp($(this).attr("data-jet-valid-pattern"));
                $(this).attr("data-jet-valid", pattern.test($(this).val())? 'yes' : 'no');
                if(!(undefined===inputs[i][2])) {
                    if($(this).attr("data-jet-valid")=='no') {
                        $(this).addClass(inputs[i][2]);
                    }
                    else {
                        $(this).removeClass(inputs[i][2]);
                    }
                }
                var result=true;
                for(j in inputs) {
                    var tmp=($(inputs[j][0]).attr("data-jet-valid")=='yes')? true : false;
                    result=tmp && result;
                }
                if(result){
                    $(submit_button).removeClass(submit_class).attr("disabled", '');
                }
                else {
                    $(submit_button).addClass(submit_class).attr("disabled", true);
                }
            }).trigger("change");
        }
    }
}