/** JavaScript Document cp1250  - ěčřýáíéůúĚČŘÝÁÍÉŮÚ
* inicializace funkci pro prihlasovaci formular 
**/

//document.addEventListener("load",function() { signup_init(); },false);

var lastRequest = 0; //udaj v milisekundach, ktery rika, kdy byl odeslan posledni request
var requestInterval = 500; //milisekundy (500 = 0.5sec)! minimalni cas na odaslani requestu (pokud prijde requestu vic, odesle se je jednou za dany cas)
var minNameChars = 3;
var minPasswordChars = 6;
var lang = lang!='undefined' ? lang : 'en' 
var helpText = ''

/** inicializace **/
function signup_init(){
	var el = document.getElementById('sign-up-form').elements
	
    var elName = document.getElementById('args-name')
    var elPass1 = document.getElementById('args-pass1')
    var elPass2 = document.getElementById('args-pass2')
    var elEmail2 = document.getElementById('args-email2')
    var elEmail1 = document.getElementById('args-email1')
    var elQuestion = document.getElementById('args-question')
    var elSelfquestion = document.getElementById('args-self-question')
    var elAnswer = document.getElementById('args-answer')
    var elCode = document.getElementById('args-code')
	
	var filled = elName.value.length > 0 ? true : false
	
    for(i=0;i<el.length;i++){
		if(el[i].type=='text' || el[i].type=='password' || el[i].type=='select-one' ){
			el[i].onblur = function onblur() { close_assist() }
			el[i].autocomplete = 'off'
			//if(el[i].type!='select-one' && !filled){
            if(!filled){
                el[i].disabled = 'disabled'
                el[i].className = 'inp disabled'
            }            
		}
	}
    
    elName.disabled = ''
    elName.className = 'inp'
    elName.focus()
    
    /** element `args-name` **/
    if(elName!=null){
    	elName.onkeyup = function (event) { 
    		if(elName.value.length>0){
                elName.value = elName.value.toCapitalCase()
                elPass1.disabled = ''
                elPass1.className = 'inp'
            }else{
                elPass1.disabled = 'disabled';
                elPass1.className = 'inp disabled'
            }
            var ev = event ? event : window.event
    		if(isValidKey(ev.keyCode) && elName.value.length>0 ){
    		    var len = testNameLength(elName.value) //test delky
    			var chr = testNameChars(elName.value) //test znaku
    			var date = new Date()
    			if(!chr.valid){
    				show_assist(elName,chr.message)
    			}else if (!len.valid){
    				show_assist(elName,len.message)
    			}else if(lastRequest+requestInterval < date.getTime()){
					close_assist()
					   //text je dostatecne dlouhy a ubehl dostatecny cas na request
					    var http = http_request()
					    if (http==null) { alert ("Browser does not support HTTP Request"); return; }
					    request = 'args[sender]=ajax&args[op]=checkname&args[name]='+elName.value
					    http.onreadystatechange = function() { checkNameResult(elName,http,false) }
					    http.open('POST', './_rsrc/ajax.php', true)
					    http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
					    http.send(request)
					    lastRequest = date.getTime()    				
    			}else{
    				close_assist()
    			}
    		}
    	}
    	elName.onblur = function (event) {
    		close_assist()
    		if(elName.value.length>0){
    			var len = testNameLength(elName.value) //test delky
    			var chr = testNameChars(elName.value) //test znaku
    			var date = new Date()
    			if(!chr.valid){
    				show_warning(elName,chr.message)
    			}else if (!len.valid){
    				show_warning(elName,len.message)
    			}else{
					close_warning(elName)
				    var http = http_request()
					if (http==null) { alert ("Browser does not support HTTP Request"); return; }
					    request = 'args[sender]=ajax&args[op]=checkname&args[name]='+elName.value
					    http.onreadystatechange = function() { checkNameResult(elName,http,true) }
					    http.open('POST', './_rsrc/ajax.php', true)
					    http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
					    http.send(request)
					    lastRequest = date.getTime()   
    			}
    		}
    	}
    	elName.onfocus = function (event) {
    		close_assist()
    		close_warning(elName)
    	}
    } 
    
    /** element `args-email1` **/
    if(elEmail1!=null){
    	elEmail1.onkeyup = function (event) { 
    		if(elEmail1.value.length>0){
                elEmail2.disabled = ''
                elEmail2.className = 'inp'
            } else {
                elEmail2.disabled = 'disabled'
                elEmail2.className = 'inp disabled'
            }
            var ev = event ? event : window.event
    		if(isValidKey(ev.keyCode) && elEmail1.value.length>0 ){
				var syn = textEmailSyntax(elEmail1.value)
				if(!syn.valid){
					show_assist(elEmail1,syn.message)
				}else{
					close_assist()
				}
    		}
    	}
    	
    	elEmail1.onblur = function (event) {
    		close_assist()
    		if(elEmail1.value.length>0 ){
    			var syn = testEmailSyntax(elEmail1.value)
    			if(!syn.valid){
    				show_warning(elEmail1,syn.message)
    			}else{
    				close_warning(elEmail1)
    				var http = http_request()
					if (http==null) { alert ("Browser does not support HTTP Request"); return; }
					    request = 'args[sender]=ajax&args[op]=checkemail&args[email]='+elEmail1.value
					    http.onreadystatechange = function() { checkNameResult(elEmail1,http,true) }
					    http.open('POST', './_rsrc/ajax.php', true)
					    http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
					    http.send(request)
					    lastRequest = date.getTime()
    			}
    		}
    	}
    	
    	elEmail1.onfocus = function (event) {
    		close_assist()
    		close_warning(elEmail1)
    	}
    }
    
    /** element `args-email2` **/
    if(elEmail2!=null){
        elEmail2.onkeyup = function (event) { 
            if(elEmail2.value.length>0){ 
                elQuestion.disabled = ''
                elQuestion.className = 'inp'
                elSelfquestion.disabled = ''
                elSelfquestion.className = 'inp'
                elAnswer.disabled = ''
                elAnswer.className = 'inp'
            } else { 
                elQuestion.disabled = 'disabled'
                elQuestion.className = 'inp disabled'
                elSelfquestion.disabled = 'disabled'
                elSelfquestion.className = 'inp disabled'
                elAnswer.disabled = 'disabled' 
                elAnswer.className = 'inp disabled'
            }
            var ev = event ? event : window.event
            if(isValidKey(ev.keyCode) && elEmail2.value.length>0 ){
                var syn = textEmailSyntax(elEmail2.value)
                if(!syn.valid){
                    show_assist(elEmail2,syn.message)
                }else{
                    close_assist()
                }
            }
        }
        
        elEmail2.onblur = function (event) {
            close_assist()
            if(elEmail2.value.length>0 ){
                var syn = testEmailSyntax(elEmail2.value)
                if(!syn.valid){
                    show_warning(elEmail2,syn.message)
                }else{
                    close_warning(elEmail2)
                    var http = http_request()
                    if (http==null) { alert ("Browser does not support HTTP Request"); return; }
                        request = 'args[sender]=ajax&args[op]=checkemail&args[email]='+elEmail2.value
                        http.onreadystatechange = function() { checkNameResult(elEmail2,http,true) }
                        http.open('POST', './_rsrc/ajax.php', true)
                        http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
                        http.send(request)
                        lastRequest = date.getTime()
                }
            }
        }
        
        elEmail2.onfocus = function (event) {
            close_assist()
            close_warning(elEmail2)
        }
    }
    
    /** element `args-password 1` **/
    if(elPass1!=null){
    	elPass1.onkeyup = function (event) {
    		if(elPass1.value.length>0){
                elPass2.disabled = ''
                elPass2.className = 'inp'
            } else {
                elPass2.disabled = 'disabled'
                elPass2.className = 'inp disabled'
            }
            var ev = event ? event : window.event
    		if(isValidKey(ev.keyCode) && elPass1.value.length>0 ){
    			var chr = testPassChars(elPass1.value) //test znaku
    			var len = testPassLength(elPass1.value) //test delky
    			if(!chr.valid){
    				show_assist(elPass1,chr.message)
    			}else if(!len.valid){
    				show_assist(elPass1,len.message)
    			}else{
    				close_assist()
    			}
    		}
    	} 
    	
    	elPass1.onblur =  function (event) {
    		close_assist()
    		var chr = testPassChars(elPass1.value) //test znaku
    		var len = testPassLength(elPass1.value) //test delky
    		if(elPass1.value.length<1 ){
    			show_warning(elPass1,retL('Heslo nesmí být prázdné.','','The password can not remain empty.'))
    		}else if(!chr.valid){
    			show_warning(elPass1,chr.message)
    		}else if(!len.valid){
    			show_warning(elPass1,len.message)
    		}else{
    			close_warning(elPass1)
    		}
    	}
    	
    	elPass1.onfocus = function (event) {
    		close_assist()
    		close_warning(elPass1)
    	}
    }
    
    /** element `args-password 2` **/
    if(elPass2!=null){
    	elPass2.onkeyup = function (event) {
    	    if(elPass2.value.length>0) {
                elEmail1.disabled = ''
                elEmail1.className = 'inp'
            } else {
                elEmail1.disabled = 'disabled'
                elEmail1.className = 'inp disabled'
            }
    		var ev = event ? event : window.event
    		if(isValidKey(ev.keyCode) && elPass2.value.length>0 ){
    			var chr = testPassChars(elPass2.value) //test znaku
//    			var len = testPassLength(elPass2.value) //test delky
    			if(!chr.valid){
    				show_assist(elPass2,chr.message)
//    			}else if(!len.valid){
//    				show_assist(elPass2,len.message)
    			}else{
    				close_assist()
    			}
    		}
    	} 
    	
    	elPass2.onblur =  function (event) {
    		close_assist()
    		var chr = testPassChars(elPass2.value) //test znaku
    		var len = testPassLength(elPass2.value) //test delky
    		if(elPass2.value.length<1 ){
    			show_warning(elPass2,retL('Heslo nesmí být prázdné.','','The password can not remain empty.'))
    		}else if(!chr.valid){
    			show_warning(elPass2,chr.message)
    		}else if(!len.valid){
    			show_warning(elPass2,len.message)
    		}else{
    			close_warning(elPass2)
    		}
    	}
    	
    	elPass2.onfocus = function (event) {
    		close_assist()
    		close_warning(elPass2)
    	}
    }
  
    /** element `elQuestion` **/
    if(elQuestion!=null){
        elQuestion.onchange = function (event) {
            if(elQuestion.selectedIndex==0){
                elSelfquestion.disabled = ''
                elSelfquestion.className = 'inp' 
                elAnswer.disabled = ''
                elAnswer.className = 'inp'
            }else{
                elSelfquestion.disabled = 'disabled'
                elSelfquestion.className = 'inp disabled' 
                elAnswer.disabled = '' 
                elAnswer.className = 'inp'
            }
        }
    }
    
    /** element `elQuestion` **/
    if(elAnswer!=null){
        elAnswer.onkeyup = function (event) {
            if(elAnswer.value.length>0){
                elCode.disabled = ''
                elCode.className = 'inp'
            } else {
                elCode.disabled = 'disabled'
                elCode.className = 'inp disabled'
            }
        }
    }
}

