﻿Array.prototype.remove = function(index){
	if(isNaN(index)||index>this.length||index<0){return false;}
	this.splice(index,1);
}

String.prototype.remove = function(index,count){
	if (typeof(count)!="number") count=1;
	if(isNaN(index)||index>this.length||index<0||isNaN(count)||index+count>this.length||count<0){return this;}
	var t=this.substring(0,index);
	var e=this.substring(index+count);
	return t+e;
}

/*String.prototype.toString=function(){
	var format=this;
	var args=arguments;
	format=format.replace(/\{(\d+)\}/ig, function($1,$2){return args[$2]});
	return format;
}*/
String.prototype.len = function(){
    return this.replace(/[^\x00-\xff]/g,"**").length;
}

String.prototype.trim=function(){
	return this.replace(/(^\s+)|(\s+$)/g, "");
}
Date.prototype.toString = function()
{
	if(arguments.length>0)
	{
		var formatStr = arguments[0];
		var str = formatStr;		
		str=str.replace(/yyyy|YYYY/,this.getFullYear());
		str=str.replace(/yy|YY/,(this.getFullYear() % 100)>9?(this.getFullYear() % 100).toString():"0" + (this.getFullYear() % 100));		
		str=str.replace(/MM/,this.getMonth()+1>9?(this.getMonth()+1).toString():"0" + (this.getMonth()+1));
		str=str.replace(/M/g,(this.getMonth()+1).toString());		
		str=str.replace(/dd|DD/,this.getDate()>9?this.getDate().toString():"0" + this.getDate());
		str=str.replace(/d|D/g,this.getDate());		
		str=str.replace(/hh|HH/,this.getHours()>9?this.getHours().toString():"0" + this.getHours());
		str=str.replace(/h|H/g,this.getHours());		
		str=str.replace(/mm/,this.getMinutes()>9?this.getMinutes().toString():"0" + this.getMinutes());
		str=str.replace(/m/g,this.getMinutes());		
		str=str.replace(/ss|SS/,this.getSeconds()>9?this.getSeconds().toString():"0" + this.getSeconds());
		str=str.replace(/s|S/g,this.getSeconds());		
		return str;	
	}
	else
	{
		return this.toLocaleString();
	}
}

Function.prototype.bind = function() {
  var __method = this, args = $A(arguments), object = args.shift();
  return function() {
    return __method.apply(object, args.concat($A(arguments)));
  }
}
var Form = {
  serialize: function(form) {
    var elements = Form.getElements($(form));
    var queryComponents = new Array();

    for (var i = 0; i < elements.length; i++) {
      var queryComponent = Form.Element.serialize(elements[i]);
      if (queryComponent)
        queryComponents.push(queryComponent);
    }

    return queryComponents.join('&');
  },

  getElements: function(form) {
    form = $(form);
    var elements = new Array();

    for (tagName in Form.Element.Serializers) {
      var tagElements = form.getElementsByTagName(tagName);
      for (var j = 0; j < tagElements.length; j++)
        elements.push(tagElements[j]);
    }
    return elements;
  },

  getInputs: function(form, typeName, name) {
    form = $(form);
    var inputs = form.getElementsByTagName('input');

    if (!typeName && !name)
      return inputs;

    var matchingInputs = new Array();
    for (var i = 0; i < inputs.length; i++) {
      var input = inputs[i];
      if ((typeName && input.type != typeName) ||
          (name && input.name != name))
        continue;
      matchingInputs.push(input);
    }

    return matchingInputs;
  },

  disable: function(form) {
    var elements = Form.getElements(form);
    for (var i = 0; i < elements.length; i++) {
      var element = elements[i];
      element.blur();
      element.disabled = 'true';
    }
  },

  enable: function(form) {
    var elements = Form.getElements(form);
    for (var i = 0; i < elements.length; i++) {
      var element = elements[i];
      element.disabled = '';
    }
  },

  findFirstElement: function(form) {
    return Form.getElements(form).find(function(element) {
      return element.type != 'hidden' && !element.disabled &&
        ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
    });
  },

  focusFirstElement: function(form) {
    Field.activate(Form.findFirstElement(form));
  },

  reset: function(form) {
    $(form).reset();
  }
}

