Object.prototype.$style=function(style)
{
  try
  {
    if (style.indexOf("=") == -1)
    {
      return eval("this.style."+style);
    }
    eval("this.style."+style);
  }
  catch (e) {}
  return this;
}

Array.prototype.$style=function(style)
{
  try
  {
    for (var i=0;i<this.length;i++)
    {
      if (style.indexOf("=") != -1)
      {
        eval("this["+i+"].style."+style);
      }
    }
  }
  catch (e) {}
  return this;
}

Object.prototype.$event=function(type,func)
{
  try
  {
    if (func)
    {
      eval("this."+type+"=function(){"+func+"}");
    }
    else
    {
      eval("this."+type+"=null");
    }  
  }
  catch (e) {}
  return this;
}

Array.prototype.$event=function(type,func)
{
  try
  {
    for (var i=0;i<this.length;i++)
    {
      if (func)
      {
        eval("this["+i+"]."+type+"=function(){"+func+"}");
      }
      else
      {
        eval("this["+i+"]."+type+"=null");
      }  
    }
  }
  catch (e) {}
  return this;
}

String.prototype.trim=function()
{
  return this.replace(/^\s+|\s+$/g,"");
}
  
String.prototype.ltrim=function()
{
  return this.replace(/^\s+/g,"");
}
  
String.prototype.rtrim=function()
{
  return this.replace(/\s+$/g,"");
}

String.prototype.startsWith=function(str)
{
  return this.indexOf(str) == 0;
}

String.prototype.endsWith=function(str)
{
  var offset=this.length-str.length;
  return offset >= 0 && this.lastIndexOf(str) == offset;
}
 
String.prototype.toHTML=function()
{
  return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
}

String.prototype.stripTags=function()
{
  return this.replace(/<([^>]+)>/g,'');
}

function $F() 
{
  return eval("document."+$weblite.formname);
}

function $$F() 
{
  return $weblite.formname;
}

function $$$F(formname) 
{
  $weblite.formname=formname;
}

function $prototype$(obj)
{
  if (!$weblite.ie)
  {
    return obj;
  }
  if (typeof obj.$style != "function")
  {
    obj.$style=Object.prototype.$style;
  }
  if (typeof obj.$event != "function")
  {
    obj.$event=Object.prototype.$event;
  }
  return obj;
}

function $parent(id)
{
  if (id && typeof(id) != "string")
  {
    return $prototype$(id);
  }  
 
  var obj;
  try 
  {
    obj=eval("parent.document."+$weblite.formname+"."+id);
  }
  catch (e) {};
  if (obj)
  {
    return $prototype$(obj);
  }
  obj=parent.document.getElementById(id);
  if (obj)
  {
    return $prototype$(obj);
  }
}

function $(id) // id or obj here
{
  if (id && typeof(id) != "string")
  {
    return $prototype$(id);
  }  
 
  var obj;
  try 
  {
    obj=eval("document."+$weblite.formname+"."+id);
  }
  catch (e) {};
  if (obj)
  {
    return $prototype$(obj);
  }
  obj=document.getElementById(id);
  if (obj)
  {
    return $prototype$(obj);
  }
}

function $C(classname,node,tag) // return objects with the specified class
{
  var objs=new Array();
  if (classname == null)
  {
    return objs;    
  }
  if (node == null)
  {
    node=document;
  }             
  if (tag == null)
  {
    tag='*';
  }     
  var els=node.getElementsByTagName(tag);
  var elsLen=els.length;
  for (i=0,j=0;i<elsLen;i++)
  {
    if (els[i].className.indexOf(classname) != -1)
    {
      objs.push(els[i]);
    }
  }
  return objs;
}

function $A(attribute,value,node,tag) // return objects with the specified attribute & value
{
  var objs=new Array();
  if (attribute == null)
  {
    return objs;    
  }
  if (value == null)
  {
    value="";
  }
  if (node == null)
  {
    node=document;
  }             
  if (tag == null)
  {
    tag='*';
  }     
  var els=node.getElementsByTagName(tag);
  var elsLen=els.length;
  for (i=0,j=0;i<elsLen;i++)
  {
    var att=els[i].getAttribute(attribute)
    if (att && (att.indexOf(value) != -1))
    {
      objs.push(els[i]);
    }
  }
  return objs;
}

