﻿/*
   Elan javascript 公共函数
*/

Number.prototype.toFixed = function(d){
	var s = this + "";
	if(!d || d<0) d = 0;
	if(s.indexOf(".") == -1) s += "."; 
	s += new Array(d + 1).join("0");
	if(new RegExp("^(-|\\+)?(\\d+(\\.\\d{0,"+ (d + 1) +"})?)\\d*$").test(s)){
		var s = "0" + RegExp.$2;
		var pm = RegExp.$1;
		var a = RegExp.$3.length;
		var b = true;
		if(a == d + 2){
			a = s.match(/\d/g);
			if(parseInt(a[a.length - 1]) > 4){
				for(var i = a.length-2; i>=0; i--){
					a[i] = parseInt(a[i]) + 1;
					if(a[i] == 10){
						a[i] = 0; b = i!= 1;
					} else {
						break;
					}
				}
			}
			s = a.join("").replace(new RegExp("(\\d+)(\\d{"+ d +"})\\d$"), "$1.$2");
		}
		if(b){
			s = s.substr(1);
		}
		return (pm+s).replace(/\.$/, "");
	} 
	return this + "";
}; 

String.prototype.AsMoney = function(d){
	var m = parseFloat(this);
	if(!d || d<0) d = 0;
	if(m){
		return m.toFixed(d);
	}else{
		return "0.00";
	}
}

String.prototype.AsDate = function(){
	if(!this.IsDate()) return (new Date());
	var d = eval('new Date(' + this.replace(/\d+(?=-[^-]+$)/, function (a) { return parseInt(a, 10) - 1; }).match(/\d+/g) + ')');
	return d;
}

String.prototype.IsDate = function(){
	if(this == null) return false;	
	var _regDate = this.match(/^(\d{1,4})(-|\/|\.)(\d{1,2})\2(\d{1,2})$/); 
	var _regDateTime = this.match(/^(\d{1,4})(-|\/|\.)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/);
	if(_regDate == null && _regDateTime == null) return false;
	if(_regDate){
		var d = new Date(_regDate[1], _regDate[3] - 1, _regDate[4]); 
		return (d.getFullYear() == _regDate[1] && (d.getMonth()+1) == _regDate[3] && d.getDate() == _regDate[4]);
	}
	if(_regDateTime){		
		var t = new Date(_regDateTime[1], _regDateTime[3] - 1, _regDateTime[4], _regDateTime[5], _regDateTime[6], _regDateTime[7]);
		return (t.getFullYear() == _regDateTime[1] && (t.getMonth()+1) == _regDateTime[3] && t.getDate() == _regDateTime[4] && t.getHours() == _regDateTime[5] && t.getMinutes() == _regDateTime[6] && t.getSeconds() == _regDateTime[7]);
	}
}

String.prototype.Trim = function(){
    return this.replace(/(^\s*)|(\s*$)/g, "");
}

String.prototype.IsNull = function(){	
	return !this || this.Trim() == "";
}

String.prototype.Join = function(str, sp){
    if(this.Trim() == "") return str;
    if(str.Trim() == "") return this;
    if(sp){
       return (this + sp + str);
    }else{
       return (this + "," + str);
    }
}

String.prototype.IsImage = function(){
    var strImageExt = ".jpeg|.gif|.jpg|.png|.bmp|.pic|"
    if(this.indexOf(".")>-1){
        var p = this.lastIndexOf(".");
        var ext = this.substring(p, this.length) + '|';        
        ext = ext.toLowerCase();
        if(strImageExt.indexOf(ext) > -1){
            return true;
        }
    }
    return false;  
}

String.prototype.ImageThumb = function(){
   if(!this.IsImage()) return this;
   var p = this.lastIndexOf(".");
   var ext = this.substring(p, this.length);
   var f = this.substring(0, p);
   return (f + "_s" + ext);
}

String.prototype.AjaxEncode = function(){
	var str = escape(this);
	str = str.replace(/\+/g, "%2B");
    str = str.replace(/\&/g, "%26");
	return str;
}

String.prototype.IsNumber = function(){
	var reg = /(^-?\d\d*\.\d*$)|(^-?\d\d*$)|(^-?\.\d\d*$)/;
	return reg.test(this);
}

String.prototype.ToNumber = function(){
	if(this.IsNumber()){
		return parseInt(this);
	}else{
		if(arguments){
			return arguments[0];
		}
	}
}

Date.prototype.AsString = function(format){
	var data = {
		"M+" : this.getMonth()+1, //month
		"d+" : this.getDate(),     //day
		"h+" : this.getHours(),    //hour
		"m+" : this.getMinutes(), //minute
		"s+" : this.getSeconds(), //second
		"q+" : Math.floor((this.getMonth()+3)/3), //quarter
		"S" : this.getMilliseconds() //millisecond
	}
	if(!format || format.Trim() == "") format = "yyyy-MM-dd";
	if(/(y+)/.test(format)) {
		format = format.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
	}
	for(var k in data) {
		if(new RegExp("("+ k +")").test(format)) {
			format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? data[k] : ("00" + data[k]).substr(("" + data[k]).length));
		}
	}
	return format;
}

Array.prototype.AsString = function(s){
	var str = "";
	for(var i=0; i<this.length; i++){
		if(i > 0){
			str += "," + this[i];
		}else{
			str += this[i];
		}
	}
}

Array.prototype.IndexOf = function(s){
    for(var i=0; i<this.length; i++){
        if(this[i].toString().toLowerCase() == s.toString().toLowerCase()) return i;
    }
    return -1;
}

