
var validationList = new Array();
var gAnalyticsValidationValues = new Array();
var validCount = 0;
var questionIdOryginalErrorMessage = new Hash();
var errorMessagesParameters = new Array();
var capchaError = true;

function addValidateFunction(questionId, pollingId, functionName){
    var validateObject = new Object();
    validateObject.questionId = questionId;
    validateObject.pollingId = pollingId;
    validateObject.functionName = functionName;
    validationList[validCount] = validateObject;
    validCount++;
}

function addValidateFunctionWithParams(questionId, pollingId, functionName, params, errorMessage){
    var validateObject = new Object();
    validateObject.questionId = questionId;
    validateObject.pollingId = pollingId;
    validateObject.functionName = functionName;
    validateObject.params = params;
    validateObject.errorMessage = errorMessage;
    
    validateObject.nextErrorMessage = '<br/>' + validateObject.errorMessage;
    validateObject.oryginalErrorMessage = '';
    
    var defaultErrorMessageElement = document.getElementById(componentId + questionId + '_MESSAGE');
    if (defaultErrorMessageElement && defaultErrorMessageElement != null) {
        validateObject.oryginalErrorMessage = defaultErrorMessageElement.innerHTML;
    }
    
    questionIdOryginalErrorMessage.set(questionId, validateObject.oryginalErrorMessage);
    
    validationList[validCount] = validateObject;
    validCount++;
}

function addError(questionFormName, value){
    var par = document.getElementById('p_error_' + questionFormName);
    
    if (!par) {
        var newPar = document.createElement('p');
        newPar.id = 'p_error_' + questionFormName;
        newPar.className = 'errorP';
        var text = '';
        var questLabel = document.getElementById(questionFormName + "_QEST_LABEL" + componentId);
        var message = document.getElementById(componentId + questionFormName + '_MESSAGE');
        var quest = document.getElementById(componentId + questionFormName + '_ANSWER');
        var questRadio = document.getElementById(componentId + questionFormName + '_ANSWER_0');
        var shortQ = document.getElementById(componentId + questionFormName + '_SHORT');
        if (questLabel != null) {
            text = 'Pole ';
            text += '<span>' + questLabel.innerHTML + '</span>';
            
            text = text.replace(/<br>/g, '');
            text = text.replace(/<br\/>/g, '');
            text = text.replace(/<br \/>/g, '');
            
            text = text.replace(/<BR>/g, '');
            text = text.replace(/<BR\/>/g, '');
            text = text.replace(/<BR \/>/g, '');
            
            if (value && value != null && value != '') {
                text += ':&nbsp;' + message.innerHTML;
            }
            else {
                text += ' nie zosta\u0142o wype\u0142nione';
            }
        }else if( (( quest != null && quest.type.toLowerCase() == 'checkbox') || ( questRadio != null && questRadio.type.toLowerCase() == 'radio' )) && shortQ != null ){
        	text = 'Pole ';
            text += '<span>' + shortQ.innerHTML + '</span>';
            text += ' nie zosta\u0142o zaznaczone';
        }else {
            if (message != null && message != '') {
                text += message.innerHTML;
            }
        }
        newPar.innerHTML = text;
        document.getElementById('formErrorTd').appendChild(newPar);
    }
    else {
        var text = 'Pole ';
        var questLabel = document.getElementById(questionFormName + "_QEST_LABEL" + componentId);
        if (questLabel != null) {
            text += '<span>' + questLabel.innerHTML + '</span>';
            
            if (value && value != null && value != '') {
                var message = document.getElementById(componentId + questionFormName + '_MESSAGE');
                text += ':&nbsp;' + message.innerHTML;
            }
            else {
                text += ' nie zosta\u0142o wype\u0142nione';
            }
            par.innerHTML = text;
        }
    }
}

function deleteError(questionFormName){
    var td = document.getElementById('formErrorTd');
    var par = document.getElementById('p_error_' + questionFormName);
    if (par) {
        td.removeChild(par);
    }
    
}

