/**
 * This file should be modified only be EDC personel
 * Contact us at support@edc-aim.com with any questions
 */

// focus the first control on the page
function onPageLoad_Forms()
{    
    for(var i=0; i<document.forms.length; i++)
    {
        var form = document.forms[i];
        
        var classes = form.className.split(' ');
        if(array_exists(classes, "no_focus")) { continue; }
        
        var focus_set = false;
        for(var j=0; j<form.elements.length; j++)
        {
            var e = form.elements[j];
            if(! focus_set)
            {
                switch(e.type)
                {            
                    case "text":
                    case "password":
                    case "checkbox":
                    case "radio":  
                    case "file":
                    case "textarea":
                        try {
                            e.focus();
                        } catch (ex) {
                        } finally {
                            focus_set = true;
                        }
                        break;                                               
                    default:
                        // do nothing
                        break;
                }
            }
            
            var classes = e.className.split(' ');
            if(array_exists(classes, "no_js")) {
                e.name = e.name + "_no_js";                     
            }
        }
    }				      
}

// check all form fields on the given tab before allowing the user to advance to the next tab
function validateTab(event)
{            
    var tab = event.prevValue;    
    var tab_div = document.getElementById(tab.get('contentEl').id);
            
    // get all child nodes recursivly, excluding "form" elements
    var get_elements_recursivly = function(element){                
        
        var _elements = YAHOO.util.Dom.getChildren(element);
        
        for(var i = 0; i < _elements.length; i++)
        {
            var _element =  _elements[i];
            if ((_element.tagName != "form") &&
                (_element.tagName != "FORM"))
            {
                var _child_elements = get_elements_recursivly(_element);
                
                for(var j = 0; j < _child_elements.length; j++)
                {
                    _elements.push(_child_elements[j]);
                }
            }
        }        
        
        return _elements;
    
        };
        
    var elements = get_elements_recursivly(tab_div);    
    return validateElements(elements);
}

// ensure all required fields are populated
function validateForm(form)
{    
    var elements = form.elements;
    var filtered_elements = new Array();
    
    for(var i = 0; i < elements.length; i++)
    {
        var e = elements[i];        
        if(e.form == form)
        {
            filtered_elements.push(e);
        }
    }
    
    return validateElements(filtered_elements);
}

function validateElements(elements)
{
    var ok = true;
    var error_element = null;
    
    for(i = 0; (i < elements.length) && ok; i++)
    {        
        var e = elements[i];
    
        switch(e.type)
        {
            case "checkbox":
                ok = validateCheckbox(e) && ok;
                break;
            case "text":
                ok = validateTextbox(e) && ok;                
                break;
            case "textarea":
                ok = validateTextarea(e) && ok;
                break;
            case "radio":
                ok = validateRadioButton(e) && ok;
                break;
            case "select-one":
            case "select-multiple":
                ok = validateCombobox(e) && ok;
                break;
            case "submit":                                
            default:
                // do nothing
                break;                
        }  
        
        if(!ok)
        {
            error_element = e;
        }
    }
        
    if(!ok) { alert("Errors were found in your form,\nPlease check the highlighted fields and try again."); }
    
    if(error_element != null) {
        try{
            error_element.focus();
        } catch (ex) { /* do nothing */ }
    }
    
    return ok;
}

function validateTextbox(textbox)
{               
    var ok = true;
    var value = textbox.value;
    var classes = textbox.className.split(' '); 
    var is_required = array_exists(classes, "required"); 
    var format_input_CREDITCARD = array_exists(classes, "format_input_CREDITCARD");
    var format_input_NUMERIC = array_exists(classes, "format_input_NUMERIC");
    var format_input_ALPHANUMERIC = array_exists(classes, "format_input_ALPHANUMERIC"); 
    var min_chars = 0;
 
    // cycle through classes to determine event validation settings
    for ( var i = 0; i < classes.length; i++ )
    {
       // if minimum class found
       if (classes[i].length > 10) {
           // if the class name starts with minlength_ then we know to use the minimun validation check
           if ( classes[i].substring(0,10) == "minlength_" )
           {
                // we are using the min function, lets determine the min length
                min_chars = classes[i].substring(10);
           }
       }
    }
 
    // ignore if no_js class is present
    if(array_exists(classes, "no_js")) { return true; }
    
    // remove the error class, if it's present
    if(array_exists(classes, "error"))
    {
        classes = array_remove(classes, "error");
    }
    
    // check for empty string
    if( (is_required) &&
        ((value == null) || (value.length == 0)))
    {
        ok = false;
    }
    
    // if field name is "crcd_number", perform MOD 10 verification
    if ((ok) && 
       ((textbox.name == "crcd_number") || (format_input_CREDITCARD)))
    {
        ok = verifyCRCD(textbox.value);        
    }
    
    if (format_input_NUMERIC)
    {
        // make sure that the input is all numeric
        ok = verifyNumeric(textbox.value);
    }
    
    if (format_input_ALPHANUMERIC)
    {
        // make sure that the input is all numeric
        ok = verifyAlphaNumeric(textbox.value);
    }
    
    // if we are doing a min check
    if (min_chars > 0)
    {
        if (value.length < min_chars)
        {
            ok = false;
        }
    }
    
    // if an error, change the class to reflect
    if(!ok) {
        classes.push("error");        
    }
    
    textbox.className = classes.join(' ');
    
    return ok;
}

