﻿(function($) {
    $.ajpet = {
        "version": "2010.4",
        defaultLang: "en",
        strRegIdSeries: "^\\d+(\\,\\d+)*$",
        strRegMobile: "^1[358]\\d{9}$",
        strRegTel: "^((\\+)?\\d+\\-)?(\\(\\d+\\)|\\d+\\-)?\\d+(\\-\\d+)?$",
        strRegEmail: "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$",
        strRegChs: "[\\u4e00-\\u9fa5]",
        strRegSpecialChar: "[\\x00-\\x2C\\x2F\\x3A-\\x40\\x5B-\\x5E\\x60\\x7B-\\xFF]",

        getText: function(text) {
            var textEn = {
                "close": "Close", "alert": "Alert"
            };
            var textCn = {
                "close": "关闭", "alert": "提示"
            };
            var str = eval('text' + this.defaultLang)[text];
            return typeof str == 'undefined' ? text : str;
        }
    };
    
    $.fn.extend({
        move: function(type, x, y) {
            if (typeof x != "number") x = 0; if (typeof y != "number") y = 0;
            var dw = $(window).width(); var dh = $(window).height();
            var st = $(document).scrollTop(); var sl = $(document).scrollLeft();
            var ow = $(this).width(); var oh = $(this).height();
            //alert("dw:" + dw + ",dh:" + dh + ",sl:" + sl + ",st:" + st + ",ow:" + ow + ",oh:" + oh);

            $(this).css("position", "absolute");
            var top, left;
            //设置left
            switch (type) {
                case 1: case 4: case 7:
                    left = x;
                    break;
                case 2: case 5: case 8:
                    left = sl + (dw - ow) / 2 + x;
                    break;
                case 3: case 6: case 9: default:
                    left = dw - sl - ow + x;
                    break;
            }
            //设置top
            switch (type) {
                case 1: case 2: case 3:
                    top = y;
                    break;
                case 4: case 5: case 6:
                    top = st + (dh - oh) / 2 + y;
                    break;
                case 7: case 8: case 9: default:
                    top = dh + st - oh + y;
                    break;
            }
            //alert("top:" + top + ",left:" + left);
            $(this).css({ 'top': top < 0 ? 0 : top, 'left': left < 0 ? 0 : left });
            return $(this);
        },
        resizeImage: function(width, height) {
            $(this).hide().css({ 'width': '', 'height': '' }).show();
            var imgWidth = $(this).width(), imgHeight = $(this).height();
            if (imgWidth > width || imgHeight > height) {
                var aimP = width / height;
                var imgP = imgWidth / imgHeight;
                var p2 = 1;
                if (imgP > aimP) {
                    p2 = width / imgWidth;
                    height = parseInt(imgHeight * p2);
                } else if (imgP < aimP) {
                    p2 = height / imgHeight;
                    width = parseInt(imgWidth * p2);
                }
                $(this).width(width).height(height);
            }
            return $(this);
        }
    });
})(jQuery);

String.prototype.trim = function() {
	var reg = new RegExp("(^[\\s　]*)|([\\s　]*$)","gim");
	return this.replace(reg,"");
};

String.prototype.format = function(args){
	if(arguments.length<1)return this;
	var str = this;
	for(var i=0;i<arguments.length;i++){
		str = str.replace("{"+i.toString()+"}",arguments[i].toString());
	}
	return str;
};

String.prototype.leftB = function(start, length){
	if(arguments.length<1)start = 0;
	if(arguments.length<2)length = 0;
	var str = this;
	if(start<1 && length<1)return str;
	var rtn = "";
	var code = 0;
	for(var i=0,j=0,k=0;i<str.length;i++){
		code = str.charCodeAt(i);
		j += (code>=0&&code<=255) ? 1 : 2;
		if(j>=start){
			if(length<1 || k<length){
				rtn += str.substr(i,1);
				k += (code>=0&&code<=255) ? 1 : 2;
			}
		}
		if(length>0 && k>= length){
			break;
		}
	}
	return rtn;
};

String.prototype.lenB = function(){
	str = this;
	return str.replace(/[^\x00-\xff]/g, "**").length
};

String.prototype.regReplace = function(pattern, replaceText , regOptions){
	if(arguments.length<3) regOptions="";
	var reg = new RegExp(pattern, regOptions);
	return this.replace(reg, replaceText);
};

String.prototype.test = function(regPattern, regOption){
	if(arguments.length<2)regOption = "";
	return new RegExp(regPattern,regOption).test(this);
};

String.prototype.clearSpace = function(){
	return this.replace(/[\s　]/gi, "");
};

String.prototype.clearHtmlTag = function(){
	var str = this.replace(/\<[^\<]+\>/gim, "");
	str = str.replace(/&[a-z]+;/gim, "");
	return str;
};

String.prototype.clearSpecialChar = function(){
	return this.regReplace(jQuery.ajpet.strRegSpecialChar,"","gim");
};