function addDependantError(questionFormName){
    var par = document.getElementById('p_dependant_error_' + questionFormName);
    
    if (!par) {
        var newPar = document.createElement('p');
        newPar.id = 'p_dependant_error_' + questionFormName;
        newPar.className = 'errorP';
        var text = 'Pole ';
        var questLabel = document.getElementById(questionFormName + "_QEST_LABEL" + componentId);
        if (questLabel != null) {
            text += '<span>' + questLabel.innerHTML + '</span>';
            
            text = text.replace(/<br>/g, '');
            text = text.replace(/<br\/>/g, '');
            text = text.replace(/<br \/>/g, '');
            
            text = text.replace(/<BR>/g, '');
            text = text.replace(/<BR\/>/g, '');
            text = text.replace(/<BR \/>/g, '');
            
            var message = document.getElementById(componentId + questionFormName + '_2NDMESSAGE');
            text += ':&nbsp;' + message.innerHTML;
            
            newPar.innerHTML = text;
            document.getElementById('formErrorTd').appendChild(newPar);
        }
    }
    else {
        var text = 'Pole ';
        var questLabel = document.getElementById(questionFormName + "_QEST_LABEL" + componentId);
        if (questLabel != null) {
            text += '<span>' + questLabel.innerHTML + '</span>';
            
            var message = document.getElementById(componentId + questionFormName + '_2NDMESSAGE');
            text += ':&nbsp;' + message.innerHTML;
            
            par.innerHTML = text;
        }
    }
}

function deleteDependantError(questionFormName){
    var td = document.getElementById('formErrorTd');
    var par = document.getElementById('p_dependant_error_' + questionFormName);
    if (par) {
        td.removeChild(par);
    }
}

function showMessage(questionFormName){
    var _output = document.getElementById(componentId + questionFormName + '_ERR');
    if (_output) {
        _output.style.display = '';
    }
    
    var questLabel = document.getElementById(questionFormName + "_QEST_LABEL" + componentId);
    if (questLabel != null) 
        questLabel.className = "questionErr";
}

function hideMessage(questionFormName){
    var _output = document.getElementById(componentId + questionFormName + '_ERR');
    if (_output) {
        _output.style.display = 'none';
    }
    
    var questLabel = document.getElementById(questionFormName + "_QEST_LABEL" + componentId);
    if (questLabel != null) 
        questLabel.className = "questionOk";
}

function applyParametersForMessage(message){
    if (message != null && errorMessagesParameters != null) {
        for (var i = 0; i < errorMessagesParameters.length; i++) {
            var regExp = new RegExp('\\{' + i + '\\}', 'g');
            message = message.replace(regExp, errorMessagesParameters[i]);
        }
        errorMessagesParameters = new Array();
    }
    
    var uselessParams = new RegExp('\\{.\\}', 'g');
    if (uselessParams.test(message)) {
        message = message.replace(uselessParams, '');
    }
    return message;
}

function addErrorParameter(parameter){
    if (errorMessagesParameters != null) {
        if (errorMessagesParameters.length > 0) {
            parameter = '<br>' + parameter;
        }
        errorMessagesParameters[errorMessagesParameters.length] = parameter;
    }
}

