
/******************************************************************************
' Filename:       persianPopupCalendar.js
' Author:         Hooman Behmanesh
' E-Mail:	hoomb@web.de (please mention persianPopupCalendar in 
' Edit  for e107 by:        Hossein Fotohi
' email:          fotohi59@yahoo.com
subject)
' Project:        Persian Popup Calendar
' Version:				1.5
.
'**/
var rozhayetatil = new Array('1386/1/1','1386/1/2','1386/1/3','1386/1/4','1386/1/12','1386/1/13','1386/1/1','1386/3/14','1386/3/15','1386/3/28','1386/5/6','1386/5/20','1386/6/7','1386/7/11','1386/7/21','1386/8/15','1386/10/8','1386/10/29','1386/11/22','1386/12/9','1386/12/18','1386/12/29');
var fontFace="Tahoma";
var fontSize=11;

var dayDigits=1;
var permon=new Array()


var dkSolar = 0;
var dkGregorian = 1;
var titleColor="#6666FF";
var daysColor="#FFFFCC";
var bodyColor="#fff";
var dayColor="#fff";
var currentDayColor="#6666FF";
var footColor="#6666FF";
var borderColor="#ffffff";
var titleFontColor = "#fff";
var daysFontColor = "#333333";
var dayFontColor = "#333333";
var currentDayFontColor = "#ffffff";
var footFontColor = "#FFF";
var daybgcolor="#fff";
var tatilatcolor="#FF6633";

var weekDay = 0;
var dayCorrection = 4;
var flat = false;
var disableWeekend = false;
// ------

// codes

