﻿
var _ASPRoot  = "";
var _APPRoot  = "";
var _SVErr  = null;
var _states = new Array("AL", "AK", "AZ", "AR", "CA", "CO", "CT", "DE", "DC", "FL", "GA", "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MD", "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NM", "NY", "NC", "ND", "OH", "OK", "OR", "PA", "RI", "SC", "SD", "TN", "TX", "UT", "VA", "WA", "WV", "WI", "WY");



function  CheckServerValidation()
{
  if(_SVErr!=null)  HandleServerValidationError(_SVErr);
}

function  HandleServerValidationError(SVErr)
{
  try
  { 
    alert("SVERR!");
  }
  catch(err)
  {
  }
  finally
  {
  }
}


function  FindControl(id)
{
  alert("FINDCONTROL! - FIXME!");
  var control = window.document.all(id);
  return(control);
}

function  FindInputElements(nameKey)
{
  //NOTE: Find all elements that begin with name!
  var res,objs;
  res = new Array();
  objs  = document.getElementsByTagName("INPUT");
  for(var i=0;i<objs.length;i++)
  {
    if(objs[i].name.indexOf(nameKey)>-1)
      res.push(objs[i]);
  }
  objs  = document.getElementsByTagName("TEXTAREA");
  for(var i=0;i<objs.length;i++)
  {
    if(objs[i].name.indexOf(nameKey)>-1)
      res.push(objs[i]);
  }
  return(res);
}

function  DisableControls(ids, bDisable)
{
  for(var i=0;i<ids.length;i++)
  {
    var control = FindControl(ids[i]);
    if(control!=null)
       control.disabled = bDisable;
  }
}

function GetCalenderValue(val)
{
	var strDate;
	var strLoc = _ASPRoot+"utility/CalendarDialog.htm";
	strDate = window.showModalDialog(strLoc,val, "center: no; dialogHeight:195px; dialogWidth:300px; dialogTop:" + (window.event.screenY - 215) + "px; dialogLeft:" + (window.event.screenX - 300) + "px; help:no; status:no; scroll:no; resizable:no;");
	return(strDate);
}

function  GetCalenderValueIntoObject(val)
{
  var obj = _Page.ResolveEntity(val)
  if(obj!=null)
    obj.value = GetCalenderValue(obj.value);
}

function NavBack() {
	window.event.cancelBubble;
	window.event.returnValue = false;
	window.history.back(0)
}


function  ClearInputNodes(node, bRecurse)
{
  if((node.tagName=="INPUT")&&(node.type=="text"))
    node.value  = "";
  for(var i=0;((bRecurse)&&(i<node.children.length));i++)
    ClearInputNodes(node.children(i),bRecurse);
}

function  RemoveCommas(str)
{
  return(str.replace(",",""));
}

function  RemoveCommasFromTextElements(elements)
{
  for(var i=0;i<elements.length;i++)
  {
    var element = elements(i);
    if((element.tagName=="INPUT")&&(element.type=="text"))
      element.value = element.value.replace(",","");
  }
}

function  RemoveCommasFromTextElement()
{ 
  var element = event.srcElement;
  if(((element.tagName.toUpperCase()=="INPUT")&&(element.type="text"))||(element.tagName.toUpperCase()="TEXTAREA"))
  {
    var str = new String(element.value);
    str = str.replace(/[\,\!]/g,"");
    element.value = str;
  }
}

function  CleanTextElement()
{
  var element = event.srcElement;
  var str = new String(element.value);
  str = str.replace(/[\<\>\:\[\]]/g,"");
  element.value = str;
}


function  RemoveSelectOption(opts, val)
{
  for(var i=0;i<opts.length;i++)
  {
    var opt = opts[i];
    if(opt.value==val)
    {
      opts.remove(i);
      break;
    }
  }
}

function  AddValueSortedSelectOption(opts, newOpt)
{
  var optsArray = new Array();
  optsArray.push(newOpt.value);
  for(var i=0;i<opts.length;i++)
  {
    if(opts[i].value!="")
      optsArray.push(opts[i].value);
  }
  optsArray.sort();
  for(var i=0;i<optsArray.length;i++)
  {
    if(optsArray[i]==newOpt.value)
    {
      opts.add(newOpt,i);
      break;
    }
  }
}

function  AddTextSortedSelectOption(opts, newOpt)
{
  var optsArray = new Array();
  optsArray.push(newOpt.text);
  for(var i=0;i<opts.length;i++)
  {
    if(opts[i].value!="")
      optsArray.push(opts[i].text);
  }
  optsArray.sort();
  for(var i=0;i<optsArray.length;i++)
  {
    if(optsArray[i]==newOpt.text)
    {
      opts.add(newOpt,i+1);
      break;
    }
  }
}