function $$T(id) // return text input value or text
{
  return $(id).value;
}

function $$$T(id,value) // set text input value
{
  return $(id).value=value;
}

function $$C(id) // return checkbox input value(s) in array
{
  var results=[];
  var nodes=$(id);   
  if (!nodes)
  {
    return;
  }
  var multi=false;
  try
  {
    if (nodes.length > 0)
    {
      multi=true;
    }
  }
  catch (e) {};
  if (multi)
  {
    for (var i=0;i<nodes.length;i++)
    {      
      if (nodes[i].checked)
      {
        results.push(nodes[i].value);
      }  
    }
    return results;
  }
  else
  {
    if (nodes.checked)
    {
      return nodes.value;
    }
    else
    {
      return "";
    }
  }  
}

function $$$C(id,values,separator) // set checkbox value(s) separated by the default separator ","
{
  var sep=",";
  if (separator)
  {
    sep=separator;
  }
  if (!values)
  {
    return;
  }
  var arr=values.split(sep);
  
  var nodes=$(id);    
  if (!nodes)
  {
    return;
  }
  var multi=false;
  try
  {
    if (nodes.length > 0)
    {
      multi=true;
    }
  }
  catch (e) {};
  if (multi)
  {
    for (var i=0;i<nodes.length;i++)
    {
      nodes[i].checked=false;
      for (var j=0;j<arr.length;j++)
      {
        if (nodes[i].value == arr[j])
        {
          nodes[i].checked=true;
          break;
        }
      }
    }     
  }
  else
  {
    if (nodes.value == arr[0])
    {
      nodes.checked=true;
    }
    else
    {
      nodes.checked=false;
    }
  }  
}

function $$R(id) // return radio input value
{
  var obj=$(id);
  if (obj)
  {
    var len=obj.length;
    if (len)
    {
      for(var i=0;i<len;i++)
      {
        if(obj[i].checked)
        {
          return obj[i].value;
        }
      }
    }
  }
}

function $$$R(id,value) // set radio input value
{
  var obj=$(id);
  if (obj)
  {
    var len=obj.length;
    if (len)
    {
      for(var i=0;i<len;i++)
      {
        if(obj[i].value == value)
        {
          obj[i].checked=true;
          return;
        }
      }
    }
  }
}
  
function $$S(id) // return selection input value or text
{
  var obj=$(id);
  if (obj)
  {
    obj=obj.options[$(id).selectedIndex];
    if (obj)
    {
      if (obj.value)
      {
        return obj.value;
      }
      return obj.text;
    }
  }  
}

function $$$S(id,value) // set selection input value
{
  var obj=$(id);
  if (obj)
  {
    for (var i=0;i<obj.length;i++)
    {
      var label=obj.options[i].value;
      if (label == "")
      {
        label=obj.options[i].text;
      }
      if (label == value)
      {
        obj.selectedIndex=i;
        break;
      } 
    }
  }
}      

function $$M(id) // return multiple selection input value(s)
{
  var results=[];
  var nodes=$(id);   
  if (!nodes)
  {
    return;
  }
  for (var i=0;i<nodes.length;i++)
  {      
    if (nodes[i].selected)
    {
      var label=nodes[i].value;
      if (label == "")
      {
        label=nodes[i].text;
      }
      results.push(label);
    }  
  }
  return results;
}  
  
function $$$M(id,values,separator) // set multiple selection value(s) separated by the default separator ","
{
  var sep=",";
  if (separator)
  {
    sep=separator;
  }
  if (!values)
  {
    return;
  }
  var arr=values.split(sep);
    
  var nodes=$(id);    
  if (!nodes)
  {
    return;
  }
  for (var i=0;i<nodes.length;i++)
  {
    nodes[i].selected=false;
    for (var j=0;j<arr.length;j++)
    {
      var label=nodes[i].value;
      if (label == "")
      {
        label=nodes[i].text;
      }
      if (label == arr[j])
      {
        nodes[i].selected=true;
        break;
      }
    }
  }     
}