Form.Element = {
  serialize: function(element) {
    element = $(element);
    var method = element.tagName.toLowerCase();
    var parameter = Form.Element.Serializers[method](element);

    if (parameter) {
      var key = encodeURIComponent(parameter[0]);
      if (key.length == 0) return;

      if (parameter[1].constructor != Array)
        parameter[1] = [parameter[1]];

      return parameter[1].map(function(value) {
        return key + '=' + encodeURIComponent(value);
      }).join('&');
    }
  },

  getValue: function(element) {
    element = $(element);
    var method = element.tagName.toLowerCase();
    var parameter = Form.Element.Serializers[method](element);

    if (parameter)
      return parameter[1];
  }
}

Form.Element.Serializers = {
  input: function(element) {
    switch (element.type.toLowerCase()) {
      case 'submit':
      case 'hidden':
      case 'password':
      case 'text':
        return Form.Element.Serializers.textarea(element);
      case 'checkbox':
      case 'radio':
        return Form.Element.Serializers.inputSelector(element);
    }
    return false;
  },

  inputSelector: function(element) {
    if (element.checked)
      return [element.name, element.value];
  },

  textarea: function(element) {
    return [element.name, element.value];
  },

  select: function(element) {
    return Form.Element.Serializers[element.type == 'select-one' ?
      'selectOne' : 'selectMany'](element);
  },

  selectOne: function(element) {
    var value = '', opt, index = element.selectedIndex;
    if (index >= 0) {
      opt = element.options[index];
      value = opt.value;
      if (!value && !('value' in opt))
        value = opt.text;
    }
    return [element.name, value];
  },

  selectMany: function(element) {
    var value = new Array();
    for (var i = 0; i < element.length; i++) {
      var opt = element.options[i];
      if (opt.selected) {
        var optValue = opt.value;
        if (!optValue && !('value' in opt))
          optValue = opt.text;
        value.push(optValue);
      }
    }
    return [element.name, value];
  }
}

function $() {
  var elements = new Array();

  for (var i = 0; i < arguments.length; i++) {
    var element = arguments[i];
    if (typeof element == 'string')
      element = document.getElementById(element);

    if (arguments.length == 1)
      return element;

    elements.push(element);
  }

  return elements;
}
var $A = Array.from = function(iterable) {
  if (!iterable) return [];
  if (iterable.toArray) {
    return iterable.toArray();
  } else {
    var results = [];
    for (var i = 0; i < iterable.length; i++)
      results.push(iterable[i]);
    return results;
  }
}

var $F = Form.Element.getValue;

function SetPathParam(name,value,url){
	var str=(typeof(url)=="string")?url:self.location.href;
	var reg = new RegExp(name +"=([^&]*)","i");
	if (reg.test(str))
		str=str.replace(reg,name+"="+value);
	else{
		if (str.indexOf("?")>=0){
			str+="&"+name+"="+value;
		}
		else
			str+="?"+name+"="+value;
	}
	return str;								 
}

function RemoveItem(select){
    var len=select.options.length;
	for (var i=0;i<len;i++){
		select.remove(0);
	}
}

function SetDropDownListByValue(drop,value){
	for (var i=0;i<drop.options.length;i++){
		if (drop.options[i].value==value){
			drop.selectedIndex=i;
			break;
		}
	}
}

function ShowMessage(msg,url){
    var rndID="msgbox_"+String(Math.random()).replace(".","_");
    var evt="";
    if (url!="undefined"){
        if(url==-1||url=="-1")
            evt="history.back()";
        else if (typeof(url)=="string"&&url.length>0)
            evt="location.href=\""+url+"\"";
    }
    ModalDialog(rndID,"提示信息",msg,3,evt);
}

function GetObjPos(element){
    var coords = { x: 0, y: 0, width: element.offsetWidth, height: element.offsetHeight };
    while (element) {
        coords.x += element.offsetLeft;
        coords.y += element.offsetTop;
        element = element.offsetParent;
    }
    return coords;
}


