var validate;

function validate(field, message, var2){     

    // Defines chars that are accepted in strings
    var special_chars = "áàãââäæåçéèêëìíîïñòóôõöøùúûüýÿðÐ";
    var all_chars = "\\w" + special_chars;
	
    // Defines zip code interval
    var zipcode_min_chars = 4;
    var zipcode_max_chars = 5;
	
    // Defines how many digitals a phonenummer contains
    var phone_min_chars = 6;
    var phone_max_chars = 8;
	
    // Defines how many digitals a company registration nummer contains
    var company_reg_nr_min_chars = 8;
    var company_reg_nr_max_chars = 8;

    switch(field.className){
        case "validate_subdomain":
            var ex = "^[0-9a-z][0-9a-z-]{1,61}[0-9a-z]$";
            var regExpObj = new RegExp(ex, "i");
            var result = regExpObj.test(field.value);
            if(result){
                return true;
            } else {
                return false;
            }
            break;
        case "validate_domain_ip":
            var ex = "^([a-z0-9æøåäüöé]([-a-z0-9æøåäüöé]*[a-z0-9æøåäüöé])?\\.)+((a[cdefgilmnoqrstuwxz]|aero|arpa)|(b[abdefghijmnorstvwyz]|biz)|(c[acdfghiklmnorsuvxyz]|cat|com|coop)|d[ejkmoz]|(e[ceghrstu]|edu)|f[ijkmor]|(g[abdefghilmnpqrstuwy]|gov)|h[kmnrtu]|(i[delmnoqrst]|info|int)|(j[emop]|jobs)|k[eghimnprwyz]|l[abcikrstuvy]|(m[acdghklmnopqrstuvwxyz]|mil|mobi|museum)|(n[acefgilopruz]|name|net)|(om|org)|(p[aefghklmnrstwy]|pro)|qa|r[eouw]|s[abcdeghijklmnortvyz]|(t[cdfghjklmnoprtvwz]|travel)|u[agkmsyz]|v[aceginu]|w[fs]|y[etu]|z[amw])$";
            var regExpObj = new RegExp(ex, "i");
            var result = regExpObj.test(field.value);
            if(result){
                return true;
            } else {
                var ex = "^((2[0-5]{2}|1[0-9]{2}|[0-9]{1,2})\.){3}(2[0-5]{2}|1[0-9]{2}|[0-9]{1,2})$";
                var regExpObj = new RegExp(ex, "i");
                var result = regExpObj.test(field.value);
                if(result){
                    return true;
                } else {
                    return false;
                }
            }
            break;
        //Address
        case "validate_address":
            var ex = "^[a-z0-9"+special_chars+"\\.,\\-\\s]{4,}$";
            var regExpObj = new RegExp(ex, "i");
            var result = regExpObj.test(field.value);
            if (result){
                return true;
            } else {
                return false;
            }
            break;
	
        //Url
        case "validate_url":
            if (field.value.length < 1){
                return false;
            }
            if (field.value.substring(0,7)!="http://" && field.value.substring(0,8)!="https://"){
                return false;
            }
            return true;
            break;
	      
        // Text
        case "validate_text":
            if(field.value.length < 1){
                return false;
            }
            else {
                return true;
            }
            break;
		
        // Numeric
        case "validate_numeric_non_zero":
            var ex = "^\\d+$";
            var regExpObj = new RegExp(ex);
            var result = regExpObj.test(field.value);
            if(result){
                var result_int = parseInt(field.value);
                if (result_int <= 0) {
                    return false;
                } else {
                    return true;
                }
            } else {
                return false;
            }
            break;

        // Name
        case "validate_name":
            var ex = "^[\\D0-9]{2,}[\\s\\D0-9]*$";
            //var ex = "^[-'"+special_chars+"a-z0-9\\.\\s]{2,}$";
            var regExpObj = new RegExp(ex, "i");
            var result = regExpObj.test(field.value);
            if(result){
                return true;
            } else {
                return false;
            }
            break;
			
        // Website
        case "validate_website":
            if(field.value.length < 1){
                return false;
            }
            else {
                return true;
            }
            break;
			
        // Email
        case "validate_email":
            var ex = "^["+ all_chars +"]["+ all_chars +"\\.\\-\\+]*@["+ all_chars +"]["+ all_chars +"\\.\\-]*\\.["+ all_chars +"]{2}["+ all_chars +"\\.\\-\\/]*$";
            var regExpObj = new RegExp(ex, "i");
            var result = regExpObj.test(field.value);
            if(result){
                return true;
            }
            else {
                return false;
            }
            break;
			
        // Email prefix
        case "validate_email_prefix":
            var ex = "^\\w[\\w\.\-]*\\w$";
            var regExpObj = new RegExp(ex, "i");
            var result = regExpObj.test(field.value);
            if(result){
                return true;
            }
            else {
                return false;
            }
            break;
    
        // Phone
        case "validate_phone":
            if(field.value.length < phone_min_chars){
                return false;
            }
            else {
                return true;
            }
            break;
			
        // EAN
        case "validate_ean":
			
            if(!(field.value*1) || field.value.length!=13){
                return false;
            }
            else {
                return true;
            }
            break;
		
        // Company registration number
        case "validate_company_reg_nr":
            var ex = "^\\d{" + company_reg_nr_min_chars + "," + company_reg_nr_max_chars + "}$";
            var regExpObj = new RegExp(ex, "i");
            var result = regExpObj.test(field.value);
            if(result){
                return true;
            } else {
                return false;
            }
            break;
		
        // Selected box
        case "validate_selectbox":
            if(field.value.length < 1){
                return false;
            } else {
                return true;
            }
            break;
		
        // Radio
        case "validate_radio":
            var radio_group = document.getElementsByName(field.name);
            for(var i = 0; i < radio_group.length; i++){
                if(radio_group[i].checked==true){
                    return true;
                    break;
                }
            }
            return false;
            break;
			
        // Google Analytics
        case "validate_google_analytics":
            if(field.value.length != 178){
                return false;
            }
            else {
                return true;
            }
            break;
			
        // Checkbox
        case "validate_checkbox":
            if(field.checked == true){
                return true;
            }
            else {
                return false;
            }
            break;
		
        // Checkbox
        case "validate_checkbox_one_minimum":

            var allFormsTmp = document.forms;
            var iLoop = 0;
            var tmpElementName = "";
			
            // checkbox group name
            var tmpA = field.name.split('_');
            var tmpCheckboxGroupName = tmpA[0]+'_'+tmpA[1]+'_'+tmpA[2];
            var tmpCheckboxGroupNameLength = tmpCheckboxGroupName.length;
            var tmpCheckedCounter = 0;
			
			
            // loop all (any) forms on the page	and find related checkboxes
            for (iLoop; iLoop < allFormsTmp.length; iLoop++){
                formTmp = allFormsTmp[iLoop];
                iLoopInner = 0;
                for (iLoopInner; iLoopInner<formTmp.elements.length; iLoopInner++){
					
                    // element name
                    tmpElementName = formTmp.elements[iLoopInner].name;
                    tmpElementNameShort = tmpElementName.substring(0,tmpCheckboxGroupNameLength); // this is what the short version that potentiall matches the checkbox group name
				
                    if (tmpElementNameShort === tmpCheckboxGroupName){
                        if (formTmp.elements[iLoopInner].checked){
                            tmpCheckedCounter++;
                        }
                    }
                }
            }
			
            // one or more checkboxes in the group were clicked
            if (tmpCheckedCounter>0){
                return true;
            }
            else{
                return false;
            }
			
            break;
		
        //Postal code and city-name
        case "validate_postal_city":
            //var ex = "^\\d{" + zipcode_min_chars + "," + zipcode_max_chars + "}\\s["+ all_chars +"+.\\s?]+$";
            //var ex = "^\\d{" + zipcode_min_chars + "," + zipcode_max_chars + "}[\\s]{1}.+";
            //var ex = "^[a-z0-9"+special_chars+"\\.\\-\\s]{3,}$";
            //var ex += "(([0-9\\-]{3,}[\\s]+[a-z"+special_chars+"\\.\\-]+)|([a-z"+special_chars+"\\.\\-]+[\\s]+[0-9\\-]{3,})) ";
            var ex = "([a-zA-Z"+special_chars+"\\s\\.]+[0-9]+)|([0-9]+[a-zA-Z"+special_chars+"\\s\\.]+[a-zA-Z"+special_chars+"0-9]+$)";
			
            var regExpObj = new RegExp(ex, "i");
            var result = regExpObj.test(field.value);
            if(result){
                return true;
            }
            else {
                return false;
            }
            break;
		
        // Username
        case "validate_username":
            var ex = "^\\w+[-]?\\w+$";
            var regExpObj = new RegExp(ex, "i");
            var result = regExpObj.test(field.value);
				
            if(field.value.length < 2){
                return false;
            }
						
            if(!result){
                if (document.getElementById(field.name+'_div')){
                    document.getElementById(field.name+'_div').innerHTML = "";
                }
                return false;
            }
            else{

                var username_taken;
                username_taken=false;
				
                var http = false;
                if(navigator.appName == "Microsoft Internet Explorer") {
                    http = new ActiveXObject("Microsoft.XMLHTTP");
                } else {
                    http = new XMLHttpRequest();
                }
			  
                http.abort();
  			
                var validate_file=document.forms[0].root.value+"/Systemfiles/validate_username.php?name=";
                http.open("GET", validate_file + field.value, true);
		        
                http.onreadystatechange=function() {
				
                    if(http.readyState == 4) {

                        if (http.responseText==-1){
						
                            if (message && document.getElementById(field.name+'_div')){
                                document.getElementById(field.name+'_div').innerHTML = "<span id=\"warn\">"+message+"</span>";
                                document.getElementById(field.name+'_div').style.display="block";
                            }
                            username_taken = true;
                        }
                        if (http.responseText==1){
                            if (document.getElementById(field.name+'_div')){
                                document.getElementById(field.name+'_div').innerHTML = "";
                                document.getElementById(field.name+'_div').style.display="none";
                            }
                            username_taken = false;
                        }
						
                    }
                }

                http.send(null);
            }
            if(username_taken){
                return false;
            }
		
            break;
		
        // Username frontend
        case "validate_username_frontend":

            var ex = "^\\w+[-]?\\w+$";
            var regExpObj = new RegExp(ex, "i");
            var result = regExpObj.test(field.value);
				
            if(field.value.length < 2){
                return false;
            }
						
            if(!result){
                if (document.getElementById(field.name+'_div')){
                    document.getElementById(field.name+'_div').innerHTML = "";
                }
                return false;
            }
            else{

                var username_taken= false;
				
                var http = false;
                if(navigator.appName == "Microsoft Internet Explorer") {
                    http = new ActiveXObject("Microsoft.XMLHTTP");
                } else {
                    http = new XMLHttpRequest();
                }
			  
                http.abort();
  			
                var validate_file=document.forms[0].root.value+"/Systemfiles/validate_username_frontend.php?name=";
                http.open("GET", validate_file + field.value + "&site=" + var2, true);
        
                http.onreadystatechange=function() {
	
                    if(http.readyState == 4) {
  				  
                        if (http.responseText==-1){
                            if (message && document.getElementById(field.name+'_div')){
                                document.getElementById(field.name+'_div').innerHTML = "<span id=\"warn\">"+message+"</span>";
                                document.getElementById(field.name+'_div').style.display="block";
                            }
                            username_taken = true;
                        }
                        if (http.responseText==1){
                            if (document.getElementById(field.name+'_div')){
                                document.getElementById(field.name+'_div').innerHTML = "";
                                document.getElementById(field.name+'_div').style.display="none";
                            }
                            username_taken = false;
                        }
                    }
                }

                http.send(null);
            }
            if(username_taken){
                return false;
            }
		
            break;
		
        //Alias
        case "validate_website_name":

            //var ex = "^\\w+[-]?\\w+$";
            var ex = "^[a-zA-Z0-9\-\_]{2,}$";
            var regExpObj = new RegExp(ex, "i");
            var result = regExpObj.test(field.value);
				
            if(field.value.length > 30){
                return false;
            }
  		
            if(!result){
                if (document.getElementById(field.name+'_div')){
                    document.getElementById(field.name+'_div').innerHTML = "";
                }
                var inputLength=field.value.length;
				
                if (inputLength>2){
                    alert("Du har indtastet et ugyldigt tegn - prøv venligst igen");
                    field.value=field.value.substring(0, inputLength-1);
                }
                return false;
            }
						
            else{
                var alias_taken= false;
				
                var http = false;
                if(navigator.appName == "Microsoft Internet Explorer") {
                    http = new ActiveXObject("Microsoft.XMLHTTP");
                } else {
                    http = new XMLHttpRequest();
                }
			  
                http.abort();
  			
                var validate_file=document.forms[0].root.value+"/Systemfiles/validate_alias.php?name=";
                http.open("GET", validate_file + field.value, true);
        
                http.onreadystatechange=function() {
                    if(http.readyState == 4) {
  				  						
                        if (http.responseText==-1){
                            if (message && document.getElementById(field.name+'_div')){
                                document.getElementById(field.name+'_div').innerHTML = "<span id=\"warn\">"+message+"</span>";
                                document.getElementById(field.name+'_div').style.display="block";
                            }
                            alias_taken = true;
                        }
                        if (http.responseText==1){
                            if (document.getElementById(field.name+'_div')){
                                document.getElementById(field.name+'_div').innerHTML = "";
                                document.getElementById(field.name+'_div').style.display="none";
                            }
                            alias_taken = false;
                        }
                    }
                }
                http.send(null);
            }
            if(alias_taken){
                return false;
            }
			
            break;
			
        //Verification image
        case "validate_verification":
            var verified=false;
				
            var http = false;
            if(navigator.appName == "Microsoft Internet Explorer") {
                http = new ActiveXObject("Microsoft.XMLHTTP");
            }
            else {
                http = new XMLHttpRequest();
            }
			  
            http.abort();
  			
            var validate_file=document.forms[0].root.value+"/Systemfiles/validate_verification.php?code=";
            http.open("GET", validate_file + field.value + "&orig=" + document.forms[0].hidden_verification.value, true);
       
            http.onreadystatechange=function() {
                if(http.readyState == 4) {
                    alert(http.responseTExt);
                    if (http.responseText==-1){
                        verified = false;
                    }
                    if (http.responseText==1){
                        verified = true;
                    }
                }
            }
            http.send(null);
            if(!verified){
                return false;
            }
            if(verified){
                return true;
            }
            return false;
            break;
		
        // Password standard
        case "validate_password":
            var form = document.forms[0];
            //Empty field
            if(field.value.length < 4){
                return false;
            }
			
            //Reg ex
            var ex = "^\\w+[-]?\\w+$";
            var regExpObj = new RegExp(ex, "i");
            var result = regExpObj.test(field.value);
            if (!result){
                return false;
            }
			
            //Check if it's the first password-field
            for(i = 0; i < form.elements.length; i++){
                if (form.elements[i].name!=field.name && form.elements[i].className=="validate_password"){
                    var other_pos=i;
                }
                if (form.elements[i].name==field.name && form.elements[i].className=="validate_password"){
                    var this_pos=i;
                }
            }
            if (this_pos<other_pos) var theFirst=true;
            if (theFirst) return true;
            else{
                var password_1 = field.value;
                for(i = 0; i < form.elements.length; i++){
                    if (form.elements[i].name!=field.name && form.elements[i].className=="validate_password"){
                        var password_2=form.elements[i].value;
                    }
                }
                if (password_1==password_2) return true;
                else return false;
            }
            break;
			
        // Password e-mail
        case "validate_password_email":
            var form = document.forms[0];
			
            //Empty field
            if(field.value.length < 5){
                return false;
            }
			
            var ex = "^\\w?\\w";
            var regExpObj = new RegExp(ex, "i");
            var result = regExpObj.test(field.value);
            if(!result){
                return false;
            }
			
            //Check if it's the first password-field
            for(i = 0; i < form.elements.length; i++){
                if (form.elements[i].name!=field.name && form.elements[i].className=="validate_password_email"){
                    var other_pos=i;
                }
                if (form.elements[i].name==field.name && form.elements[i].className=="validate_password_email"){
                    var this_pos=i;
                }
            }
            if (this_pos<other_pos) var theFirst=true;
            if (theFirst) return true;
            else{
                var password_1 = field.value;
                for(i = 0; i < form.elements.length; i++){
                    if (form.elements[i].name!=field.name && form.elements[i].className=="validate_password_email"){
                        var password_2=form.elements[i].value;
                    }
                }
                if (password_1==password_2) return true;
                else return false;
            }
            break;
			
        default:
            return true;
			
    }

}

