
function trim(str){
    if(!str) return "";
    return str.replace(/^\s*|\s*$/g,"");
}

function goHome() {
    location.href = "/luxury/index.jsp"
}

function setImageSource(src, suffixOver, suffixStateless, format){
    newSrc = src.substring(0, (src.length - format.length));
    suffix = newSrc.substring((newSrc.length - suffixOver.length), newSrc.length);
    if(suffix == suffixOver){
        simpleSource = newSrc.substring(0,(newSrc.length - suffix.length));
        return simpleSource+suffixStateless+format;
    }else if(suffix == suffixStateless){
        simpleSource = newSrc.substring(0,(newSrc.length - suffix.length));
        return simpleSource+suffixOver+format;
    }			
}

function swapTab(img){
    newSrc = setImageSource(img.src, "_over", "_gray", ".jpg");	
    img.src = newSrc;
}

function hover(obj){        
    var menus = obj.getElementsByTagName('ul');
    if(menus.length > 0){
        var subMenu = menus[0].style;
        if(subMenu.display == 'none' || subMenu.display == ''){
            subMenu.display = "block";           
            obj.getElementsByTagName("div").item(0).style.borderBottom = "none";
        }else{
            subMenu.display = "none";
            var d = obj.getElementsByTagName("div").item(0);
            if(d.className == "tabfalse"){
                d.style.borderBottom = "1px solid #FFFFFF";
            }             
        }
    }       
}

function initMenu(){
    if(document.all){
        var menus = document.getElementById('menu').getElementsByTagName('li');
        var length = menus.length;
        for(var i=0; i < length; i++){
            menus[i].onmouseover = menus[i].onmouseout = function(){hover(this);};           
        }
        document.getElementsByTagName("body")[0].style.height = (document.getElementById("main").offsetHeight + 175) + "px";
    } 
}

function openPopup(url, w, h, n) {
    
    var width = w ? w : 650;
    var height = h ? h : 700;
    
    var posx = (screen.width - width)/2;
    var posy = (screen.height - height)/2;
    
    var name= (!n) ? "popup"+Math.floor(Math.random()*110000) : n;
    
    var popup = window.open(url,name,'scrollbars=yes,menubar=no,status=no,width='+width+',height='+height+',top='+posy+',left='+posx+'');
    popup.focus();
    return popup;	
}

function resetNavigationMenu(){
    document.getElementById("propertiesTab").className = "tabfalse";
    document.getElementById("boatsTab").className = "tabfalse";
    document.getElementById("aircraftsTab").className = "tabfalse";
    document.getElementById("carsTab").className = "tabfalse";
}

function resetHidden(id){ document.getElementById(id).setAttribute("value", ""); }

function showMiniForm(id){ document.getElementById(id).style.display = "block"; }

function hideMiniForm(id){ document.getElementById(id).style.display = "none"; }


/* functions pour les amenities custom */

/* ajouter des amenities */ 
function addOther(txtId, select, id, hidden){
    
    var input = document.getElementById(txtId);
    
    if(input.value != "") {
        
        var tmpStr = validateAmenityString(input.value);
        if(tmpStr != "" && tmpStr.length > 0){
            var leSelect = document.getElementById(select);
            var newOpt = document.createElement('option');
            newOpt.text = tmpStr;
            newOpt.value = tmpStr;
            try{
                leSelect.add(newOpt, null); // for real compliant browsers
            }catch(ex){
                leSelect.add(newOpt); // exception --- IE of course ... 
            }
            // ajouter la string au type hidden
            createAmenitiesString(select, hidden);
        }			
    }
    input.value = "";
}

/* deleter l'amenity selectionne */
function deleteSelected(select, hidden){
    var leSelect = document.getElementById(select);
    var opt;
    try{
        opt = leSelect.options[leSelect.selectedIndex];
    }catch(ex){
        return;
    }
    if(opt.value != "null"){
        for(var i = 1 ; i < leSelect.options.length ; i++ ){
            if(leSelect.options[i].selected){
                leSelect.remove(i);
            }
        }
        createAmenitiesString(select, hidden);
    }
}