function validateTextarea(textarea)
{               
    var ok = true;
    var value = textarea.value;
    var classes = textarea.className.split(' '); 
    var is_required = array_exists(classes, "required");        
    
    // ignore if no_js class is present
    if(array_exists(classes, "no_js")) { return true; }
    
    // remove the error class, if it's present
    if(array_exists(classes, "error"))
    {
        classes = array_remove(classes, "error");
    }
    
    // check for empty string
    if( (is_required) &&
        ((value == null) || (value.length == 0)))
    {
        ok = false;
    }
    
    // if an error, change the class to reflect
    if(!ok) {
        classes.push("error");        
    }
    
    textarea.className = classes.join(' ');
    
    return ok;
}

function validateRadioButton(radio)
{               
    var ok = true;        
    var classes = radio.className.split(' '); 
    var is_required = array_exists(classes, "required"); 
    
    // ignore if no_js class is present
    if(array_exists(classes, "no_js")) { return true; }
    
    // remove the error class, if it's present
    if(array_exists(classes, "error"))
    {
        classes = array_remove(classes, "error");
    }
    
    // check for a valid selection
    if(is_required)
    {
        ok = false;
        for(var i=0; (i < radio.form.elements.length) && (!ok); i++)
        {
            var r = radio.form.elements[i];
            if((r.type == "radio") && (r.name == radio.name))
            {
                if(r.checked) { ok = true; }                
            }
        }        
    }
    
    // if an error, change the class of the parent div
    var parent_div = null;
    var id_parts = radio.id.split('_');
    if(id_parts.length > 0)
    {
        parent_div = document.getElementById('div_' + id_parts[0]);
    }
    if(parent_div == null)
    {
        parent_div = document.getElementById('div_' + radio.id);
    }
    if(parent_div != null)
    {
        var parent_div_classes = parent_div.className.split(' ');  
        if(ok && array_exists(parent_div_classes, "error"))
        {
            parent_div_classes = array_remove(parent_div_classes, "error");
        }           
        if((!ok) && (! array_exists(parent_div_classes, "error")))
        {
            parent_div_classes.push('error');            
        }                    
        parent_div.className = parent_div_classes.join(' ');
    }
    
    return ok;    
}

function validateCheckbox(checkbox)
{               
    var ok = true;        
    var classes = checkbox.className.split(' '); 
    var is_required = array_exists(classes, "required");     
    var checkbox_group_name = getCheckboxGroupName(checkbox);      
    
    // ignore if no_js class is present
    if(array_exists(classes, "no_js")) { return true; }  
    
    // remove the error class, if it's present
    if(array_exists(classes, "error"))
    {
        classes = array_remove(classes, "error");
    }
    
    // check for a valid selection
    if(is_required)
    {
        ok = false;
        for(var i=0; (i < checkbox.form.elements.length) && (!ok); i++)
        {
            var c = checkbox.form.elements[i];
            if((c.type == "checkbox") && (getCheckboxGroupName(c) == checkbox_group_name))
            {
                if(c.checked) { ok = true; }                
            }
        }        
    }
    
    if(checkbox_group_name != null)
    {
        // if an error, change the class of the parent div
        var parent_div = document.getElementById('div_' + checkbox_group_name);        
        if(parent_div != null)
        {
            var parent_div_classes = parent_div.className.split(' ');  
            if(ok && array_exists(parent_div_classes, "error"))
            {
                parent_div_classes = array_remove(parent_div_classes, "error");
            }           
            if((!ok) && (! array_exists(parent_div_classes, "error")))
            {
                parent_div_classes.push('error');            
            }                    
            parent_div.className = parent_div_classes.join(' ');
        }
    }
    
    return ok;    
}

function getCheckboxGroupName(checkbox)
{
    var id_parts = checkbox.id.split('_');
    var group_name = "";
    for(var i=0; i<(id_parts.length-1); i++)
    {
        group_name += id_parts[i];
        if(i < (id_parts.length-2))
        {
            group_name += "_";
        }
    }
    return group_name;
}

function validateCombobox(combobox)
{               
    var ok = true;        
    var classes = combobox.className.split(' '); 
    var is_required = array_exists(classes, "required");   
    
    // ignore if no_js class is present
    if(array_exists(classes, "no_js")) { return true; }     
    
    // remove the error class, if it's present
    if(array_exists(classes, "error"))
    {
        classes = array_remove(classes, "error");
    }
    
    // check for a valid selection
    if(is_required)
    {
        if(combobox.selectedIndex < 0)
        {
            ok = false;
        } else {
            var value = combobox.options[combobox.selectedIndex].value;
            if ((value == null) || (value.length == 0) || (value == "PROMPT"))
            {
                ok = false;
            }
        }
    }
    
    // if an error, change the class to reflect
    if(!ok) {
        classes.push("error");        
    }
    
    combobox.className = classes.join(' ');
    
    return ok;
}

