﻿// inCMS module: form

if (location.href.indexOf('/en/') != -1)
	inCMS.addToLang('forms',{rqf:'required',
		mlf:'Maximum length allowed is',
		chrs:'chars',
		badFormat:'is not in the correct format.',
		priceFrom:'Price from',
		priceTo:'Price to'});
else
	inCMS.addToLang('forms',{rqf:'musí být vyplněn',
		mlf:'Můžete napsat maximálně',
		chrs:'znaků',
		badFormat:'není ve správném formátu',
		priceFrom:'Cena od',
		priceTo:'Cena do'});

var forms = {
	charWidth : 8, // průměrná šířka jednoho znaku v px pro výpočet celkové šířky prvků input[text], textearea a select
	horizontalPaddingAndBorder : 12, // součet border-left + padding-left + padding-right + border-right u prvku input[text] pro výpočet celkové šířky prvku select
	lineHeight: 14 // výška řádku pro výpočet výšky prvku textarea
	};

// Inicializační metoda, spuštěná až po načtení stránky
inCMS.addEvent(window,'onload','forms.postInit();');
forms.postInit = function () {
	inCMS.addEventToForm('input','format:','onblur','forms.validateOne(o);');
//	inCMS.addEventByClass(document,'input','required:','onblur','forms.validateOne(o);');
	inCMS.addEventToForm('textarea','format:','onblur','forms.validateOne(o);');
//	inCMS.addEventByClass(document,'textarea','required:','onblur','forms.validateOne(o);');
//	inCMS.addEventByClass(document,'select','required:','onblur','forms.validateOne(o);');
	inCMS.addEventToForm('input','focusStyle','onfocus','if (!o.disabled) o.className += \' text-focus\';');
	inCMS.addEventToForm('input','focusStyle','onblur','o.className = o.className.replace(\'text-focus\',\'\');');
	inCMS.addEventToForm('textarea','focusStyle','onfocus','if (!o.disabled) o.className += \' text-focus\';');
	inCMS.addEventToForm('textarea','focusStyle','onblur','o.className = o.className.replace(\'text-focus\',\'\');');
	var textareas = inCMS.getElementsByClass(document,'textarea','maxLength:');
	for (var i=0; i<textareas.length; i++) {
		var textarea = textareas[i];
		var partClass = textarea.className.split(' ');
		var maxLength = partClass[inCMS.findFieldIndexesByValue(partClass,'maxLength:',true)].split(':')[1];
		inCMS.addEvent(textarea,'onclick','MaxLengthCount(o,' + maxLength  + ');');
		inCMS.addEvent(textarea,'onmousemove','MaxLengthCount(o,' + maxLength  + ');');
		inCMS.addEvent(textarea,'onfocus','MaxLengthCount(o,' + maxLength  + ');');
		inCMS.addEvent(textarea,'onblur','MaxLengthCount(o,' + maxLength  + ');');
		inCMS.addEvent(textarea,'onkeyup','MaxLengthCount(o,' + maxLength  + ');');
		inCMS.addEvent(textarea,'onchange','MaxLengthCount(o,' + maxLength  + ');');
		inCMS.addEvent(textarea,'onafterupdate','MaxLengthCount(o,' + maxLength  + ');');
		var progressBar = document.createElement('div');
		progressBar.id = textarea.id + '_pBar';
		progressBar.className = 'progressBar';
		textarea.parentNode.appendChild(progressBar);
		}
	var focusElements = document.forms[0];	
	for (var i=0; i<focusElements.length; i++) {
		if (focusElements[i].className.indexOf('onloadFocus') != -1) {
		    if (!(focusElements[i].readonly || focusElements[i].disabled)) {
			    focusElements[i].focus();
			    if (focusElements[i].className.indexOf('focusStyle') != -1)
				    focusElements[i].select(); 
				}
			break;
			}
		}
	inCMS.setPageMargins();
	if (typeof(ValidatorUpdateDisplay) != "undefined") {
		var __funcbody, newfunc;
		__funcbody = ValidatorUpdateDisplay.toString();
		__funcbody = __funcbody.substring(__funcbody.indexOf("{") + 1, __funcbody.lastIndexOf("}"));
		newfunc = new Function("val", "ChangeLabelColor(val); " + __funcbody );
		ValidatorUpdateDisplay = newfunc;
		}
	if (typeof(ValidationSummaryOnSubmit) != "undefined") {
		var __funcbody, newfunc;
		__funcbody = ValidationSummaryOnSubmit.toString();
		__funcbody = __funcbody.substring(__funcbody.indexOf("{") + 1, __funcbody.lastIndexOf("}"));
		newfunc = new Function("validationGroup", __funcbody + "inCMS.setPageMargins();");
		ValidationSummaryOnSubmit = newfunc;
		}
	}

