/*
 *  dataHelper.js 
 *  
 *  @role: "Object" to perform the data cookie restoration
 *  
 *  Copyright (c) 2001 - 2005, BCE Inc. This program contains proprietary and
 *  confidential information which is protected by copyright. All rights are
 *  reserved. No part of this program may be photocopied, reproduced or
 *  translated into another language, or disclosed to a third party without the
 *  prior written consent of BCE, Inc.
 *
 *  @author Robert Rascalon (CMTek Inc.)
 *
 *  @created by Rascalon Robert (CMTek Inc.)June 9th, 2005 (version 1.0)
 *  @updated by Bruno Da Silva (CMTek Inc.) June 22th, 2005 (version 1.1) 
 *
 */

/* - Functions ------------------------------------------------------------ */ 
function insertFormName(formName){
    document.write('<input type="hidden" name="cookieFormName" value="' + formName + '">');
}

/* - Methods -------------------------------------------------------------- */

/* 
 * Role: Add the field tagId to restore in the restore list
 *
 * @param field the field name if the field name is equal to the tagId
 *
 * @return: nothing
 */
function DataHelper_addField(field) {
    this.fields.push(field);
    this.tagIds.push(field);
}

/* 
 * Role: Add the field and tagId to restore in the restore list
 *
 * @param field the field name
 * @param tagId the tagId name 
 *
 * @return: nothing
 */
function DataHelper_addFieldTag(field,tagId) {
    this.fields.push(field);
    this.tagIds.push(tagId);
}

/* 
 * Role: Restoration data engine
 *
 * @return: nothing
 */
function DataHelper_restoreData() {
    if(this.fields) {
        if(this.fields.length <= 0) {
            return;
        }
    }
    else {
        return;
    }
    
    if(this.cookies) {
        if(this.cookies.getCount() <= 0) {
            return;
        }
    }
    else {
        return;
    }
      
    for(i = 0; i < this.fields.length; i++) {
        var fieldName = this.fields[i];
        
        for(j = 0; j < this.cookies.getCount(); j++) {
            oneCookie       = this.cookies.get(j);
            oneCookieName   = oneCookie.getName();
            
            if(fieldName == oneCookieName) {
                this.recoveryMethod(oneCookieName, oneCookie.getValues());
            }
        }
    }
}

/* 
 * Role: Restoration form data engine
 *
 * @return: nothing
 */
function DataFormHelper_restoreData() {
    if(this.fields) {
        if(this.fields.length <= 0) {            
            return;
        }
    }
    else {
        return;
    }
    
    if(this.cookies) {
        if(this.cookies.getCount() <= 0) {            
            return;
        }
    }
    else {
        return;
    }
      
    for(i = 0; i < this.fields.length; i++) {
        var fieldName = this.fields[i];
        
        for(j = 0; j < this.cookies.getCount(); j++) {
            oneCookie       = this.cookies.get(j);
            oneCookieName   = oneCookie.getName(); 
                       
            if(fieldName == oneCookieName) {
                this.recoveryMethod(i, oneCookie.getValues());
            }
        }
    }
}

/* 
 * Role: The default form restoration method
 *
 * @parameter: position at array of fields
 * @parameter: values: the array of the field values
 *
 * @return: nothing
 */
function DataFormHelper_basicRecoveryMethod(fieldPos, values) {
    var tagId       = this.tagIds[fieldPos];
    var fieldObject = this.form.elements[getNetuiTagName(tagId)];
    
    if(fieldObject) {
        var htmlType    = fieldObject.toString();
        var objectType  = fieldObject.type;
        var nodeList    = false;
                             
        if((htmlType) && (htmlType.indexOf("HTMLSelectElement") != -1)) {
           fieldObject.value = values[0];
        }
        else if((objectType) && (objectType.indexOf("select-one") != -1)) {
            fieldObject.value   = values[0];
        }
        else if((objectType) && (objectType.indexOf("checkbox") != -1)) {
            if(values[0] == "true") {
                fieldObject.checked = true;
            }
            else {
                fieldObject.checked = false;
            }
        }
        else if((htmlType) && (htmlType.indexOf("HTMLInputElement") != -1)) {
            fieldObject.value = values[0];
        }
        else if((objectType) && (objectType.indexOf("text") != -1)) {
            fieldObject.value = values[0];
        }
        else if((fieldObject.length) && (fieldObject.length >= 0)) {
            if((htmlType) && (htmlType.indexOf("NodeList") != -1)) {
                nodeList = true;
            }
            else if(htmlType) {
                if(fieldObject.item(0)) {
                    nodeList = true;
                }
            }
        }                        
        
        if(nodeList == false) {
            if((objectType) && (objectType.indexOf("select-multiple") != -1)) {
                nodeList = true;
            }
        }
                                    
        if(nodeList == true) {
            var multipleSel = false;
            
            if((objectType) && (objectType.indexOf("select-multiple") != -1)) {
                multipleSel = true;
            }

            for(idx = 0; idx < parseInt(values.length); idx++) {
                var tValue = values[idx];
                
                for(idy = 0; idy < fieldObject.length; idy++) {
                    var fValue = fieldObject.item(idy).value;    
                                    
                    if(fValue == tValue) {
                        if(multipleSel == true) {
                            fieldObject.item(idy).selected = true;
                        }
                        else {
                            fieldObject.item(idy).checked = true;
                        }
                    }
                }
            }
        }
    }
}

