
var redAsterix = '/images/bmwuk/red_asterix.gif';
var spacer = '/images/bmwuk/spacer.gif';
	
function clearTextField(field)
{
	setTextField(field, "");
}

function setTextField(field, newValue)
{
	if (field)
	{
		field.value = newValue;
	}
}

function trim( value )
{
	return value.replace(/^\s+|\s+$/g, '');
}


function validate(templatePath, requiredstringPrevalidate, onlyValidate, addressWarningMessage)
{
    var needAddress = false;
    var needTown = false;
    var requiredfields = 0;
    var requiredstring = "The following information is required:\n";
    if (requiredstringPrevalidate) {
        requiredstring += requiredstringPrevalidate;
        requiredfields++;
    }

    var emailAsterix = document.images["em"];
    if (emailAsterix)
    {
        emailAsterix.src = spacer;
    }    
    if (myForm.email && myForm.email.value != "" && !checkEmail(myForm.email.value))
    {
        requiredstring = requiredstring + " Valid email address \n";
        requiredfields++;    
        if (emailAsterix)
        {
            emailAsterix.src = redAsterix;
        }        
    }
        
    for (var i = 0; i < imgDescArr.length; i++)
    {
        var itemName = imgDescArr[i][0];
        var itemNullValue = imgDescArr[i][4];
		var missingData = false;
		if (itemName == "acceptTerms")
		{
		    if (!myForm.acceptTerms.checked)
		    {
		        missingData = true; 
		    }    
		} 
		else if (itemName == "dealerId")
		{
		    if (eval("myForm." + itemName + ".value") == itemNullValue
		        && (!myForm.fleet || (myForm.fleet && myForm.fleet.value < 75)))
		    {
		        missingData = true; 
		    }    
		} 
		else if ((itemName == "phone" &&
                !((myForm.homeTelephone && trim(myForm.homeTelephone.value) != itemNullValue) ||
                (myForm.workTelephone && trim(myForm.workTelephone.value) != itemNullValue) ||
                (myForm.mobileTelephone && trim(myForm.mobileTelephone.value) != itemNullValue))) 
                
                ||
                (itemName == "phone_friend" &&
                !((myForm.homeTelephone_friend && trim(myForm.homeTelephone_friend.value) != itemNullValue) ||
                (myForm.workTelephone_friend && trim(myForm.workTelephone_friend.value) != itemNullValue) ||
                (myForm.mobileTelephone_friend && trim(myForm.mobileTelephone_friend.value) != itemNullValue))) 
                
                ||
             ( itemName != "phone" && itemName != "phone_friend" &&   
                trim(eval("myForm." + itemName + ".value")) == itemNullValue)
            )
        {
            missingData = true; 
        }
        if (missingData)
        {		
    		if (itemName == "addressLine1" || itemName == "addressLine1_friend")
    		{
    		    needAddress = true;
    		}
    		if (itemName == "town" || itemName == "town_friend")
    		{
    		    needTown = true;
    		}				
            requiredstring = requiredstring + imgDescArr[i][3];
            requiredfields++;  
            imgDescArr[i][2] = 1;              
        }
        else
        {
            imgDescArr[i][2] = 0;          
        }        
    }
    
   	var emailAsterixFriend = document.images["em_friend"];   	
    if (emailAsterixFriend)
    {
        emailAsterixFriend.src = spacer;
    }    
   
	// friends and family stuiff
    if (myForm.email_friend && myForm.email_friend.value != "" && !checkEmail(myForm.email_friend.value))
    {
	    if (emailAsterixFriend)
	    {
	        emailAsterixFriend.src = redAsterix;
	    }  
        requiredstring = requiredstring + " Valid friend's email address \n";
        requiredfields++;        
    }
	
	// ir stuff	
    if (myForm.friendEmail1 && myForm.friendEmail1.value != "" && !checkEmail(myForm.friendEmail1.value)
        || (myForm.friendEmail1 && !checkEmail(myForm.friendEmail1.value) && (
        	(myForm.friendFirstName1 && myForm.friendFirstName1.value!= "") ||
        	(myForm.friendSurname1 && myForm.friendSurname1.value!= "") ||
        	(myForm.friendTitle1 && myForm.friendTitle1.value!= "")
        	)
        )
    )
    {
        requiredstring = requiredstring + " Valid friend's email address (1) \n";
        requiredfields++;        
    }

    if (myForm.friendEmail2 && myForm.friendEmail2.value != "" && !checkEmail(myForm.friendEmail2.value)
    	|| (myForm.friendEmail2 && !checkEmail(myForm.friendEmail2.value) && (
    		(myForm.friendFirstName2 && myForm.friendFirstName2.value!= "") ||
    		(myForm.friendSurname2 && myForm.friendSurname2.value!= "") || 
    		(myForm.friendTitle2 && myForm.friendTitle2.value!= "")
    		)
    	   )
    	)
    {
        requiredstring = requiredstring + " Valid friend's email address (2) \n";
        requiredfields++;        
    }

    if (needAddress && needTown)
    {
        requiredstring += "\n " + (addressWarningMessage ? addressWarningMessage : "To enter your address, please add your postcode and click on 'Search'.");
    }
    
	var doSubmit = true;
    
    if (requiredfields > 0)
    {	
        for (var i = 0; i < imgDescArr.length; i++)
        {	
			if (imgDescArr[i][1] == "dn")
			{
				setDealerLocatorRedAsterix();
			} 
			else 
            {
                var thisAsterix = document.images[imgDescArr[i][1]];
                if (thisAsterix)
                {
                    thisAsterix.src = (imgDescArr[i][2] == 0 ? spacer : redAsterix);
                }
            }
        }
        
        if (
            (myForm.addressLine1 && myForm.addressLine1.value == "")
                ||
            (myForm.town && myForm.town.value == "")
           )
        {   
            var tableAddressBlock = document.getElementById("address-block");
            if (tableAddressBlock && tableAddressBlock.style.display == "none") 
            {
                var postcodeAsterix = document.images["pc"];
                if (postcodeAsterix)
                {
                    postcodeAsterix.src = redAsterix;
                }     
            }
        }
		alert(requiredstring);
		doSubmit = false;
	} 
	else 
	{
		if (myForm.email && myForm.email.value == "" &&
			myForm.emailOptIn && myForm.emailOptIn.checked)
		{
			if (confirm("You have indicated that you would like us to email you in the future.\nClick 'OK' to go back and enter your email address or 'Cancel' to submit\nyour request without an email address."))
			{
				doSubmit = false;
			}		
		}	 			
	}    

	if (doSubmit && !onlyValidate) {
		if( window.postValidateFunction )
		{
			postValidateFunction();
		}
		go(templatePath);
	}
	if (onlyValidate) {
		return doSubmit;
	}
}

