/* 
 * coverage.java
 * 
 * Created: 2-Apr-2008
 * 
 * KOREM 2008.
 */
debug = function (msg) {
    if (window.console) {
        console.debug(msg);
    }
}
info = function (msg) {
    if (window.console) {
        console.info(msg);
    }
}

// Global variable for fix bug with wireless (Turbo Hub)
var isIE6 = navigator.userAgent.indexOf("MSIE 6") != -1 ? true : false;

function geocode(){
    /* if (!navInitialized) {
        return false;
    }*/
    clearResult();
    var isValide = true;
    if ($('site').value == 'Wireless') {
        isValide = validateWireless();
    }

    if (isValide) {
        var frm = $('geoform');  // IE needs a prototype reference
        if (!mapInstanceKey) {
            info('Please wait for map loading...');
            return false;
        }
        frm.mapInstanceKey.value = mapInstanceKey;
        //info('geocode map key: ' + mapInstanceKey + ' action: ' + frm.action);

        var isValid = validateForm();
        if (isValid == false) {
            return false;
        }

        $('searchCalled').value=true;

        $('result').innerHTML = '<span style="float:left;" id="searching">'+searching+'</span>';
        moveMessageBoxForWireless();

        var parms = frm.serialize(true);

        var callUrl=frm.action;
        if(sessionLess.enable){
            callUrl=callUrl+";jsessionid="+sessionLess.sessionId;
        }


        new Ajax.Updater('result',
            callUrl + addDateParam(),
            {
                method: 'post',
                parameters: parms,
                evalScripts: true,
                onSuccess: function(transport) {},
                onException: function(requester, exception) {
                    alert('Exception: ' + exception)
                },
                onFailure: function() {
                    alert('Error calling server.')
                    $('result').innerHTML = '';
                }
            }
            );
    }
    return false;
}


function setCoverageLayer(layerID,map){
    var site = $('site').value;
    var url = baseHREF+'/coverage/selectedLayer';
    if(sessionLess && sessionLess.enable) {
        url=url+";jsessionid="+sessionLess.sessionId;
    }
    // new Ajax.Request(url,
    new Ajax.Updater('pub', url,
    {
        method: 'get',
        parameters: {
            r:new Date().getTime(),
            layerId:layerID,
            site:site,
            mapKey:map
        },
        onSuccess: function(transport) {
            // $('pub').innerHTML = transport.responseText;
            wsnav.refreshMap();
            
        },
        
        onException: function(requester, exception) {
            alert('Exception: ' + exception)
        },
        onFailure: function() {
            alert('Error calling server.')
        }
    })
}

function closeResultWindow(){
    //$('result').style.display = 'none';
    alert("--");
}
function checkCoverage(matchId, url){
    if($('site').value == 'Wireless' && isIE6) {
        $('province').style.display = 'block';
    }
    var callUrl="coverage/find";
    if(url) {
        callUrl = url;
    }
    if(sessionLess.enable){
        callUrl=callUrl+";jsessionid="+sessionLess.sessionId;
    }

    $('searchCalled').value=true;
    var mid = matchId.gsub('match_','');
    var addr = eval($('jsonresults').innerHTML)[mid];
    var parms; // = frm.serialize(true);
    if(url) {
        parms = Object.toQueryString(addr)+'&mapInstanceKey='+mapInstanceKey+'&layerId='+$('layerId').value+'&site='+$('site').value;
    } else {
        parms = Object.toQueryString(addr)+'&mapInstanceKey='+mapInstanceKey+'&annotated='+ $('annotated').value+'&layerId='+$('layerId').value+'&site='+$('site').value;
    }
    clearResult();
    $('result').innerHTML = '<span style="float:left;" id="searching">'+searching+'</span>';
    moveMessageBoxForWireless();

    new Ajax.Updater('result',
        callUrl + addDateParam(),
        {
            method: 'post',
            parameters: parms,
            evalScripts: true,
            onSuccess: function(transport) {},
            onException: function(requester, exception) {
                alert('Exception: ' + exception)
            },
            onFailure: function() {
                alert('Error calling server.')
            }
        }
        );
    return false;
}
var keepalive;
function keepAlive() {
    keepalive = new PeriodicalExecuter(doKeepAlive, 720);
}
doKeepAlive = function() {
    if (!mapInstanceKey) {
        mapInstanceKey = slayer.state.mapInstanceKey; 
    }
    var url = baseHREF + 'keepalive' + addDateParam() + '&mapInstanceKey=' + mapInstanceKey;

    if(sessionLess.enable){
        url = baseHREF + 'keepalive;jsessionid='+sessionLess.sessionId + addDateParam() + '&mapInstanceKey=' + mapInstanceKey;
    }
    new Ajax.Request(url, {
        onSuccess: function(response) {
            var res = eval(response.responseText);
            if (!res || res.session == 'invalid') {
                info('Session is invalid.');
                keepalive.stop();
            } else {
                info('Session is valid.');
            }
        },
        onFailure: function() {
            info('Server is down.');
            keepalive.stop();            
        },
        onException: function(requester, exception) {
            debug('Exception: ' + exception);
            keepalive.stop();
        }
    });
}

