/*input date ctrls*/function openDateChooser(idelement, datePattern){
    var theValueDate = document.getElementById(idelement);
    var datesPattern = datesPattern = '%d/%m/%Y';
    Calendar.setup({
        inputField	:	theValueDate, 
        ifFormat	:	datesPattern
    });
}
/*commanbars*/function _changeImage(idelement,newimg) {
    var img=document.getElementById(idelement);
    if (img!=null) {
        img.src=newimg;
    }
}
mn_usecache=true;
mn_form_controls=[];
mn_design_mode=false;
mnform={
    values:{}
};
mnuser={
    values:{}
};
mnsession={
    values:{}
};
function mn_disableCaches() {
    mn_usecache=false;
}
function mn_enableDesignMode(){
    mn_design_mode=true;
}
function mn_evaluateVisibilyExpression(exp){    
    if (mn_design_mode) {
        return true;
    }          
    var result=eval(exp);        
    if (result==true || result=='true' || result=='1' || result==1) {
        return true;
    }
    return false;
}
function mn_revalidate_control(control) {
    var visibilityenable=control.visibilityenable;
    if (!visibilityenable) {
        return;
    }
    var containerid=control.containerid;
    var exp=control.visibilityexpression;
    var visible=mn_evaluateVisibilyExpression(exp);
    if (visible) {
        $('#'+containerid).show();
    } else {
        var frplacholdername=control.frplacholdername;
        mnform.values[frplacholdername]="";
        $('#'+containerid).hide();
    }
}
function mn_revalidate_controls() {    
    mn_refreshactualformvalues();
    for (var i = 0; i < mn_form_controls.length;i++){
        mn_revalidate_control(mn_form_controls[i]);
    }
}
function mn_register_form_control(id,containerid,name,visibilityenable,visibilityexpression,objecttype,frplacholdername){
    var control={
        id:id,
        containerid:containerid,
        name:name,
        visibilityexpression:visibilityexpression,
        visibilityenable:visibilityenable,
        objecttype:objecttype,
        frplacholdername:frplacholdername
    };
    mn_form_controls.push(control);
    var fieldname=control.name;        
    var $field=$('[name='+fieldname+']');  
    $field.change(mn_revalidate_controls);
}
CONTROLLO_FORM_TEXT = 30;
CONTROLLO_FORM_PASSWORD = 31;
CONTROLLO_FORM_TEXTAREA = 32;
CONTROLLO_FORM_SELECT = 33;
CONTROLLO_FORM_RADIO = 34;
CONTROLLO_FORM_YESNO = 35;
CONTROLLO_FORM_SUBMIT = 36;
CONTROLLO_FORM_ERRORI = 37;
CONTROLLO_FORM_DATA = 38;
CONTROLLO_FORM_MULTIPLECHOICE = 39;
CONTROLLO_FORM_CAPTCHA = 40;
function mn_contains(left, right) {
    
    if (left == undefined) {        
        return false;
    } else if (typeof left == 'string') {                
        return (left+"").indexOf(right+"")>=0;
    } else {                        
        if (!left.length) {
            return false;
        }
        for(var i = 0; i < left.length; i++) {
            var leftelement=left[i]+"";            
            if(leftelement == right+""){
                return true;
            }
        }
        return false;
    }
}
function mn_equals(left, right) {    
    
    if (left == undefined) {
        left ='';
    }
    if (right == undefined) {
        right =''
    };    
        
    // string evaluation (case-insensitive)
    var ok =(left+"").toLowerCase() == (right+"").toLowerCase();
    if (ok) {
        return true;
    }
        
    // boolean evaluation
    if (left=='true'||left=='1') {
        left=1;
    }
    if (left=='false'||left=='0') {
        left=0;
    }
    if (right=='true'||right=='1'){
        right=1;
    }        
    if (right=='false'||right=='0'){
        right=0;
    }        
    if (left=='' && right==0) {
        return false;
    }        
    if (left==right) {
        return true;
    }        
    // number evaluation
    if (parseFloat(left)==parseFloat(right)) {
        return true;
    }
    return false;
}
function mn_notequals(left, right) {
    return !mn_equals(left,right);
}
function mn_refresh_control_value(control) {
    var frplacholdername=control.frplacholdername;
    if (frplacholdername!='') {
        var fieldname=control.name;        
        var actualvalue = "";
        switch (control.objecttype) {
            case CONTROLLO_FORM_RADIO:
                var $field=$('[name='+fieldname+']:checked');        
                actualvalue=$field.val();
                break;
            case CONTROLLO_FORM_YESNO:
                var $field=$('[name='+fieldname+']:checked');                
                actualvalue=$field.val();                
                if (actualvalue == 'true') {
                    actualvalue=true;
                }
                break;
            case CONTROLLO_FORM_MULTIPLECHOICE:
                var $field=$('[name='+fieldname+']:checked');
                var value=[];
                $field.each(function(){
                    var singlevalue=$(this).val();                    
                    value.push(singlevalue);
                });
                actualvalue=value;
                break;
            default:
                var $field=$('[name='+fieldname+']');        
                actualvalue=$field.val();
            
        }                        
        mnform.values[frplacholdername]=actualvalue;
    }
}

