function activateValidatorsAnswers(widgetElement, validatorElement, answersElement) {
    validatorElement.disable();
    answersElement.disable();
    setOptionsForSelect(validatorElement, new Array());
    var widgetValue = widgetElement.options[widgetElement.selectedIndex].value;
    if (widgetValue == 'text') {
        validatorElement.enable();
        var options = new Array();
        options[0] = new Option("String Validator", "string");
        options[1] = new Option("E-mail Validator", "email");
        options[2] = new Option("Url Validator", "url");
        options[3] = new Option("Integer Validator", "integer");
        options[4] = new Option("Number Validator", "number");
        answersElement.clear();
        setOptionsForSelect(validatorElement, options);
    } else if (widgetValue == 'radio') {
        validatorElement.enable();
        answersElement.enable();
        var options = new Array();
        options[0] = new Option("Choice Validator", "choice");
        setOptionsForSelect(validatorElement, options);        
    } else if (widgetValue == 'checkbox') {
        validatorElement.enable();
        answersElement.enable();
        var options = new Array();
        options[0] = new Option("Choice Many Validator", "choice_many");
        setOptionsForSelect(validatorElement, options);        
    } else if (widgetValue == 'date') {
        validatorElement.enable();
        var options = new Array();
        options[0] = new Option("Date Validator", "date");
        answersElement.clear();
        setOptionsForSelect(validatorElement, options);        
    } else if (widgetValue == 'time') {
        validatorElement.enable();
        var options = new Array();
        options[0] = new Option("Time Validator", "time");
        answersElement.clear();
        setOptionsForSelect(validatorElement, options);        
    } else if (widgetValue == 'datetime') {
        validatorElement.enable();
        var options = new Array();
        options[0] = new Option("DateTime Validator", "datetime");
        answersElement.clear();
        setOptionsForSelect(validatorElement, options);        
    } else if (widgetValue == 'textarea') {
        validatorElement.enable();
        var options = new Array();
        options[0] = new Option("String Validator", "string");
        answersElement.clear();
        setOptionsForSelect(validatorElement, options);        
    }
}

function setOptionsForSelect(selectElement, options) {
    for (var i=selectElement.options.length-1; i >= 0; i--) {
        selectElement.remove(i);
    }
    selectElement.length = 0;
    for (var i = 0; i < options.length; i++) {
        selectElement.options[i] = options[i];
    }
}

function submitQuestionsForm(form, responseElement, deactivateButton, successMessage, successCallback) {
    var elements = $$('[name="question_errors"]');
    for (var i = 0; i < elements.length; i++) {
        elements[i].innerHTML = '';
    }
    responseElement.innerHTML = '<div class="indicator">Saving, please wait...</div>';

    form.request({
        method: 'post',
        evalJSON: true,
        onComplete: function(transport) { 
            if (transport.responseJSON.length) {
                responseElement.innerHTML = 'There are some errors...';
                transport.responseJSON.each(function (s, index) { $('question_' + s.id + '_error').innerHTML = s.error });
            } else {
                if (!successMessage) {
                    responseElement.innerHTML = '<div class="question_saved">Question answers saved.</div>';
                } else {
                    responseElement.innerHTML = '<div class="question_saved">' + successMessage + '</div>';
                }
                if (deactivateButton) {
                    deactivateButton.hide();
                }
                if (successCallback) {
                    successCallback.call();
                }
            }
        }
    });
    return false;
}

function loadParentAnswers(url) {
    if (!$('question_parent_answers_div')) {
        var div = document.createElement('div');
        div.id = 'question_parent_answers_div';
        $('question_parent_answers').parentNode.appendChild(div);
    }
    
    $('question_parent_answers_div').innerHTML = '<div>Loading, please wait...</div>';
    
    new Ajax.Request(url, {
        method: 'get',
        evalJS: true
    });
}

function setParentAnswerForDate() {
    var fromDate = '';
    if ($('parent_anwser_from_year') && $('parent_anwser_from_year').value) fromDate += $('parent_anwser_from_year').value + '-';
    else fromDate += '0000-';
    if ($('parent_anwser_from_month') && $('parent_anwser_from_month').value) fromDate += $('parent_anwser_from_month').value + '-';
    else fromDate += '00-';
    if ($('parent_anwser_from_day') && $('parent_anwser_from_day').value) fromDate += $('parent_anwser_from_day').value;
    else fromDate += '00';
    
    var fromTime = '';
    if ($('parent_anwser_from_hour') && $('parent_anwser_from_hour').value) fromTime += $('parent_anwser_from_hour').value + ':';
    else fromTime += '00:';
    if ($('parent_anwser_from_minute') && $('parent_anwser_from_minute').value) fromTime += $('parent_anwser_from_minute').value;
    else fromTime += '00';

    var toDate = '';
    if ($('parent_anwser_to_year') && $('parent_anwser_to_year').value) toDate += $('parent_anwser_to_year').value + '-';
    else toDate += '0000-';
    if ($('parent_anwser_to_month') && $('parent_anwser_to_month').value) toDate += $('parent_anwser_to_month').value + '-';
    else toDate += '00-';
    if ($('parent_anwser_to_day') && $('parent_anwser_to_day').value) toDate += $('parent_anwser_to_day').value;
    else toDate += '00';
    
    var toTime = '';
    if ($('parent_anwser_to_hour') && $('parent_anwser_to_hour').value) toTime += $('parent_anwser_to_hour').value + ':';
    else toTime += '00:';
    if ($('parent_anwser_to_minute') && $('parent_anwser_to_minute').value) toTime += $('parent_anwser_to_minute').value;
    else toTime += '00';
    
    $('question_parent_answers').value = '';
    if (fromDate != '0000-00-00' || fromTime != '00:00') {
        var issetDate = false;
        if (fromDate != '0000-00-00') {
            $('question_parent_answers').value += fromDate;
            issetDate = true;
        }
        if (fromTime != '00:00') {
            $('question_parent_answers').value += ((issetDate) ? ' ' : '') + fromTime;
        }
    }
    $('question_parent_answers').value += "\r\n";
    if (toDate != '0000-00-00' || toTime != '00:00') {
        var issetDate = false;
        if (toDate != '0000-00-00') {
            $('question_parent_answers').value += toDate;
            issetDate = true;
        }
        if (toTime != '00:00') {
            $('question_parent_answers').value += ((issetDate) ? ' ' : '') + toTime;
        }
    }
}

