

/**
*
*  Javascript trim, ltrim, rtrim
*  http://www.webtoolkit.info/
*
* Without the second parameter, they will trim these characters:
*
*    •" " (ASCII 32 (0x20)), an ordinary space.
*    •"\t" (ASCII 9 (0x09)), a tab.
*    •"\n" (ASCII 10 (0x0A)), a new line (line feed).
*    •"\r" (ASCII 13 (0x0D)), a carriage return.
*    •"\0" (ASCII 0 (0x00)), the NUL-byte.
*    •"\x0B" (ASCII 11 (0x0B)), a vertical tab.
**/
 
function trim(str, chars) {
	return ltrim(rtrim(str, chars), chars);
}
 
function ltrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}
 
function rtrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}

/* Global variables */
var broadbandsearchlink = '/sv/privat/stadsnat/ar-du-ansluten/';



/* Validation methods */
function isMalicious(val) {
    re = new RegExp(/[\x3c\x3e]/gi);
    return re.test(val);
}

function isAnyValueEntered(val)
{
    if(val==null) return false;
    
    val = trim(val, null);
    return (val.length > 0);
}

function styleValidatedFormElement(element, valid)
{
    $(element).removeClass("error");
    $(element).removeClass("valid");
    
    if(valid)
    {
        $(element).addClass("valid");
    }
    else
    {
        $(element).addClass("error");
    }
}


function validateRequired(sender, args) 
{
    var element = "#" + sender.controltovalidate;

    if(isAnyValueEntered(args.Value))
    {
        args.IsValid = true;
        styleValidatedFormElement(element, true);
    }
    else
    {
        args.IsValid = false;
        styleValidatedFormElement(element, false);
    }    
}



function validateZipCode(sender, args) 
{
    var element = "#" + sender.controltovalidate;

    re = new RegExp(/^(\d\d\d \d\d|\d\d\d\d\d)$/);
    args.IsValid = re.test(args.Value);
    
    styleValidatedFormElement(element, args.IsValid);  
}

function validateName(sender, args) 
{
    var element = "#" + sender.controltovalidate;
    
    re = new RegExp(/^[\w\xc0-\xff\, /\-:;\.]+$/i);
    args.IsValid = re.test(args.Value);
    
    styleValidatedFormElement(element, args.IsValid);  
}

function validateFreetext(sender, args) 
{
    var element = "#" + sender.controltovalidate;
    
   
    args.IsValid = !isMalicious(args.Value);
    
    styleValidatedFormElement(element, args.IsValid);  
}

function validateInstallationID_EL(sender, args) 
{
    var element = "#" + sender.controltovalidate;

    re = new RegExp(/^735999\d{12,12}$/);
    args.IsValid = re.test(args.Value);
    
    styleValidatedFormElement(element, args.IsValid);  
}

function validateNetAreaID(sender, args) 
{
    var element = "#" + sender.controltovalidate;

    re = new RegExp(/^[a-zA-Z]{3,3}$/i);
    args.IsValid = re.test(args.Value);
    
    styleValidatedFormElement(element, args.IsValid);  
}

function validateIdentificationNumber(sender, args) 
{
    var element = "#" + sender.controltovalidate;

    re = new RegExp(/^(19)?\d{6,6}-?\d{4,4}$/);
    args.IsValid = re.test(args.Value);
    
    styleValidatedFormElement(element, args.IsValid);  
}

function validateEMail(sender, args) 
{
    var element = "#" + sender.controltovalidate;

    re = new RegExp(/^(('[\w-\s]+')|([\w-]+(?:\.[\w-]+)*)|('[\w-\s]+')([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);
    args.IsValid = re.test(args.Value);
    
    styleValidatedFormElement(element, args.IsValid);  
}

// Function to validate a ',' or ';' separated list of email addresses
function validateEMailList(sender, args) 
{
    var element = "#" + sender.controltovalidate;

    re = new RegExp(/^(('[\w-\s]+')|([\w-]+(?:\.[\w-]+)*)|('[\w-\s]+')([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);
    
    var isValid;
    var arr = args.Value.split(';');
    for (var i = 0; i < arr.length; i++) {
        var arr2 = arr[i].split(',');
        for (var k = 0; k < arr2.length; k++) {
            isValid = re.test(arr2[k].trim());
            if (!isValid) {
                break;
            }
        }
    }
    args.IsValid = isValid;
    
    styleValidatedFormElement(element, args.IsValid);  
}

function validateNumeric(sender, args) 
{
    var element = "#" + sender.controltovalidate;

    re = new RegExp(/^\d+$/);
    args.IsValid = re.test(args.Value);
    
    styleValidatedFormElement(element, args.IsValid);  
}

function validateDecimal(sender, args) 
{
    var element = "#" + sender.controltovalidate;

    re = new RegExp(/^\d+(\,|\.)?(\d+)?$/);
    args.IsValid = re.test(args.Value);
    
    styleValidatedFormElement(element, args.IsValid);  
}

function validateDate(sender, args)
{
    var element = "#" + sender.controltovalidate;

    re = new RegExp(/^([1-2]\d{3,3})-?(0[1-9]|1[0-2])-?(0[1-9]|1[0-9]|2[0-9]|3[0-1])$/);
    args.IsValid = re.test(args.Value);
    
    styleValidatedFormElement(element, args.IsValid);  
}

function validateFutureDate(sender, args)
{
    var element = "#" + sender.controltovalidate;

    re = new RegExp(/^([1-2]\d{3,3})-?(0[1-9]|1[0-2])-?(0[1-9]|1[0-9]|2[0-9]|3[0-1])$/);
    var dateValidated = re.test(args.Value); 
    if(dateValidated==true)
    {
        var matches = args.Value.match(/^([1-2]\d{3,3})-?(0[1-9]|1[0-2])-?(0[1-9]|1[0-9]|2[0-9]|3[0-1])$/);
        var currentDate = new Date();
        var year = matches[1];
        var month = matches[2];
        var day = matches[3];
        var givenDate = new Date(year, month-1, day);
        var result = (givenDate > currentDate);
        args.IsValid = result;
    }
    else
    {
        args.IsValid = false;
    }
    
    styleValidatedFormElement(element, args.IsValid);  
}

function validatePassword(sender, args) 
{
    var element = "#" + sender.controltovalidate;

    re = new RegExp(/^.{6,32}$/);
    args.IsValid = re.test(args.Value);
    
    styleValidatedFormElement(element, args.IsValid);  
}

function validateCompare(sender, args) 
{
    var element = "#" + sender.controltovalidate;
    var compareElement = "#" + sender.controltocompare;
    var operator = sender.operator;
    
    
    switch(operator)
    {
        case "equal":
            if($(element).value == $(compareElement).value)
            {
                args.IsValid = true;
            }
            else
            {
                args.IsValid = false;
            }
            break;
    }
    
    styleValidatedFormElement(element, args.IsValid); 
    styleValidatedFormElement(compareElement, args.IsValid);  
}

function validateUsername(sender, args) 
{
    var element = "#" + sender.controltovalidate;

    re = new RegExp(/^[\w\xc0-\xff-\.@]{6,32}$/);
    args.IsValid = re.test(args.Value);
    
    styleValidatedFormElement(element, args.IsValid);  
}

function validatePhoneNumber(sender, args)
{
    var element = "#" + sender.controltovalidate;

    re = new RegExp(/^[0-9\-]{1,20}$/);
    args.IsValid = re.test(args.Value);
    
    styleValidatedFormElement(element, args.IsValid);  
}