function  CreateDeleteButton(altText, onClick)
{
  var delBtn  = document.createElement("<img class=\"PushButton\" src=\""+_ASPRoot+"/images/toolbar/delete2.gif\" align=\"absmiddle\" alt=\""+altText+"\" onclick=\""+onClick+"\" />");
  return(delBtn);
}

function  CreateOptionElement(text,val)
{
  var opt = document.createElement("OPTION");
  opt.text  = text;
  opt.value = val;
  return(opt);
}

function  CreateTextAreaElement(cssCls,name,id,cols,rows,maxLen,style,bAutoClean)
{
  var class_str = (cssCls==null?"":"class=\""+cssCls+"\"");
  var name_str  = (name==null?"":"name=\""+name+"\"");
  var id_str  = (id==null?"":"id=\""+id+"\"");
  var style_str = (style==null?"":"style=\""+style+"\"");
  var cols_str  = (cols==null?"":"cols=\""+cols+"\"");
  var rows_str  = (rows==null?"":"rows=\""+rows+"\"");
  var obj = document.createElement("<TEXTAREA "+class_str+" "+name_str+" "+id_str+" "+cols_str+" "+rows_str+" maxlength=\""+maxLen+"\" "+style_str+" />");
  if(bAutoClean)  obj.attachEvent("onchange",_Page.CleanTextElement);
  return(obj);
}


function  CreateTextInputElement(cssCls,name,id,maxLen,style,bAutoClean,val)
{
  var class_str = (cssCls==null?"":"class=\""+cssCls+"\"");
  var name_str  = (name==null?"":"name=\""+name+"\"");
  var id_str  = (id==null?"":"id=\""+id+"\"");
  var style_str = (style==null?"":"style=\""+style+"\"");
  var obj = document.createElement("<INPUT type=\"text\" "+class_str+" "+name_str+" "+id_str+" maxlength=\""+maxLen+"\" "+style_str+" />");
  if(bAutoClean)  obj.attachEvent("onchange",_Page.CleanTextElement);
  if(val!=null) obj.value = val;
  return(obj);
}

function  CreateSelectElement(cssCls,name,id,style)
{
  var class_str = (cssCls==null?"":"class=\""+cssCls+"\"");
  var name_str  = (name==null?"":"name=\""+name+"\"");
  var id_str  = (id==null?"":"id=\""+id+"\"");
  var style_str = (style==null?"":"style=\""+style+"\"");
  var obj = document.createElement("<select "+class_str+" "+name_str+" "+id_str+" "+style_str+" ></select>");
  return(obj);
}

function  CreateDateInputField(name,id,alt,val)
{
  var span,txt,img;
  span  = document.createElement("SPAN");
  txt = CreateTextInputElement(null,name,id,10,"width:75px");
  if(val!=null) txt.value = val;
  img = document.createElement("<img class=\"PushButton\" src=\""+_ASPRoot+"/images/Calendar.gif\" alt=\""+(alt==null?"Click to select Date":alt)+"\" align=\"absmiddle\" onclick=\"javascript:img_DatePicker_onClick(this);\" stlye=\"border:none\" />")
  span.appendChild(txt);
  span.insertAdjacentHTML("beforeEnd","&nbsp;");
  span.appendChild(img);
  return(span);
}

function  CreateTableElement(cssClass,id,cp,cs,border,style)
{
  var class_str = (cssClass==null?"":"class=\""+cssClass+"\"");
  var id_str  = id==null?"":"id=\""+id+"\"";
  var cp_str  = cp==null?"cellpadding=\"0\"":"cellpadding=\""+cp+"\"";
  var cs_str  = cs==null?"cellspacing=\"0\"":"cellspacing=\""+cs+"\"";
  var b_str = border==null?"border=\"0\"":"border=\""+border+"\"";
  var style_str = style==null?"":"style=\""+style+"\"";
  var obj = document.createElement("<TABLE "+class_str+" "+id_str+" "+cp_str+" "+cs_str+" "+b_str+" "+style_str+" />");
  return(obj);
}

function  CreateInputButton(cssClass,name,id,val,onClick,style)
{
  var class_str = (cssClass==null?"":"class=\""+cssClass+"\"");
  var name_str  = (name==null?"":"name=\""+name+"\"");
  var id_str    = (id==null?"":"id=\""+id+"\"");
  var val_str   = (val==null?"":"value=\""+val+"\"");
  var oc_str    = (onClick==null?"":"onclick=\""+onClick+"\"");
  var style_str = (style==null?"":"style=\""+style+"\"");
  var obj = document.createElement("<INPUT type=\"button\" "+class_str+" "+name_str+" "+id_str+" "+val_str+" "+oc_str+" "+style_str+" />");
  return(obj);
}