function validateVip(templatePath, requiredstringPrevalidate, onlyValidate)
{
    var needAddress = false;
    var needTown = false;
    var requiredfields = 0;
    var requiredstring = "The following information is required:\n";
    if (requiredstringPrevalidate) {
        requiredstring += requiredstringPrevalidate;
        requiredfields++;
    }

    var emailAsterix = document.images["em"];
    if (emailAsterix)
    {
        emailAsterix.src = spacer;
    }    
    if (myForm.email && myForm.email.value != "" && !checkEmail(myForm.email.value))
    {
        requiredstring = requiredstring + " Valid email address \n";
        requiredfields++;    
        if (emailAsterix)
        {
           // emailAsterix.src = redAsterix;
        }        
    }
        
    for (var i = 0; i < imgDescArr.length; i++)
    {
        var itemName = imgDescArr[i][0];
        var itemNullValue = imgDescArr[i][4];
		var missingData = false;
		if (itemName == "acceptTerms")
		{
		    if (!myForm.acceptTerms.checked)
		    {
		        missingData = true; 
		    }    
		} 
		else if (itemName == "dealerId")
		{
		    if (eval("myForm." + itemName + ".value") == itemNullValue
		        && (!myForm.fleet || (myForm.fleet && myForm.fleet.value < 75)))
		    {
		        missingData = true; 
		    }    
		} 
		else if ((itemName == "phone" &&
                !((myForm.homeTelephone && trim(myForm.homeTelephone.value) != itemNullValue) ||
                (myForm.workTelephone && trim(myForm.workTelephone.value) != itemNullValue) ||
                (myForm.mobileTelephone && trim(myForm.mobileTelephone.value) != itemNullValue))) 
                
                ||
                (itemName == "phone_friend" &&
                !((myForm.homeTelephone_friend && trim(myForm.homeTelephone_friend.value) != itemNullValue) ||
                (myForm.workTelephone_friend && trim(myForm.workTelephone_friend.value) != itemNullValue) ||
                (myForm.mobileTelephone_friend && trim(myForm.mobileTelephone_friend.value) != itemNullValue))) 
                
                ||
             ( itemName != "phone" && itemName != "phone_friend" &&   
                trim(eval("myForm." + itemName + ".value")) == itemNullValue)
            )
        {
            missingData = true; 
        }
        if (missingData)
        {		
    		if (itemName == "addressLine1" || itemName == "addressLine1_friend")
    		{
    		    needAddress = true;
    		}
    		if (itemName == "town" || itemName == "town_friend")
    		{
    		    needTown = true;
    		}				
            requiredstring = requiredstring + imgDescArr[i][3];
            requiredfields++;  
            imgDescArr[i][2] = 1;              
        }
        else
        {
            imgDescArr[i][2] = 0;          
        }        
    }
    
   	var emailAsterixFriend = document.images["em_friend"];   	
    if (emailAsterixFriend)
    {
        emailAsterixFriend.src = spacer;
    }    
   
	// friends and family stuiff
    if (myForm.email_friend && myForm.email_friend.value != "" && !checkEmail(myForm.email_friend.value))
    {
	    if (emailAsterixFriend)
	    {
	        //emailAsterixFriend.src = redAsterix;
	    }  
        requiredstring = requiredstring + " Valid friend's email address \n";
        requiredfields++;        
    }
	
	// ir stuff	
    if (myForm.friendEmail1 && myForm.friendEmail1.value != "" && !checkEmail(myForm.friendEmail1.value)
        || (myForm.friendEmail1 && !checkEmail(myForm.friendEmail1.value) && (
        	(myForm.friendFirstName1 && myForm.friendFirstName1.value!= "") ||
        	(myForm.friendSurname1 && myForm.friendSurname1.value!= "") ||
        	(myForm.friendTitle1 && myForm.friendTitle1.value!= "")
        	)
        )
    )
    {
        requiredstring = requiredstring + " Valid friend's email address (1) \n";
        requiredfields++;        
    }

    if (myForm.friendEmail2 && myForm.friendEmail2.value != "" && !checkEmail(myForm.friendEmail2.value)
    	|| (myForm.friendEmail2 && !checkEmail(myForm.friendEmail2.value) && (
    		(myForm.friendFirstName2 && myForm.friendFirstName2.value!= "") ||
    		(myForm.friendSurname2 && myForm.friendSurname2.value!= "") || 
    		(myForm.friendTitle2 && myForm.friendTitle2.value!= "")
    		)
    	   )
    	)
    {
        requiredstring = requiredstring + " Valid friend's email address (2) \n";
        requiredfields++;        
    }

    if (needAddress && needTown)
    {
        requiredstring += "\n To enter your address, please add your postcode and click on 'Search'."    
    }
    
	var doSubmit = true;
    
    if (requiredfields > 0)
    {	
        for (var i = 0; i < imgDescArr.length; i++)
        {	
			if (imgDescArr[i][1] == "dn")
			{
				//setDealerLocatorRedAsterix();
			} 
			else 
            {
                var thisAsterix = document.images[imgDescArr[i][1]];
                if (thisAsterix)
                {
                    //thisAsterix.src = (imgDescArr[i][2] == 0 ? spacer : redAsterix);
                }
            }
        }
        
        if (
            (myForm.addressLine1 && myForm.addressLine1.value == "")
                ||
            (myForm.town && myForm.town.value == "")
           )
        {   
            var tableAddressBlock = document.getElementById("address-block");
            if (tableAddressBlock && tableAddressBlock.style.display == "none") 
            {
                var postcodeAsterix = document.images["pc"];
                if (postcodeAsterix)
                {
                    //postcodeAsterix.src = redAsterix;
                }     
            }
        }
        if( !onlyValidate )
        {
		alert(requiredstring);
		}
		doSubmit = false;
	} 
	else 
	{
		if (myForm.email && myForm.email.value == "" &&
			myForm.emailOptIn && myForm.emailOptIn.checked)
		{
			if (confirm("You have indicated that you would like us to email you in the future.\nClick 'OK' to go back and enter your email address or 'Cancel' to submit\nyour request without an email address."))
			{
				doSubmit = false;
			}		
		}	 			
	}    

	if (doSubmit && !onlyValidate) {
		go(templatePath);
	}
	if (onlyValidate) {
		return doSubmit;
	}
}