function $$(id) // return specified object value from id or obj
{
  var obj=$(id);
  if (obj)
  {
    switch ($weblite.getObjectType(obj))
    {
      case "object" :
        return obj.innerHTML;
      case "hidden" :
        return $$T(id);
      case "text" :
        return $$T(id);
      case "password" :
        return $$T(id);
      case "radio" :
        return $$R(id);
      case "checkbox" :
        return $$C(id);
      case "select-one" :
        return $$S(id);
      case "select-multiple" :
        return $$M(id);
      case "textarea" :
        return $$T(id);
    }
  }
}

function $$$(id,value,separator) // set specified object value(s) to id or obj
{
  var obj=$(id);
  if (obj)
  {
    switch ($weblite.getObjectType(obj))
    {
      case "object" :
        obj.innerHTML=value;
        return;          
      case "hidden" :
        return $$$T(id,value);
      case "text" :
        return $$$T(id,value);
      case "radio" :
        return $$$R(id,value);
      case "checkbox" :
        return $$$C(id,value,separator);
      case "select-one" :
        return $$$S(id,value);
      case "select-multiple" :
        return $$$M(id,value,separator);
      case "textarea" :
        return $$$T(id,value);
    }
  }
}

function $eval$(line)
{
  line=line.replace(/`1`/g,"'");
  line=line.replace(/`2`/g,"\\\"");
  var str=eval(line);
  if (!str)
  {
    return "";
  }
  return str;
}