function checkNameResult(el,http,warning){
	if (http.readyState == 4) {
        if (http.status == 200) {
    		if(warning==true){
    			if(http.statusText.match(/^err$/)) show_warning(el,http.responseText)
     		} else {
     	  		show_assist(el,http.responseText)
     		}
        }
	}
}

function testNameLength(val){
	var ret = new Object()
	if(val.length < minNameChars){
		ret = { valid : false,
				message : retL('Přihlaovací jméno je příli krátké, minimálně by mělo být 3 písmenné.','','The name is too short, minimum is 3 characters.') 
		      }
	}else{
		ret = { valid : true,
				message : retL('Zadané přihlaovací jméno dostatečně dlouhé.','','The name lenght is long enough.') 
		      }
	}
	return ret
}

function testNameChars(val){
	var ret = new Object()
	var filter = /^[A-zâäáčďéěëíňóöôřúůüý]+$/i
    if( filter.test(val) ){
    	ret = { valid : true,
				message : retL('Valid','Valid','Valid') 
		      }
    }else{
    	ret = { valid : false,
				message : retL('Zadané přihlaovací jméno obsahuje nepovolené znaky.','','The name contains illegal characters.')
		      }    
    }
    return ret
}

function testEmailSyntax(val){
	var ret = new Object()
	var filter = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,4}(?:\.[a-z]{2})?)$/i
    if( filter.test(val) ){
    	ret = { valid : true,
				message : retL('Valid','Valid','Valid') 
		      }		
    }else{
    	ret = { valid : false,
				message : retL('Nekorektní e-mailová adresa.','','Improper e-mail address.')
		      }  
    }
    return ret
}

