﻿/*******************************************************************************
 *        程序 ID     ：    JSUtil
 *        程序名称    ：    JS实用扩展
 *        处 理       ：    扩展JS
 *        功 能       ：    扩展JS
 *
 *        修改履历
 *        年  月  日 区分 所 属/担 当        内 容                     对应编号
 *        ---------- ---- ------------------ ------------------------- --------
 *        2007/10/16 编写 Intasect/陈冬    新規作成
 * 
 * 
 *        Copyright ( C ) 2007 by Intasect communications(Chengdu), Co, Ltd.
 *        All rights reserved.
 *
********************************************************************************/
Object.extend(Array.prototype, {
  insertAt : function(index,value)
  {
    var part1 = this.slice(0,index);
    var part2 = this.slice(index);
    part1.push(value);
    return part1.concat(part2);
  },

  removeAt : function(index)
  {
    var part1 = this.slice(0,index + 1);
    var part2 = this.slice(index+1);
    part1.pop();
    return part1.concat(part2);
  },

  findByKey : function(key,value)
  {
    var result = null;
    this.each(function(o){if(o[key] == value){result = o;throw $break;}});
    return result;
  },

  moveTo : function(src,tar)
  {
    if(src == tar)
    {
      return this;
    }
    var srcObj = this[src];
    if(src < tar)
    {
      //向后
      for(var i=src; i<tar; i++)
      {
        this[i] = this[i+1];
      }
    }else if(src > tar){
      //向前
      for(var i=src; i>tar; i--)
      {
        this[i] = this[i-1];
      }
    }
    this[tar] = srcObj;
    return this;
  },
  
  contains : function(obj)
  {
    var result = false;
    this.each(function(o){if(o == obj){result = true;throw $break;}});
    return result;
  }
});

Object.extend(Number.prototype,{
  toString : function()
  {
    var result = this + "";
    return result;
  }
});

Object.extend(String.prototype,{
  split2Map : function(sp0,sp1)
  {
    var result = new Object();
    var attrs  = this.split(sp0);
    for(var i=0; i<attrs.length; i++)
    {
      var attr = attrs[i].split(sp1);
      if(attr[0] != "undefined")
      {
        result[attr[0]] = attr[1];
      }
    }
    return result;
  },

  replaceAll : function(oldStr,newStr)
  {
    var result = this;
    while(result.indexOf(oldStr) != -1){
      result = result.replace(oldStr,newStr);
    }
    return result;
  },

  trim : function()
  {
    return this.replace(/(^\s*)|(\s*$)/g, "");
  },

  endWith : function(endStr)
  {
    var result = false;
    if(this.length >= endStr.length)
    {
      if(this.substring(this.length-endStr.length) == endStr)
      {
        result = true;
      }
    }
    return result;
  },

  format : function(params)
  {
    var result = this;
    for(var i=0;i<params.length;i++)
    {
      result = result.replaceAll("{"+i+"}",params[i]);
    }
    return result;
  },
  
  LPad : function(c,l)
  {
    var result = this;
    while(result.length < l)
    {
      result = c + result;
    }
    return result;
  },
  
  RPad : function(c,l)
  {
    var result = this;
    while(result.length < l)
    {
      result = result + c;
    }
    return result;
  }
});

Object.extend(Date.prototype, {
  format : function(fmt)
  {
    var result = "";
    if(!fmt)
    {
      fmt = "YYYY-MM-DD";
    }
    result = fmt.toUpperCase();
    var YYYY = "" + this.getFullYear();
    var YY   = YYYY.substring(2,4);
    var MM   = this.getMonth() + 1;
    var M = MM;
    MM   = MM.toString().LPad("0",2);
    var DD   = this.getDate();
    DD   = DD.toString();
    var D = DD;
    DD = DD.LPad("0",2);
    result = result.replace("YYYY",YYYY);
    result = result.replace("YY",YY);
    result = result.replace("MM",MM);
    result = result.replace("M",M);
    result = result.replace("DD",DD);
    result = result.replace("D",D);
    
    return result;
  }
});

var StaticObserver = {
  observers : [],
  
  addObserver : function(observer)
  {
    this.removeObserver(observer);
    this.observers.push(observer);
    this.wireEvents(observer);
  },
  
  wireEvents : function(observer)
  {
    if(!this.EVENT)
    {
      this.EVENT = {};
    }
    var obj = this;
    $A($H(observer)).each(
      function(o)
      {
        obj.EVENT[o.key] = o.key;
      }
    );
  },
  
  removeObserver : function(observer)
  {
    this.observers = this.observers.reject( function(o) { return o==observer });
  },

  notify : function(eventName, obj)
  {
    this.observers.each( function(o) {if (o[eventName]) o[eventName](eventName, obj);} );
  }
}