function refreshCharCount(counted_field, display_field, max_length)
{    
    if (counted_field.value.length > max_length) {
		counted_field.value = counted_field.value.substring(0, max_length);
	} else {
		display_field.value = max_length - counted_field.value.length;
	}
}

function CheckAll(id, checked_list_name, exclude)
{
    var form = document.getElementById(id);
    var all_box = document.getElementById('allbox_' + id);    
    if(all_box)
    {
        for (var i=0; i<form.elements.length; i++)
        {    
            var e = form.elements[i];
            if ((e != all_box) &&
                (e.type=='checkbox') &&
                (!e.disabled))
            {
                e.checked = all_box.checked;
            }
        }
    } else {
        var exclude_ids = (exclude != null) ? exclude.split(';') : new Array();
        for (var i=0; i<form.elements.length; i++)
        {    
            var e = form.elements[i];
            if ((e.type=='checkbox') &&
                (e.id != null) &&
                (!e.disabled) &&
                (
                    (checked_list_name == null) ||
                    (string_begins_with(e.id, checked_list_name))
                ) && 
                (
                    (exclude_ids == null) ||
                    (!array_exists(exclude_ids, e.id))
                ))
            {                
                e.checked = true;
            }
        }
    }
}

function UncheckAll(id, checked_list_name, exclude)
{
    var form = document.getElementById(id);
    var exclude_ids = (exclude != null) ? exclude.split(';') : new Array();  
    for (var i=0; i<form.elements.length; i++)
    {    
        var e = form.elements[i];
        if ((e.type=='checkbox') &&
            (e.id != null) &&
            (!e.disabled) &&
            (
                (checked_list_name == null) ||                
                (string_begins_with(e.id, checked_list_name))
            ) && 
            (
                (exclude_ids == null) ||
                (!array_exists(exclude_ids, e.id))
            ))
        {
            e.checked = false;
        }
    }
}

function CheckCheckAll(id) {
    var TotalBoxes = 0;
    var TotalOn = 0;
    
    var form = document.getElementById(id);
    var all_box = document.getElementById('allbox_' + id);
    
    for (var i=0; i<form.elements.length; i++)
    {
        var e = form.elements[i];
        if ((e != all_box) &&
            (e.type=='checkbox'))
        {
            TotalBoxes++;
            if (e.checked) { TotalOn++; }
        }
    }
    
    all_box.checked = (TotalBoxes == TotalOn);
}

function GetFormPostData(id) {    
    var form = document.getElementById(id);
    var retval = ''
    
    for (var i=0; i<form.elements.length; i++)
    {
        var e = form.elements[i];                
        if((e.name != '') && ((e.name + '') != 'undefined'))
        {
            retval += (retval=='')?'':'&';
            retval += e.name + '=' + escape(e.value);
        }        
    }    
    
    return retval;
}

function GetRadioGroupValue(radio_name)
{    
    if(radio_name == null) { return null; }
    var radio = document.getElementById(radio_name + '_0');
    if(radio == null) { return null; }
    for(var i=0; i < radio.form.elements.length; i++)
    {
        var r = radio.form.elements[i];
        if((r.type == "radio") && (r.name == radio.name))
        {
            if(r.checked)
            {
                return r.value;
            }               
        }
    }
    return null;
}

function verifyGeneric(s, allowed)
{
    for (var i = 0; i < s.length; i++)
    {
        var c = s.charAt(i);
        if(allowed.indexOf(c) < 0) { return false; }
    }
    return true;
}

function verifyNumeric(s)
{
    return verifyGeneric(s, "0123456789");
}

function verifyAlphaNumeric(s)
{
    return verifyGeneric(s, "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");
}

// Performs MOD10 credit card verification
function verifyCRCD(s)
{
    // must be all numeric
    if(!verifyNumeric(s)) { return false; }

   // Checksum ("Mod 10")
   // Add even digits in even length strings or odd digits in odd length strings.
   var checksum = 0;
   for (var i=(2-(s.length % 2)); i<=s.length; i+=2) {
      checksum += parseInt(s.charAt(i-1));
   }
   // Analyze odd digits in even length strings or even digits in odd length strings.
   for (var i=(s.length % 2) + 1; i<s.length; i+=2) {
      var digit = parseInt(s.charAt(i-1)) * 2;
      if (digit < 10) { checksum += digit; } else { checksum += (digit-9); }
   }
   
   if ((checksum % 10) == 0) return true; else return false;
}

function adjustTextAreaText(replace, textarea_id, lookup_function_name)
{    
    var option_box = document.getElementById(textarea_id + "_picklist");
    var selected_id = option_box.value;
    
    eval(lookup_function_name + "(" + selected_id + "," +
         "{ success: adjustTextAreaText_callback, argument: [" + replace + ", '" + textarea_id + "'] });");
}
function adjustTextAreaText_callback(o)
{
    var new_text = o.responseText;
    var replace = o.argument[0];
    var textarea_id = o.argument[1];
    
    var textarea = document.getElementById(textarea_id);
    if(replace)
    {
        textarea.value = new_text;
    } else {
        textarea.value += new_text;
    }
}