function testPassChars(val){
	var ret = new Object()
	var filter = /^\w+$/
    if( filter.test(val) ){
    	ret = { valid : true,
				message : retL('Valid','Valid','Valid') 
		      }
    }else{
    	ret = { valid : false,
				message : retL('Zadané heslo obsahuje nepovolené znaky.','','The password contains illegal characters.')
		      }    
    }
    return ret
}

function testPassLength(val){
	var ret = new Object()
	if(val.length < minPasswordChars){
		ret = { valid : false,
				message : retL('Zadané heslo je příli krátké.','','The password is too short, make it at least 6 characters long.') 
		      }
	}else{
		ret = { valid : true,
				message : retL('Zadané je heslo dostatečně dlouhé.','','The password lenght is sufficient.') 
		      }
	}
	return ret
}

function isValidKey(keyCode){
	// kody tlacitek, ktere pri kterych nebude odesilan request
	var noKeys = Array(9,13,16,17,18,19,20,27,37,38,39,40,44,46,91,92,93,112,113,114,115,116,117,118,119,120,121,122,123,144,145)
	return inArray(noKeys,keyCode) ? false : true
}

function show_assist(el,text){
    var pos = findPos(el)
    //if(text=='') return
    var assist = document.getElementById('ajaxassist')        
    if(assist==null){
        var assist = document.createElement('DIV');
	    assist.id = 'ajaxassist';
	    assist.className='ajaxassist';
        document.body.appendChild(assist);
    }
    assist.style.top = pos.y+'px'
    assist.style.left = (pos.x+el.offsetWidth+3)+'px'
    assist.innerHTML = '<div class="ajaxassisttop">&nbsp;</div><div id="ajaxassistbody">'+text+'</div><div class="ajaxassistbot">&nbsp;</div>'
    assist.style.display = 'block'
}

