function ControlForValidate(trid, controlid, fillradioid, fillinputid)
{
    this.trid = trid;
    this.controlid = controlid;
    this.fillradioid = fillradioid;
    this.fillinputid = fillinputid;
}
function KSQP_Validate(sWPQ)
{
    var controls = eval("g_ControlsForValidate" + sWPQ);
    var returnValue = true;
    for(var i = 0; i < controls.length; i++)
    {
        var res = true;
        var fillEl = document.getElementById(controls[i].fillradioid);
        if((fillEl != null) && (fillEl.checked == true))
        {
            var fillElInp = document.getElementById(controls[i].fillinputid);
            res = KSQP_ValidateControlWithTagName(controls[i], fillElInp);
        }
        else
        {
            var els = document.getElementsByName(controls[i].controlid);
            try
            {
                if(els.length > 1)
                {
                    res = KSQP_ValidateArrayControls(controls[i], els);
                }
                else
                {
                    res = KSQP_ValidateControlWithTagName(controls[i], els[0]);
                }
            }
            catch(e)
            {
                res = KSQP_ValidateControlWithTagName(controls[i], els);
            }
        }
        if(res == false)
        {
           document.getElementById(controls[i].trid).style.display = "";
           returnValue = res;
        }
        else
        {
           document.getElementById(controls[i].trid).style.display = "none";
        }
    }
    
    var datesValid = KSQP_DateValidate(sWPQ);
    var numbersValid = KSQP_NumberValidate(sWPQ);
    return returnValue && datesValid && numbersValid;
}

function  KSQP_ValidateControlWithTagName(data, el)
{
    var res = true;
    if(el.tagName.toLowerCase() == "select")
    {
        if(el.selectedIndex == -1)
        {
            res = false;
        }
    }
    else
    {
        if(KSQP_Trim(el.value).length == 0)
        {
            res = false;
        }
    }
    return res;
}

function KSQP_ValidateArrayControls(data, els)
{
    var res = true;
    var isChecked = false;
    for(var ii = 0; ii < els.length; ii++)
    {
        if(els[ii].checked == true)
        {
            isChecked = true;
        }
    }
    if(isChecked == false)
    {
        res = false;
    }
    return res;
}
function KWiz_SurveyPlusImage(imgId, width, height, sWPR)
{
    var arVersion = navigator.appVersion.split("MSIE")
    var version = parseFloat(arVersion[1])

    if ((version >= 5.5) && (version < 7) && (document.body.filters)) 
    {
        var img = document.getElementById(imgId)
        img.style.behavior =  "url(" + sWPR + "/iepngfix.htc)"; 
    }
}

function KSQP_OnSubmit(sWPQ, oEl)
{
}

function KSQP_Trim(text) 
{
    text = text.replace(/^\s+/, '');
    return text.replace(/\s+$/, '');
}

function TextForValidate(trid, controlid, format)
{
    this.trid = trid;
    this.controlid = controlid;
    this.format = format;
}

function KSQP_NumberValidate(sWPQ)
{
    var controls = eval("g_NumberForValidate" + sWPQ);
    var returnValue = true;
    for(var i = 0; i < controls.length; i++)
    {
        var elment = document.getElementById(controls[i].controlid);
        var format = controls[i].format;       
        if ( elment && elment.value.length > 0)
        {
            var msg = KSQP_CheckNumber(elment.value, format);
            if ( msg )
            {
                document.getElementById(controls[i].trid).style.display = "";
                returnValue = false;
            }
            else
            {
                document.getElementById(controls[i].trid).style.display = "none";
            }
        }
    }
    return returnValue;
}

function IsNumeric(text)
{
    var validChars = "-0123456789.";
    var isNumber=true; 
    for (i = 0; i < text.length; i++) 
    { 
        var ch = text.charAt(i);
        if (validChars.indexOf(ch) < 0) 
        {
            isNumber = false;
            break;
        }
    }
    return isNumber;
}

function KSQP_CheckNumber(number, format)
{
    if (!IsNumeric(number))
        return "Invalid character";
    var parsedNum = parseFloat(number);
    
    var formatSplit = format.split(",");
    var min, max;
    if ( formatSplit[0] )
    {
        min = parseFloat(formatSplit[0]);   
    }
    if ( formatSplit[1])
    {
        max = parseFloat(formatSplit[1]);    
    }
     
    if ( min && parsedNum < min )
        return "Number must be greater than the minimum";    
        
    if ( max && parsedNum > max )
        return "Number must be smaller than the maxium"; 
    
    return "";
}

function KSQP_DateValidate(sWPQ)
{
    var controls = eval("g_DatesForValidate" + sWPQ);
    var returnValue = true;
    for(var i = 0; i < controls.length; i++)
    {
        var elment = document.getElementById(controls[i].controlid);
        var format = controls[i].format;
        if ( elment && format && elment.value.length > 0)
        {
            var msg = KSQP_CheckDate(elment.value, format);
            if ( msg )
            {
                document.getElementById(controls[i].trid).style.display = "";
                returnValue = false;
            }
            else
            {
                document.getElementById(controls[i].trid).style.display = "none";
            }
        }
    }
    return returnValue;
}

function KSQP_CheckDate(dateValue, format) 
{
    var year, month, date;
    
    var format = format.toLocaleLowerCase();
    var delimiter = "/";
    for (var i = 0; i < format.length; i++) 
    {
        var ch = format.charAt(i);
        if (ch != 'y' && ch != 'm' && ch != 'd') 
        {
            delimiter = ch;
            break;
        }
    }

    var validChars = "0123456789" + delimiter;
    for (var i = 0; i < dateValue.length; i++) 
    {
        if (validChars.indexOf(dateValue.charAt(i)) < 0) 
            return "Invalid character";
    }

    var formatSplit = format.split(delimiter);
    var dtSplit = dateValue.split(delimiter);
    if (formatSplit.length != dtSplit.length) 
        return "Invalid format";

    for (var i = 0; i < formatSplit.length; i++) 
    {
        try 
        {
            switch (formatSplit[i].charAt(0)) 
            {
                case 'y':
                    if (dtSplit[i].length != 4)
                        return "Invalid year";
                    else 
                    {
                        year = parseInt(dtSplit[i]);
                        if (year < 1700 || year > 2100)
                            return "Invalid year";
                    }
                    break;
                 case 'm':
                    var monValue = dtSplit[i];
                    if (monValue.charAt(0) == '0')
                        monValue = monValue.substring(1);
                    month = parseInt(monValue);
                    if (month < 1 || month > 12)
                        return "Invalid month:" + month;
                    break;
                 case 'd':
                    var dayValue = dtSplit[i];
                    if (dayValue.charAt(0) == '0')
                        dayValue = dayValue.substring(1);
                    date = parseInt(dayValue);
                    if (date < 1 || date > 31)
                        return "Invalid date:" + date;
                    break;
                default:
            }
        } 
        catch (err)
        {
            return err;
        }
    }

    try 
    {
        var testDate = new Date();
        testDate.setFullYear(year, month - 1, date);
        if (testDate.getDate() != date || testDate.getMonth() != month - 1)
            return "Invalid date for the month:" + date;
    } 
    catch (err) 
    {
        return "Invalid:" + err;
    }
        
    return "";
}

