﻿﻿/**
 * In The Name of Allah, The Most Gracious, The Most Merciful
 * 
 * @version 6.12.x.x
 * @copyright Copyright 2005-2008/1384-1387, vwideas.com
 */
/*-----------------------------------------------------------------------------------------------*/
function DivideIntegeral(Number1, Number2)
{
	return Math.floor(Number1 / Number2);
}


//document.ondragstart = function () { return false; }
JulianMonthDays = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
ShamsiMonthDays = new Array(31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29);

var msn=new Array(12);	// month shamsi name
msn[0]="فروردین";
msn[1]="اردیبهشت";
msn[2]="خرداد";
msn[3]="تیر";
msn[4]="مرداد";
msn[5]="شهریور";
msn[6]="مهر";
msn[7]="آبان";
msn[8]="آذر";
msn[9]="دی";
msn[10]="بهمن";
msn[11]="اسفند";
/*-----------------------------------------------------------------------------------------------*/
var wd=new Array(7);	// week day
wd[0]="شنبه";
wd[1]="یکشنبه";
wd[2]="دوشنبه";
wd[3]="سه شنبه";
wd[4]="چهارشنبه";
wd[5]="پنجشنبه";
wd[6]="جمعه";

function DateConvertor(Year, Month, Day)
{
	if (!Day && !Month && !Year)
	{
		var date = new Date();
		this.Year = date.getFullYear();
		this.Month = date.getMonth() + 1;
		this.Day = date.getDate();
	}
	else
	{
		this.Year = Year;
		this.Month = Month;
		this.Day = Day;
	}
}

var Date_ = new DateConvertor();
var yb = Date_.Year;
var mb = Date_.Month;
var db = Date_.Day;
 
JulianToShamsi(Date_);
var ys = Date_.Year;
var ms = Date_.Month;
var ds = Date_.Day;
var day = Date_.Weekday;

//wy = Math.ceil(DOY(ms, ds) / 7);		// week of year
iscalendar = false;
/*-----------------------------------------------------------------------------------------------*/
function opencalendar(element, Evt)
{
	y = ys;
	m = ms;
	elem = $(element);
	elem.dir = "ltr";
	elem.value = "";
	if (!iscalendar)
	{
		makecalendar();
		iscalendar = true;
	}
	cal(ys, ms);
	var objScroll = Window.getScroll();
	$("calendar").setStyles({
		top: objScroll.y + (Window.getHeight() / 2) - 99,
		left: objScroll.x + (Window.getWidth() / 2) - 105,
		visibility: 'visible'
	});
}
/*-----------------------------------------------------------------------------------------------*/
function closecalendar() {
	if ($('calendar'))
		$('calendar').setStyle('visibility', 'hidden');
}
/*-----------------------------------------------------------------------------------------------*/
function cal(y, m) {
	var mo = $('mo');
	var yr = $('yr');

	for ( i = 0 ; i < 7 ; i++ )		// day
	{
		for ( j = 0 ; j < 6 ; j++ )		// week
		{
			c = "c" + i.toString() + j.toString();
			c = $(c);
			c.set('html', " ");
			c.style.cursor = "default";
		}
	}
	//----------------------------------------------------------------
	for ( i = 1300 ; i < 1400 ; i++ )
	{
		yr.options[i-1300] = new Option(i, i);
	}
   //----------------------------------------------------------------
	for ( i = 0 ; i < 12 ; i++ )
	{
		mo.options[i] = new Option(msn[i], i + 1);
	}

	k = isYearKabisa(y);

	yr.value = y;
	mo.value = m;
	//----------------------------------------------------------------
	var Date_ = new DateConvertor(y, m, 1);
	var NormalDayColor, UncoloredCell;
	ShamsiToJulian(Date_);
	JulianDate = Date_.Year + '/' + Date_.Month + '/' + Date_.Day;
	fdm = Date_.Weekday;		// first day of the month
	ld = 31 - Math.floor( m / 7 ) - Math.floor( m / 12 ) * ( 1 - k );	// last day
	d = 0;
	
	while ( d < ld ) {
		i = ( fdm + d ) % 7;					// day
		j = DivideIntegeral(fdm + d, 7 );	// week
		d++;
		c = $("c" + i.toString() + j.toString()).set('html', d + '');
		c.style.cursor = "pointer";
		c.addEvent("click", select);
		if (y == ys && m == ms && d == ds)
			c.setStyle('color', '#ff0000');
		else if (c.getStyle('color').toLowerCase() != '#ff0000') {
            NormalDayColor = c.getStyle('color').toLowerCase();
            if (UncoloredCell) {
                UncoloredCell.setStyle('color', NormalDayColor);
                UncoloredCell = null;
            }
		} else if (NormalDayColor)
		    c.setStyle('color', NormalDayColor)
		else
		    UncoloredCell = c;

		if (c.getStyle('color') == '#FF0000') {
		    if (c.getStyle('color'))
		    Counter = true;
		    c.removeStyle('color');
		}
	}
}
/*-----------------------------------------------------------------------------------------------*/
function previous_m() {
	y = Math.abs($('yr').value);
	m = Math.abs($('mo').value);

	if (m >= 1)
	{
		m -= 1;
		if ( m <= 0 )
		{
			m = 12;
			y -= 1;
		}
		cal(y, m);
	}
}
/*-----------------------------------------------------------------------------------------------*/
function next_m() {
	y = Math.abs($('yr').value);
	m = Math.abs($('mo').value);

	if (m <= 12)
	{
		m += 1;
		if ( m > 12 )
		{
			m -= 12;
			y += 1;
		}
		cal(y, m);
	}
}
/*-----------------------------------------------------------------------------------------------*/
function previous_y() {
	
	cal(y = Math.abs($('yr').value) - 1, m = Math.abs($('mo').value));
	
}
/*-----------------------------------------------------------------------------------------------*/
function next_y() {
	cal(y = Math.abs($('yr').value) + 1, m = Math.abs($('mo').value));
}
/*-----------------------------------------------------------------------------------------------*/
function select_y()
{
	cal(y = Math.abs($('yr').value), m = Math.abs($('mo').value));
}
/*-----------------------------------------------------------------------------------------------*/
function select_m()
{
	cal(y = Math.abs($('yr').value), m = Math.abs($('mo').value));
}
/*-----------------------------------------------------------------------------------------------*/
function select(Evt)
{
	var Evt = new Event(Evt);
	id = Evt.target.id;
	i = parseInt(id.charAt(1));
	j = parseInt(id.charAt(2));
	d = ( j * 7 + i ) - fdm + 1;
	if ( d > 0 && d <= ld )
	{
		elem.value = y.toString();
		if ( (m) < 10 )
		{
			elem.value += "/0" + m;
		}
		else
		{
			elem.value += "/" + m;
		}

		if ( d < 10 )
		{
			elem.value += "/0" + d;
		}
		else
		{
			elem.value += "/" + d;
		}

		closecalendar();
	}
}

