var BrowserDetect = {
    init: function () {
        this.browser = this.searchString(this.dataBrowser) || 'An unknown browser';
        this.version = this.searchVersion(navigator.userAgent)
                || this.searchVersion(navigator.appVersion)
                || 'an unknown version';
        this.OS = this.searchString(this.dataOS) || 'an unknown OS';
    },
    searchString: function (data) {
        for (var i = 0; i < data.length; i++) {
            var dataString = data[i].string;
            var dataProp = data[i].prop;
            this.versionSearchString = data[i].versionSearch || data[i].identity;
            if (dataString) {
                if (dataString.indexOf(data[i].subString) != -1)
                    return data[i].identity;
            }
            else if (dataProp)
                return data[i].identity;
        }
    },
    searchVersion: function (dataString) {
        var index = dataString.indexOf(this.versionSearchString);
        if (index == -1) return;
        return parseFloat(dataString.substring(index + this.versionSearchString.length + 1));
    },
    dataBrowser: [
        {     string: navigator.userAgent,
            subString: 'OmniWeb',
            versionSearch: 'OmniWeb',
            identity: 'OmniWeb'
        },
        {
            string: navigator.vendor,
            subString: 'Apple',
            identity: 'Safari'
        },
        {
            prop: window.opera,
            identity: 'Opera'
        },
        {
            string: navigator.vendor,
            subString: 'iCab',
            identity: 'iCab'
        },
        {
            string: navigator.vendor,
            subString: 'KDE',
            identity: 'Konqueror'
        },
        {
            string: navigator.userAgent,
            subString: 'Firefox',
            identity: 'Firefox'
        },
        {
            string: navigator.vendor,
            subString: 'Camino',
            identity: 'Camino'
        },
        {        // for newer Netscapes (6+)
            string: navigator.userAgent,
            subString: 'Netscape',
            identity: 'Netscape'
        },
        {
            string: navigator.userAgent,
            subString: 'MSIE',
            identity: 'Explorer',
            versionSearch: 'MSIE'
        },
        {
            string: navigator.userAgent,
            subString: 'Gecko',
            identity: 'Mozilla',
            versionSearch: 'rv'
        },
        {         // for older Netscapes (4-)
            string: navigator.userAgent,
            subString: 'Mozilla',
            identity: 'Netscape',
            versionSearch: 'Mozilla'
        }
    ],
    dataOS : [
        {
            string: navigator.platform,
            subString: 'Win',
            identity: 'Windows'
        },
        {
            string: navigator.platform,
            subString: 'Mac',
            identity: 'Mac'
        },
        {
            string: navigator.platform,
            subString: 'Linux',
            identity: 'Linux'
        }
    ]

};


function stop_bubble(e) {
    if (!e) var e = window.event;
    e.cancelBubble = true;
    if (e.stopPropagation) e.stopPropagation();
    return true;
}

var Browser = {
    setEventPropagation: function (event, boolValue) {
        BrowserDetect.init();

        if (BrowserDetect.browser.indexOf('Explorer') != -1) {
            event.cancelBubble = !boolValue;
        } else if (BrowserDetect.browser.indexOf('Opera') != -1) {
            if (event.stopPropagation) event.stopPropagation();
            event.cancelBubble = !boolValue;
        } else if (BrowserDetect.browser.indexOf('Firefox') != -1) {
            if (event.stopPropagation) event.stopPropagation();
            event.cancelBubble = !boolValue;
        } else if (BrowserDetect.browser.indexOf('Mozilla') != -1) {
            if (event.stopPropagation) event.stopPropagation();
            event.cancelBubble = !boolValue;
        } else if (BrowserDetect.browser.indexOf('Netscape') != -1) {
            if (event.stopPropagation) event.stopPropagation();
            event.cancelBubble = !boolValue;
        } else if (BrowserDetect.browser.indexOf('Konqueror') != -1) {
            if (event.stopPropagation) event.stopPropagation();
            event.cancelBubble = !boolValue;
        } else if (BrowserDetect.browser.indexOf('Safari') != -1) {
            if (event.stopPropagation) event.stopPropagation();
            event.cancelBubble = !boolValue;
        }
    }
};


function validateContent() {
    if (typeof(validateForm) != "undefined") {
        return validateForm();
    } else {
        return true;
    }
}

function onSubmitMailer(oForm) {
    BrowserDetect.init();
    if (!validateContent()) {
        return false;
    }
    var messageInput = document.createElement("INPUT");
    messageInput.type = "hidden";
    messageInput.id = "messageInput";
    messageInput.name = "messageInput";

    var oDiv = document.getElementById("interpretable");
//"interpretable" is the id of the div for wich we want to calculate the inner html
    changeToLabels(oDiv);

    if (BrowserDetect.browser.indexOf('Explorer') != -1) {
        messageInput.value = oDiv.innerHTML;
    } else {
        messageInput.value = calculateInnerHtml(oDiv);
    }
    oForm.appendChild(messageInput);

//    alert("Your contact details have been sent!");
    return true;
}