/* creation de la string a passer pour la sauvegarde */
function createAmenitiesString(select, hidden){
    var leSelect = document.getElementById(select);
    var length = leSelect.options.length;
    var str = " ";
    for(var i=1 ; i<length ; i++){
        str += '<;>' + leSelect.options[i].value ;       
    }
    if(str.length > 0) {
        str = str.substring(1);
    }
    document.getElementById(hidden).value = str;
}

function deleteBlankAmenities(select, hidden){
    try{
        var leSelect = document.getElementById("otherSelect");
        var opt;
        for(var i = (leSelect.options.length - 1) ; i > 0  ; i--){
            if(leSelect.options[i].value == ""){
                leSelect.selectedIndex = i;
                deleteSelected(select, hidden);
            }
        }	
    }catch(ex){}
}

/* pour que la string passee comme nouvelle amenity ne soit pas trop longue */
function validateAmenityString(str) {
    str = trim(str);
    if(str.length > 28){
        str = str.substring(0, 28);
    }
    return str;
}





function showDDList(ddlid){
    alert(document.getElementById(ddlid).innerHTML);	
}


function showError(msg) {
    if(msg != "")
        document.write("&nbsp;<a href='#' class='error contentFontText' onmouseover='return overlib(\""+msg+"\",CAPTION, \"ERROR\");' onmouseout='return nd();'>&laquo; ERROR</a>");
}

function writeOptionsRange(begin, end, skip, selected, commaseparated, showplus) {
    var nb;
    for(var i = begin ; i <= end ; i += skip) {
        nb = i;
        if(commaseparated) nb = formatNumber(nb);
        document.write('<option value="' + i + '"' + (i == selected ? ' selected' : '') + '>' + nb + ((i == end && showplus) ? ' +' : '') + '</option>');
    }
}

function formatNumber(number) {
    var formattedNumber = "";
    number = number.toString(); // conversion en string
    
    while(number.length > 3) {
        formattedNumber = "," + number.substr(number.length - 3, 3) + formattedNumber;
        number = number.substr(0, number.length - 3);
    }
    
    if(number.length > 0)
        formattedNumber = number + formattedNumber;
    else
        formattedNumber = formattedNumber.substr(0, 1);
    
    return formattedNumber;
}

function showSendToFriendForm(idForm){
    var display = document.getElementById(idForm).style.display;
    if(display == "none"){
        document.getElementById(idForm).style.display = "block";
    }else{
        document.getElementById(idForm).style.display = "none";
    }
}

function openCurrency() {
    window.open('/luxury/jsp/common/ucc.html', 'Currency conversion', 'toolbar=no,menubar=no,scrollbars=yes,width=700,height=450');
}



/********************************************************************************
 AIRCRAFT MULTIPLE ENGINE FORM MANAGER
 *********************************************************************************/
function AddEngine() {
    var ddNewEngineManufacturer = document.getElementById("ddNewEngineManufacturer");
    var txtNewEngineModel = document.getElementById("txtNewEngineModel");
    var txtNewEngineType = document.getElementById("txtNewEngineType");
    var txtNewEngineThrustTakeOff = document.getElementById("txtNewEngineThrustTakeOff");
    var txtNewEngineThrustApr = document.getElementById("txtNewEngineThrustApr");
    
    var bValid = true;
    bValid &= ValidateAddEngineField(txtNewEngineThrustApr);
    bValid &= ValidateAddEngineField(txtNewEngineThrustTakeOff);
    bValid &= ValidateAddEngineField(txtNewEngineType);
    bValid &= ValidateAddEngineField(txtNewEngineModel);
    bValid &= ValidateAddEngineDropDown(ddNewEngineManufacturer);
    
    if(!bValid)
        return;
    
    var nbEngines;
    var szNewEngineString = "";
    var enginesField = document.getElementById("txtEngines");
    
    if(enginesField.value == "")
        nbEngines = 0;
    else
        nbEngines = enginesField.value.split("|").length;
    
    if(nbEngines > 0)
        szNewEngineString = "|";
    
    szNewEngineString += getEngineString(ddNewEngineManufacturer.value, txtNewEngineModel.value, txtNewEngineType.value,
    txtNewEngineThrustTakeOff.value, txtNewEngineThrustApr.value);
    
    enginesField.value += szNewEngineString;
    
    DisplayEngines();
}

