// JScript File
if( typeof($) == 'undefined' ){
  $=function(id){return document.getElementById(id);}
}
if( ! Function.createDelegate ){
  Function.createDelegate = function(instance, method) {
    return function() {
      return method.apply(instance, arguments);
    }
  }
}
var delegate = Function.createDelegate;
if( ! Function.createCallback ){
    Function.createCallback = function(method, context) {
        return function() {
            return method(context);
        }
    }
}
var Cookie = {
    createCookie: function (name,value,domain,days,path) {
        var expires="";
        var str = name+"="+value+"; ";
	    if (days) {
    	    if( days != -1) Cookie.eraseCookie(name);
		    var date = new Date();
		    date.setTime(date.getTime()+(days*24*60*60*1000));
		    str += "expires="+date.toGMTString()+"; ";
	    }
	    if( domain!='' ) str += "domain="+domain+"; ";
	    if( path && path != "" ) str += "path="+path+"; ";
	    else str += "path=/; ";
	    document.cookie = str;
    },
    readCookie: function (name) {
	    var nameEQ = name + "=";
	    var ca = document.cookie.split(';');
	    for(var i=0;i < ca.length;i++) {
		    var c = ca[i];
		    while (c.charAt(0)==' ') c = c.substring(1,c.length);
		    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	    }
	    return null;
    },
    eraseCookie: function (name) {
	    Cookie.createCookie(name,"","",-1);
    }   
}

var Listners = {
  fixEvent:function(e){ return e ? e : window.event; },
  add: function ( obj, evType, fn){
    var hndlr= function(e){return fn.call(obj, e);}
    if (obj.addEventListener) {
      obj.addEventListener(evType, hndlr, false);
      return true;
    }
    else if (obj.attachEvent) return obj.attachEvent('on' + evType, hndlr);
    else return false;
  },
  remove: function( obj, evType, fn){
    if (obj.removeEventListener) {
      obj.removeEventListener(evType, fn, false);
      return true;
    }
    else if (obj.detachEvent) return obj.detachEvent('on' + evType, fn);
    else return false;
  }
}

//We try to define the hookEvent based on the available API
//if Atals is present we use it
if (typeof($addHandler)=='function') $hookEvent = $addHandler;
else if( typeof(YAHOO)=='object' && typeof(YAHOO.util) =='object' && typeof(YAHOO.util.Event) =='object') 
    $hookEvent = YAHOO.util.Event.addListener;
else $hookEvent = Listners.add;