function setParentAnswerForRadio() {
    $('question_parent_answers').value = '';
    var elements = $$('[name="parent_anwser[]"]');
    for (var i = 0; i < elements.length; i++) {
        if (elements[i].checked) {
            $('question_parent_answers').value += elements[i].value + "\r\n";
        }
    }
}

function loadQuestionChilds(url, toElement) {
    toElement.style.display = 'block';
    toElement.innerHTML = '<li><div class="indicator">Loading, please wait...</div></li>';
    
    new Ajax.Request(url, {
        method: 'get',
        onComplete: function(transport) { 
            toElement.innerHTML = transport.responseText;
        }
    });
}

function getChekedByElementAsQueryString(element) {
    var elements = $(element.form).getElementsBySelector('[name="' + element.name + '"]');
    var queryString = '';
    for (var i = 0; i < elements.length; i++) {
        if (elements[i].checked) {
            queryString += "&checkboxes%5B%5D=" + elements[i].value;
        }
    }
    return queryString;
}

var ParentAnswers = function (answersIds, answersLabels) {
    this.set(answersIds, answersLabels);
}

ParentAnswers.prototype = {
    answersIds: new Array(),
    answersLabels: new Array(),
    configs: new Array(),
    
    set: function (answersIds, answersLabels) {
        this.answersIds = answersIds;
        this.answersLabels = answersLabels;
    },
    
    addConfig: function (answersIds) {
        var length = this.configs.length;
        if (length == 10) {
            alert('Maximum configurations = 10');
            return;
        }
        this.configs[length] = new Array();
        for (var i = 0; i < this.answersIds.length; i++) {
            if (answersIds) {
                for (var j = 0; j < answersIds.length; j++) {
                    if (answersIds[j] == this.answersIds[i]) {
                        this.configs[length][i] = true;
                        break;
                    }
                }
            } else {
                this.configs[length][i] = false;
            }
        }
    },
    
    deleteConfig: function (config) {
        this.configs.splice(config, 1);
    },
    
    setChecked: function (element, i, j) {
        if (element.checked) {
            this.configs[i][j] = true;
        } else {
            this.configs[i][j] = false;
        }
        this.saveToTextarea();
    },
    
    show: function () {
        if (!this.configs.length) {
            this.addConfig();
        }
        var html = '<div class="form_input_list">';
        html += '<a href="#" onclick="parentAnswers.addConfig(); parentAnswers.show();">Add another configuration</a><br>';
        for (var i = 0; i < this.configs.length; i++) {
            html += '<ul class="checkbox_list"><li>' + (i + 1) + '. </li>';
            for (var j = 0; j < this.answersIds.length; j++) {
                html += '<li><input type="checkbox" id="parent_answer_' + i + '_' + j + '" value="1"';
                if (this.configs[i][j]) {
                    html += ' checked';
                }
                html += ' onclick="parentAnswers.setChecked(this, ' + i + ',' + j + ')"> <label for="parent_answer_' + i + '_' + j + '">' + this.answersLabels[j] + '</label></li>';
            }
            if (i) {
                html += '<a href="#" onclick="parentAnswers.deleteConfig(' + i + '); parentAnswers.show();">[delete configuration]</a><br>';
            }
            html += '</ul>';
        }
        html += '</div>';
        $('question_parent_answers_div').innerHTML = html;
        this.saveToTextarea();
    },
    
    saveToTextarea: function () {
        var forTextarea = '';
        for (var i = 0; i < this.configs.length; i++) {
            var isSet = false;
            for (var j = 0; j < this.answersIds.length; j++) {
                if (this.configs[i][j]) {
                    forTextarea += this.answersIds[j] + ',';
                    isSet = true;
                }
            }
            if (isSet) {
                forTextarea = forTextarea.substring(0, forTextarea.length - 1) + "\r\n";
            }
        }
        $('question_parent_answers').value = forTextarea;
    }
}

parentAnswers = new ParentAnswers(new Array(), new Array());
