function createXmlHttpRequest() {
   try {
      if (window.XMLHttpRequest) {
         var req = new XMLHttpRequest();
         // some older versions of Moz did not support the readyState property
         // and the onreadystate event so we patch it!
         if (req.readyState == null) {
            req.readyState = 1;
            req.addEventListener("load", function () {
               req.readyState = 4;
               if (typeof req.onreadystatechange == "function")
                  req.onreadystatechange();
            }, false);
         }
         return req;
      }
      if (window.ActiveXObject) {
         return new ActiveXObject("Microsoft.XmlHttp");
      }
   }
   catch (ex) {}
   // fell through
   throw new Error("Your browser does not support XmlHttp objects");
}
function refreshDiv(url, divid){
    var x = createXmlHttpRequest();
    x.open("GET",url,true);
    x.onreadystatechange = function(){
        if(x.readyState == 4) {
            document.getElementById(divid).innerHTML = x.responseText;
        }
    }
    x.send(null);
}

var keepaliveretries = 0;

function keepAliveAction(){
    var x = createXmlHttpRequest();
    var url = baseHREF+"keepAlive.do?page="+encodeURIComponent(location.href)+"&refresh="+Math.random();
    x.open("GET",url,true);
    x.onreadystatechange = function(){
        if(x.readyState == 4) {
            if(x.responseText.indexOf('Id') != -1){
                window.status = x.responseText;
                keepaliveretries = 0;
            }else{
                /*if the server stop for some reason, clearInterval*/
                //stopKeepAlive();
                if(keepaliveretries>2){
                    keepAliveError();
                }
                keepaliveretries++;
            }
        }
    }
    x.send(null);
}
function keepAliveError(){
    document.location.href = baseHREF+"user/home.do";
}
var keepAliveTimerId=null;
var keepAliveTimerRunning=false;
function keepAlive(interval){
    keepAliveAction();
    var msInterval = interval*60*1000;
    keepAliveTimerId = setInterval("keepAliveAction()",msInterval);
    keepAliveTimerRunning = true;
}
function stopKeepAlive(){
    if(keepAliveTimerRunning)
        clearInterval(keepAliveTimerId);
    keepAliveTimerRunning=false
}
function goTo(url){
    window.location.href = url;
}


function validateMaxLength(e)
{
        var key;
        var keychar;

        if (window.event) {
           key = window.event.keyCode;
        } else if (e) {
           key = e.which;
        } else {
           return true;
        }
        keychar = String.fromCharCode(key);
        keychar = keychar.toLowerCase();


        if (window.event) {
                e = window.event;
                target = e.srcElement;
        } else {
                target = e.target;
        }

        var maxLength = parseInt(target.attributes["maxlength"].value)
        if (target.value.length == maxLength) {
                var isTextKey = ((key >= 186 && key <= 222) || (key == 9) || (key == 13) || (key >= 109 && key <= 111) || (key >= 48 && key <= 90) || key == 32);
                if (isTextKey) {
                   return false;
                } else {
                   return true;
                }
        } else if (target.value.length > maxLength) {
                target.value = target.value.substring(0, maxLength);
                return false;
        } else {
                return true;
        }
}
function validAttachment(key, documentId){
    //$("attElement_"+key+"_"+documentId).style.display = "none";
    var code;
    new Ajax.Request(baseHREF+"validAttachment.do?workspaceKey="+key+"&documentID="+documentId+"&refresh="+new Date().getTime(), {
        method: 'get',
        asynchronous: false,
        onSuccess: function(transport) {
            code = transport.responseJSON;
        }
    });
    return code;
}

function projectInfoValidAttachment(key, documentId){
    var response = validAttachment(key, documentId);
    if(response.error=="notFound"){
        $("attElement_"+key+"_"+documentId).style.display = "none";
        return false;
    }else if(response.error=="forbidden"){
        alert(mapNotAvailableMessage);
        return false;
    }else if(response.error=="ok"){
        return true;
    }
}

function tabInfoValidAttachment(key, documentId){
    var response = validAttachment(key, documentId);
    if(response.error=="notFound"){
        $("attElement_"+key+"_"+documentId).style.display = "none";
        return false;
    }else if(response.error=="forbidden"){
        document.location.href = "map.do?workspaceKey="+key
        return false;
    }else if(response.error=="ok"){
        return true;
    }
}

function editValidAttachment(key, documentId){
    var response = validAttachment(key, documentId);
    if(response.error=="notFound"){
        $("attElement_"+key+"_"+documentId).style.display = "none";
        return false;
    }else if(response.error=="forbidden"){
        document.location.href = "map.do?workspaceKey="+key
        return false;
    }else if(response.error=="ok"){
        return true;
    }
}

function updatePub(group, index) {
    $("pubLoading_"+index).style.display = "block";
    $("pubContent_"+index).innerHTML = "";
    new Ajax.Updater("pubContent_"+index, 
        baseHREF+"pub.do", 
        {
            method: 'post',
            parameters: {group: group, index: index},
            evalScripts: true,
            onFailure: function(transport) {
                $("pubBox_"+index).style.display = "none";
            }
        }
    );
}

function containsScript(value){
    if(value.toLowerCase().search("<script.*>")!=-1)
        return true;
    if(value.toLowerCase().search("<iframe.*>")!=-1)
        return true;
    if(value.toLowerCase().search("<object.*>")!=-1)
        return true;
    if(value.toLowerCase().search("<applet.*>")!=-1)
        return true;
    if(value.toLowerCase().search("onload")!=-1)
        return true;
    if(value.toLowerCase().search("onunload")!=-1)
        return true;
    if(value.toLowerCase().search("onclick")!=-1)
        return true;
    if(value.toLowerCase().search("onmousedown")!=-1)
        return true;
    if(value.toLowerCase().search("onmouseover")!=-1)
        return true;
    if(value.toLowerCase().search("onmouseup")!=-1)
        return true;
    if(value.toLowerCase().search("onmouseout")!=-1)
        return true;
    if(value.toLowerCase().search("onclick")!=-1)
        return true;
    if(value.toLowerCase().search("ondblclick")!=-1)
        return true;
    if(value.toLowerCase().search("onblur")!=-1)
        return true;
    if(value.toLowerCase().search("onchange")!=-1)
        return true;
    if(value.toLowerCase().search("onselect")!=-1)
        return true;
    if(value.toLowerCase().search("onkeydown")!=-1)
        return true;
    if(value.toLowerCase().search("onkeypress")!=-1)
        return true;
    if(value.toLowerCase().search("onkeyup")!=-1)
        return true;
    return false;
}

function previewVideo(name){
    showViewportOverrideDiv();
    new Ajax.Updater("viewportOverrideDivContent",
        baseHREF+"pub/videos/main.jsp?name="+name,
        {
            parameters: {
                refresh: new Date().getTime()
            },
            evalScripts: true
        }
    );
    return false;
}