function makecalendar()
{
	/*---------------------------------------------------------*/
	var div = new Element("div");
	div.className = "CalendarClass";
	div.position = "absolute";
	div.setAttribute("id", "calendar");
	/*---------------------------------------------------------*/
	
	/*---------------------------------------------------------*/
	
	var thead = new Element('table').injectInside(div);
	 	thead.className = "Header";
		var tbodyh = new Element('tbody').injectInside(thead);
	   tbodyh.className = "CalendarClass";
		
	//---------------------------------------------------------
	var tr=new Element('tr').injectInside(tbodyh);
     var td = new Element("td");
		td.className = "titleCalendarClass";
		td.colSpan = "12";
			var aClose=  new Element("a");
			aClose.className = "HeaderClose";
			 aClose.set('html','&nbsp;');  		
			aClose.addEvent("click", closecalendar);
		    aClose.inject(td);
	td.inject(tr);
	
	
	//----------------------------------------------------------------
	var tr=new Element('tr').injectInside(tbodyh);
	
	
	tr.className = "Header";
	
	
		var td =  new Element("td");
		td.className = "Header";
		tr.grab(td);
	 
	    var td =  new Element("td");
		td.className = "Header";
		tr.grab(td);
	
	    var td =  new Element("td");
		td.className = "Header";
		tr.grab(td);
	 
		
		var td =  new Element("td");
		td.className = "Header";
			var aPre_y = new Element("a");
			aPre_y.className = "HeaderPre_y";
			aPre_y.set('html','&nbsp;&nbsp;&nbsp;');   	//	btn.value = "";
			aPre_y.addEvent("click", previous_y);
		td.grab(aPre_y);
		tr.grab(td);
	
	
	

		var td =  new Element("td");
		td.className = "Header";
		
			var sel = new Element("select");
			sel.className = "Header";
			sel.setAttribute("id", "yr");
			sel.addEvent("change", select_y);
		td.grab(sel);
		$(tr).grab(td);
	   ////
	   
	   var td =  new Element("td");
		td.className = "Header";
			var anext_y = new Element("a");
			anext_y.className = "HeaderNext_y";
			anext_y.set('html','&nbsp;&nbsp;&nbsp;');  	
			anext_y.addEvent("click", next_y);
		td.grab(anext_y);
		tr.grab(td);
	 
	   ////
	var td =  new Element("td");
		td.className = "HeaderSpace";
		tr.grab(td);
		
		
	/////	
		
		
	var td =  new Element("td");
		td.className = "Header";
			var aPre_m = new Element("a");
			aPre_m.className = "HeaderPre_m";
			aPre_m.set('html','&nbsp;&nbsp;&nbsp;');  	//	btn.value = "";
			aPre_m.addEvent("click", previous_m);
		td.grab(aPre_m);
		tr.grab(td);

	
		var td =  new Element("td");
		td.className = "Header";
			var sel = new Element("select");
			sel.className = "Header";
			sel.setAttribute("id", "mo");
			sel.onchange = select_m;
			sel.addEvent("change", select_m);
		td.grab(sel);
		$(tr).grab(td);
		
	var td =  new Element("td");
		td.className = "Header";
			var anext_m = new Element("a");
			anext_m.className = "HeaderNext_m";
			anext_m.set('html','&nbsp;&nbsp;&nbsp;');  	
			anext_m.addEvent("click", next_m);
		td.grab(anext_m);
		tr.grab(td);


	
	//---------------------------------------------------------
	//tr = thead.insertRow(-1);
	var tr=new Element('tr').injectInside(tbodyh);
	tr.className = "Header";
	
    
	
	var hrl = new Element("hr").injectInside(div);
	hrl.className="Line";
	
	var tbl = new Element("table").injectInside(div);
	tbl.className = "CalendarClass";
	tbl.setAttribute("id", "tblcal");
	tbl.align = "center";

	
		
	//---------------------------------------------------------
	var tbody = new Element('tbody').injectInside(tbl);
	   tbody .className = "CalendarClass";
	
	for (var i = 0; i < 7; i++) {
		//----------------------------------
	var tr=new Element('tr').injectInside(tbody);
	//	tr = tbody.insertRow(-1);
		tr.className = "CalendarClass";
		//----------------------------------
			var td =  new Element("td");
			td.className = "nameCalendarClass";
			td.set('html', wd[i]);
			$(tr).grab(td);
		//----------------------------------
		for ( j = 0 ; j < 6 ; j++ ) {
			var td =  new Element("td");
			td.className = "CalendarClass";
			td.setAttribute("id", "c"+i.toString()+j.toString());
			td.set('html', " ");
			$(tr).grab(td);
		}
	}
	/*---------------------------------------------------------*/
	div.grab(tbl);
	$(document.body).grab(div);
	
	var contElement=$(window);
	var hanElement= $$('.titleCalendarClass');
	var dragElement=$('calendar');
	
	var drag_fixed = (dragElement.getStyle('position', 'fixed') == 'fixed');
    
	
	
//JSFX_FloatDiv("calendar", 10,100).floatIt();
	
/*	dragElement.makeDraggable(
	{
	limit: {
		x: [
			window.getScrollLeft, 
			function() { return window.getWidth() + window.getScrollLeft() - dragElement.offsetWidth;	}
		], 
		y: [
			window.getScrollTop,
			function() { return window.getHeight() + window.getScrollTop() - dragElement.offsetHeight; }
		]
	},
   
	 handle: hanElement
	
          });
			
	*/
	
//	dragElement.makeDraggable(
//	{
	
	// handle: hanElement
	
 //    });
			
	
	
	
	
	
}
/*-----------------------------------------------------------------------------------------------*/
function trimIt(str)
{
	return str.replace(/^\s*|\s*$/g,"");
}