function validate(){
    var flag = true;
    if (validationList) {
        for (var i = 0; i < validationList.length; i++) {
            var validateObject = validationList[i];
            if (validateObject && invisible[validateObject.questionId] != 1) {
                var value = getValueQuestion(validateObject.questionId);
                
                var isFirstErrorMessage = false;
                var errorElement = document.getElementById(componentId + validateObject.questionId + '_ERR');
                if (errorElement && errorElement.style.display == 'none') {
                    isFirstErrorMessage = true;
                }
                
                var messageElement = document.getElementById(componentId + validateObject.questionId + '_MESSAGE');
                
                var baseValidation = true;
                if (validateObject.params) {
                    baseValidation = false;
                }
                else 
                    if (messageElement && questionIdOryginalErrorMessage.get(validateObject.questionId) != null) {
                        messageElement.innerHTML = questionIdOryginalErrorMessage.get(validateObject.questionId);
                    }
                
                var validationOK = false;
                
                if (!baseValidation) {
                    validationOK = validateObject.functionName(validateObject.params);
                }
                else {
                    validationOK = validateObject.functionName(value);
                }
                
                if (validationOK == false) {
                    if (!baseValidation && messageElement) {
                        if (isFirstErrorMessage) {
                            messageElement.innerHTML = validateObject.errorMessage;
                        }
                        else 
                            if (messageElement.innerHTML.indexOf(validateObject.errorMessage) >= 0) {
                                messageElement.innerHTML = validateObject.oryginalErrorMessage + validateObject.nextErrorMessage;
                            }
                    }
                    
                    if (messageElement) {
                        messageElement.innerHTML = applyParametersForMessage(messageElement.innerHTML);
                    }
                    
                    showMessage(validateObject.questionId);
                    
                    if (!baseValidation) {
                        addError(validateObject.questionId, 'simpleNotEmptyDummyMessage');
                    }
                    else {
                        addError(validateObject.questionId, value);
                    }
                    
                    flag = false;
                    gAnalyticsValidationValues[i] = 1;
                }
                else {
                    var nextErrorMessageRegExp = new RegExp(validateObject.nextErrorMessage, 'g');
                    var errorMessageRegExp = '';
                    try {
                        errorMessageRegExp = new RegExp(validateObject.errorMessage, 'g');
                    } 
                    catch (e) {
                        errorMessageRegExp = new RegExp('[A-Z][a-z][0-9]', 'g');
                    }
                    
                    if (baseValidation) {
                        hideMessage(validateObject.questionId);
                        deleteError(validateObject.questionId);
                    }
                    else {
                        if (messageElement) {
                            messageElement.innerHTML = messageElement.innerHTML.replace(nextErrorMessageRegExp, '');
                            messageElement.innerHTML = messageElement.innerHTML.replace(errorMessageRegExp, '');
                            
                            if (messageElement.innerHTML == '' || messageElement.innerHTML == '<br>' || messageElement.innerHTML == '<BR>') {
                                hideMessage(validateObject.questionId);
                                deleteError(validateObject.questionId);
                            }
                        }
                    }
                    gAnalyticsValidationValues[i] = 0;
                }
            }
            else {
                hideMessage(validateObject.questionId);
                deleteError(validateObject.questionId);
                gAnalyticsValidationValues[i] = 0;
            }
        }
        var captchaErrorField = document.getElementById('captchaError');
        if(capchaError == true){
        	flag = false;
        	var par = document.getElementById('p_error_captcha');
        	if(!par){
        		par = document.createElement('p');
        		par.id = 'p_error_captcha';
        		par.className = 'errorP';
        		var text = 'Wynik działania matematycznego z obrazka nie został poprawnie wpisany.';
            	par.innerHTML = text;
        		document.getElementById('formErrorTd').appendChild(par);
        	}else{
        		var text = 'Wynik działania matematycznego z obrazka nie został poprawnie wpisany.';
            	par.innerHTML = text;
        	}
        	
        	if(captchaErrorField){
        		captchaErrorField.style.display = '';
        	}
        	
        }else{
        	deleteError('captcha');
        	if(captchaErrorField){
        		captchaErrorField.style.display = 'none';
        	}
        }
        if (flag == false) {
            var errorDiv = document.getElementById('formErrorDiv');
            errorDiv.className = 'errorDivShow';
        }
        else {
            var errorDiv = document.getElementById('formErrorDiv');
            errorDiv.className = 'errorDivHide';
        }
    }
    return flag;
}


function validateAndSubmit(runThis, gaUrl, formId, command, action, protocol, partnerId){
	if (validate() == true) {
		if (runThis != null) {
			eval(runThis);
		}
		var locForm = document.getElementById('Form' + componentId);
		checkVisibleFields(locForm);
		if (partnerId && partnerId != null) {
			if (locForm.action.indexOf(partnerId) < 0) {
				if (locForm.action.indexOf("?") < 0) {
					locForm.action += "?";
				}
				else {
					locForm.action += "&";
				}
				locForm.action += "partnerId=" + partnerId;
			}
		}
		locForm.submit();
		showPleaseWaitPopup('popupId', 220, 70);
	}
	else {
		errValue = binaryconverter(gAnalyticsValidationValues);
		if (typeof(firstTracker)!='undefined') {
			firstTracker._trackPageview(gaUrl + 'blad_' + errValue);
		}
		if(typeof(secondTracker)!='undefined') {
            secondTracker._trackPageview(gaUrl + 'blad_' + errValue);
		}
    }
}

function checkVisibleFields(form){
    for (i = 0; i < form.length; i++) {
        stridx = form.elements[i].id.indexOf("_ANSWER");
        if (stridx > 0) {
            try {
                parrentId = form.elements[i].id.substring(0, stridx);
                if (document.getElementById(parrentId).style.display == 'none') {
                    if (form.elements[i].options) {
                        form.elements[i].selectedIndex = 0;
                    }
                    else {
                        form.elements[i].value = '';
                    }
                }
            } 
            catch (exc) {
                //przechwytujemy i kontynuujemy
            }
        }
    }
}

function binaryconverter(binarArray){
    resNumber = 0;
    if (binarArray && binarArray.length > 0) {
        for (var i = binarArray.length - 1; i > -1; i--) {
            if (binarArray[i] == 1) {
                resNumber += Math.pow(2, ((binarArray.length - 1) - i));
            }
        }
    }
    return resNumber;
}

function checkCaptcha(value, id){
	var capcha = document.getElementById(id);
	if(capcha.value == value){
		capchaError = false;
	}else{
		capchaError = true;
	}
}