function addDateParam() {
    return "?r=" + new Date().getTime();
}

function resetLocation(){
    $('street').value='';
    $('city').value='';
    $('province').value='';
    $('postalCode').value='';
    if ($('pub') != null)
        $('pub').innerHTML = '';
    if ($('result') != null)
        $('result').innerHTML = '';
}
function validateForm(){
   
    $('result').innerHTML = '';
    
    if($('msgGeocode')!=null){
        $('msgGeocode').innerHTML ='';
    }
    

    var postalCode = $('postalCode').value.strip().toUpperCase();
    var street = $('street').value.strip();
    var city = $('city').value.strip();
    
    if (postalCode.length > 0 && !isPostalCode(postalCode) && (city.length == 0 || !isValideField(city, null))) {
        $('result').innerHTML = '<span class="errmsg">'+invalidPCode+'</span>';
        moveMessageBoxForWireless();

        if($('msgGeocode')!=null){
            $('msgGeocode').innerHTML = '<span class="errmsg">'+invalidPCode+'</span>';
            moveMessageBoxForWireless();
            if ($('pub') != null)
                $('pub').innerHTML ='';
        }

        return false;
    }
    if(postalCode.length == 0) {
        var re = /[\*\?]/g;
    
        if (city.length == 0 ) {
            
            $('result').innerHTML = '<span class="errmsg">'+missingCity+'</span>';
            moveMessageBoxForWireless();

            if($('msgGeocode')!=null){
                $('result').innerHTML = '<span class="errmsg">'+missingCity+'</span>';
                moveMessageBoxForWireless();
                if ($('pub') != null)
                    $('pub').innerHTML ='';
            }
            
            return false;
        }
        if(!isValideField(city, invalidCity)){
            if($('msgGeocode')!=null){
                $('msgGeocode').innerHTML = '<span class="errmsg">'+invalidCity+'</span>';
                moveMessageBoxForWireless();
                if ($('pub') != null)
                    $('pub').innerHTML ='';
            }
            return false;
        }
        if(street.length != 0 && !isValideField(street, invalidStreet)){
            if($('msgGeocode')!=null){
                $('msgGeocode').innerHTML = '<span class="errmsg">'+invalidStreet+'</span>';
                moveMessageBoxForWireless();
                if ($('pub') != null)
                    $('pub').innerHTML ='';
            }
            return false;
        }
    } else if(!isValideField(city, invalidCity)){
        if($('msgGeocode')!=null){
            $('msgGeocode').innerHTML = '<span class="errmsg">'+invalidCity+'</span>';
            moveMessageBoxForWireless();
            if ($('pub') != null)
                $('pub').innerHTML ='';
        }
        return false;
    }
    return true;
}

function submitForm(evt)
{
    var keynum;
    if(window.event) // IE
    {
        keynum = evt.keyCode;
    }
    else if(evt.which) // Netscape/Firefox/Opera
    {
        keynum = evt.which;
    }
    if (keynum == 13)
    {
        geocode();
        
    }
}