function $$$$html(html,initcode,obj)
{
  if (!obj)
  {
    obj=this;
  }
  html=html.replace(/\\"/g,"`2`");
  html=html.replace(/'/g,"`1`");
  html="'"+html+"'";
  html=html.replace(/\n/g," ");
  html=html.replace(/\r/g,"");
  html=html.replace(/{{/g,"'+$eval$.call(obj,'");
  html=html.replace(/}}/g,"')+'")
  
  if (initcode)
  {
    html=initcode+";"+html;
  }
  return eval(html);
}

function $$$$(id,initcode)
{
  var html=$$(id).trim();
  html=$$$$html.call($(id),html,initcode);
  html=html.replace(/`1`/g,"'");
  return html;
}

function $ajax(url,func,postparm,postmime,parent)
{
  var req=null;
  try
  {
    if (typeof ActiveXObject!="undefined")
    {
      req=new ActiveXObject("Microsoft.XMLHTTP");
    }
    else if (window.XMLHttpRequest)
    {
      req=new XMLHttpRequest;
    }
  }
  catch(error)
  {
    req=null;
  }
  
  if (!req)
  {
    return false;
  }
  req.onreadystatechange=function()
  {
    if(req.readyState==4)
    {
      func(req.responseText,req.status,parent);
      req.onreadystatechange=function(){};
    }
  }
  if(postparm)
  {
    req.open("POST",url,true);
    var mime=postmime;
    if(!mime)
    {
      mime="application/x-www-form-urlencoded"
    }
    req.setRequestHeader("Content-Type",mime);
    req.send(postparm)
  }
  else
  {
    req.open("GET",url,true);
    req.send(null)
  }
  return req;
}   

function $ajaxdom(dom,url,postparm,postmime)
{
  $ajax(url,function(text,status,dom)
  {
    if (status == 200)
    {
      $$$(dom,text);
    }
  },postparm,postmime,dom);
}

function $sjax(url,func,postparm,postmime,parent)
{
  var req=null;
  try
  {
    if (typeof ActiveXObject!="undefined")
    {
      req=new ActiveXObject("Microsoft.XMLHTTP");
    }
    else if (window.XMLHttpRequest)
    {
      req=new XMLHttpRequest;
    }
  }
  catch(error)
  {
    req=null;
  }
 
  if (!req)
  {
    return false;
  }
  
  if(postparm)
  {
    req.open("POST",url,false);
    var mime=postmime;
    if(!mime)
    {
      mime="application/x-www-form-urlencoded"
    }
    req.setRequestHeader("Content-Type",mime);
    req.send(postparm)
  }
  else
  {
    req.open("GET",url,false);
    req.send(null)
  }
  if (func)
  {
    func(req.responseText,req.status,parent);
    return true;
  }
  return req.responseText;  
}   

function $sjaxdom(dom,url,postparm,postmime)
{
  $sjax(url,function(text,status,dom)
  {
    if (status == 200)
    {
      $$$(dom,text.trim());
    }
  },postparm,postmime,dom);
}

function $ajaxpost(url,func,parm)
{
  var timestamp=new Date().getTime();
  if (parm && parm != "")
  {
    parm+="&";   
  }
  parm+="timestamp="+timestamp   
  return $ajax(url,func,parm);
}

function $sjaxpost(url,func,parm)
{
  var timestamp=new Date().getTime();
  if (parm && parm != "")
  {
    parm+="&";   
  }
  parm+="timestamp="+timestamp   
  $sjax(url,func,parm);
}

function $include(url)
{
  $sjaxpost(url,function(text)
  {
    document.write(text);
  });
}

function $parameter(key)
{
  if (!key)
  {
    return $parameterstr;
  }
  if ($parameterarray == null)
  {
    $parameterarray=$parameters();
  }
  for (var i=0;i<$parameterarray.length;i++)
  {
    if ($parameterarray[i].key == key)
    {
      return $parameterarray[i].val;
    }
  }
  return null;
}  

var $parameterstr="";
var $parameterarray=null;
function $parameters()
{
  if ($parameterarray != null)
  {
    return $parameterarray;
  }
  $parameterarray=new Array();
  var locstr=""+document.location;
  var lindex=locstr.lastIndexOf("?");
  if (lindex != -1)
  {
    $parameterstr=locstr.substring(lindex+1);  
    var pstr=$parameterstr;
    pstr=pstr.split("&");
    var parr=$parameterstr.split("&");
    for (var i=0;i<parr.length;i++)
    {
      var pkv=parr[i].split("=");
      if (pkv.length > 1)
      {
        $parameterarray.push({key:pkv[0],val:decodeURIComponent(pkv[1])});
      }
      else
      {
        $parameterarray.push({key:pkv[0],val:""});
      }
    }
  }
  return $parameterarray;
}

var $data="";
var $out=
{
  clear : function()
  {
    $data="";
  },
  
  print : function(str)
  {
    $data+=str;
  },
  
  println : function(str)
  {
    $data+=str+"\n";
  },
  
  send : function()
  {
    window.location="javascript:$data";
  }
}

var $weblite=
{
  ie : true,
  nn : false,
  
  formname : "forms[0]",  
  
  init : function()
  {
    this.ie=document.all;
    this.nn=document.getElementById&&!this.ie;
  },

  getObjectType : function(obj)
  {
    if (obj.type)
    {
      return obj.type;
    }  
    else
    {
      try
      {
        if (obj[0].type)
       {
         return obj[0].type;
       }
      }
      catch (e) {}
      return "object";     
    }
  },

  getObjectSize : function(obj)
  {
    // return {width:obj.clientWidth,height:obj.clientHeight}; // clientWidth & clientHeight are only viewable area (not including border, margin. scrollbar...)
    return {width:obj.offsetWidth,height:obj.offsetHeight};
  },
  
  getObjectPosition : function(obj)
  {
    var curleft=0;
    var curtop=0;
    if (obj.offsetParent)
    {
      curleft=obj.offsetLeft;
      curtop=obj.offsetTop;
      while (obj=obj.offsetParent)
      {
        curleft+=obj.offsetLeft;
        curtop+=obj.offsetTop;
      }
    }
    return {x:curleft,y:curtop};
  },
  
  getObjectClass : function(obj)
  {
    if (!obj.className)
    {
      return "";
    }
    return obj.className;
  },

  setObjectClass : function(obj,classname)
  {
    if (!classname)
    {
      classname="";
    }
    
    try
    {
      obj.className=classname;
    }
    catch (e) {};
  },

  addObjectClass : function(obj,classname)
  {
    var cn=$weblite.getObjectClass(obj);
    if (cn != "")
    {
      cn+=" ";
    }
    cn+=classname;
    $weblite.setObjectClass(obj,cn);
  },  

  setObjectOpaque : function(obj,opacity) // opacity : 0.0 - 1.0
  {
    if (opacity > 1)
    {
      opacity=1;
    }
    if (opacity < 0)
    {
      opacity=0;
    }
    obj.style.filter="alpha(opacity="+Math.round(opacity*100)+")";
    obj.style.MozOpacity=opacity;
    obj.style.opacity=opacity;
  },     

  isNumber : function(str)
  { 
    if (str == "")
    {
      return false;
    }
    var ValidChars="0123456789."; 
    var Char;
    for (var i=0; i<str.length; i++)
    {
      Char=str.charAt(i);
      if (ValidChars.indexOf(Char) == -1)
      {
        return false;
      }
    }
    return true;
  },

  isDate : function(str)
  {
    var ValidChars="0123456789/";
    var Char;
    for (var i=0; i<str.length; i++)
    {
      Char=str.charAt(i);
      if (ValidChars.indexOf(Char) == -1)
      {
        return false;
      }
    }

    var DateArray=str.split("/");
    if (DateArray.length != 3)
    {
      return false;
    }
    var month=DateArray[0].trim();
    if (month.length > 2)
    {
      return false;
    }
    if (month.length == 1)
    {
      month="0"+month;
    }
    var day=DateArray[1].trim();
    if (day.length > 2)
    {
      return false;
    }
    if (day.length == 1)
    {
      day="0"+day;
    }
    var year=DateArray[2].trim();
    if ((year.length > 4) || (year.length == 3))
    {
      return false;
    }
    if (year.length <= 2)
    {
      var yearvalue=parseInt(year,10);
      if (yearvalue < 50)
      {
        yearvalue+=2000;
      }
      else
      {
        yearvalue+=1900;
      }
      year=yearvalue+"";
    }
    var testdate=new Date(year,parseInt(month,10)-1,day);
    if((testdate.getMonth()) != (parseInt(month,10)-1))
    {
      return false;
    }

    return month+"/"+day+"/"+year;
  },

  addEvent : function(obj,evType,fn,capture) // addEvent(window,"load",foofunc); -- default capture is false
  { 
    if (obj.addEventListener)
    { 
      obj.addEventListener(evType,fn,capture); 
      return true; 
    }
    else if (obj.attachEvent)
    { 
      var r=obj.attachEvent("on"+evType,fn); 
      return r; 
    }
    else
    { 
      return false; 
    }  
  }, 
  
  addContextMenu : function(obj,htmlcode)
  {
    obj=$(obj);
    obj.oncontextmenu=new Function("return false;");
    obj.setAttribute("contextmenu_htmlcode",$$$$html(htmlcode,"",obj));
    $webase.addEvent(obj,"mousedown",function (e)
    {
      $webase.contextmenuhint.hide();
      var evt=e;
      if (!evt)
      {
        evt=window.event;
      } 
      var rightclick=false;
	  if ((evt.which) && (e.which > 1))
      {
	    rightclick=true;
      }
      else if ((evt.button) && (evt.button > 1))
      {
	    rightclick=true;
      }
      if (rightclick)
      {
        var obj=$webase.nn ? e.target : window.event.srcElement;
        var str=obj.getAttribute("contextmenu_htmlcode");
        
        var scr=$webase.getWindowScroll();       
        var px=evt.clientX+scr.x;
        var py=evt.clientY+scr.y;
        $webase.contextmenuhint.showXY(str,px,py);
      
        var adjust=false;
        var menusize=$webase.contextmenuhint.getSize();
        if ((evt.clientX+menusize.width) > document.body.clientWidth)
        {
          px-=menusize.width;
          adjust=true;
        }
        if ((evt.clientY+menusize.height) > document.body.clientHeight)
        {
          py-=menusize.height;
          adjust=true;
        }
        if (adjust)
        {
          $webase.contextmenuhint.showXY(str,px,py);
        }
      }  
    });
  },

  version : function()
  {
    return "weblite v1.00";
  }
}
$weblite.init();  