function AddWindowEventListener(eventName, eventArgs){
	if(window.attachEvent){
		window.attachEvent("on" + eventName, eventArgs);
	}else{
		window.addEventListener(eventName, eventArgs, false);
	}	
}

function StopEventReturn(event){
    try {        
        event.returnValue = false; //IE
        event.preventDefault(); //FF
        Event.stop(event);
    } catch(ex){
    }
}

function $Frame(id){
   return document.frames ? document.frames(id) : document.getElementById(id).contentWindow;            
}

function SetFocus(event, object){
    var key = KeyCode(event);
    if(key == 13){
        StopEventReturn(event);
        if(typeof(object) == "object"){
            object.focus();
        }else{
            $(object).focus();
        }
    }
}

function TextboxDoEvent(event, fn){
    var key = KeyCode(event);
    if(key == 13){
        StopEventReturn(event);
        if(fn) setTimeout(fn, 1);
    }
}

function KeyCode(event){
    return event ? event.keyCode : event.which;
}

function ClearSelectOptions(object){
	if(!object || !object.options) return false;	
    while(object.options.length > 0){
        object.options[object.options.length - 1] = null;
    }
}

function AddSelectOptions(object, text, value){
    if(!object.options) return false;
    object.options.add(new Option(text, value));
}

function PageBack(url){
    if(!url){
        window.history.back();
    }else{
        window.location.href = url;
    }
}

function IframeResize(iframe){
	var frame = $(iframe)	
	if (frame && !window.opera){
        frame.style.display = "block";
        if (frame.contentDocument && frame.contentDocument.body.offsetHeight){
            frame.height = frame.contentDocument.body.offsetHeight;
        }else if(frame.Document && frame.Document.body.scrollHeight){
            frame.height = frame.Document.body.scrollHeight;
        }
    }	
}

function IframeLoading(iframe, loader, image, fn){
    var frame = $(iframe);
    var load = $(loader);
    if(!frame || !load) return;
    if(!image){
        image = "/Images/loading.gif";
    }
    load.setStyle({ margin: "20px", textAlign: "center"});
    load.innerHTML = "<img src='"+ image +"' border='0' />";
    frame.hide();
    load.show();        
    if(Prototype.Browser.IE){
        frame.onreadystatechange = function(){        
            if(this.readyState == "complete"){
                load.hide();
                frame.show();
                if(fn) setTimeout(fn, 1);
            }
        };
    } else {
        frame.onload = function(){            
            frame.show();         
            load.hide();   
            if(fn) setTimeout(fn, 1);
        };
    }    
}

function CDate(s){
    return s.AsDate();
}

function DateAdd(interval, num, date){
    var yyyy = date.getFullYear();
	var mm = date.getMonth() + 1;
	var dd = date.getDate();
	var dt = (yyyy +"-"+ mm +"-"+ dd).AsDate();
	switch(interval){
	    case "y":
		    return new Date(dt.setYear(dt.getFullYear() + num));
			break;
		case "m":
		    return new Date(dt.setMonth(dt.getMonth() + num));
			break;
		case "d":
		    return new Date(dt.setDate(dt.getDate() + num));
		    break;
	}
}

function DateDiff(interval, d1, d2){
	var t1 = d1.getTime(), t2 = d2.getTime(), i={};
	i["y"] = d2.getFullYear() - d1.getFullYear();
	i["m"] = i["y"]*12 + d2.getMonth() - d1.getMonth();
	i["d"] = Math.floor(t2/86400000) - Math.floor(t1/86400000);
	return i[interval];
}

//初始化设置输入框样式
function InitTextboxStyle(){    
    try{
        var oInput = document.getElementsByTagName("input");
		for (var i = 0; i < oInput.length; i++){
            if (oInput[i] && oInput[i].getAttribute("type")){
				if(oInput[i].getAttribute("class") == "lock") continue;
				var type = oInput[i].getAttribute("type").toLowerCase();
				if(type == "text" || type == "password"){
					oInput[i].className = "textbox";
				}
			}
        }
		
		oInput = document.getElementsByTagName("textarea");
		for (var i = 0; i < oInput.length; i++){
            if (oInput[i]) oInput[i].className = "textbox";
        }
    }catch(e){
    }
}
AddWindowEventListener("load", InitTextboxStyle);


/* FF 相关 */
function FireFoxExplorer(){
	if(Prototype.Browser.IE) return;
    window.constructor.prototype.__defineGetter__("event", function(){ return(__window_event_constructor()); }); 
    Event.prototype.__defineGetter__("srcElement", function(){  return this.target;  }); 
	
	var links = document.getElementsByTagName("a");
    var inputs = document.getElementsByTagName("input");
    for(var i = 0; i < links.length; i++){
        if(links[i].getAttribute("disabled")){
            links[i].className = "disabled";
        }
    }
    for(var i = 0; i < inputs.length; i++){
        if(inputs[i].getAttribute("disabled")){
            inputs[i].className = "disabled";
        }
    }
}

function __window_event_constructor(){ 
    if(Prototype.Browser.IE) return(window.event);
    var _caller = __window_event_constructor.caller; 
    while(_caller!=null){
        var _argument=_caller.arguments[0]; 
        if(_argument){ 
            var _temp=_argument.constructor;
            if(_temp.toString().toLowerCase().indexOf("event")!=-1)
                return(_argument); 
        }
        _caller=_caller.caller; 
    }
    return(null); 
} 

AddWindowEventListener("load", FireFoxExplorer);