function checkEmail(email)
{
    emailIsValid = false;

    var atPos = email.indexOf('@');

    if (atPos > 0)
    {
        var emailTail = email.substring(atPos);
        var dotPos    = emailTail.indexOf('.');

        if (dotPos > 1)
        {
            var dotTail = emailTail.substring(dotPos);

            if (dotTail.length > 1)
            {
                return true;
            }
        }
    }

	return false;
}


    function emailCheckExact(emailStr) {
    	var emailPat=/^(.+)@(.+)$/;
    	var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
    	var validChars="\[^\\s" + specialChars + "\]";
    	var quotedUser="(\"[^\"]*\")";
    	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
    	var atom=validChars + '+';
    	var word="(" + atom + "|" + quotedUser + ")";
    	var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
    	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
    	var matchArray=emailStr.match(emailPat)
    	if (matchArray==null) {
    		return false;
    	}
    	var user=matchArray[1]
    	var domain=matchArray[2]
    	if (user.match(userPat)==null) {
    		return false;
    	}
    	var IPArray=domain.match(ipDomainPat);
    	if (IPArray!=null) {
    		for (var i=1;i<=4;i++) {
    			if (IPArray[i]>255) {
    				return false;
    			}
    		}
    		return true;
    	}
    	var domainArray=domain.match(domainPat);
    	if (domainArray==null) {
    		return false;
    	}
    	var atomPat=new RegExp(atom,"g");
    	var domArr=domain.match(atomPat);
    	var len=domArr.length;
    	if (domArr[domArr.length-1].length<2 || domArr[domArr.length-1].length>4) {    // was "length > 3" but new TLDs presents like ".info"
    		return false;
    	}
    	if (len<2) {
    		return false;
    	}
    	return true;
    }