function initZoomInfo() {
    var zoombar = $$('.zoomBarImg')[0];  // zoomBarDiv
    Event.observe(zoombar, 'mouseover', fadeinZoomInfo);
    Event.observe(zoombar, 'mouseout', fadeoutZoomInfo);
}

function fadeoutZoomInfo() {
    //var anim = dojo.fadeOut({ node: $('zoominfo'), duration: 400});
    //anim.play();
    $('zoominfo').style.opacity = 0;
    $('zoominfo').style.filter = 'alpha(opacity = 0)';
    //$('zoominfo').style.zIndex = 0;
    //evt.stopPropagation();
    return true;
}

function fadeinZoomInfo() {
    //    var anim = dojo.fadeIn({ node: $('zoominfo'), start:0, end:0.7, duration: 300});
    //    anim.play();
    $('zoominfo').style.opacity = 0.7;
    $('zoominfo').style.filter = 'alpha(opacity = 70)';
    //$('zoominfo').style.zIndex = 1001;
    //evt.stopPropagation();
    return true;
}

// from Bell.ca site
function isPostalCode(code){
    var postalCode = code.strip().toUpperCase();
    if (postalCode.length == 6 || postalCode.length == 7) {
        //       /^([ ]*[a-zA-Z][ ]*[0-9][ ]*){3,3}$/g
        var re = /^[a-z]\d[a-z]\s?\d[a-z]\d$/ig;
        match = postalCode.match(re);
        if (match != null) {
            return postalCode;
        }
    }
    return false;
}
function disableEnterKey(e)
{
    var key;

    if(window.event)
        key = window.event.keyCode;     //IE
    else
        key = e.which;     //firefox

    if(key == 13)
        return false;
    else
        return true;
}

/* Valide un param et affiche le message d'erreur si errorMessage != null et retourne un boolean
 * validateField parametre a valider
 * errorMessage message a afficher si pas null, si non retourne seullement false
 **/
function isValideField (validateField, errorMessage) {
    var re = /[\*\?\<\>]/g;
    if (validateField.match(re) != null) {
        if (errorMessage != null) {
            $('result').innerHTML = '<span class="errmsg">'+errorMessage+'</span>';
            moveMessageBoxForWireless();
        }
        return false;
    } else
        return true;
}

validateWireless = function () {
    var isValide = true;
    if ($('street').value.strip().length == 0 || $('city').value.strip().length == 0 ||
        $('province').value.strip().length == 0 || $('postalCode').value.strip().length == 0) {
        $('result').innerHTML = '<span class="errmsg">'+wirelessMandatory+'</span>';
        isValide = false;
    } else {
        if (isPostalCode($('postalCode').value.strip())) {
            if (isValideField($('city').value.strip(), invalidCity) && isValideField($('street').value.strip(), invalidStreet)){
                isValide = true;
            }
        } else {
            $('result').innerHTML = '<span class="errmsg">'+invalidPCode+'</span>';
            isValide = false;
        }
    }
    moveMessageBoxForWireless();
    return isValide;
}

function turboHubCheckAnother() {
    resetLocation();
    $('result').innerHTML = '';
    $('locationFields').style.display = 'block';
    $('info').style.display = 'block';
}

function moveMessageBoxForWireless() {
    if ($('site').value == 'Wireless') {
        if ($('result').firstChild.tagName == 'span' || $('result').firstChild.tagName == 'SPAN') {
            $('result').firstChild.style.marginTop = '35px';
            $('result').firstChild.style.marginLeft = '170px';
            $('result').firstChild.style.position = 'absolute';
            $('result').firstChild.style.width = '200px';
            $('result').firstChild.style.styleFloat = 'none';
            $('result').firstChild.style.cssFloat = 'none';
        }
    }
}

function clearResult() {
    $('result').innerHTML = '';
    var child = document.createElement('hr');
    $('result').appendChild(child);
    return true;
}