// Inicializační metoda, spouštěná při načítání modulu
forms.init = function (number) {
	var elements = document.forms[0];	
	for (var i=0; i<elements.length; i++) {
		var width = 25;
		if (elements[i].className.indexOf('focusStyle') != -1) {
			if (elements[i].nodeName.toLowerCase() == 'input') width = forms.charWidth * elements[i].size;
			else if (elements[i].nodeName.toLowerCase() == 'textarea') {
				width = forms.charWidth * elements[i].cols;
				var height = forms.lineHeight * elements[i].rows;
				inCMS.setObjStyle(elements[i],'height',height+'px');
				}
			inCMS.setObjStyle(elements[i],'width',width+'px');
			}
		if (elements[i].nodeName.toLowerCase() == 'select' && elements[i].className.indexOf('width:') != -1) {
			var partClass = elements[i].className.split(' ');
			var value = partClass[inCMS.findFieldIndexesByValue(partClass,'width:',true)].split(':')[1];
			size = forms.charWidth * value;
			inCMS.setObjStyle(elements[i],'width',size + forms.horizontalPaddingAndBorder + 'px');
			}
		}
	}

forms.validateOne = function (field) {
	var obj = inCMS.getObj(field);
	var isRequired = false;
	if (obj.className.indexOf('required:') != -1) {
		var partClass = obj.className.split(' ');
		if (obj.parentNode.parentNode.getElementsByTagName('th').length == 1) {
			var label = obj.parentNode.parentNode.getElementsByTagName('th')[0].getElementsByTagName('label')[0];
			}
		else {
			var label = null;
			}
		isRequired = true;
		var okRequired = obj.value != '';
		if (!okRequired) {
			//if (label) label.className = 'red';
			field.className += ' red';
			}
		else {
			//if (label) label.className = '';
			field.className = field.className.replace('red',' ');
			}
		}
	if (obj.className.indexOf('format:') != -1) {
		var partClass = obj.className.split(' ');
		var type = partClass[inCMS.findFieldIndexesByValue(partClass,'format:',true)].split(':')[1];
		if (obj.parentNode.parentNode.getElementsByTagName('th').length == 1) {
			var label = obj.parentNode.parentNode.getElementsByTagName('th')[0].getElementsByTagName('label')[0];
			}
		else {
			var label = null;
			}
		var okFormat = true;
		switch (type) {
			case 'date' : okFormat = forms.validateDate(obj); break;
			case 'number' : okFormat = forms.validateNumber(obj); break;
			case 'fullName' : okFormat = forms.validateFullName(obj); break;
			case 'telephone' : okFormat = forms.validateTelephone(obj); break;
			case 'email' : okFormat = forms.validateEmail(obj); break;
			case 'url' : okFormat = forms.validateUrl(obj); break;
			}
		if (!okFormat || (isRequired && !okRequired)) {
			//if (label) label.className = 'red';
			field.className += ' red';
			}
		else {
			//if (label) label.className = '';
			field.className = field.className.replace('red',' ');
			}
		}
	}

