function SpdtUtil() {
}
SpdtUtil.prototype.parseTemplate = function(templ,tag,str) {
    sub1 = templ.substring(0,templ.indexOf(tag));
    sub2 = templ.substring(templ.indexOf(tag)+tag.length,templ.length);
    return sub1+str+sub2;
}
SpdtUtil.prototype.parseTemplateArray = function(templ,tags,strs) {
    var rtno = templ;
    for (var n = 0; n < tags.length; n++) {
        if (templ.indexOf(tags[n]) > -1) {
            rtno = parseTemplate(rtno,tags[n],strs[n]);
        }
    }
    return rtno;
}
SpdtUtil.prototype.parseTemplateXML = function(templ,xmlSource,xmlVariables) {
    var rtno = "";
    var aTempl = templ.split("{");
    var posEnd = -1;
    for (var nToken = 0; nToken < aTempl.length; nToken++) {
        posEnd = aTempl[nToken].indexOf("}");
        if (posEnd == -1) {
            rtno += aTempl[nToken];
        } else {
            xmlExpr = aTempl[nToken].substring(0,posEnd);
            xmlValue = this.getXMLValue(xmlSource,xmlExpr,xmlVariables);
            rtno += xmlValue;
            rtno +=  aTempl[nToken].substring(posEnd+1);
        }
    }
    return rtno;
}
SpdtUtil.prototype.getXMLValue = function(xmlSource,xmlExpr,xmlVariables) {
    var rtno = "";
    if (xmlExpr.indexOf("@") == 0) {
        rtno = xmlSource.getAttribute(xmlExpr.substring(1));
    } else if (xmlExpr.indexOf("$") == 0) {
        rtno = xmlVariables[xmlExpr.substring(1)];
    } else {
        alert("SpdtUtil: nao consegui fazer parse da xmlExpr "+xmlExpr);
    }
    return rtno;
}
SpdtUtil.prototype.setCenteredPosition = function (elmnt,_width,_height) {
    var posTop = ((document.body.clientHeight - _height) / 2);
    var posLeft = ((document.body.clientWidth - _width) / 2);
    posTop += document.body.scrollTop;
    elmnt.style.top = posTop+"px";
    elmnt.style.left = posLeft+"px";
} 
SpdtUtil.prototype.setDownPosition = function (elmnt,baseElem) {
    var offsetTrail = baseElem;
    var offsetLeft = 0;     
    var offsetTop = 0;
    while (offsetTrail) {
        if (offsetTrail.style.position == "absolute") {
            break;
        }
        offsetLeft += offsetTrail.offsetLeft;
        offsetTop += offsetTrail.offsetTop;
        offsetTrail = offsetTrail.offsetParent;
    }
    
    var posLeft = offsetLeft;
    var posTop = offsetTop + parseInt(baseElem.offsetHeight);
    
    elmnt.style.top = posTop+"px";
    elmnt.style.left = posLeft+"px";
}
SpdtUtil.prototype.setOverCenteredPosition = function (elmnt,_width,_height,baseElem) {
    var posLeft = ((document.body.clientWidth - _width) / 2);
    elmnt.style.left = posLeft+"px";
    var offsetTrail = baseElem;
    var offsetLeft = 0;     
    var offsetTop = 0;
    while (offsetTrail) {
        offsetLeft += offsetTrail.offsetLeft;
        offsetTop += offsetTrail.offsetTop;
        offsetTrail = offsetTrail.offsetParent;
    }
    var posTop = offsetTop;
    elmnt.style.top = posTop+"px";
    elmnt.style.left = posLeft+"px";
}
SpdtUtil.prototype.setOverPosition = function (elmnt,baseElem) {
    var offsetTrail = baseElem;
    var offsetLeft = 0;     
    var offsetTop = 0;
    while (offsetTrail) {
        offsetLeft += offsetTrail.offsetLeft;
        offsetTop += offsetTrail.offsetTop;
        offsetTrail = offsetTrail.offsetParent;
    }
    
    var posLeft = offsetLeft;
    var posTop = offsetTop;
    elmnt.style.top = posTop+"px";
    elmnt.style.left = posLeft+"px";
}
function Comparable(type,name,oper,value) {
    this.type = type;
    this.name = name;
    this.oper = oper;
    this.value = value;
}

var _SpdtUtil = new SpdtUtil();