/**Function trim - remove empty spaces**/
function trim(text){
    while(text.value.charAt(0)==' '){
        text.value=text.value.substring(1,text.value.length );
    }
    while(text.value.charAt (text.value.length-1)==' '){
        text.value = text.value.substring(0,text.value.length-1);
    }
}

/**Function validate on field-change**/
function validate_on_change(message, var2){

    try{
        var allforms=document.forms;
		
        for(i=0;i<allforms.length;i++){
            if(allforms[i].className != "no-validation"){
                var theForm = allforms[i];
                break;
            };
        }
    } catch (err){}
	
    if(theForm){
	
        try{
            var img_required = theForm.root.value+'/Mediafiles/Images/no.gif';
            var img_validated = theForm.root.value+'/Mediafiles/Images/yes.gif';
        } catch (err) { }
			
        var status = true;
	
        for(i = 0; i < theForm.elements.length; i++){
		
            var img_id = theForm.elements[i].name + '_img';
			
            // remove last integer if checkboxes (this is just a counter for checkboxes in the same group)
            if (theForm.elements[i].className == 'validate_checkbox_one_minimum'){
                var aTmp = theForm.elements[i].name.split('_');
                img_id = aTmp[0]+'_'+aTmp[1]+'_'+aTmp[2]+'_img';
            }
				
						
            var temp = validate(theForm.elements[i], message, var2);
						
            if (temp == false){
                status = false;
                try{
                    document.getElementById(img_id).src = img_required;
                }
                catch(err){}
            }
            else {
                try{
                    document.getElementById(img_id).src = img_validated;
                } catch(err){}
            }
        }
    }
/*
	if(status == true){
		document.getElementById("next").disabled = false;
	} else {
		document.getElementById("next").disabled = true;
	}
	*/
}