forms.validateAll = function (number) {
	var elements = document.forms[0];
	var errorMessage = '';	
	for (var i=0; i<elements.length; i++) {
		var isRequired = false;
		if (elements[i].className.indexOf('required:') != -1) {
			var partClass = elements[i].className.split(' ');
			var index = partClass[inCMS.findFieldIndexesByValue(partClass,'required:',true)].split(':')[1];
		    if (index == number) {
				if (elements[i].parentNode.parentNode.getElementsByTagName('th').length == 1) {
					var label = elements[i].parentNode.parentNode.getElementsByTagName('th')[0].getElementsByTagName('label')[0];
					}
				else {
					var label = null;
					}
				isRequired = true;
				var okRequired = elements[i].value != '';
				if (!okRequired) {
					if (label) {
						label.className = 'red'; 
						errorMessage += label.innerHTML.replace(': *','') + ' ' + inCMS.res.forms.rqf + '.<br />';
						}
					else {
						errorMessage += '? ' + inCMS.res.forms.rqf + '.<br />';
						}
					}
				else {
					if (label) label.className = '';
					}
				}
			}
		if (elements[i].className.indexOf('format:') != -1) {
			var partClass = elements[i].className.split(' ');
			var type = partClass[inCMS.findFieldIndexesByValue(partClass,'format:',true)].split(':')[1];
			var index = partClass[inCMS.findFieldIndexesByValue(partClass,'format:',true)].split(':')[2];
		    if (index == number) {
				if (elements[i].parentNode.parentNode.getElementsByTagName('th').length == 1) {
					var label = elements[i].parentNode.parentNode.getElementsByTagName('th')[0].getElementsByTagName('label')[0];
					}
				else {
					var label = null;
					}
				var okFormat = true;
				switch (type) {
					case 'date' : okFormat = forms.validateDate(elements[i]); break;
					case 'number' : okFormat = forms.validateNumber(elements[i]); break;
					case 'fullName' : okFormat = forms.validateFullName(elements[i]); break;
					case 'telephone' : okFormat = forms.validateTelephone(elements[i]); break;
					case 'email' : okFormat = forms.validateEmail(elements[i]); break;
					case 'url' : okFormat = forms.validateUrl(elements[i]); break;
					}
				if (!okFormat) {
					if (label) {
						errorMessage += label.innerHTML.replace(isRequired? ': *' : ':','') + ' ' + inCMS.res.forms.badFormat + '.<br /><span class=\'roundedCorner roundedCorner-8-ne\'></span><span class=\'roundedCorner roundedCorner-8-se\'></span><span class=\'roundedCorner roundedCorner-8-sw\'></span><span class=\'roundedCorner roundedCorner-8-nw\'></span>';
						}
					else {
						errorMessage += (elements[i].id=='ctl00_TopPanel_tbxPriceFrom' ? inCMS.res.forms.priceFrom : (elements[i].id=='ctl00_TopPanel_tbxPriceTo' ? inCMS.res.forms.priceTo : '')) + ' ' + inCMS.res.forms.badFormat + '.<br /><span class=\'roundedCorner roundedCorner-8-ne\'></span><span class=\'roundedCorner roundedCorner-8-se\'></span><span class=\'roundedCorner roundedCorner-8-sw\'></span><span class=\'roundedCorner roundedCorner-8-nw\'></span>';
						}
					}
				if (!okFormat || (isRequired && !okRequired)) {
					//if (label) label.className = 'red'; 
					elements[i].className += ' red';
					}
				else {
					//if (label) label.className = '';
					elements[i].className = elements[i].className.replace('red',' ');
					}
				}
			}
		}
	if (errorMessage != '') {
		inCMS.getObj('ctl00_TopPanel_vsTotal').innerHTML = errorMessage;
		inCMS.displayObj('ctl00_TopPanel_vsTotal',true);
		var panel = inCMS.getElementsByClass('page','div','navigationPanel')[0];
		if (inCMS.getObj('ctl00_ItemsPanel_divContent')) {
			inCMS.setObjStyle('ctl00_ItemsPanel_divContent','marginTop',(panel.offsetHeight+80) + 'px');
			}
		inCMS.setPageMargins();
		return false;
		}
	else {
		inCMS.displayObj('ctl00_TopPanel_vsTotal',false);
		var panel = inCMS.getElementsByClass('page','div','navigationPanel')[0];
		if (inCMS.getObj('ctl00_ItemsPanel_divContent')) {
			inCMS.setObjStyle('ctl00_ItemsPanel_divContent','marginTop',(panel.offsetHeight+80) + 'px');
			}
		inCMS.setPageMargins();	
		return true;
		}
	}