function calculateInnerHtml(node) {
    var data = "";
    if (node.tagName != null) {
        data = data + " <" + node.tagName;
        var i = 0;
        var attributes = node.attributes;
        if (attributes != null) {
            for (i = 0; i < attributes.length; i++) {
                var attribute = attributes[i];
                data = data + " " + attribute.name + "=\"" + attribute.value + "\" ";
            }
        }

        var elements = node.childNodes;

        if (elements.length == 0) data = data + "/";
        data = data + ">";

        if (elements != null) {
            for (i = 0; i < elements.length; i++) {
                var element = elements[i];
                data = data + calculateInnerHtml(element);
            }
            data = data + "</" + node.tagName + ">";
        }
    } else {
        data = data + node.textContent;
    }
    return data;
}

function changeToLabels(node) {
    var elements = node.childNodes;
    var i = 0;
    var gasit = false;
    for (i = 0; i < elements.length; i++) {
        var element = elements[i];
        if (element.tagName != null) {

            if (element.tagName.toUpperCase().indexOf("INPUT") != -1) {
                if (element.type.toUpperCase().indexOf("HIDDEN") != -1) {
                }
                else if (element.type.toUpperCase().indexOf("SUBMIT") != -1) {
                    node.removeChild(element);
                }
                else if (element.type.toUpperCase().indexOf("BUTTON") != -1) {
                    node.removeChild(element);
                }
                else  if (element.type.toUpperCase().indexOf("FILE") != -1) {
                    node.removeChild(element);
                }
                else if (element.type.toUpperCase().indexOf("IMAGE") != -1) {
                    node.removeChild(element);
                }
                else if (element.type.toUpperCase().indexOf("RESET") != -1) {
                    node.removeChild(element);
                }
                else if (element.type.toUpperCase().indexOf("PASSWORD") != -1) {
                    var newElement = document.createElement('span');
                    newElement.innerHTML = "******";
                    node.replaceChild(newElement, element);
                }
                else if (element.type.toUpperCase().indexOf("RADIO") != -1) {
                    var newElement = document.createElement('span');
                    if (element.checked) {
                        newElement.innerHTML = element.value;
                    } else {
                        newElement.innerHTML = "";
                    }
                    node.replaceChild(newElement, element);
                }
                else if (element.type.toUpperCase().indexOf("CHECKBOX") != -1) {
                    var newElement = document.createElement('span');
                    if (element.checked) {
                        newElement.innerHTML = "YES";
                    } else {
                        newElement.innerHTML = "NO";
                    }
                    node.replaceChild(newElement, element);
                }
                else if (element.type.toUpperCase().indexOf("TEXT") != -1) {
                    var newElement = document.createElement('span');
                    newElement.innerHTML = element.value;
                    node.replaceChild(newElement, element);
                }
            }
            else if ((element.tagName.toUpperCase().indexOf("OPTION") != -1)) {
                var newElement = document.createElement('span');
                if (gasit) {
                    newElement.innerHTML = "";
                } else {
                    if (element.selected) {
                        newElement.innerHTML = element.innerHTML;
                        gasit = true;
                    } else {
                        newElement.innerHTML = "";
                    }
                }
                node.replaceChild(newElement, element);
            }
            else if ((element.tagName.toUpperCase().indexOf("SELECT") != -1)) {
                changeToLabels(element);
                var newElement = document.createElement('span');
                newElement.innerHTML = element.innerHTML;
                node.replaceChild(newElement, element);
            }
            else if ((element.tagName.toUpperCase().indexOf("TEXTAREA") != -1)) {
                var newElement = document.createElement('span');
                newElement.innerHTML = element.value;
                node.replaceChild(newElement, element);
            }
            else {
                changeToLabels(element);
            }
        }
    }
}


function getInputFiles(node) {
    var resultat = new Array();
    var elements = node.childNodes;
    var i = 0;

    for (i = 0; i < elements.length; i++) {
        var element = elements[i];
        if (element.tagName != null) {
            if (element.tagName.toUpperCase().indexOf("INPUT") != -1) {
                if (element.type.toUpperCase().indexOf("FILE") != -1) {
                    resultat.push(element);
                }
            }
            else {
                var childResultat = getInputFiles(element);
                if (childResultat.length > 0) {
                    resultat = resultat.concat(childResultat);
                }
            }
        }
    }
    return resultat;
}