function doOnFocus(Evt)
{
	var Evt = new Event(Evt);
	var CE = Evt.target;
	var currentText = CE.value;
	if (trim(currentText) == "")
	{
		CE.value = "****/**/**";
	}
}

function doOnBlur(Evt)
{
	var Evt = new Event(Evt);
	var CE = Evt.target;
	var currentText = CE.value;
	if (currentText.indexOf("*") != -1)
	{
		CE.value = "";
	}
}

function isYearKabisa(Year)  // is Shamsi Leap Year?
{
	if ((Year - 1299) % 4 == 0)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}

/*-----------------------------------------------------------------------------------------------*/
function isYearLeap(Year) // is Julian Leap Year?
{
	if (Year % 400 == 0)
	{
		return true;
	}
	else if (Year % 100 == 0)
	{
		return false;
	}
	else if (Year % 4 == 0)
	{
		return true;
	}
}

function ShamsiToJulian(Date_)
{
	// if (!isShamsiDateCorrect(Year, Month, Day))
	// {
	//		return false;
	// }

	ShYear = Date_.Year - 979;
	ShMonth = Date_.Month - 1;
	ShDay = Date_.Day - 1;

	ShamsiDayNo = 365 * ShYear + DivideIntegeral(ShYear, 33) * 8 + DivideIntegeral(ShYear % 33 + 3, 4);
	for (var i = 0; i < ShMonth; ++i) 
		ShamsiDayNo += ShamsiMonthDays[i]; 

	ShamsiDayNo += ShDay; 
	
	JulianDayNo = ShamsiDayNo + 79; 

	JYear = 1600 + 400 * DivideIntegeral(JulianDayNo, 146097); /* 146097 = 365*400 + 400/4 - 400/100 + 400/400 */ 
	JulianDayNo = JulianDayNo % 146097; 

	Leap = true;
	if (JulianDayNo >= 36525) /* 36525 = 365*100 + 100/4 */
	{
		JulianDayNo--;
		JYear += 100 * DivideIntegeral(JulianDayNo,  36524); /* 36524 = 365*100 + 100/4 - 100/100 */
		JulianDayNo = JulianDayNo % 36524;

		if (JulianDayNo >= 365)
			JulianDayNo++;
		else
			Leap = false;
	}


	JYear += 4 * DivideIntegeral(JulianDayNo, 1461); /* 1461 = 365*4 + 4/4 */
	JulianDayNo %= 1461;

	if (JulianDayNo >= 366)
	{
		Leap = false;

		JulianDayNo--;
		JYear += DivideIntegeral(JulianDayNo, 365);
		JulianDayNo = JulianDayNo % 365;
	}

	for (i = 0; JulianDayNo >= JulianMonthDays[i] + (i == 1 && Leap); i++)
		JulianDayNo -= JulianMonthDays[i] + (i == 1 && Leap);

	JMonth = i + 1;
	JDay = JulianDayNo + 1;

	Date_.Year = JYear;
	Date_.Month = JMonth;
	Date_.Day = JDay;

	var tmpDate = new Date(Date_.Year, Date_.Month - 1, Date_.Day);
	var Weekday = (tmpDate.getDay() + 1) % 7;
	Date_.Weekday = Weekday;
	return true;
}
/**
 * Date_ = {Year: 1383, Month: 1383, Day: 1383}
 */