/**Function validate on form-submit**/
function validate_on_submit(theForm){
    try{
        if (!theForm){
            var allforms=document.forms;
	  		
            for(i=0;i<allforms.length;i++){
                if(allforms[i].className != "no-validation"){
                    var theForm = allforms[i];
                    break;
                }
            }
        }
    }
    catch (err){}
	
    //Form exists
    if(theForm){

        //Confirm
        var confirm_msg;
        var confirm_save_msg=theForm.confirm_save.value;
        var confirm_delete_msg=theForm.confirm_delete.value;
        if (theForm.hidden_action && (theForm.hidden_action.value=="save" || theForm.hidden_action.value=="update" || theForm.hidden_action.value=="save_close")){
            confirm_msg=confirm_save_msg;
        }
        if (theForm.hidden_action && (theForm.hidden_action.value=="delete")) confirm_msg=confirm_delete_msg;

        if (confirm_msg && confirm_action(confirm_msg)==false) return false;
        else{
            var status = true;
            for(i = 0; i < theForm.elements.length; i++){
                trim(theForm.elements[i]);
                var temp_element = validate(theForm.elements[i]);
                if (temp_element == false) status = false;
            }
    	
            if(status == true){
			  
                //Ugly but necessary, submit image-texts in gallery
                if (this.image_texts_frame){
                    this.image_texts_frame.document.form_image_texts.submit();
                }
                try{
                    document.getElementById('interfaceClassWaitDiv').style.display='block';
                } catch(err){}
                return true;
            }
            else {
    		   	
                var msg;
                try{
                    msg = theForm.validate_message.value
                } catch (err){
                    msg = err;
                }
                alert(msg);
                return false;
            }
        }
    }
	
}

/** Function that confirm user before action taking **/
function confirm_action(question){
    var answer = confirm(question);
    if (answer){
        return true;
    }
    else{
        return false;
    }
}

