var Browser=new Object();
var ua=navigator.userAgent.toLowerCase();
Browser.isMozilla=(typeof document.implementation!='undefined')&&(typeof document.implementation.createDocument!='undefined')&&(typeof HTMLDocument!='undefined');
Browser.isIE=window.ActiveXObject?true:false;
Browser.isFirefox=(ua.indexOf("firefox")!=-1);
Browser.isSafari=(ua.indexOf("Browser.isSafari")!=-1);
Browser.isOpera=(typeof window.opera!='undefined');
var undefined;
String.prototype.trim=function(){return this.replace(/^\s+|\s+$/,'');};

function F(thisArg,funcRef){return function(){return funcRef.apply(thisArg,arguments);};}
function $trim(value){value=""+value;return value.replace(/^\s+|\s+$/,'');}
function $addScript(id,src){var o=$$("script");o.id=id;o.type="text/javascript";o.setAttribute("src",src);document.getElementsByTagName('head')[0].appendChild(o);return o;}
function $prefetchJS(id,src){var o=$$("link");o.id=id;o.setAttribute("type","text/css");o.setAttribute("rel","stylesheet");o.setAttribute("href",src);document.getElementsByTagName('head')[0].appendChild(o);return o;}
function htmlEncode(text){
  return text.replace(/&/g,'&amp;').replace(/"/g,'&quot;').replace(/</g,'&lt;').replace(/>/g,'&gt;');} /* " */

function $showMsg(text,timeout){$('errorMsg').innerHTML=text;$display('messageBar');if(typeof timeout!="undefined")window.setTimeout($hideMsg,timeout);}

function $hideMsg(){$nodisplay('errorMsg');}
function $$(tagName,id){var e=document.createElement(tagName);if(id)e.id=id;return e;}
function $(id){return document.getElementById(id);}
function T(e,text){var item;if(typeof e=="object")item=e;else item=$(e);if(Browser.isFirefox)item.textContent=text;else item.innerText=text;}
function $isVisible(e){var item=e;if(typeof item!="object")item=$(e);return(item.style.visibility!="hidden"&&item.style.display!="none");}
function $nodisplay(e){if(typeof e=="object")e.style.display="none";else if($(e)!=null)$(e).style.display="none";}
function $display(e){if(typeof e=="object")e.style.display="block";else if($(e)!=null)$(e).style.display="block";}
function $clearDisplay(e){if(typeof e=="object")e.style.display="";else if($(e)!=null)$(e).style.display="";}
function $hide(e){if(typeof e=="object")e.style.visibility="hidden";else if($(e)!=null)$(e).style.visibility="hidden";}
function $visible(e){if(typeof e=="object")e.style.visibility="visible";else if($(e)!=null)$(e).style.visibility="visible";}
function $toggleDisplay(e){var id=(typeof e=="object")?e.id:e;Utils.toggleVisibility(id);};
function $focus(e){if(typeof e=="object")e.focus();else $(e).focus();}
function $fix(e){return SU.fix(e);}
function $stopBubble(event){event=$fix(event);event.stopPropagation();event.preventDefault();return false;}
function $remove(e){var item=(typeof e=="object"?e:$(e));item.parentNode.removeChild(item);}
function $urlParam(name){var regexS="[\\?&]"+name+"=([^&#]*)";var regex=new RegExp(regexS);var tmpURL=document.location.href;var results=regex.exec(tmpURL);if(results==null)return"";else return results[1];}
function $fixTable(table){var tr=document.createElement("tr");table.firstChild.appendChild(tr);table.firstChild.removeChild(tr);}
function $scrollTop(){window.scrollTo(0,0);}
function $disabled(e){
  var item=e;
  if(typeof e!="object")item=$(e);
  
  if(item.disabled==true)return;
  item.disabled=true;
  item._cursor=""+item.style.cursor;
  item.style.cursor="default";
  item._color=""+item.style.color;
  item.style.color="lightgrey";
  item._onclick=item.onclick;
  item.onclick=function(){return false;}
}
function $enabled(e)
{
var item=e;
if(typeof e!="object")item=$(e);
if(item.disabled==false)return;
item.disabled=false;
item.style.cursor=""+item._cursor;
item.style.color=""+item._color;
item.onclick=item._onclick;
item._cursor=null;
item._color=null;
item._onclick=null;}
$toggle=function(btnId,divId)
{
var btn=$(btnId);
if($isVisible(divId)){$nodisplay(divId);btn.className=TOGGLE_ICON_EXPAND;}
else{$display(divId);btn.className=TOGGLE_ICON_COLLAPSE;}};
var Utils={
fix:function(event)
{
if(!event)event=window.event;
if(!event)return null;
if(!event.stopPropagation){event.stopPropagation=new Function('this.cancelBubble = true')}
if(!event.preventDefault){event.preventDefault=new Function('this.returnValue = true')}
if(typeof event.layerX=='undefined'&&typeof event.offsetX=='number'){
event.layerX=event.offsetX;event.layerY=event.offsetY;}
if(event.target){
if(event.target.nodeType==3)event.target=event.target.parentNode;}
if(!event.target&&event.srcElement){
event.target=event.srcElement;
if(event.type=='onmouseout'){
event.relatedTarget=event.toElement;}
else if(event.type=='onmouseover'){
event.relatedTarget=event.fromElement;}}
return event;},
getViewportWidth:function(){
var width=0;
if(document.documentElement&&document.documentElement.clientWidth){
width=document.documentElement.clientWidth;}
else if(document.body&&document.body.clientWidth){
width=document.body.clientWidth;}
else if(window.innerWidth){
width=window.innerWidth-18;}
return width;},
getContentHeight:function()
{
if(document.body&&document.body.clientHeight){
return document.body.clientHeight;}},
getViewportHeight:function(){
var height=0;
if(window.innerHeight){
height=window.innerHeight-18;}
else if(document.documentElement&&document.documentElement.clientHeight){
height=document.documentElement.clientHeight;}
else if(document.body&&document.body.clientHeight){
height=document.body.clientHeight;}
return height;},
getViewportScrollX:function(){
var scrollX=0;
if(document.documentElement&&document.documentElement.scrollLeft){
scrollX=document.documentElement.scrollLeft;}
else if(document.body&&document.body.scrollLeft){
scrollX=document.body.scrollLeft;}
else if(window.pageXOffset){
scrollX=window.pageXOffset;}
else if(window.scrollX){
scrollX=window.scrollX;}
return scrollX;},
getViewportScrollY:function(){
var scrollY=0;
if(document.documentElement&&document.documentElement.scrollTop){
scrollY=document.documentElement.scrollTop;}
else if(document.body&&document.body.scrollTop){
scrollY=document.body.scrollTop;}
else if(window.pageYOffset){
scrollY=window.pageYOffset;}
else if(window.scrollY){
scrollY=window.scrollY;}
return scrollY;},
centerDiv:function(div)
{
var top=((SU.getViewportHeight()-div.offsetHeight)/2);
if(top<0)top=10;
div.style.left=((SU.getViewportWidth()-div.offsetWidth)/2)+"px";
div.style.top=top+"px";},
changeParent:function(item,parent)
{
var e=(item.tagName?item:$(item));
e.parentNode.removeChild(e);
if(parent!=null)
{
var newParent=(parent.tagName?parent:$(parent));
newParent.appendChild(e);}},
setBusy:function()
{
document.documentElement.style.cursor='wait';},
setIdle:function()
{
document.documentElement.style.cursor='';},
setInnerText:function(e,text)
{
if(Browser.isFirefox)e.textContent=text;
else e.innerText=text;},
toggleVisibility:function(name)
{
var e=$(name);
if($isVisible(e))
$nodisplay(e);
else
$display(e);},
LastZIndex:1000,
makeOnTop:function(el)
{
el.style.zIndex=Utils.LastZIndex++;},
showProgress:function(msg)
{
$display("Progress");},
hideProgress:function()
{
$nodisplay("Progress");},
getPosition:function(obj){
if(obj){
var w=obj.offsetWidth;
var h=obj.offsetHeight;
if(obj.offsetParent){
for(var posX=0,posY=0;obj.offsetParent;obj=obj.offsetParent){
posX+=obj.offsetLeft;
posY+=obj.offsetTop;}
return[posX,posY,w,h];}else{
return[obj.x,obj.y,w,h];}}else{
return[0,0,0,0];}},
disableAllFrames:function()
{
for(var i=0;i<window.frames.length;i++)
window.frames[i].disabled=true;},
opacity:function(id,opacStart,opacEnd,millisec,callback){
var steps=(opacEnd-opacStart)/4;
var timer=millisec/4;
Utils.changeOpac(opacStart,id);
function updateOpac(opac)
{
Utils.changeOpac(opac,id);
if(opac==opacEnd)
{
if(opacEnd==100)Utils.clearOpac(id);
if(callback)callback();return;}
opac+=steps;
window.setTimeout(function(){updateOpac(opac);},timer);}
window.setTimeout(function(){updateOpac(opacStart);},timer);},
changeOpac:function(opacity,id){
var object=$(id).style;
object.opacity=(opacity/100);
object.MozOpacity=(opacity/100);
object.KhtmlOpacity=(opacity/100);
object.filter="alpha(opacity="+opacity+")";},
clearOpac:function(id){
var object=$(id).style;
object.opacity=null;
object.MozOpacity=null;
object.KhtmlOpacity=null;
object.filter=null;},
shiftOpacity:function(id,millisec){
if($(id).style.opacity==0){
Utils.opacity(id,0,100,millisec);}else{
Utils.opacity(id,100,0,millisec);}},
currentOpac:function(id,opacEnd,millisec){
var currentOpac=100;
if($(id).style.opacity<100){
currentOpac=$(id).style.opacity*100;}
Utils.opacity(id,currentOpac,opacEnd,millisec)},
dumpException:function(result)
{
if(null==result)
{
return;}
if(typeof result.get_message=="function")
{
var msg=result.get_message();
msg+='\r'+result.get_stackTrace();
App.addError(msg);}},
getErrorMessage:function(exception)
{
if(null==exception)
{
return Lang.UNKNOWN_ERROR;}
if(typeof exception.get_message=="function")
{
var msg=exception.get_message();
return msg;}
else
return Lang.UNKNOWN_ERROR;},
getXmlDoc:function(xmlString)
{
var myDocument;
if(document.implementation.createDocument)
{
var parser=new DOMParser();
myDocument=parser.parseFromString(xmlString,"text/xml");}
else if(window.ActiveXObject)
{
myDocument=new ActiveXObject("Microsoft.XMLDOM");
myDocument.async="false";
myDocument.loadXML(xmlString);}
return myDocument;},
formatText:function(text)
{
var lines=text.split("\r");
var formatted=lines.join("<"+"br />");
return formatted;},
blockUI:function()
{
$display('blockUI');
$('blockUI').style.height=Math.max(SU.getContentHeight(),"1000")+"px";},
unblockUI:function()
{
$nodisplay('blockUI');},
exec:function(text)
{
text=text.replace(/\\/g,'\\\\').replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\r/g,"\\n");
setTimeout('try { eval("'+text+'"); } catch(ex) { alert(ex.message); }',0);}};
var SU=Utils;
