
/**
 * Liefert true oder false zurück.
 * Je nachdem ob sich die werte in übergebener Liste befinden.
 *
 * @param object which    Das zu prüfende Formularelement
 * @param object list_obj Die Liste zum Gegenprüfen.
 */
function isInKinderwagenfinderList( which, list_obj ) {
    tmp_val = which.name.replace(/module\_\_/,'');
    for ( attr in list_obj ) {
        if ( typeOf( list_obj[attr][tmp_val] ) != 'array' ) {
           if (list_obj[attr][tmp_val] == which.value) {
               return true;
           }
        }
        else {
           for (var i = 0, cnt = list_obj[attr][tmp_val].length; i < cnt; i++) {
               if (list_obj[attr][tmp_val][i] == which.value) {
                   return true;
               }
           }
        }
    }

    return false;
}


/**
 * Gibt eine Kopie der globalen Objectstruktur kinderwagenfinder_obj_arr zurück.
 * Diese Kopie enthält dann lediglich jene Elemente von kinderwagenfinder_obj_arr, deren
 * Membervariablen field_name den Wert field_value enthalten.
 * Wird statt des Wertes null als letzen Parameter ein Objekt übergeben, so wird
 * angenommen, das dies eine Teilstruktur von kinderwagenfinder_obj_arr ist und der
 * Algorithmus wird auf diese Teilstruktur angewendet. So kann kinderwagenfinder_obj_arr
 * nach und nach gefiltert werden.
 *
 * @param  string field_name
 * @param  string field_value
 * @param  object modified_list_obj_arr
 * @return object
 */
function getKinderwagenfinderList( field_name, field_value, modified_list_obj_arr ) {
  var kinderwagenfinder_copy_obj_arr = new Object();
  for ( attr in modified_list_obj_arr ) {
      tmp_val = modified_list_obj_arr[attr][field_name.replace(/module\_\_/,'')];

      if ( typeOf( tmp_val ) != 'array' ) {
         if (tmp_val == field_value) {
             kinderwagenfinder_copy_obj_arr[attr] = modified_list_obj_arr[attr];
         }
      }
      else {
         for (var i = 0, cnt = tmp_val.length; i < cnt; i++) {
             if (tmp_val[i] == field_value) {
                 kinderwagenfinder_copy_obj_arr[attr] = modified_list_obj_arr[attr];
                 break;
             }
         }
      }

  }

  return kinderwagenfinder_copy_obj_arr;
}


/**
 * Prüft die Abhängigkeiten der Optionen.
 *
 * @param  object which Das auslösende Formularelement.
 * @return void;
 */
function checkDependencies( which ) {
    var module_ff_form_obj = document.form_kinderwagenfinder;
    var cnt = module_ff_form_obj.elements.length;

    var kinderwagenfinder_list_arr = new Object();
    kinderwagenfinder_list_arr = arrayCopy(kinderwagenfinder_obj_arr);

    for (var i = 0; i < cnt; i++) {
        if (module_ff_form_obj.elements[i].type !== 'hidden') {
            // Filtere die Liste der Kinderwagenfinder, aufgrund der Auswahl
            if (module_ff_form_obj.elements[i].checked) {
                kinderwagenfinder_list_arr = getKinderwagenfinderList(module_ff_form_obj.elements[i].name, module_ff_form_obj.elements[i].value, kinderwagenfinder_list_arr);
            }
        }
    }

    // Ändere Styles der checkboxen / radiobuttons
    for (var i = 0; i < cnt; i++) {
        if ( isInKinderwagenfinderList( module_ff_form_obj.elements[i], kinderwagenfinder_list_arr ) ) {
           if (module_ff_form_obj.elements[i].parentNode.tagName == 'LABEL') {
               module_ff_form_obj.elements[i].parentNode.className = 'labelRadio';
           }
        }
        else {
           if (module_ff_form_obj.elements[i].parentNode.tagName == 'LABEL') {
               module_ff_form_obj.elements[i].checked = false;
               module_ff_form_obj.elements[i].parentNode.className = 'labelRadio grau';
           }
        }
    }
}

// Object.prototype.copy = function() interferes with mootools;
// rewrote as function
var arrayCopy = function (obj) {
     var tmp_obj = new Object();

     for (attr in obj) {
         tmp_obj[attr] = obj[attr];
     }

     return tmp_obj;
};



function typeOf(value) {
    var s = typeof value;
    if (s === 'object') {
        if (value) {
            if (typeof value.length === 'number'
             && !(value.propertyIsEnumerable('length'))
             && typeof value.splice === 'function') {
                s = 'array';
            }
        }
        else {
            s = 'null';
        }
    }
    return s;
}


function isEmpty(o) {
    var i, v;
    if (typeOf(o) === 'object') {
        for (i in o) {
            v = o[i];
            if (v !== undefined && typeOf(v) !== 'function') {
                return false;
            }
        }
    }
    return true;
}

String.prototype.entityify = function () {
    return this.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
};

String.prototype.quote = function () {
    var c, i, l = this.length, o = '"';
    for (i = 0; i < l; i += 1) {
        c = this.charAt(i);
        if (c >= ' ') {
            if (c === '\\' || c === '"') {
                o += '\\';
            }
            o += c;
        }
        else {
            switch (c) {
                case '\b':
                    o += '\\b';
                    break;
                case '\f':
                    o += '\\f';
                    break;
                case '\n':
                    o += '\\n';
                    break;
                case '\r':
                    o += '\\r';
                    break;
                case '\t':
                    o += '\\t';
                    break;
                default:
                    c = c.charCodeAt();
                    o += '\\u00' + Math.floor(c / 16).toString(16) +
                        (c % 16).toString(16);
            }
        }
    }
    return o + '"';
};

String.prototype.supplant = function (o) {
    var i, j, s = this, v;
    for (;;) {
        i = s.lastIndexOf('{');
        if (i < 0) {
            break;
        }
        j = s.indexOf('}', i);
        if (i + 1 >= j) {
            break;
        }
        v = o[s.substring(i + 1, j)];
        if (typeOf(v) !== 'string' && typeOf(v) !== 'number') {
            break;
        }
        s = s.substring(0, i) + v + s.substring(j + 1);
    }
    return s;
};

String.prototype.trim = function () {
    return this.replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1");
};