String.prototype.isEmail = function(){
	return this.test(jQuery.ajpet.strRegEmail);
};

String.prototype.isIdCard = function(containOldVersion){
	var number = this;
	var c = false;
	if(typeof containOldVersion != "boolean") containOldVersion = false;
    var date, Ai;
	var verify = "10x98765432";
	var Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
	var area = ["","","","","","","","","","","","北京","天津","河北","山西","内蒙古","","","","","","辽宁","吉林","黑龙江","","","","","","","","上海","江苏","浙江","安微","福建","江西","山东","","","","河南","湖北","湖南","广东","广西","海南","","","","重庆","四川","贵州","云南","西藏","","","","","","","陕西","甘肃","青海","宁夏","新疆","","","","","","台湾","","","","","","","","","","香港","澳门","","","","","","","","","国外"];
	var re = number.match(/^(\d{2})\d{4}(((\d{2})(\d{2})(\d{2})(\d{3}))|((\d{4})(\d{2})(\d{2})(\d{3}[x\d])))$/i);
	if (re == null) return false;
	if (re[1] >= area.length || area[re[1]] == "") return false;
	if (re[2].length == 12) {
		Ai = number.substr(0, 17);
		date = [re[9], re[10], re[11]].join("-");
	}
	else {
		if(!containOldVersion) return false;
		Ai = number.substr(0, 6) + "19" + number.substr(6);
		date = ["19" + re[4], re[5], re[6]].join("-");
	}
	if (!date.isDate("ymd")) return false;
	var sum = 0;
	for (var i = 0; i <= 16; i++) {
		sum += Ai.charAt(i) * Wi[i];
	}
	Ai += verify.charAt(sum % 11);
	return (number.length == 15 || number.length == 18 && number == Ai);
};

String.prototype.isNumeric = function(){
	return this.test("^(-)?\\d+(\\.\\d*)?$");
};

String.prototype.isCurrency = function(){
	return this.test("^(-)?\\d+(\\.\\d{0,2})?$");
};

String.prototype.isInteger = function(){
	return this.test("^(-)?\\d+$");
};

String.prototype.isPositiveNumeric = function(hasZero){
	if(arguments<1){
		hasZero = true;
	}
	if(this.isNumeric()==false){
		return false;
	}
	var num = parseFloat(this);
	return hasZero ? num>=0 : num>0;
};

String.prototype.isPositiveInteger = function(hasZero){
	if(arguments<1){
		hasZero = true;
	}
	if(this.isInteger()==false){
		return false;
	}
	var num = parseInt(this);
	return hasZero ? num>=0 : num>0;
};

String.prototype.isChineseAll = function(){
	return this.test("^[\\u4e00-\\u9fa5]*$");
};

String.prototype.hasSpecialChar = function() {
    return this.test(jQuery.ajpet.strRegSpecialChar);
};

String.prototype.isDate = function(formatString) {
	var op = this;
	formatString = formatString || "ymd";
	var m, year, month, day;
	switch (formatString) {
		case "mdy":
			m = op.match(new RegExp("^(\\d{1,2})([-./])(\\d{1,2})\\2(\\d{4})$"));
			if (m == null) return false;
			month = m[1];
			day = m[3];
			year = m[4];
			break;
		case "dmy":
			m = op.match(new RegExp("^(\\d{1,2})([-./])(\\d{1,2})\\2(\\d{4})$"));
			if (m == null) return false;
			day = m[1];
			month = m[3];
			year = m[4];
			break;
		default:
			m = op.match(new RegExp("^(\\d{4})([-./])(\\d{1,2})\\2(\\d{1,2})$"));
			if (m == null) return false;
			year = m[1];
			month = m[3];
			day = m[4];
			break;
	}
	month = parseInt(month);
	if (isNaN(month)) return false;
	month = month == 0 ? 12 : month;
	var date = new Date(year, month - 1, day);
	return (typeof (date) == "object" && year == date.getFullYear() && month == (date.getMonth() + 1) && day == date.getDate());
};

//是否是润年
Number.prototype.isLeapYear = function(){
	var year = this;
	if ((year%4)==0){
		if ((year%100==0) && (year%400)!=0) return false;
		else return true;
	}
	else return false;
};


//日期
Date.prototype.getDayName = function(lang){
	lang = lang || 0;
	var dayname = [["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],
					["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],
					["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]];
	if(lang<0 || lang>=dayname.length) lang=0;
	return dayname[lang][this.getDay()];
};
Date.prototype.getMonthName = function(lang){
	lang = lang || 0;
	var monthname = [["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],
					  ["January","February","March","April","May","June","July","August","September","October","November","December"],
					  ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]];
	if(lang<0 || lang>=monthname.length) lang=0;
	return monthname[lang][this.getMonth()];
};
Date.prototype.isLeapYear = function() {
    return this.getFullYear().isLeapYear();
};