forms.validateDate = function (obj) {
	var date = obj.value;
	if (date == '') return true;
	var dateField = new Array();
	if (date.indexOf('.') != -1) {
		dateField = date.split('.');	
		}
	else {
		dateField = date.split('/');	
		dateField[0] = date.split('/')[1];
		dateField[1] = date.split('/')[0];
		}
	var testDate = new Date();
	testDate.setDate(1);
	var ok = true;
	if (dateField.length==3 && dateField[2].length==4) {
		testDate.setFullYear(dateField[2]);
		testDate.setMonth(dateField[1]-1);
		testDate.setDate(dateField[0]);
		if (testDate.getFullYear()!=dateField[2] || testDate.getMonth()!=dateField[1]-1 || testDate.getDate()!=dateField[0])
			ok = false;
		}
	else ok = false;
	return ok;
	}

forms.validateNumber = function (obj) {
	if (obj.value == '') return true;
    var RegExp = /^[\-]{0,1}[0-9]*([\.][0-9]){0,1}[0-9]*$/;
    return (obj.value.search(RegExp) == 0);
	}

forms.validateFullName = function (obj) {
	if (obj.value == '') return true;
    var RegExp = /^[a-zA-Zěščřžýáíé]{2,15}([ ]{1}[a-zA-Zěščřžýáíé]{2,20}){1,2}$/;
    return (obj.value.search(RegExp) == 0);
	}
	
forms.validateTelephone = function (obj) {
	if (obj.value == '') return true;
    var RegExp = /^([+]{0,1}[0-9]{9,14}){0,1}$/;
    return (obj.value.search(RegExp) == 0);
	}

forms.validateEmail = function (obj) {
	if (obj.value == '') return true;
    var RegExp = /^[_\w\.\-]+@[\w\.-]+\.[a-z]{2,6}$/;
    return (obj.value.search(RegExp) == 0);
	}

forms.validateUrl = function (obj) {
	if (obj.value == '') return true;
    var RegExp = /^(http:\/\/){1}$/;
    return (obj.value.search(RegExp) == 0);
	}

// ASP.NET Validator
function DoChangeLabelColor(val, lbl) {		
		// Find label through naming rule       
        var k, value;
        // Find out all validators associated
        var vals = new Array();
        for(k=0; k < Page_Validators.length; k++){
            if(Page_Validators[k].controltovalidate == val.controltovalidate)
                vals.push(Page_Validators[k]);
        }
        //Determine if some validator fails
        value = true;
        for(k=0; k < vals.length;k++)
            value = (value && vals[k].isvalid);
        // Change label text color
        if(value){            			           
            lbl.className = lbl.className.replace('red',' '); // normal color, black
        }else{
			if (lbl.className.indexOf('red') == -1)
                lbl.className += ' red'; // error color, red
        }
	}

// Fce na výpočet aktuální velikosti obsahu <textarea>
// parametry: odkaz na daný prvek <textarea>, maximální počet znaků
function MaxLengthCount(fieldObj,fieldMaxLength) {
	if (!MaxLengthLock) {
		MaxLengthLock = true;
		if (fieldObj.value.length > fieldMaxLength) {
			alert(inCMS.res.forms.mlf + ' ' + fieldMaxLength + ' ' + inCMS.res.forms.chrs + '.');
			fieldObj.value = fieldObj.value.substring(0,fieldMaxLength);
			}
		inCMS.getObj(fieldObj.id + '_pBar').style.width = Math.round(fieldObj.value.length*(fieldObj.offsetWidth/fieldMaxLength)) + 'px';
		MaxLengthLock = false;
		}
	}
var MaxLengthLock = false; // pomocný příznak, který signalizuje právě probíhající výpočet

// ASP.NET Validator
function ChangeLabelColor(val){		
    if (val.controltovalidate) {    		
       DoChangeLabelColor(val, inCMS.getObj(val.controltovalidate));             
	    }
	}

// vlastní funkce pro FireDefaultButton
// opravuje chování pro LinkButton na FF
function WebForm_FireDefaultButtonEx(event, button) {
	var target = event.srcElement ? event.srcElement : event.target;
	if (event.keyCode == 13 && target.tagName.toLowerCase() != "textarea") {
		var defaultButton = inCMS.getObj(button);
		if (defaultButton) {
			if (inCMS.browser.IE || defaultButton.tagName.toLowerCase() != "a") defaultButton.click();
			else {
				eval(defaultButton.href);
				}
			return false;
			}
		}
	}