function DeleteEngine(order) {
    var enginesField = document.getElementById("txtEngines");
    var szNewEngineString = "";
    var engines = enginesField.value.split("|");
    var i;
    
    for(i = 0 ; i < engines.length ; i++) {
        if(i == order)
            continue;
        else
            szNewEngineString += engines[i] + "|";
    }
    
    if(szNewEngineString.length > 0)
        szNewEngineString = szNewEngineString.substring(0, szNewEngineString.length - 1);
    
    enginesField.value = szNewEngineString;
    
    DisplayEngines();
}

function DisplayEngines() {
    var enginesField = document.getElementById("txtEngines").value;
    var spanEngines = document.getElementById("spanEngines");
    var ddAircraftManufacturersList = document.getElementById("ddAircraftManufacturersList");
    var i;
    
    if(enginesField == "") {
        spanEngines.innerHTML = "";
        return;
    }
    
    var engines = new Array();
    var output = "";
    
    engines = enginesField.split("|");
    
    for(i = 0 ; i < engines.length ; i++) {
        var engine = new Array();
        var order;
        
        engine = engines[i].split(';');
        
        output += '<table style="width: 100%;" class="darkLabel">';
        output += '<tr>';
        output += '<th colspan="4" style="padding-left: 10px;" class="darkerLabel">ENGINE #' + (i+1) + '</td>';
        output += '</tr>';
        output += '<tr>';
        output += '<td>Manufacturer</td>';
        
        output += '<td><select id="ddEngine' + i + 'Manufacturer">';
        output += ddAircraftManufacturersList.innerHTML.toString().replace('<option value="' + engine[0].split('=')[1] + '">', '<option value="' + engine[0].split('=')[1] + '" selected>');
        output += '</select></td>';
        
        output += '<td>Model</td>';
        output += '<td><input id="txtEngine' + i + 'Model" value="' + engine[1].split('=')[1] + '" class="textInputElementLarge" /></td>';
        output += '</tr>';
        output += '<tr>';
        output += '<td>Type</td>';
        output += '<td><input id="txtEngine' + i + 'Type" value="' + engine[2].split('=')[1] + '" class="textInputElementLarge" /></td>';
        output += '<td>Thrust (takeoff)</td>';
        output += '<td><input id="txtEngine' + i + 'ThrustTakeOff" value="' + engine[3].split('=')[1] + '" class="textInputElementLarge" /></td>';
        output += '</tr>';
        output += '<tr>';
        output += '<td>Thrust (APR)</td>';
        output += '<td><input id="txtEngine' + i + 'ThrustApr" value="' + engine[4].split('=')[1] + '" class="textInputElementLarge" /></td>';
        output += '<td colspan="2"><a href="javascript:ModifyEngine(' + i + ');" style="color: #8B8A38;text-transform: uppercase;font-size: 105%;">Modify engine</a>&nbsp;&nbsp;&nbsp;&nbsp;<a href="javascript:DeleteEngine(' + i + ');" style="color: #8B8A38;text-transform: uppercase;font-size: 105%;">Delete engine</a></td>';
        output += '</tr>';
        output += '</table>';
    }
    
    spanEngines.innerHTML = output;
}