/* 
 * Role: The default restoration method
 *
 * @parameter: fieldName: the field name (tagId)
 * @parameter: values: the array of the field values
 *
 * @return: nothing
 */
function DataHelper_basicRecoveryMethod(fieldName, values) {
    var fieldObject = document.forms[0].elements[getNetuiTagName(fieldName)];
    
    if(fieldObject) {
        var htmlType    = fieldObject.toString();
        var objectType  = fieldObject.type;
        var nodeList    = false;
                             
        if((htmlType) && (htmlType.indexOf("HTMLSelectElement") != -1)) {
           fieldObject.value = values[0];
        }
        else if((objectType) && (objectType.indexOf("select-one") != -1)) {
            fieldObject.value   = values[0];
        }
        else if((objectType) && (objectType.indexOf("checkbox") != -1)) {
            if(values[0] == "true") {
                fieldObject.checked = true;
            }
            else {
                fieldObject.checked = false;
            }
        }
        else if((htmlType) && (htmlType.indexOf("HTMLInputElement") != -1)) {
            fieldObject.value = values[0];
        }
        else if((objectType) && (objectType.indexOf("text") != -1)) {
            fieldObject.value = values[0];
        }
        else if((fieldObject.length) && (fieldObject.length >= 0)) {
            if((htmlType) && (htmlType.indexOf("NodeList") != -1)) {
                nodeList = true;
            }
            else if(htmlType) {
                if(fieldObject.item(0)) {
                    nodeList = true;
                }
            }
        }                        
        
        if(nodeList == false) {
            if((objectType) && (objectType.indexOf("select-multiple") != -1)) {
                nodeList = true;
            }
        }
                                    
        if(nodeList == true) {
            var multipleSel = false;
            
            if((objectType) && (objectType.indexOf("select-multiple") != -1)) {
                multipleSel = true;
            }

            for(idx = 0; idx < parseInt(values.length); idx++) {
                var tValue = values[idx];
                
                for(idy = 0; idy < fieldObject.length; idy++) {
                    var fValue = fieldObject.item(idy).value;
                    
                    if(fValue == tValue) {
                        if(multipleSel == true) {
                            fieldObject.item(idy).selected = true;
                        }
                        else {
                            fieldObject.item(idy).checked = true;
                        }
                    }
                }
            }
        }
    }
}

/* - Recovery method overriding  ------------------------------------------ */

/* 
 * Allows the developper to override the recovery method.
 *
 * @parameter: the new recovery method.
 *
 * @return: nothing
 */
function DataHelper_setRecoveryFunction(_function) {
    this.recoveryMethod = _function;
}

/* - Object/Constructor --------------------------------------------------- */

/* 
 * Constructor or the DataHelper object
 *
 * @parameter: the cookie name to restore
 *
 * @return: an instance of DataHelper
 */
function DataHelper(cookieName) {

    this.cookies                                = new DataCookie(cookieName, true);
    this.fields                                 = new Array();
    this.tagIds                                 = new Array();
    
    this.recoveryMethod                         = DataHelper_basicRecoveryMethod;
    
    DataHelper.prototype.addField               = DataHelper_addField;
    DataHelper.prototype.addFieldTag            = DataHelper_addFieldTag;
    DataHelper.prototype.restoreData            = DataHelper_restoreData;
    DataHelper.prototype.setRecoveryFunction    = DataHelper_setRecoveryFunction;
}

/* 
 * Constructor or the DataFormHelper object
 *
 * @parameter: the form name
 *
 * @return: an instance of DataFormHelper
 */
function DataFormHelper(form) {
    var cookieName      = "";
    var cookieNameParam  = form.cookieNameParam;
    
    if(cookieNameParam) {
        cookieName = cookieNameParam.value;
    }
    
    this.form                                       = form;
    this.cookies                                    = new DataCookie(cookieName, true);
    this.fields                                     = new Array();
    this.tagIds                                     = new Array();
    
    this.recoveryMethod                             = DataFormHelper_basicRecoveryMethod;
    
    DataFormHelper.prototype.addField               = DataHelper_addField;
    DataFormHelper.prototype.addFieldTag            = DataHelper_addFieldTag;
    DataFormHelper.prototype.restoreData            = DataFormHelper_restoreData;
    DataFormHelper.prototype.setRecoveryFunction    = DataHelper_setRecoveryFunction;
}