function show_warning(el,text){
    var pos = findPos(el)
    //if(text=='') return
    var warn = document.getElementById(el.id+'-ajaxwarning')   
    if(warn==null){
        var warn = document.createElement('DIV')
	    warn.id = el.id+'-ajaxwarning'
	    warn.className='ajaxwarning'
        document.body.appendChild(warn)
    }
    warn.style.top = (pos.y)+'px'
    warn.style.left = (pos.x+el.offsetWidth+3)+'px'
    warn.innerHTML = text
    warn.style.display = 'block'
}

/** funkce volana pri ztrate fokusu vsech inputu na strance signup **/
function close_assist(){
    var assist = document.getElementById('ajaxassist')        
    if(assist!=null){
        assist.style.display = 'none'
    }	
}

/** funkce volana pri ztrate fokusu vsech inputu na strance signup **/
function close_warning(el){
    var warn = document.getElementById(el.id+'-ajaxwarning')        
    if(warn!=null){
        warn.style.display = 'none'
    }	
}

/** funkce volana z formulare preorder, pri vyplneni zeme (step 1) **/
function preorderFirstCheck(){
    var ucc = document.getElementById('id-country')
    var gcc = document.getElementById('id-cc')
    var eula = document.getElementById('id-eula')
    var tou = document.getElementById('id-tou')
    var ret = true
    //ret &= preorderCcCheck(ucc,gcc)
    preorderCcCheck(ucc,gcc)
    ret &= preorderEulaCheck(eula)
    ret &= preorderTouCheck(tou)
    //ret &= false
    return ret > 0 ? true : false
}