function  CreateHiddenInputElement(name,id,val)
{
  var name_str  = (name==null?"":"name=\""+name+"\"");
  var id_str    = (id==null?"":"id=\""+id+"\"");
  var val_str   = (val==null?"":"value=\""+val+"\"");
  var obj = document.createElement("<INPUT type=\"hidden\" "+name_str+" "+id_str+" "+val_str+" />");
  return(obj);
}

function  CreateSelectStateElement(cssClass,name,id,style,val)
{
  var opt = null, si = -1;
  var obj = CreateSelectElement(cssClass,name,id,style);
  for(var i=0;i<_states.length;i++)
  {
    opt = CreateOptionElement(_states[i],_states[i]);
    obj.options.add(opt);
    if(val==opt.value)  si  = i;
  }
  opt = CreateOptionElement("","");
  obj.options.add(opt);
  if(si<0)  si  = obj.options.length-1;
  obj.selectedIndex  = si;
  return(obj);
}

function  img_DatePicker_onClick(ctrl)
{
  var span  = ctrl.parentNode;
  GetCalenderValueIntoObject(span.children(0));
}

/////////////////////////////////////////////////
// Page
/////////////////////////////////////////////////

function  Page_Init()
{
  if(_Page==null)
  {
    _Page = new Page();
  }
}


Page.prototype.constructor  = Page;

function  Page()
{
  this.init();
}

Page.prototype.init  = function()
{
  this._ids = new Array();
  this._reClean = /[\<\>\:\[\]]/g;
}

Page.prototype.PushPrefix = function(val)
{
  this._ids.push(val);
}

Page.prototype.PopPrefix  = function()
{
  if(this._ids.length>0)  return(this._ids.pop());
  return(null);
}

Page.prototype.ResolveEntity  = function(val)
{
  if(typeof(val)=="object") return(val);
  if((val!=null)&&(typeof(val)!="undefined"))
  {
    if(typeof(val)=="string")
    {
      //Val is element ID
      var obj = window.document.all(val);
      if(obj==null)
      {
        var stackLen  = this._ids.length;
        var prefix  = stackLen>0?this._ids[stackLen-1]:"";
        obj     = window.document.all(prefix+"_"+val);
      }
      if(obj!=null) return(obj);
    }
  }
  throw("Page.ResolveEntity - Could not Resolve Entitity '"+val+"'");
}

Page.prototype.FindInputElementsByNamePrefix = function(prefix)
{
  var res,objs;
  res = new Array();
  objs  = document.getElementsByTagName("INPUT");
  for(var i=0;i<objs.length;i++)
  {
    if(objs[i].name.indexOf(prefix)>-1)
      res.push(objs[i]);
  }
  objs  = document.getElementsByTagName("TEXTAREA");
  for(var i=0;i<objs.length;i++)
  {
    if(objs[i].name.indexOf(prefix)>-1)
      res.push(objs[i]);
  }
  return(res);
}

Page.prototype.CleanTextElement = function(obj)
{ 
  obj = (typeof(obj.srcElement)=="undefined")?obj:obj.srcElement;
  var val = obj.value.replace(/[\<\>\:\[\]]/g,"");
  obj.value = val;return(val);
}

Page.prototype.AutoCleanTextElements  = function(val)
{
  var vals  = val.split(",");
  for(var i=0;i<vals.length;i++)
    this.ResolveEntity(vals[i]).attachEvent("onchange",this.CleanTextElement);
}

Page.prototype.GetEventElementOrEntity  = function(args,val)
{
  return((args.length>0)?args[0].srcElement:this.ResolveEntity(val));
}

Page.prototype.AttachEvent  = function(val,eventName,target)
{
  var vals  = val.split(",");
  for(var i=0;i<vals.length;i++)
    this.ResolveEntity(vals[i]).attachEvent(eventName,target);
}

/////////////////////////////////////////////////
// ServerError
/////////////////////////////////////////////////

ServerError.prototype.constructor = ServerError;

function  ServerError(msg)
{
  if(arguments.length>0)
    this.init(msg);
}

ServerError.prototype.init  = function(msg)
{
  this._msg = msg;
}

ServerError.prototype.GetMessage  = function()
{
  return(this._msg);
}

/////////////////////////////////////////////////
// ServerValidationError
/////////////////////////////////////////////////

ServerValidationError.prototype.constructor = ServerValidationError;

function  ServerValidationError(id,msg)
{
  if(arguments.length>0)  this.init(id,msg);
}

ServerValidationError.prototype.init  = function(id,msg)
{
  this._id  = id;
  this._msg = msg;
}

ServerValidationError.prototype.GetMessage  = function()
{
  return(this._msg);
}

ServerValidationError.prototype.GetControlID  = function()
{
  return(this._id);
}

ServerValidationError.prototype.GetControl  = function()
{
  return(FindControl(this._id));
}

//TODO: Impl. server validation
function  DeserializeServerValidationError(data)
{
  try
  {
  }
  catch(err)
  {
  }
}