$unhookEvent = Listners.remove;
var DOM = {
  Init: function(){
    DOM._loaded = true;
    DOM._invokeOnLoad();
  },
  _queue:[],
  addOnLoad: function ( fn ){
    DOM._queue.push(fn);
    if( DOM._loaded ) DOM._invokeOnLoad();
  },
  _invokeOnLoad:function(){
    while( DOM._queue.length > 0 ) window.setTimeout( DOM._queue.shift() ,0 );
  },
  _loaded: false,
  loadscript: function(cfg){
    if( ! "path" in cfg ) return;
    var _id = cfg["id"] || (cfg["path"].replace(/\//g,'_').replace(/\./g,'_') ) ;
    if( $(_id) ) return;
    var scr = DOM.create('script');
    scr.setAttribute("id",_id);
    scr.setAttribute("src",path);
    scr.setAttribute("type","text/javascript");
    DOM.append(document.body,scr);
  },
  hide: function(e){ DOM._hide(e,false); },
  show: function(e,v){ DOM._hide(e,true,v);},
  _hide: function(e,b,v){v=v||''; var ele = typeof e == "object"?e:$(e); ele.style.display=b?v:'none'; },
  getddls:function(){ return document.getElementsByTagName("select"); },
  hideddl:function(coll){DOM._ddl(false,coll);},
  showddl:function(coll){DOM._ddl(true,coll);},
  ischildof:function(child,parent){ 
    var p, t;
    for(p=child, t=parent; (p!=null) && (p!=t);  p=p.parentNode);
    return p; 
  },
  _ddl:function(b,coll){ 
    var ele= coll || DOM.getddls();
    for(var i=0;i<ele.length;i++) ele[i].style.visibility=b?'visible':'hidden';
  },
  setDdlValue: function( ddl, val ){
    if( ddl && val ){
        for( var i=0;i<ddl.options.length;i++){
            if( ddl.options[i].value == val ) { 
                ddl.selectedIndex = i; 
                return i; 
            }
        }
    }
    else return -1;
  },
  selectDdlText: function( ddl, text ){
    if( ddl && text ){
        for( var i=0;i<ddl.options.length;i++){
            if( ddl.options[i].text == text ) { 
                ddl.selectedIndex = i; 
                return i; 
            }
        }
    }
    else return -1;
  },
  create: function(ele){return document.createElement(ele);},
  append: function(trgt,ele){ trgt.appendChild(ele); },
  insert: function(parent,ele,sibling){
    if( sibling )parent.insertBefore(ele,sibling);
    else if( document.addEventListener ) parent.insertBefore(ele,null);
    else parent.insertBefore(ele);
  },
  PageSize: function(){ 
    var body = document.body;
    var de = document.documentElement;
    var pgWd, pgHt;
    var xScroll, yScroll; 
    if (window.innerHeight && window.scrollMaxY){ 
      xScroll = body.scrollWidth; 
      yScroll = window.innerHeight + window.scrollMaxY; 
    } 
    else if (body.scrollHeight > body.offsetHeight){ 
      // all but Explorer Mac 
      xScroll = body.scrollWidth; 
      yScroll = body.scrollHeight; 
    }
    else if (de && 
          de.scrollHeight > 
          de.offsetHeight){ // Explorer 6 strict mode 
      xScroll = de.scrollWidth; 
      yScroll = de.scrollHeight; 
    }
    else{ // Explorer Mac...would also work in Mozilla and Safari 
      xScroll = body.offsetWidth; 
      yScroll = body.offsetHeight; 
    } 
    //var windowWidth, windowHeight; 
    var wnWd, wnHt;
    if (self.innerHeight) { // all except Explorer 
      wnWd = self.innerWidth; 
      wnHt = self.innerHeight; 
    } 
    else if (de && de.clientHeight){ // Explorer 6 Strict Mode 
      wnWd = de.clientWidth; 
      wnHt = de.clientHeight; 
    }
    else if (body){ // other Explorers 
      wnWd = body.clientWidth; 
      wnHt = body.clientHeight; 
    } // for small pages with total height less then height of the viewport 
    if(yScroll < wnHt) pgHt = wnHt; 
    else pgHt = yScroll; 
    // for small pages with total width less then width of the viewport 
    if(xScroll < wnWd) pgWd = wnWd; 
    else pgWd = xScroll; 
    return { width: ( ( pgWd > wnWd)? pgWd: wnWd ), 
            height:( ( pgHt > wnHt)? pgHt: wnHt ) }; 
  }
}

//Logging.Init();
if( document.body.addEventListener ) window.setTimeout( DOM.Init,0);
else if( document.body.attachEvent){ document.body.onload = DOM.Init;}

var Utils = {
    _format:function(data){
        if( data ){
            var c = data.split('');
            if( c.length == 0 ) return data;
            var ret="";
            var dlen = c.length; 
            var xlen = dlen-4;
            for(var i=0;i<xlen;i++) ret += "*";
            ret += "-";
            for(i=xlen;i<dlen;i++) ret += c[i];
            return ret;
        }
        return data;
    },
    formatCCNum: function(data){
        return this._format(data);
    },
    formatACHNum: function(data){
        return this._format(data);
    },
    RTrim:function(data){
        if( data ){
	        var re = /((\s*\S+)*)\s*/;
            return value.replace(re, "$1");
        }
    },
    LTrim:function(data){
        if( data ){
            var re = /\s*((\S+\s*)*)/;
            return value.replace(re, "$1");
        }
    },
    Trim: function(data){
        if( data ){
	        return Utils.LTrim(Utils.RTrim(value));
        }
    }
}
var Logging = {
    showlog: true,
    ele:null,
    log: function(data){
        return;
        var d = Logging.ele|| Logging._create();
        window.setTimeout( " Logging._log('"+data+"')",0);
    },
    _log: function(data){ Logging.ele.innerHTML += ("<br>"+data); },
    _create: function(){
        var e = DOM.create("div");
        DOM.append(document.body,e);
        e.id="ppcDebugDiv";
        var s = e.style;
        s.border='1px solid black';s.position='absolute';
        s.left="900px";s.top="0px";s.width="300px";s.height="400px";
        Logging.ele = e;
        return e;
    },
    Init:function(){ Logging.log('<b>Logging initialized</b>');}
}
var Console = {
    Init:function(){
        var e = DOM.create("div");
        e.id="divConsole";
        e.style.position="absolute";
        e.style.top="10px";
        e.style.left="10px";
        e.style.height="100px";
        e.style.width="200px";
        e.innerHTML = "<textarea id='txtdata' rows='10' cols='60' ></textarea>"
        +"<br><input id='execute' type='button' onclick='Console.Exec();' />";
        DOM.append(document.body,e);        
    },
    Exec:function(){
        var t = $('txtdata').value;
        try{ eval(t); }catch(e){alert('error :'+e.description);}
    }
}

DOM.addOnLoad( Logging.Init );
//$addHandler does not work in IE5.5