function preorderCcCheck(obj,gcc){
    var ret = true
    if(obj.value!=gcc.value){
        show_warning(obj,retL('Jste si jist, e údaj je správně?','','you sure this is a valid entry?'))
        ret &= false
    }else{
        close_warning(obj)
    }
    return ret > 0 ? true : false
}

function preorderEulaCheck(obj){
    var ret = true
    if(!obj.checked){
        show_warning(obj,retL('Chybí souhlas s EULA','','You need to agree EULA'))
        ret &= false
    }else{
        close_warning(obj)
    }  
    return ret > 0 ? true : false  
}

function preorderTouCheck(obj){
    var ret = true
    if(!obj.checked){
        show_warning(obj,retL('Chybí souhlas s ujednáním Term Of Use','','You need to agree Term Of Use'))
        ret &= false
    }else{
        close_warning(obj)
    }  
    return ret > 0 ? true : false  
}
/////////////////////////////////////////////////////////////////////////////////////////////
function http_request() {
    var http_request=null
    if (window.XMLHttpRequest) {
        http_request = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        try {
          http_request = new ActiveXObject("Msxml2.XMLHTTP")
        } catch (eror) {
          http_request = new ActiveXObject("Microsoft.XMLHTTP")
        }
    }

    return http_request
}
/////////////////////////////////////////////////////////////////////////////////////////////

/* function inArray(arr,val) - obdoba funkce z php, kdy se v array "arr" hleda hodnota "val", podle toho vraci true/false */
function inArray(arr,val){
    for(prop in arr){
        if(arr[prop]==val) return true;
    }
    return false;
}

function findPos(obj){
	var ret = new Object()
	ret = { x : findPosX(obj),
		  	y : findPosY(obj)
		  } 
	return ret
}

function findPosX(obj) {
    var curleft = 0;
    if (obj.offsetParent) {
        while (obj.offsetParent) {
            curleft += obj.offsetLeft
            obj = obj.offsetParent;
        }
    } else if (obj.x)
        curleft += obj.x;
    return curleft;
}

function findPosY(obj) {
	var curtop = 0;
    if (obj.offsetParent) {
		while (obj.offsetParent) {
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	} else if (obj.y)
		curtop += obj.y;
    return curtop;
}

String.prototype.toCapitalCase = function() {
    var re = /\s/;
    var words = this.split(re);
    re = /(\S)(\S*)/;
    for (i = words.length - 1; i >= 0; i--) {
        re.exec(words[i]);
        words[i] = RegExp.$1.toUpperCase() + RegExp.$2.toLowerCase();
    }
    return words.join(' ');
}

function retL(){
    switch(lang){
        case 'cs' : return arguments[0]; break;
        case 'de' : return arguments[1]; break;
        case 'en' : return arguments[2]; break;
        case 'pl' : return arguments[3]; break;
        default   : return arguments[0];
    }
}

function varExport(){
    var temp = ''
    var log = document.getElementById('ajaxlog')        
    if(log==null){
        var log = document.createElement('DIV');
	    log.id = 'ajaxlog';
	    log.className='';
        log.style.position = 'absolute'
        log.style.zIndex = '1000'
        log.style.top = '600px'
        log.style.background = '#ffffaa'
        log.style.padding = '3px'
        log.style.border = '1px solid #ffff66'
        document.body.appendChild(log);
    }

    for (i=0;i<arguments.length;i++){
        for(prop in arguments[i]) temp+=prop+' = '+arguments[i][prop]+'<br />\n'
    }

    document.getElementById('ajaxlog').innerHTML = temp
}