function mn_refreshactualformvalues() {    
    for (var i = 0; i < mn_form_controls.length;i++){
        mn_refresh_control_value(mn_form_controls[i]);
    }
}
AJAX_AJAXRELOADSELECT='ajaxreloadselect';
mn_form_controls_behaviours=[];
mn_form_controls_behaviours_sources=[];
function mn_register_form_control_behaviour(id,name,type,tpkcontent,bindings,sources) {
    var beh = {
        controlid:id,
        controlname:name,
        type:type,
        tpkcontent:tpkcontent,
        bindings:bindings,
        sources:sources
    }
    mn_form_controls_behaviours.push(beh);
    for (var i = 0; i < sources.length; i++) {
        var source=sources[i];        
        if (!mn_contains(mn_form_controls_behaviours_sources, source)) {
            mn_form_controls_behaviours_sources.push(source);
        }
    }
}

function mn_update_listselect(beh,options) {    
    var $select=$('#'+beh.controlid);    
    var list=options.options;    
    var actualvalue=$select.find('option:selected').val();        
    $select.empty();
    for (var i = 0; i < list.length;i++) {
        var option =list[i];        
        var $newoption=$('<option />');
        $newoption.val(option.value);
        $newoption.html(option.htmlDescription);
        $newoption.appendTo($select);
    }
    if (actualvalue) {
        // proviamo a riselezionare il valore precedente
        $select.val(actualvalue);                
    }
    mn_revalidate_controls();
}

function mn_ajax_autoreloadselect(beh) {
    
    var tpkcontent=beh.tpkcontent;    
    
    var bindings=beh.bindings;
    var values={};    
    for (var i in bindings) {        
        var paramname="bind_param_"+i;
        var expr = bindings[i];       
        try {
            var paramvalue=eval(expr);            
            values[paramname] = paramvalue;
        } catch (ee){}
    }
    var params={        
        bindings:bindings,
        values:values
    }
    var paramsSet = JSON.stringify(params);    
    var realParameters = {
        tpkcontent:tpkcontent,
        paramsSet:paramsSet,
        idc:mn_customerid,
        usecache:mn_usecache
    }
    var ajaxurl='/mnajaxcontrol';            
    $.ajax({
        async:false,
        url:ajaxurl,
        data:realParameters,
        method:'POST',
        dataType:'json',
        success:function(options) {
            mn_update_listselect(beh,options);
        },
        error:function(error) { 
            if (!mn_design_mode) {
                alert('opss...an error occurred during AJAX transaction...please reload this page with F5');            
            }
        }
    });
    
}

function mn_process_ajax_behaviours(control) {    
    for (var i = 0; i < mn_form_controls_behaviours.length; i++) {
        var beh = mn_form_controls_behaviours[i];
        
        if (beh.type == AJAX_AJAXRELOADSELECT) {            
            mn_ajax_autoreloadselect(beh);
        }
    }
}
function mn_add_onchange_ajaxsourcebehaviour(control) {
    var fieldname=control.name;
    var $field=$('[name='+fieldname+']');  
    $field.change(function(){
        mn_process_ajax_behaviours(control)
    });
}
function mn_prepare_form_control_behaviour_sources() {    
    for (var i = 0; i < mn_form_controls.length;i++){
        var control = mn_form_controls[i];        
        if (mn_contains(mn_form_controls_behaviours_sources,control.frplacholdername)) {            
            mn_add_onchange_ajaxsourcebehaviour(control);
        }
    }
    $(mn_process_ajax_behaviours).ready();
}
mn_customerid='';
function mn_setcustomerid(customerid) {
    mn_customerid=customerid;
}
function mn_sethiddenvalueandsubmitform(controlId,value) {
    if (mn_design_mode) {
        return false;
    }
    var control=document.getElementById(controlId);
    if(control){
        control.value=value;
        _mnPostForm();
                
    }
    return false;
}
function mn_onmatrixcellchange() {
    var $radio = $(this);
    var checked = $radio.is(':checked');
    if (checked) {
        var radioid = $radio.attr('id');    
        var sep1 = radioid.indexOf('_');
        var sep2 = radioid.indexOf('_',sep1+1);
        //var rowId = radioid.substring(sep1+1,sep2);    
        var colId = radioid.substring(sep2+1);    
        var $table=$radio.parents('.matrix');        
        var colidctrlclass="INPUT.col_"+colId;
        $table.find(colidctrlclass).each(function() {
            var $ctrl = $(this);
            var ctrlid=$ctrl.attr('id');        
            if (radioid != ctrlid) {                
                $ctrl.removeAttr("checked");                
            }
        });    
    }
}
function mn_matrixActivateOneAnswerPerColumn(matrixid) {    
    $('#'+matrixid).find('.ctrl').each(function() {
        var $radio = $(this);
        var radioid = $radio.attr('id');
        $radio.change(mn_onmatrixcellchange);       
    });
}