function JulianToShamsi(Date_)
{
	// if (!isJulianDateCorrect(Year, Month, Day))
	// {
	//		return false;
	// }

	var tmpDate = new Date(Date_.Year, Date_.Month - 1, Date_.Day);
	var Weekday = (tmpDate.getDay() + 1) % 7;

	JYear = Date_.Year - 1600;
	JMonth = Date_.Month - 1;
	JDay = Date_.Day - 1;

	JulianDayNo = 365 * JYear + DivideIntegeral(JYear + 3, 4) - DivideIntegeral(JYear + 99, 100) + DivideIntegeral(JYear + 399, 400); 

	for (var i = 0; i < JMonth; ++i) 
		JulianDayNo += JulianMonthDays[i]; 

	if (JMonth > 1 && isYearLeap(JYear)) 
		JulianDayNo++; /* leap and after Feb */

	JulianDayNo += JDay;

	ShamsiDayNo = JulianDayNo - 79;

	ShNP = DivideIntegeral(ShamsiDayNo, 12053); /* 12053 = 365*33 + 32/4 */
	ShamsiDayNo = ShamsiDayNo % 12053;

	ShYear = 979 + 33 * ShNP + 4 * DivideIntegeral(ShamsiDayNo, 1461); /* 1461 = 365*4 + 4/4 */

	ShamsiDayNo %= 1461; 

	if (ShamsiDayNo >= 366)
	{ 
		ShYear += DivideIntegeral(ShamsiDayNo - 1, 365); 
		ShamsiDayNo = (ShamsiDayNo - 1 ) % 365; 
	} 

	for (var i = 0; i < 11 && ShamsiDayNo >= ShamsiMonthDays[i]; ++i) 
		ShamsiDayNo -= ShamsiMonthDays[i];

	ShMonth = i + 1;
	ShDay = ShamsiDayNo + 1;

	Date_.Year = ShYear;
	Date_.Month = ShMonth;
	Date_.Day = ShDay;
	Date_.Weekday = Weekday;
	return true;
}


//function isJulianYearCorrect(Year, Month, Day)
//{
//	return true;
//}
//
//function isShamsiYearCorrect(Year, Month, Day)
//{
//	return true;
//}