var yxMonths=new Array("فروردين", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند");
var yxDays=new Array("شنبه","یکشنبه","دوشنبه", "سه شنبه", "چهارشنبه", "پنجشنبه", "جمعه","شنبه");
var yxLinks=new Array("[پاک کردن]", "[بستن]");
var name_mona=new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
var name_mon=new Array('January','February','March','April','May','June','July','August','September','October','November','December');
var name_daya=new Array('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
var name_day=new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
var nav=navigator.userAgent.toLowerCase();
var isOpera=(nav.indexOf("opera")!=-1)?true:false;
var isOpera5=(nav.indexOf("opera 5")!=-1 || nav.indexOf("opera/5")!=-1)?true:false;
var isOpera6=(isOpera && parseInt(navigator.appVersion)>=6)?true:false;
var isN6=(nav.indexOf("gecko")!=-1);
var isN4=(document.layers)?true:false;
var isMac=(nav.indexOf("mac")!=-1);
var isIE=(document.all && !isOpera && (!isMac || navigator.appVersion.indexOf("MSIE 4")==-1))?true:false;

if (isN4) {
  fontSize+=2;
}

var span2="</span>";

function hideCalendare107(objn) {

    document.getElementById('frm'+objn).style.visibility = 'hidden';
  	document.getElementById('div'+objn).style.visibility = 'hidden';
  
}

function span1e107(tag) {
  return "<span class='"+tag+"'>";
}
function spanxe107(tag, color) {
  return "."+tag+" { font-family:"+fontFace+"; font-size:"+fontSize+"px; color:"+color+"; }\n";
}

function a1e107(tag) {
  return "<a class='"+tag+"'   href=";
}
function titlea1e107(tag) {
  return "<a class='"+tag+"' name='tst' id='tst'  href=";
}

function axe107(tag, color) {
  return "."+tag+" { text-decoration:none; color:"+color+"; }\n";
}

function calOBJe107(name, field,mode,format,hiddenf) {
	
   this.name = name;
   this.field = field;
   this.form = null;
   this.flat = flat;
   this.cY=0;
   this.cM=0;
   this.dd=0;
   this.d
   this.salecur
   this.mahecur
   this.count=0;
   
    this.widthcal=140;
       
    this.heightcal=180;
    
    if(mode!=undefined) 
       this.mode=mode
    else
       this.mode=1;
          
     if(format != undefined)
      this.calFormat=format
     else
      this.calFormat= "dd-mm-yyyy";
      
     if(hiddenf != undefined)
      this.calhidden=hiddenf
     

 
 
	var tmpIframe = document.createElement("IFRAME");
	tmpIframe.id = 'frm' + name;
	tmpIframe.name = 'frm' + name;
	tmpIframe.style.visibility = 'hidden';
  	tmpIframe.style.position = 'absolute';
  	tmpIframe.style.background = '#fff';
  	tmpIframe.style.top = 0;
  	tmpIframe.style.left = 0;
  	tmpIframe.width = 150;
  	tmpIframe.height = 200;
  	tmpIframe.style.border = '1px';
  	tmpIframe.style.zIndex = 10000;
  	document.body.appendChild(tmpIframe);

	var tmpContainer = document.createElement("DIV");
	tmpContainer.id = 'div' + name;
	tmpContainer.name = 'div' + name;
	tmpContainer.style.visibility = 'hidden';
  	tmpContainer.style.position = 'absolute';
  	tmpContainer.style.background = '#fff';
  	tmpContainer.style.top = 0;
  	tmpContainer.style.left = 0;
  	tmpContainer.width = 0;
  	tmpContainer.height = 0;
  	tmpContainer.style.border = 'none';
  	tmpContainer.style.zIndex = 10001;
  	tmpContainer.innerHTML = 'Hooman Behmanesh';
  	document.body.appendChild(tmpContainer);
  	
  	function cp(e) {
    if (navigator.appName == 'Netscape'
           && e.which == 1 && e.srcElement.id!='tst') {

    document.getElementById('div'+name).style.visibility = 'hidden';
     document.getElementById('frm'+name).style.visibility = 'hidden';
      return false;
      }
   else {
      if (navigator.appName == 'Microsoft Internet Explorer'
          && event.button==1 && event.srcElement.id!='tst' )
          {
        // alert(event.srcElement.id)
        document.getElementById('div'+name).style.visibility = 'hidden';
        document.getElementById('frm'+name).style.visibility = 'hidden';
        return false;
          }
         
         }
   return true;
 }
document.onmouseup=cp
 
}



// Find positioning
function getOffsete107(obj, dim) {
  var oLeft, oTop, oWidth, oHeight;
  
  
  
  if(dim=="left") 
  {     
  	
    oLeft = obj.offsetLeft;
    while(obj.offsetParent!=null) 
    {     
      oParent = obj.offsetParent;
      oLeft += oParent.offsetLeft;
      obj = oParent;
    }
    return oLeft;
    
  }
  
  else if(dim=="top")
  {
  	
    oTop = obj.offsetTop;
    while(obj.offsetParent!=null) 
    {
      oParent = obj.offsetParent;
      oTop += oParent.offsetTop;
      obj = oParent;
    }
    
    return oTop;
  }
  else if(dim=="width")
  {
    oWidth = obj.offsetWidth;
    return oWidth;
  }  
  else if(dim=="height")
  {
    oHeight = obj.offsetHeight;
    return oHeight;
  }    
  else
  {
    alert("Error: invalid offset dimension '" + dim + "' in getOffsete107()");
    return false;
  }
}

function getDayNamee107(y,m,d) {
	
  var wd=new Date(y,m,d);
  return yxDays[wd.getDay()];
  
}


function getDaype107(y,m,d)
{
	ny=parseInt(y)
	var miladi = jalalitogregoriane107(ny,m,d);
	
	 var wd=new Date(miladi[0],miladi[1]-1,miladi[2]);

  return wd.getDay();
}

function getMonthFromNamee107(m3) {
	
  for (var i = 0; i < yxMonths.length; i++) {
    if (yxMonths[i].toLowerCase().substring(0,3) == m3.toLowerCase()) {
      return i;
    }
    
  }

  return 0;
}

function getFormate107(objn) {
	
  var calF = objn.calFormat;
  calF = calF.replace(/\\/g, '\\\\');
  calF = calF.replace(/\//g, '\\\/');
  calF = calF.replace(/\[/g, '\\\[');
  calF = calF.replace(/\]/g, '\\\]');
  calF = calF.replace(/\(/g, '\\\(');
  calF = calF.replace(/\)/g, '\\\)');
  calF = calF.replace(/\{/g, '\\\{');
  calF = calF.replace(/\}/g, '\\\}');
  calF = calF.replace(/\</g, '\\\<');
  calF = calF.replace(/\>/g, '\\\>');
  calF = calF.replace(/\|/g, '\\\|');
  calF = calF.replace(/\*/g, '\\\*');
  calF = calF.replace(/\?/g, '\\\?');
  calF = calF.replace(/\+/g, '\\\+');
  calF = calF.replace(/\^/g, '\\\^');
  calF = calF.replace(/\$/g, '\\\$');
  calF = calF.replace(/dd/i, '\\d\\d');
  calF = calF.replace(/mm/i, '\\d\\d');
  calF = calF.replace(/yyyy/i, '\\d\\d\\d\\d');
  calF = calF.replace(/day/i, '\\w\\w\\w');
  calF = calF.replace(/mon/i, '\\w\\w\\w');
  return new RegExp(calF);
  
}

function getDateNumberse107(date,objn) {
	
	var gd = new Date();
	
	var emroz= new GregorianToSolare107(0,0,0);
	
  var y, m, d;
  var loc=0;
  var strt;
  var countc=0;
while(objn.calFormat.indexOf('%',loc)!=-1)
{
	loc=objn.calFormat.indexOf('%',loc);
	
  strt=objn.calFormat.substring(loc,loc+2);
 
  switch(strt)
  {
  	case '%Y':
  	  var vY=date.substring(loc+countc,loc+countc+4);
  	  countc=countc+2;
  	  break;
  	  
  	case '%y':
  	  var vy=date.substring(loc+countc,loc+countc+2);
  	  var vY='13'+vy
  	  break;
  	  
  	case '%m':
  	  var vm=date.substring(loc+countc,loc+countc+2);
  	  vm=vm-1;
  	  break;
  	  
  	case '%d':
  	  var vd=date.substring(loc+countc,loc+countc+2);
  	  break;
  	  
  	case '%b':
  	
  	 var vb=date.substring(loc+countc,loc+countc+2);
  	 if(vb.substring(0,1)=='ت')
  	 {
		 vm=3;
		 countc+=1;
		 
		 
  	 }
  	 else if(vb.substring(0,1)=='د')
  	 {
		 vm=9;
  	 }
  	 else
  	 {
  	 	for($i=0;$i<12;$i++)
  		 {
  	 		
  	 		if(yxMonths[$i].substring(0,2)==vb){
  	 		 countc=countc+yxMonths[$i].length-2;
  	 		 vm=$i
  	 		}
  	 
  		 }
  	 }
     break;
     
     case '%B':
     
  	 var vb=date.substring(loc+countc,loc+countc+2);
  	 if(vb.substring(0,1)=='ت')
  	 {
		 vm=3;
		 countc+=1;
		 
		 
  	 }
  	 else if(vb.substring(0,1)=='د')
  	 {
		 vm=9;
  	 }
  	 else
  	 {
  	 	for($i=0;$i<12;$i++)
  		 {
  	 		
  	 		if(yxMonths[$i].substring(0,2)==vb){
  	 		 countc=countc+yxMonths[$i].length-2;}
  	 
  		 }
  	 }
     break;
     case '%a':
      
     var va=date.substring(loc+countc,loc+countc+2);
      if(va.substring(1,2)=='ت')
		 countc+=5;
  	 else{
      for($i=0;$i<7;$i++)
  		 {
  	 		
  	 		if(yxDays[$i].substring(0,2)==va){
  	 		 countc=countc+yxDays[$i].length-2;}
  	 
  		 }
  	 }
  	 break;
  	 case '%A':
  	 
  	  var va=date.substring(loc+countc,loc+countc+2);
  	  
      if(va.substring(1,2)=='ت')
		 countc+=5;
  	 else{
      for($i=0;$i<7;$i++)
  		 {
  	 		
  	 		if(yxDays[$i].substring(0,2)==va){
  	 		 countc=countc+yxDays[$i].length-2;}
  	 
  		 }
  	 }
  	 break;
  	 
  	 case '%P':
  	 case '%p':
  	  countc=countc+1;
  	  break;
  	 
  	 case '%u':
  	 case '%w':
  	  countc=countc-1;
  	  break;
  	 case '%e':
  	 var ve=date.substring(loc+countc,loc+countc+2);
  	 ve=parseInt(ve);
  	     if(ve<9)
  	       countc-=1;
  	       vd=ve;
  	       break;
  	 case '%k':
  	 case '%l':
  	 
  	     var vtemp=date.substring(loc+countc,loc+countc+2);
  	     if(parseInt(vtemp,10)<9)
  	       countc-=1
  	       break;
  	 case '%s':
  	        countc=countc+8;
  	        break;
  	  case '%j':
  	    countc=countc+1
  	    break;
  	  case '%t':
  	   countc=countc+6;  
  	   break;   
  	  case '%U':
  	  break;    
  	 
  }
  loc+=1

 
}
  
 syear=parseInt(vY);
 smon=parseInt(vm);
 sday=parseInt(vd);
 syear=syear >=1000 & syear <=2000?syear: emroz.getFullYear();
smon=smon >= 0 & smon< 12? smon: emroz.getMonth();
sday=sday >=0 & sday<=31 ?sday: emroz.getDate();
  return new Array(syear,smon,sday);
}



function lastDaye107(d) {
  var yy=d.getFullYear(), mm=d.getMonth() + 1;

  if (mm >= 1 && mm <= 6) return 31;
  if (mm >= 7 && mm <= 11) return 30;
  if (mm == 12)
  	if (IsLeapYeare107(dkSolar, yy)) return 30;
  	else return 29;
}

function firstDaye107(d) {
  var yy=d.getFullYear(), mm=d.getMonth() + 1;
  var fd=SolarToGregoriane107(yy, mm, 1);
  var xxx = new Array("Sunday", "Monday", "Tuesday", "Wednesday","Thursday", "Friday", "Saturday");

  var dd = fd.getDay() - 3;
  
  
  return dd;
}

function dayDisplaye107(i) {
  if (dayDigits == 0) {
    return yxDays[i];
  }
  else {
    return yxDays[i].substring(0,dayDigits);
  }
}

calTitlee107=function(caln) {
	
	caln.mahecur=caln.d.getMonth()+1;
  	var yy=caln.d.getFullYear(), mm=yxMonths[caln.d.getMonth()];
  	var s;
  	 caln.salecur=yy;

    s="<div id='divhead' ><tr align='center' bgcolor='"+titleColor+"'  ><td colspan='7' style='width:100%;background-color:"+titleColor+";height:15%;' ><table dir='rtl' style='width:100% ; height:100%'  width='100%' height='100%' cellpadding='0' cellspacing='0' border='0' ><tr align='center' valign='middle'><td width='30%' height='20%' ><b>"+titlea1e107("titlea")+"'javascript:moveYeare107(-1,"+caln.name+")'>&nbsp;&#171;</a>&nbsp;"+titlea1e107("titlea")+"'javascript:prepMonthe107("+caln.name+")'>&#139;&nbsp;</a></b>"+"</td><td width='60%' align='center' style='color:#fff;text-align:center;font-family:tahoma;'><nobr><b>"+mm+" "+getFarsiNumbere107(yy)+"</b></nobr></td><td width='30%' >"+"<b>"+titlea1e107("titlea")+"\"javascript:nextMonthe107("+caln.name+")\" >&nbsp;&#155;</a>&nbsp;"+titlea1e107("titlea")+"'javascript:moveYeare107(1,"+caln.name+")'>&#187;&nbsp;</a></b>"+"</td></tr></table>\n</td></tr></div><tr align='center' style='background-color:"+daysColor+"'>";


  for (var i = weekDay; i < weekDay + 7; i ++) {
    s+="<td  valign='middle' style='width:14% ; height:10% ; background-color:"+daysColor+";text-align:center'>"+dayDisplaye107(i)+"</td>";
  }

  s+="</tr>";

  return s;
}

calHeadere107=function(caln) {
	
  return "<table dir='rtl' align='left' style='left:0px; top:0px background-color:"+borderColor+";width:"+caln.widthcal+"px;height:"+caln.heightcal+"px' cellspacing='0' cellpadding='1'><tr><td valign='top' height='100%' >\n<style type='text/css'>\n"+spanxe107("title",titleFontColor)+spanxe107("days",daysFontColor)+spanxe107("foot",footColor)+spanxe107("day",dayFontColor)+spanxe107("currentDay",currentDayFontColor)+axe107("titlea",titleFontColor)+axe107("daya",dayFontColor)+axe107("currenta",currentDayFontColor)+axe107("foota",footFontColor)+axe107("tatilat",tatilatcolor)+"</style>\n<table dir='rtl' style='width:100% ; height:100%' width='100%' height='100%' >";
}

function calFooterClicke107(d,caln) {
	var cd = new GregorianToSolare107(0, 0, 0);

	caln.cM = cd.getMonth();
	caln.cY = cd.getFullYear();

	pickDatee107(d,caln);
}

calFootere107=function(caln) {
	var s = '';
	var strtemp='';
	var cd = new GregorianToSolare107(0, 0, 0);

	var mm=yxMonths[cd.getMonth()];

	s += 'امروز: ';
	s += getFarsiNumbere107(cd.getDate()) + '&nbsp;';
	s += mm + '&nbsp;';
	s += getFarsiNumbere107(cd.getFullYear());
    if(caln.mode==2)
    {
    	strtemp="<tr bgcolor='"+footColor+"'><td style='background-color:"+footColor+";height:13%;font-family:tahoma;arial' colspan='7' align='center'  style='height:15px' >"+span1e107("foot")+"<b>"+a1e107("foota")+"'javascript:void(0)'>"+s+"</a></b>"+span2+"</td></tr></table>\n</td></tr></table>\n";
    }
    else
    {
    	strtemp="<tr bgcolor='"+footColor+"'><td style='background-color:"+footColor+";height:13%;font-family:tahoma;arial' colspan='7' align='center'  style='height:15px' >"+span1e107("foot")+"<b>"+a1e107("foota")+"'javascript: calFooterClicke107("+cd.getDate()+","+caln.name+")'>"+s+"</a></b>"+span2+"</td></tr></table>\n</td></tr></table>\n";
    }
	
  return strtemp
}

calBodye107=function(caln) {
	
	var day=caln.dd
    var s="", dayCount=1, fd=firstDaye107(caln.d), ld=lastDaye107(caln.d);

	var arrCal = new Array(6);
	var i, j, k;
	var blnRowHasValue = false;
	var ymd

    if (weekDay > 0 && fd == 0) 
    {
      fd = 7;
     }

    var k = 0;
    var cd = new GregorianToSolare107(0, 0, 0);

	var mah=cd.getMonth();
   for (i = 0; i < 6; i++) {
    blnRowHasValue = false;
    s = "<tr align='center' bgcolor='"+bodyColor+"'>";
    for (j = weekDay - dayCorrection; j < weekDay + 7 - dayCorrection; j++) {
      if (i * 7 + j < fd || dayCount > ld) {
        s += "<td style='background-color:#fff;height:10%' >&nbsp;</td>";
      }
      else {
      	blnRowHasValue = true;
        var bgColor=dayColor;
        var fgTag="day";
        var fgTagA="daya";
        var flagtatil=0
        if(j==2)
        {
        	 bgColor=dayColor;
        	  fgTagA="tatilat";
        	  flagtatil=1;
        }
        for (x in rozhayetatil)
        {
			ymd=caln.salecur+"/"+caln.mahecur+"/"+dayCount
			
			if(rozhayetatil[x]==ymd)
			{
				
        	 bgColor=dayColor;
        	  fgTagA="tatilat";
        	  flagtatil=1
			}
		}
		
		var curmah=cd.getMonth()+1

if (caln.salecur+"/"+caln.mahecur+"/"+caln.dd==ymd) {
          bgColor=currentDayColor;
          fgTag="currentDay";
          
          if(flagtatil==1)
          fgTagA="tatilat";
          else
          fgTagA="currenta";
        }

        if ((j == (weekDay + 6 - dayCorrection)) && (disableWeekend)){
        	s += "<td style='background-color:"+bgColor+";height:10%'  bgcolor='"+bgColor+"'>"+ getFarsiNumbere107(dayCount++) + "</td>";}
   
    else
    {
    	if(caln.mode==2)
    	{
    		s += "<td style='background-color:"+bgColor+";height:10%;text-align:center;color:#ff0000' bgcolor='"+bgColor+"'>"+a1e107(fgTagA)+"'javascript:void(0)'  >"+ getFarsiNumbere107(dayCount++) + "</a>"+"</td>";
    	}
    	else
    	{
        	s += "<td style='background-color:"+bgColor+";height:10%;text-align:center;color:#ff0000' bgcolor='"+bgColor+"'>"+a1e107(fgTagA)+"'javascript:pickDatee107("+dayCount+","+caln.name+")'  >"+ getFarsiNumbere107(dayCount++) + "</a>"+"</td>";
    	}
    }
      }
    }
    s += "</tr>";

    if (blnRowHasValue)
    	arrCal[k ++] = s;
    	
  }
 
if(arrCal[5]==undefined)
{
	 s = "<tr align='center' style='background-color:"+bodyColor+"'>";
	 for (j = 0; j < 7; j ++)
        s += "<td style='background-color:"+bodyColor+"'>&nbsp;</td>";
    s += "</tr>";
     arrCal[k] = s;
}
  s = '';
  for (i = 0; i < 6; i++) {
    s += arrCal[i];

	}

  return s;
  
}

moveYeare107=function (dy,objn) {
	
	 
  objn.cY+=dy;
  objn.d=new Date(objn.cY,objn.cM,1);

  changeCale107(objn);
 
}

function prepMonthe107(objn) {
	
  objn.cM=objn.d.getMonth()-1;
  
  if (objn.cM<0) { objn.cM=11; objn.cY--; }
  objn.d=new Date(objn.cY,objn.cM,1);
  changeCale107(objn);
}

function nextMonthe107(objn) {
 
	    objn.cM=objn.d.getMonth()+1;
  if (objn.cM>11) { objn.cM=0; objn.cY++;}
  objn.d=new Date(objn.cY,objn.cM,1);
  
  changeCale107(objn);
}

function changeCale107(objn) {
  var dd = 0;
if(objn.mode==1 || objn.mode==3){
    var calRE = getFormate107(objn);

  if(document.getElementById(objn.field).value!=""){
     var cd = getDateNumberse107(document.getElementById(objn.field).value,objn);
   
    if (cd[0] == objn.d.getFullYear() && cd[1] == objn.d.getMonth()) {
       objn.dd=cd[2];
      }
    }
    else {
      var cd = new GregorianToSolare107(0,0,0);
  
      if (cd.getFullYear() == objn.d.getFullYear() && cd.getMonth() == objn.d.getMonth()) {
        objn.dd=cd.getDate();
      }
    }


  var calendar=calHeadere107(objn)+calTitlee107(objn)+calBodye107(objn)+calFootere107(objn);
  
	document.getElementById('div'+objn.name).innerHTML = calendar;
}
else{
	 var cd = new GregorianToSolare107(0,0,0);
  
      if (cd.getFullYear() == objn.d.getFullYear() && cd.getMonth() == objn.d.getMonth()) {
        objn.dd=cd.getDate();
      }
      var calendar=calHeadere107(objn)+calTitlee107(objn)+calBodye107(objn)+calFootere107(objn);
  
	document.getElementById(objn.field).innerHTML = calendar;
	
}
}


showCale107=function(objcal) {
	
	if(objcal.mode==1 || objcal.mode==3){
		
if (document.getElementById('div'+objcal.name).style.visibility == 'visible')
			{ 
				
				hideCalendare107(objcal.name); 
				return
			 }
			
	  if (document.getElementById(objcal.field)) {
    
        if (document.getElementById(objcal.field).value!="" )
        {
        	
           var cd = getDateNumberse107(document.getElementById(objcal.field).value,objcal);
     
     		objcal.d = new Date(cd[0], cd[1], cd[2]);
     	
       		objcal.cY=cd[0];
      		objcal.cM=cd[1];
      		objcal.dd=cd[2];
    	}
        else {
      objcal.d = new GregorianToSolare107(0, 0, 0);

    	objcal.cY=objcal.d.getFullYear();
      objcal.cM=objcal.d.getMonth();
      objcal.dd=objcal.d.getDate();
    	}

    var calendar=calHeadere107(objcal)+calTitlee107(objcal)+calBodye107(objcal)+calFootere107(objcal);

    var fieldObject = document.getElementById(objcal.field);
    
  	var fieldPosX = getOffsete107(fieldObject, "left");
  	var fieldPosY = getOffsete107(fieldObject, "top");
  	var fieldPosW = getOffsete107(fieldObject, "width");
  	var fieldPosH = getOffsete107(fieldObject, "height");
   
    document.getElementById('frm'+objcal.name).style.left = fieldPosX+"px";
    document.getElementById('frm'+objcal.name).style.top = (fieldPosY + fieldPosH)+"px";
    document.getElementById('frm'+objcal.name).width=objcal.widthcal
    document.getElementById('frm'+objcal.name).height=objcal.heightcal

    document.getElementById('frm'+objcal.name).style.border = '1px';
   
	 document.getElementById('div'+objcal.name).style.left = fieldPosX+"px";
    document.getElementById('div'+objcal.name).style.top = (fieldPosY + fieldPosH)+"px";
    document.getElementById('div'+objcal.name).style.width = "140px";

	document.getElementById('div'+objcal.name).innerHTML = calendar;
	
    document.getElementById('frm'+objcal.name).style.visibility = 'visible';
    document.getElementById('div'+objcal.name).style.visibility = 'visible'; 
  }
}
else{
	 if (document.getElementById(objcal.field)) {
	 	objcal.d = new GregorianToSolare107(0, 0, 0);

    	objcal.cY=objcal.d.getFullYear();
      objcal.cM=objcal.d.getMonth();
      objcal.dd=objcal.d.getDate();
    	
    var calendar=calHeadere107(objcal)+calTitlee107(objcal)+calBodye107(objcal)+calFootere107(objcal);
    document.getElementById(objcal.field).style.visibility = 'visible'
    document.getElementById(objcal.field).innerHTML=calendar
	 	
	
}
}
}
function get2Digitse107(n) {
	
  return ((n<10)?"0":"")+n;
}

function pickDatee107 (d,objn) {
		
//	hideCalendare107(objn.name)
	var gd = new Date();
	
	
	var sal=objn.cY+'y';
	
	var hr = gd.getHours();
	
	var pm = (hr >= 12);
	var ir = (pm) ? (hr - 12) : hr;
	if (ir == 0)
		ir = 12;
		
	var Ih = (ir < 10) ? ("0" + ir) : ir;
	var sv=Math.floor(gd.getTime() / 1000);
	var w = getDaype107(objn.cY,objn.cM+1,d);
	
	var Cv = 1 + Math.floor(parseInt(objn.cY)/ 100);
    var dDate=objn.calFormat;
    var Pvper = pm ? "ب.ظ" : "ق.ظ";
    var Pv = pm ? "PM" : "AM";
	var pv = pm ? "pm" : "am";
  
  dDate = dDate.replace(/%Y/, objn.cY);
  dDate= dDate.replace(/%y/,sal.substring(2,4));
  dDate = dDate.replace(/%m/, get2Digitse107(objn.cM+1));
  dDate = dDate.replace(/%b/i, yxMonths[objn.cM]);
  dDate = dDate.replace(/%j/,days_of_yeare107(objn.cM+1,d,objn.cY))
  dDate = dDate.replace(/%d/, get2Digitse107(d));
  dDate = dDate.replace(/%a/i, getDayNamee107(objn.cY,objn.cM,d));
  dDate = dDate.replace(/%e/,d)
  dDate = dDate.replace(/%u/,w+1)
  dDate = dDate.replace(/%w/,w)
  dDate = dDate.replace(/%C/,Cv)
  dDate = dDate.replace(/%H/,hr);
  dDate = dDate.replace(/%I/,Ih)
  dDate = dDate.replace(/%M/,gd.getMinutes());
  dDate = dDate.replace(/%S/,gd.getSeconds());
  dDate = dDate.replace(/%s/,sv)
  dDate = dDate.replace(/%k/,hr)
  dDate = dDate.replace(/%l/,ir)
  dDate = dDate.replace(/%t/,'\t');
  dDate = dDate.replace(/%n/,'\n');
  dDate = dDate.replace(/%%/,'%') ;
  dDate = dDate.replace(/%p/i,Pvper);
  
  if(dDate.search('%U') != -1)
  {
  	var numyDay=days_of_yeare107(objn.cM+1,d,objn.cY)
  	var yekF=getDaype107(objn.cY,1,1);
  	
  	dDate=dDate.replace(/%U/,getNumWeekPere107(yekF,numyDay))
 } 
if(objn.mode==3)
{
	var mformat=objn.calFormat
	
	var mtemp=jalalitogregoriane107(objn.cY,objn.cM+1,d);
	Cv=1 + Math.floor(mtemp[0] / 100)
	sal=mtemp[0]+'y';
	

	 
	mformat = mformat.replace(/%Y/, mtemp[0]);
    mformat = mformat.replace(/%y/,sal.substring(2,4));
    mformat = mformat.replace(/%m/, get2Digitse107(mtemp[1]));
    mformat = mformat.replace(/%b/, name_mona[mtemp[1]-1]);
    mformat = mformat.replace(/%B/, name_mon[mtemp[1]-1]);
    mformat = mformat.replace(/%j/,getDayOfYeare107(mtemp[0],mtemp[1],mtemp[2]))
    mformat = mformat.replace(/%d/, get2Digitse107(mtemp[2]));
    mformat = mformat.replace(/%a/, name_daya[w]);
    mformat = mformat.replace(/%A/, name_day[w]);
    mformat = mformat.replace(/%e/,mtemp[2]);
    mformat = mformat.replace(/%u/,w+1);
    mformat = mformat.replace(/%w/,w);
    mformat = mformat.replace(/%C/,Cv);
    mformat = mformat.replace(/%H/,hr);
    mformat = mformat.replace(/%I/,Ih);
    mformat = mformat.replace(/%M/,gd.getMinutes());
    mformat = mformat.replace(/%S/,gd.getSeconds());
    mformat = mformat.replace(/%s/,sv);
    mformat = mformat.replace(/%k/,hr);
    mformat = mformat.replace(/%l/,ir); 
    mformat = mformat.replace(/%t/,'\t');
    mformat = mformat.replace(/%n/,'\n');
    mformat = mformat.replace(/%%/,'%');
    mformat = mformat.replace(/%P/,Pv);
    mformat = mformat.replace(/%p/,pv); 
     if(mformat.search('%U') != -1)
  {
  	numyDay=getDayOfYeare107(mtemp[0],mtemp[1],mtemp[2])
  	var yekjan=getDaype107(mtemp[0],1,1);
  	
  	mformat=mformat.replace(/%U/,getWeekNumbere107(yekjan,numyDay))
 } 
    
	document.getElementById(objn.calhidden).value=mformat;
	
}


  document.getElementById(objn.field).value=dDate;
  // IE5/Mac needs focus to show the value, weird.
 document.getElementById(objn.field).focus();
}
// ------

  

function getFarsiNumbere107(num){
	var res = '';
	var sNum = num.toString(10);

	for (i = 0; i < sNum.length; i ++)
		res += ('&#' + (sNum.charCodeAt(i) + 1728) + ';');

	return res;
}


function IsLeapYeare107(DateKind, Year)
{
	if (DateKind == dkSolar)
		return ((((Year + 38) * 31) % 128) <= 30);
	else
		return (((Year % 4) == 0) && (((Year % 100) != 0) || ((Year % 400) == 0)));
}

function GregorianToSolare107(gYear, gMonth, gDay) {
	if(gYear%4 == 0)
	{
		if(gYear%100 != 0)
		{
			leap=1;
		}
		else
		{
			if(gYear%400 == 0)
				leap=1;
			else
				leap=0;
		}
	}
	else
		leap=0;
	  if (gDay == 0 && gMonth == 0 && gYear == 0)	{
				dDate = new Date();
	
				gDay = dDate.getDate();
				gMonth = dDate.getMonth() + 1;
				gYear = dDate.getFullYear();
	  }
	if (gMonth<9)
		leap=0;

	gYear = (gYear== 0) ? 2000 : gYear;
	(gYear<1000) ? (gYear += 2000) : true;
	gYear -= ( (gMonth < 3) || ((gMonth == 3) && (gDay < 21)) ) ? 622 : 621;
	switch (gMonth) { 
		case 1: (gDay<21)? (gMonth=10, gDay+=10):(gMonth=11, gDay-=20); break; 
		case 2: (gDay<20)? (gMonth=11, gDay+=11):(gMonth=12, gDay-=19); break; 
		case 3: (gDay<21)? (gMonth=12, gDay+=9):(gMonth=1, gDay-=20); break; 
		case 4: (gDay<21)? (gMonth=1, gDay+=11):(gMonth=2, gDay-=20); break; 
		case 5: 
		case 6: (gDay<22)? (gMonth-=3, gDay+=10):(gMonth-=2, gDay-=21); break; 
		case 7: 
		case 8: 
		case 9: (gDay<23)? (gMonth-=3, gDay+=9):(gMonth-=2, gDay-=22); break; 
		case 10:(gDay<23)? (gMonth=7, gDay+=8):(gMonth=8, gDay-=22); break; 
		case 11: 
		case 12:(gDay<22)? (gMonth-=3, gDay+=9):(gMonth-=2, gDay-=21); break; 
		default: break; 
	}
gDay+=leap;
		this.gYear = gYear;
		this.gMonth = gMonth - 1;
		this.gDay = gDay;

		this.getDate  = function () { return this.gDay; };
		this.getMonth = function () { return this.gMonth; };
		this.getYear  = function () { return this.gYear; };
		this.getFullYear = function () { return this.gYear; };
}


function dive107(val1,val2)
{
	return parseInt(val1/val2,10)
}
function jalalitogregoriane107($j_y, $j_m, $j_d)
{
	
    $g_days_in_month = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
    $j_days_in_month = new Array(31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29);

   $jy = $j_y - 979;
  
   $jm = $j_m-1;
   $jd = $j_d-1;
 
   $j_day_no = 365*$jy + dive107($jy, 33)*8 + dive107($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*dive107($g_day_no, 146097); /* 146097 = 365*400 + 400/4 - 400/100 + 400/400 */
   $g_day_no = $g_day_no % 146097;

   $leap = true;
   if ($g_day_no >= 36525) /* 36525 = 365*100 + 100/4 */
   {
      $g_day_no--;
      $gy += 100*dive107($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 = false;
   }

   $gy += 4*dive107($g_day_no, 1461); /* 1461 = 365*4 + 4/4 */
   $g_day_no %= 1461;

   if ($g_day_no >= 366) {
      $leap = false;

      $g_day_no--;
      $gy += dive107($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;
  var miladi=new Array($gy, $gm, $gd);
   return miladi
}

function SolarToGregoriane107(sYear, sMonth, sDay) {

    if (sDay == 0 && sMonth == 0 && sYear == 0) {
			dDate = new Date();

			return dDate;
    }

    //'******************* Leap year
    if (sYear == 1378) {
        if (sMonth == 12 && sDay == 10)
            { sYear = 2000; sMonth = 2; sDay = 29; return; }

        if (sMonth == 12 && sDay > 10)
            sDay --;
    }
    else
    	if (sYear == 1379) {
        sDay --;

        if (sDay == 0) {
            sMonth --;
            if (sMonth > 0 && sMonth < 7) sDay = 31;
            if (sMonth > 6) sDay = 30;
            if (sMonth == 0){
                sDay = 29;
                sMonth = 12;
                sYear --;
            }
        }
    }
    //'*******************

    if (sMonth < 10 || (sMonth == 10 && sDay < 11))
        sYear += 621;
    else
        sYear += 622;

    switch (sMonth) {
        case 1: (sDay < 12) ? (sMonth = 3, sDay += 20) : (sMonth = 4, sDay -= 11); break;
        case 2: (sDay < 11) ? (sMonth = 4, sDay += 20) : (sMonth = 5, sDay -= 10); break;
        case 3: (sDay < 11) ? (sMonth = 5, sDay += 21) : (sMonth = 6, sDay -= 10); break;
        case 4: (sDay < 10) ? (sMonth = 6, sDay += 21) : (sMonth = 7, sDay -= 9);  break;
        case 5:
        case 6:
        case 8: (sDay < 10) ? (sMonth += 2, sDay += 22) : (sMonth += 3, sDay -= 9); break;
        case 7: (sDay < 9) ? (sMonth = 9, sDay += 22) : (sMonth = 10, sDay -= 8); break;
        case 9: (sDay < 10) ? (sMonth = 11, sDay += 21) : (sMonth = 12, sDay -= 9); break;
        case 10: (sDay < 11) ? (sMonth = 12, sDay += 21) : (sMonth = 1, sDay -= 10); break;
        case 11: (sDay < 12) ? (sMonth = 1, sDay += 20) : (sMonth = 2, sDay -= 11); break;
        case 12: (sDay < 10) ? (sMonth = 2, sDay += 19) : (sMonth = 3, sDay -= 9); break;
    }

		var retDate = new Date(sYear, sMonth - 1, sDay);

		return retDate;
}

function days_of_yeare107($month,$day,$year)
{
	var $jyear=parseInt($year,10);
	var $jmonth=parseInt($month,10)
	var $jday=parseInt($day,10);
	var $result=0;
	$j_days_in_month = new Array(31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29);
	if($jmonth==1)
	 $result=$jday;
	 else{
	for ($i=1;$i<$jmonth;$i++ )
	{
		 $result+=$j_days_in_month[$i]
	}
	$result+=$jday}
	var strresult = ($result < 100) ? (($result < 10) ? ("00" + $result) : ("0" + $result)) : $result;
	return strresult ;
}

getDayOfYeare107 = function($year,$month,$day) {
	var $jyear=parseInt($year,10);
	var $jmonth=parseInt($month,10)
	var $jday=parseInt($day,10);
	var $result=0;
	$g_days_in_month = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
	if($jmonth==1)
	 $result=$jday;
	 else{
	for ($i=1;$i<$jmonth;$i++ )
	{
		 $result+=$g_days_in_month[$i]
	}
	$result+=$jday}
	var strresult = ($result < 100) ? (($result < 10) ? ("00" + $result) : ("0" + $result)) : $result;
	return strresult ;
}

getNumWeekPere107=function(yekF,Numy)
{
	yek_far_day=parseInt(yekF,10);
	yday_sh=parseInt(Numy,10);
	yek_far_day=(yek_far_day==6) ? -1 : yek_far_day;
	
			    var week_sh=yday_sh+ yek_far_day;
			    var weekn=parseInt(((week_sh/7)+1),10);
			    var strweekn = weekn < 10 ? '0'+weekn : weekn
				 return strweekn ; 

}

getWeekNumbere107 =function(yekjan,Numy)
{
	
	yek_jan_day=parseInt(yekjan,10);
	yday_mi=parseInt(Numy,10);
	//yek_jan_day=(yek_far_day==6) ? -1 : yek_jan_day;
	
			    var week_mi=yday_mi+ yek_jan_day-1;
			    var weekn=parseInt(((week_mi/7)+1),10);
			    var strweekn = weekn < 10 ? '0'+weekn : weekn
				 return strweekn ; 

}
function voidr()
{
	return false;
}