function getEngineString(szManufacturer, szModel, szType, szThrustTakeOff, szThrustApr) {
    return "manufacturer=" + szManufacturer + ";model=" + szModel + ";type=" + szType + ";thrust_takeoff=" +
    szThrustTakeOff + ";thrust_apr=" + szThrustApr + ";"
}

function ModifyEngine(order) {
    var ddEngineManufacturer = document.getElementById("ddEngine" + order + "Manufacturer");
    var txtEngineModel = document.getElementById("txtEngine" + order + "Model");
    var txtEngineType = document.getElementById("txtEngine" + order + "Type");
    var txtEngineThrustTakeOff = document.getElementById("txtEngine" + order + "ThrustTakeOff");
    var txtEngineThrustApr = document.getElementById("txtEngine" + order + "ThrustApr");
    
    var bValid = true;
    bValid &= ValidateAddEngineField(txtEngineThrustApr);
    bValid &= ValidateAddEngineField(txtEngineThrustTakeOff);
    bValid &= ValidateAddEngineField(txtEngineType);
    bValid &= ValidateAddEngineField(txtEngineModel);
    bValid &= ValidateAddEngineDropDown(ddEngineManufacturer);
    
    if(!bValid)
        return;
    
    var enginesField = document.getElementById("txtEngines");
    var szNewEngineString = "";
    var engines = enginesField.value.split("|");
    var i;
    
    for(i = 0 ; i < engines.length ; i++) {
        if(i == order) {
            szNewEngineString += getEngineString(ddEngineManufacturer.value, txtEngineModel.value, txtEngineType.value,
            txtEngineThrustTakeOff.value, txtEngineThrustApr.value) + "|";
        }
        else
            szNewEngineString += engines[i] + "|";
    }
    
    if(szNewEngineString.length > 0)
        szNewEngineString = szNewEngineString.substring(0, szNewEngineString.length - 1);
    
    enginesField.value = szNewEngineString;
    
    DisplayEngines();
}


function ValidateAddEngineDropDown(dropDown) {
    if(dropDown.selectedIndex == 0) {
        dropDown.style.color = "red";
        dropDown.focus();
        return false;
    }
    else {
        dropDown.style.color = "#333333";
        return true;
    }
}

function ValidateAddEngineField(field) {
    if(field.value == "") {
        field.style.border = "solid red 1px";
        field.focus();
        return false;
    }
    else {
        field.style.border = "solid #333333 1px";
        return true;
    }
}






function initSubstepOver(id, normalColor, overColor){
    
    var cell = document.getElementById(id);
    
    cell.bgColor = normalColor;
    cell.setAttribute("normalColor", normalColor);
    cell.setAttribute("overColor", overColor);
    
    cell.onmouseout = function(){
        this.bgColor = this.getAttribute("normalColor");
    }
    cell.onmouseover = function(){
        this.bgColor = this.getAttribute("overColor");
    }   
}

function gotoStep(index, dontSave){   
    if(dontSave){
        document.forms[0].dontSave = "true";
    }
    document.forms[0].step.value = index;
    TabbedPane.getInstance().preSubmit();
    document.forms[0].submit();
}


function validTabs(){
    
    var tabs = TabbedPane.getInstance();
    
    if(tabs.getCurrentSection().isValid()){
        
        var nextSection = tabs.getNextSection();
        
        if(nextSection != null){
            tabs.forceShowSection(nextSection);
        }else{
            gotoStep('3');
        }
        
    }else{
        tabs.getCurrentSection().showErrors();
    }
}

function previousStep(){
    var tabs = TabbedPane.getInstance();
    var previous = tabs.getPreviousSection();
    
    if(previous == null){
        gotoStep('1')
    }else{
        tabs.forceShowSection(previous);
    }
}

function saveNow(){
    
    var invalidTab = TabbedPane.getInstance().getInvalidSection();
    
    if(invalidTab != null){
        TabbedPane.getInstance().forceShowSection(invalidTab);
        invalidTab.showErrors();
    }else{
        gotoStep('2',true);
    }
}    


