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

// ustawia tablice id pol walidowanych dla google Analytics
function setGAnalyticsValidationFilter(filter) {	
	gAnalyticsValidationFilter = filter;	
}

// sprawdza czy ustawiona jest tablica filtracyjna pol walidacyjnych GA 
function isGAnalyticsValidationFilterEnabled(){
	var isEnabled = false;
	if (gAnalyticsValidationFilter) {
		isEnabled = true;
	}
	return isEnabled;
}

// zwraca indeks w tablicy gAnalyticsValidationValues
function getGAnalyticsValidationValuesIndex(questionId){
	return gAnalyticsValidationFilter[questionId];		
}

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){
		
		// czy filtrowanie odpowiedzi walidacyjnych jest filtrowane ?
		var gaValidationFilterEnable = isGAnalyticsValidationFilterEnabled();
		
		gAnalyticsValidationValues = new Array();
		
		for(var i= 0; i < validationList.length; i++){
			var validateObject = validationList[i];			
			
			if(validateObject && invisible[validateObject.questionId] != 1){
				var value = getValueQuestion(validateObject.questionId);
				
				var gaValuesIndex = i;
				if(gaValidationFilterEnable){
					gaValuesIndex = getGAnalyticsValidationValuesIndex(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.match(validateObject.errorMessage) == null) {
                          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;   
                    
                    // ustawiamy tylko gdy index nie rzuci wyjatku
                    if(gaValuesIndex != undefined){        
                    	gAnalyticsValidationValues[gaValuesIndex] = 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);
                          }
                        }
                    }
                    
                    // if dla wartosci odfiltrowanych, wtedy gaValuesIndex != undefined
                	if(gaValuesIndex != undefined){
                		// jezeli wczesniej walidacja podstawowa ustawila blad to nie mozna ustawic '0 = poprawnie zwalidowany'
                		if(gAnalyticsValidationValues[gaValuesIndex]!=1){
                			gAnalyticsValidationValues[gaValuesIndex] = 0;
                		}
                	}
				}
			} else {
                hideMessage(validateObject.questionId);
                deleteError(validateObject.questionId);
                // if dla wartosci odfiltrowanych, wtedy gaValuesIndex != undefined
                if(gaValuesIndex != undefined){
            		// jezeli wczesniej walidacja podstawowa ustawila blad to nie mozna ustawic '0 = poprawnie zwalidowany'
                	if(gAnalyticsValidationValues[gaValuesIndex]!=1){
                		gAnalyticsValidationValues[gaValuesIndex] = 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 validateOnly(runThis, gaUrl){
	var validationResult = validate();
	if(validationResult){
		if(runThis!=null) {
           	eval(runThis);
        }
		// na wszelki wypadek zeby inny formularz nie skorzystal z aktualnej listy filtrow 
		gAnalyticsValidationFilter = null;		
        // showPleaseWaitPopup('popupId',220,70);
	} else {
    	if(firstTracker && secondTracker) {
    		errValue = binaryconverter(gAnalyticsValidationValues);
    		firstTracker._trackPageview(gaUrl + 'blad_' + errValue);
    		secondTracker._trackPageview(gaUrl + 'blad_' + errValue);
    	}
    }
	return validationResult;
}

function validateAndSubmit(runThis, gaUrl, formId, command, action, protocol, partnerId){
	if(validate() == true){
		if(runThis!=null) {
           	eval(runThis);
        }
		// na wszelki wypadek zeby inny formularz nie skorzystal z aktualnej listy filtrow 
		gAnalyticsValidationFilter = null;
		
		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;
	}
}