var JSUtil = {
  getElementByIdEndWith : function(bom,idEnd)
  {
    var result = null;
    result = bom.getElementById(idEnd);
    if(result == null)
    {
      for(var i=0;i<bom.all.length;i++)
      {
        if(bom.all[i].id.endWith(idEnd))
        {
          result = bom.all[i];
          break;
        }
      }
    }
    return result;
  },

  CalcAbsoluteOffset : function(obj,attr)
  {
    var result = 0;
    var node = obj;
    while(obj != null && obj.tagName != CONST.HtmlTag.Body)
    {
      result += obj[attr];
      obj = obj.offsetParent;
    }
    return result;
  },

  GetAttribute : function(node,attrName)
  {
    var nodeValue = null;
    $A(node.attributes).each(
      function(a)
      {
        if(a.nodeName.toLowerCase() == attrName.toLowerCase())
        {
          nodeValue = a.nodeValue;
          throw $break;
        }
      }
    );
    return nodeValue;
  },

  GetChildNode : function(node,childName)
  {
    var childNode = null;
    $A(node.childNodes).each(
      function(c)
      {
        if(c.nodeName.toLowerCase() == childName.toLowerCase())
        {
          childNode = c;
          throw $break;
        }
      }
    );
    return childNode;
  },

  DisableElements : function(elements)
  {
    for (var i = elements.length - 1; i >= 0; i--)
    {
      var elmt = elements[i];
      if (elmt.style.visibility != CONST.CSS.Visibility.Hidden)
      {
        elmt.style.visibility  = CONST.CSS.Visibility.Hidden;
      }else{
        elmt._wasDisabled = true;
      }
    }
  },

  EnableElements : function(elements)
  {
    for (var i = elements.length - 1; i >= 0; i--)
    {
      var elmt = elements[i];
      if (!elmt._wasDisabled)
      {
        elmt.style.visibility = CONST.CSS.Visibility.Visible;
      }else if(elmt._imadeDisabled){
        elmt.style.visibility = CONST.CSS.Visibility.Visible;
        elmt._imadeDisabled = null;
      }else{
        elmt._wasDisabled = null;
      }
    }
  },
  
  GetFlashHtml : function(url,width,height){
    return "<object classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0' width='"+width+"' height='"+height+"' id='1' align='middle'>"
	 +"<param name='allowScriptAccess' value='sameDomain' />"
	 +"<param name='allowFullScreen' value='false' />"
	 +"<param name='movie' value='"+url+"' /><param name='quality' value='high' /><param name='bgcolor' value='#ffffff' />	<embed src='"+url+"' quality='high' bgcolor='#ffffff' width='"+width+"' height='"+height+"' name='1' align='middle' allowScriptAccess='sameDomain' allowFullScreen='false' type='application/x-shockwave-flash' pluginspage='http://www.macromedia.com/go/getflashplayer' />"
	 +"</object>";
  },
  
  SeeProductDetail : function()
  {
    var isRight = true;
    var type = "";
    var id = "";
    if(document.getElementById("rbProductType_0").checked)
    {
        type = "W001";
        id = document.getElementById("txtProductCode0").value.trim();
    }else{
        type = "W003";
        id = document.getElementById("txtProductCode1").value.trim();
    }
    id = id.split(" ")[0];
    var hasId = false;
    var codearr;
    
    if(type == "W001")
    {
        codearr = stock_code;
    }
    else
    {
        codearr = fund_code;
    }
    
    for(var i=0;i<codearr.length;i++)
    {
        if(codearr[i][0] == id || codearr[i][1] == id || codearr[i][2] == id)
        {
            hasId = true;
            id = codearr[i][1];
            break;
        }
    }
    if(!hasId)
    {
        isRight = false;
    }

    if(isRight)
    {
        Flakes.AddFlake("BAS0091010","productID="+id+"&productType="+type);
    }else{
        Dialog.alert(
             Message.MSG.NeedCorrectItem,
             {
              okLabel:"确定",
              buttonClass:"EditAeraButtonStyle",
              windowParameters:{
                                height:120,
                                width:300,
                                draggable:false,
                                className:"dialog",
                                icon:CONST.Res.ImgAlertIcon
                               }
             }
        );
    }
  }
}

/*
 * 文本框水印
 */
var WaterMarker = Class.create();
WaterMarker.prototype = {
  initialize : function(txtid,mark)
  {
    try{
      this.txtid = txtid;
      this.mark = mark;
      this.txtObj = document.getElementById(this.txtid);
      this.txtObj.mark = this.mark;
      this.txtObj.oldCssClass = this.txtObj.className;
      this.txtObj.waterMarkerCssClass = WaterMarkers.WaterMarkerCssClass;
      this.txtObj.waterMarkerCssStyle = "";
      WaterMarkers.ShowMark(this.txtObj,this.txtObj.mark);
      this.txtObj.attachEvent("onfocus",WaterMarkers.HideMark);
      this.txtObj.attachEvent("onblur",WaterMarkers.ShowMark);
    }catch(e){}
  }
}

var WaterMarkers = {
  WaterMarkerCssClass : "watermarkerstyle",
  
  ShowMark : function (obj,mark)
  {
    try{
	  if(obj && obj.value == "")
	  {
		  obj.value = mark;
		  obj.className = obj.waterMarkerCssClass;
	  }else{
		  var obj = event.srcElement;
		  if(obj.value == "" || obj.value == obj.mark)
		  {
			  obj.value = obj.mark;
			  obj.className = obj.waterMarkerCssClass;
		  }
	  }
	}catch(e){}
  },
  
  HideMark : function ()
  {
    try{
	  var obj = event.srcElement;
	  if(obj.value==obj.mark)
	  {
		  obj.value = "";
		  obj.className = obj.oldCssClass;
	  }
	}catch(e){}
  }
}