function showError(msg){
    if(msg != ""){
        document.getElementById("errorTitle").style.display = "block";
        document.write("<a href='#' class='error' onmouseover='return overlib(\""+msg+"\",CAPTION, \"ERROR\");' onmouseout='return nd();'>&nbsp;&nbsp;ERROR&nbsp;&nbsp;</a>");
    }
}

function validateAndSendContactUs(contextPath) {
    var txtName = document.getElementById("txtName").value;
    var txtComment = document.getElementById("txtComment").value;
    var txtEmail = document.getElementById("txtEmail").value;
    
    var nameValid = (txtName != "") ? true : false;
    var commentValid = (txtComment != "") ? true : false;
    var emailValid = checkEmail(txtEmail);
    var isValid = true;
    
    if(!nameValid){
        document.getElementById("msgName").style.visibility = "visible";
        isValid = false;
    }else{ document.getElementById("msgName").style.visibility = "hidden"; }
    if(!emailValid){
        document.getElementById("msgEmail").style.visibility = "visible";
        isValid = false;
    }else{ document.getElementById("msgEmail").style.visibility = "hidden"; }	
    if(!commentValid){
        document.getElementById("msgComment").style.visibility = "visible";
        isValid = false;
    }else{ document.getElementById("msgComment").style.visibility = "hidden"; }
    
    var inputs = document.getElementById("contactus").getElementsByTagName("input");
    var type = "";
    var name = "";
    for(var prop in inputs){
        if(navigator.appName != "Microsoft Internet Explorer"){ name = inputs[prop].name }
        else{ name = prop; }		
        try{
            if(name.indexOf("chk_") != -1){
                if(inputs[prop].checked == true){
                    type += (inputs[prop].value + ", ");
                }
            }
        }catch(ex){}		
    }
    
    if(type == ""){ type = "Other"; }
    else{ type = type.substring(0, (type.length - 2) ); }
    
    if(isValid){
        
        var onLoad = function(result){
            document.getElementById("contactUsConfirmMessage").style.display = "block";
            document.getElementById("contactUsFormElements").style.display = "none";
            document.getElementById("txtName").value = "";
            document.getElementById("txtEmail").value = "";
            document.getElementById("txtComment").value = "";
            for(var prop in inputs){
                if(navigator.appName != "Microsoft Internet Explorer"){ name = inputs[prop].name }
                else{ name = prop; }		
                try{
                    if(name.indexOf("chk_") != -1){
                        inputs[prop].checked = false;
                    }
                }catch(ex){}		
            }
        }
        
        doc = new XML();  
        doc.addListener(onLoad);
        doc.setAttribute("txtName", txtName);	  
        doc.setAttribute("txtEmail", txtEmail);
        doc.setAttribute("txtComment", txtComment);
        doc.setAttribute("type", type);
        doc.setAttribute("uniqId",Math.round(Math.random()*10000));
        doc.sendAndLoad(contextPath+"contact-us-form.do");
        
    }
    
}

function checkEmail(str) {
    
    var at="@"
    var dot="."
    var lat=str.indexOf(at)
    var lstr=str.length
    var ldot=str.indexOf(dot)
    
    //TODO: beaucoup d'optimisation à faire ici, un seul indexOf par charactère devrait suffire 
    
    if (str.indexOf(at)==-1){ return false; }
    
    if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){ return false; }
    
    if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){ return false; }
    
    if (str.indexOf(at,(lat+1))!=-1){ return false; }
    
    if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){ return false; }
    
    if (str.indexOf(dot,(lat+2))==-1){ return false; }
    
    if (str.indexOf(" ")!=-1){ return false; }
    
    return true;				
}

function showError(msg){
    if(msg != ""){
        document.write("<a href='#' class='error' onmouseover='return overlib(\""+msg+"\",CAPTION, \"ERREUR\");' onmouseout='return nd();'>*</a>");
    }
}