//这个是我自已写的 没发现哪里和上面的不同,但结果就是不正确,郁闷
//function GetObjPos(obj){
//	var pos=new Object();
//	pos.width=obj.offsetWidth;
//	pos.height=obj.offsetHeight;
//	pos.x=0;
//	pos.y=0;
//	if (System.Browser.isIE){
//		pos.x=obj.getBoundingClientRect().left;
//		pos.y=obj.getBoundingClientRect().top
//	}
//	else{	
//	    while(obj){
//		    pos.x+=obj.offsetLeft;
//		    pos.y+=obj.offsetTop;
//		    obj=obj.offsetParnet;
//		}
//	}
//	return pos;
//}

function SelectAll(ctlName){
    var ctls=document.getElementsByName(ctlName);
    for (var i=0;i<ctls.length;i++){
        if (ctls[i].tagName){
            if (ctls[i].tagName.toLowerCase()=="input")
                ctls[i].checked=true;
            else
                ctls[i].selected=true;
        }
    }
}

function UnSelectAll(ctlName){
    var ctls=document.getElementsByName(ctlName);
    for (var i=0;i<ctls.length;i++){
        if (ctls[i].tagName){
            if (ctls[i].tagName.toLowerCase()=="input")
                ctls[i].checked=!ctls[i].checked;
            else
                ctls[i].selected=!ctls[i].selected;
        }
    }
}


function GetDateByUtcString(utc){
    var re=new RegExp("^(([0-9]{2,4})(-|/){1}([0-9]{1,2})(-|/){1}([0-9]{1,2}))[a-zA-Z]+([0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}).+$");
    //re.pa=;
    var r=re.exec(utc); 
    var date=r[4]+"/"+r[6]+"/"+r[2];
    var time=r[7];
    //alert(date+" "+time);
    return new Date(date+" "+time);
}

function FixImgWidth(panel){
    if (panel==null||panel=="")
        panel=document.body;
    if (typeof(panel)=="string")
        panel=$(panel);
    if (panel==null)
        return;
    var imgs=panel.getElementsByTagName("img");
    if (imgs.length>0){
        for (var j=0;j<imgs.length;j++){
            imgs[j].style.display="none";
            imgs[j].onload=function(){
                this.style.display="block";
                if (this.offsetWidth>this.getAttribute("fixWidth")){
                    if (System.Browser.isIE)
                        //this.style.width="90%";
                        this.style.width=String(this.getAttribute("fixWidth")-3)+"px";
                    else
                        this.style.width="100%";
                    this.removeAttribute("height");
                    this.style.height="auto";
                }
            }
        }
        for (var j=0;j<imgs.length;j++){
            imgs[j].style.display="none";
        }
        //if (System.Browser.isIE){
            var parentNode=imgs[0].parentNode;
            var panelWidth=parentNode.offsetWidth;
            while(panelWidth<=0&&parentNode!=null){
                parentNode=parentNode.parentNode;
                panelWidth=parentNode.offsetWidth;
            }
            if (parentNode==null)
                parentNode=panel;
            var tmp=document.createElement("div");
            tmp.style.width=panelWidth+"px";
            tmp.style.height="1000px";
            parentNode.appendChild(tmp);
            var fix=parentNode.offsetWidth-panelWidth;
            if (fix<0) fix=0;
            while (parentNode.scrollWidth!=parentNode.offsetWidth){
                panelWidth-=Math.abs(parentNode.scrollWidth-parentNode.offsetWidth);
                tmp.style.width=panelWidth+"px";
            }
            //alert(parentNode.offsetWidth+" "+panelWidth);
            //alert(fix);
            parentNode.removeChild(tmp);
            panelWidth-=fix;
            if (panelWidth<=0) panelWidth=100;
            if (panelWidth>panel.offsetWidth) panelWidth=panel.offsetWidth;
            for (var j=0;j<imgs.length;j++){
                if (System.Browser.isOpera) imgs[j].style.display="block";
                imgs[j].setAttribute("fixWidth",panelWidth);
            }
            return panelWidth;
        //}
        //alert(parentNode.scrollWidth+" "+parentNode.offsetWidth);
    }
}