﻿/// <reference path="jquery-1.3.2-vsdoc.js" />
(function($){
	$.fn.emptySelect = function(){
		return this.each(function(){
			if (this.tagName=='SELECT') this.options.length = 0;});}
	$.fn.loadSelect = function(optionsDataArray){
		return this.emptySelect().each(function(){
			if (this.tagName=='SELECT'){
				var selectElement = this;
				$.each(optionsDataArray,function(index,optionData){
					var option = new Option(optionData.n, optionData.v);
					if ($.browser.msie) {selectElement.add(option);}
					else {selectElement.add(option,null);}});}});}
	$.fn.fixOverflow = function(){
		if ($.browser.msie){
			return this.each(function(){
				if (this.scrollWidth > this.offsetWidth) {
					$(this).css({ 'padding-bottom' : '20px', 'overflow-y' : 'hidden' });
				}
			});
		}else{
			returnthis;
		}
	};
	$.fn.parseTemplate = function(data){
		var str = (this).html();
		var _tmplCache = {}
		var err = "";
		try{
			var func = _tmplCache[str];
			if (!func){
				var strFunc =
				"var p=[],print=function(){p.push.apply(p,arguments);};" +
							"with(obj){p.push('" +
				str.replace(/[\r\t\n]/g, " ")
					.replace(/'(?=[^#]*#>)/g, "\t")
					.split("'").join("\\'")
					.split("\t").join("'")
					.replace(/<#=(.+?)#>/g, "',$1,'")
					.split("<#").join("');")
					.split("#>").join("p.push('")
					+ "');}return p.join('');";

				//alert(strFunc);
				func = new Function("obj", strFunc);
				_tmplCache[str] = func;
			}
			return func(data);
		} catch (e) { err = e.message; }
		return "< # ERROR: " + err.toString() + " # >";
	}
	var defaultMasks = {pint:/[\d]/,'int':/[\d\-]/,pnum:/[\d\.]/,num:/[\d\-\.]/,hex:/[0-9a-f]/i,email:/[a-z0-9_\.\-@]/i,alpha:/[a-z_]/i,alphanum:/[a-z0-9_]/i};
	var Keys = {TAB: 9,RETURN: 13,ESC: 27,BACKSPACE: 8,DELETE: 46};
	var SafariKeys = {
		63234 : 37, // left
		63235 : 39, // right
		63232 : 38, // up
		63233 : 40, // down
		63276 : 33, // page up
		63277 : 34, // page down
		63272 : 46, // delete
		63273 : 36, // home
		63275 : 35  // end
	};
	$.fn.keyfilter = function(re){
		var isNavKeyPress = function(e){
			var k = e.keyCode;
			k = $.browser.safari ? (SafariKeys[k] || k) : k;
			return (k >= 33 && k <= 40) || k == Keys.RETURN || k == Keys.TAB || k == Keys.ESC;};
		var isSpecialKey = function(e){
			var k = e.keyCode;
			return (e.type == 'keypress' && e.ctrlKey) || k == 9 || k == 13 || k == 40 || k == 27 ||(k == 16) || (k == 17) ||(k >= 18 && k <= 20);};
		var getKey = function(e){
			var k = e.keyCode || e.charCode;
			return $.browser.safari ? (SafariKeys[k] || k) : k;};
		var getCharCode = function(e){
			return e.charCode || e.keyCode || e.which;};
		return this.keypress(function(e){
			if (e.ctrlKey || e.altKey){
				return;}
			var k = getKey(e);
			if($.browser.mozilla && (isNavKeyPress(e) || k == Keys.BACKSPACE || k == Keys.DELETE)){
				return;}
			var c = getCharCode(e), cc = String.fromCharCode(c), ok = true;
			if(!$.browser.mozilla && (isSpecialKey(e) || !cc)){
				return;}
			if ($.isFunction(re)){
				ok = re.call(this, cc);}
			else{
				ok = re.test(cc);}
			if(!ok){
				e.preventDefault();}});};
	$.extend($.fn.keyfilter, {defaults: {masks: defaultMasks}});
})(jQuery);
var AA = {};
AA.initKeyFilter = function(){
	var tags = $('input[class*=mask],textarea[class*=mask]');
	for (var key in $.fn.keyfilter.defaults.masks){
			tags.filter('.mask-' + key).keyfilter($.fn.keyfilter.defaults.masks[key]);}};
AA.checkSSN=function(ssn){
	var s=0;
	ssn = ssn+"";
	if(ssn.length<8 || ssn.length>10)
		return false;
	while(ssn.length != 10)
		ssn= "0" +ssn;    
	for(var i=0;i<9;i++){
		s +=ssn[i]*(10-i);
	}
	var m=s%11;
	if(m<2){
		if(m!=ssn[9])return false;
	}else{
		if((11-m)!=ssn[9])return false;
	}
	return true;
}
AA.toggleChks = function(parentId, state){
    var chks = document.getElementById(parentId).getElementsByTagName("input");
    var count=chks.length;
    for(i=0;i<count;i++)if(chks[i].type=='checkbox') chks[i].checked=state;    
};
AA.setChkState = function(id, state){
    var chk = document.getElementById(id);
    if(chk.type == 'checkbox')chk.checked = state;
};
AA.gregorian_to_jalali = function (g /* array containing year, month, day*/ ){
	var g_days_in_month = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
	var j_days_in_month = new Array(31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29);

	var gy, gm, gd;
	var jy, jm, jd;
	var g_day_no, j_day_no;
	var j_np; 
	var i;

	gy = g[0]-1600;
	gm = g[1]-1;
	gd = g[2]-1;

	g_day_no = 365*gy+Math.floor((gy+3)/4)-Math.floor((gy+99)/100)+Math.floor((gy+399)/400);
	for (i=0;i<gm;++i)
		g_day_no += g_days_in_month[i];
	if (gm>1 && ((gy%4==0 && gy%100!=0) || (gy%400==0)))
		++g_day_no;/* leap and after Feb */      
	g_day_no += gd;
 
	j_day_no = g_day_no-79;
 
	j_np = Math.floor(j_day_no/ 12053);
	j_day_no %= 12053;
 
	jy = 979+33*j_np+4*Math.floor(j_day_no/1461);
	j_day_no %= 1461;
 
	if (j_day_no >= 366) {
		jy += Math.floor((j_day_no-1)/365);
		j_day_no = (j_day_no-1)%365;
	}
 
	for (i = 0; i < 11 && j_day_no >= j_days_in_month[i]; ++i) {
		j_day_no -= j_days_in_month[i];
	}
	jm = i+1;
	jd = j_day_no+1;

	return new Array(jy, jm, jd);
}

AA.jalali_to_gregorian = function (j /* array containing year, month, day*/ ){
	var g_days_in_month = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
	var j_days_in_month = new Array(31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29);

	var gy, gm, gd;
	var jy, jm, jd;
	var g_day_no, j_day_no;
	var leap;

	var i;

	jy = j[0]-979;
	jm = j[1]-1;
	jd = j[2]-1;

	j_day_no = 365*jy + Math.floor(jy/33)*8 + Math.floor((jy%33+3)/4);
	for (i=0; i < jm; ++i)
		j_day_no += j_days_in_month[i];
	j_day_no += jd;

	g_day_no = j_day_no+79;

	gy = 1600 + 400*Math.floor(g_day_no/146097); /* 146097 = 365*400 + 400/4 - 400/100 + 400/400 */
	g_day_no = g_day_no % 146097;

	leap = 1;
	if (g_day_no >= 36525) /* 36525 = 365*100 + 100/4 */{
		g_day_no--;
		gy += 100*Math.floor(g_day_no/36524); /* 36524 = 365*100 + 100/4 - 100/100 */
		g_day_no = g_day_no % 36524;
		if (g_day_no >= 365)
			g_day_no++;
		else
			leap = 0;
	}
	gy += 4*Math.floor(g_day_no/1461); /* 1461 = 365*4 + 4/4 */
	g_day_no %= 1461;

	if (g_day_no >= 366) {
		leap = 0;
		g_day_no--;
		gy += Math.floor(g_day_no/ 365);
		g_day_no = g_day_no % 365;
	}
	for (i = 0; g_day_no >= g_days_in_month[i] + (i == 1 && leap); i++)
		g_day_no -= g_days_in_month[i] + (i == 1 && leap);
		gm = i+1;
		gd = g_day_no+1;
		return new Array(gy, gm, gd);
}

AA.jalali_today = function () {
	var Today = new Date();
	var j = AA.gregorian_to_jalali(new Array(Today.getFullYear(),Today.getMonth()+1,Today.getDate()));
	return j[2]+"/"+j[1]+"/"+j[0];
}

AA.getPersianDate = function( d ){
	var week = new Array( "يکشنبه" , "دوشنبه" , "سه شنبه" , "چهار شنبه" , "پنج شنبه" , "جمعه" , "شنبه" );
	var month = new Array("فروردين", "ارديبهشت", "خرداد","تير", "مرداد", "شهريور","مهر", "آبان", "آذر","دي", "بهمن","اسفند" );
	var j = AA.gregorian_to_jalali( new Array(d.getFullYear(),d.getMonth()+1,d.getDate()) );
	return week[d.getDay()] + " ، " + j[2] + " " + month[j[1] - 1] + " " + j[0];
}
AA.onkeypressGetPersian = function (event){
	if(!event) event = window.event;
	var e = event.charCode || event.keyCode;
	switch (String.fromCharCode(e)){
		case 'F' : case 'f':e = 1576;break;
		case 'j' :case 'J':e = 1578;break;
		case 'e' :case 'E':e = 1579;break;
		case 'P' :case 'p':e = 1581;break;
		case 'o' :case 'O':e = 1582;break;
		case 'n' :case 'N' :e = 1583;break;
		case 'b' :case 'B':e = 1584;break;
		case 'V' :case 'v' :e = 1585;break;
		case 'C' :case 'c' :e = 1586;break;
		case 's' :case 'S':e = 1587;break;
		case 'a' :case 'A' :e = 1588;break;
		case 'w' :case 'W':e = 1589;break;
		case 'q' :case 'Q':e = 1590;break;
		case 'X' :case 'x':e = 1591;break;
		case 'Z' :case 'z':e = 1592;break;
		case 'U' :case 'u':e = 1593;break;
		case 'Y' :case 'y':e = 1594;break;
		case 't' :case 'T':e = 1601;break;
		case 'R' :case 'r':e = 1602;break;
		case 'G': case 'g':e = 1604;break;
		case 'l' :case 'L' :e = 1605;break;
		case 'k' :case 'K':e = 1606;break;
		case 'i' :case 'I':e = 1607;break;
		case 'm' :case 'M':e = 1574;break;
		case 'd' :e = 1610;break;
		case 'D' :e = 1740;break;
		case 'h' :e =1575;break;
		case 'H' :e = 1570;break;
		case '?':e = 1567;break;
		case '`' :e = 1662;break;
		case '[' :e = 1580;break;
		case ']' :e = 1670;break;
		case '\\':e = 1688;break;
		case ';':e = 1603;break;
		case '\'':e = 1711;break;
		case ',':e = 1608;break;
	}
	if(document.all)event.keyCode = e;
}
