var gLang = 'EN';
var sepIn='/';
var sepOut = '/';
var sep = '/';
var new_sep = " ";
//these are height and width of the calendar
var CalHeight = "220px";
var CalWidth = "250px";

// if two digit year input dates after this year considered 20 century.
var NUM_CENTYEAR = 30;
// is time input control required by default
var BUL_TIMECOMPONENT = false;
// are year scrolling buttons required by default
var BUL_YEARSCROLL = true;

var calendars = [];
//var RE_NUM = /^\/?\d+$/;
var isCurrent = 1;
var currentId ;


var FullMonthNames = new Array(
                                'January',
                                'February',
                                'March',
                                'April',
                                'May',
                                'June',
                                'July',
                                'August',
                                'September',
                                'October',
                                'November',
                                'December'
                                );

var MonthNames = new Array(
                            'Jan',
                            'Feb',
                            'Mar',
                            'Apr',
                            'May',
                            'Jun',
                            'Jul',
                            'Aug',
                            'Sep',
                            'Oct',
                            'Nov',
                            'Dec'
                            );



var FullDayNames = new Array(
                                'Sunday',
                                'Monday',
                                'Tuesday',
                                'Wednesday',
                                'Thursday',
                                'Friday',
                                'Saturday'
                                );


var DayNames = new Array(
                            'Sun',
                            'Mon',
                            'Tue',
                            'Wed',
                            'Thu',
                            'Fri',
                            'Sat'
                            );


//----------------------------------------------------------------------------------
function calendar1(obj_target,gLang) {
	
	// assigning methods
	this.gen_date = cal_gen_date1;
	
	this.lang = gLang;

	
	this.target = obj_target;
	this.time_comp = BUL_TIMECOMPONENT;
	this.year_scroll = BUL_YEARSCROLL;
	
	// register in global collections
	this.id = calendars.length;
	calendars[this.id] = this;
}



//------------------------------------------------------------------------

// date generating function
function cal_gen_date1 (dt_datetime) {
	return (
		dt_datetime.getFullYear() + sep
		+ (dt_datetime.getMonth() < 9 ? '0' : '') + (dt_datetime.getMonth() + 1) + sep
		+ (dt_datetime.getDate() < 10 ? '0' : '') + dt_datetime.getDate()
	);
}
//--------------------------------------------------------------------------

function validateDate(dateStr,dateFormat,dateFormatSeparator,calendarFutureYears,calendarTotalYears)
{
	
	if (dateStr.length==0) return true;
	
	if (dateFormat==null) dateFormat="dd/MM/yyyy";
	if (dateFormatSeparator==null) dateFormatSeparator = "/";
	
	try 
	{
	     var d = convertToDate(dateStr,dateFormat,dateFormatSeparator);
	     if (d==null) return 1; 
	    
	    
	    var cFY = parseInt(calendarFutureYears);
	    var cTY = parseInt(calendarTotalYears);
	    
	    if (!isNaN(cFY) && !isNaN(cTY) && cFY >0 && cTY >0)	    
	    {
	        var minYear = (new Date()).getFullYear() + (cFY - cTY);
            var maxYear = (new Date()).getFullYear() +  cFY;    
            
            if (d.getFullYear() >maxYear || d.getFullYear()<minYear)
            {
                return 2;
            }
	    }
	    

		return 0;
	    
	    
	}
	catch(e)
	{
	    return 1;
	
	}
}
	
	
	
function Trim(str)
{	
    return str.replace(/^\s*/, "").replace(/\s*$/, "");
}
	

function ReturnDate(id,obj,withPostBack,event)
{	
	//var positionArray = FindElementPosition(obj);
	
	var topPos =event.screenY;//event.clientY; //obj.style.top;
	var leftPos = event.screenX;//event.clientX; //obj.style.left;	
	
	var mydate;
	var dt_current;
	var leftPos, topPos;	
	
	var dateTextBox = document.getElementById(id);
	var dateFormat = dateTextBox.getAttribute("dateFormat");
	var dateFormatSeparator = dateTextBox.getAttribute("dateFormatSeparator");
	var calendarDialogLocation = dateTextBox.getAttribute("calendarDialogLocation");
	dt_current = dateTextBox.value;
	mydate = ""

	if (supportModalDialog() ) {

	    mydate = window.showModalDialog(calendarDialogLocation + "calendar1.aspx?dateTime=" + dt_current +
		"&id=" + id +
		"&calendarFutureYears=" + dateTextBox.getAttribute("calendarFutureYears") +
		"&calendarTotalYears=" + dateTextBox.getAttribute("calendarTotalYears") +
		"&dateFormat=" + ((dateFormat == null || typeof (dateFormat) == "undefined") ? "dd/MM/yyyy" : dateFormat) +
		"&dateFormatSeparator=" + ((dateFormatSeparator == null || typeof (dateFormatSeparator) == "undefined") ? "/" : dateFormatSeparator) +
		"&gLang=" + gLang, "Calendar", "dialogWidth=" +
		CalWidth + ";dialogHeight=" + CalHeight + ";dialogTop=" + topPos +
		"; dialogLeft=" + leftPos + "; scroll=no;toolbar=0;status=0;");
	    dateTextBox.focus();
	    if (mydate != "NO_DATE") {
	        dateTextBox.value = mydate;
	        if (typeof (withPostBack) != "undefined" && withPostBack)
	        {
	           
	            __doPostBack(dateTextBox.name, '')
	            $("img").attr({ disabled: 'true' });
	            $("input").attr({ disabled: 'true' });
	            $("select").attr({ disabled: 'true' });
	        }
	    }

	}
	else 
	{
	    var parent = window.open(calendarDialogLocation + "calendar1.aspx?dateTime=" + dt_current +
		"&id=" + id +
		"&calendarFutureYears=" + dateTextBox.getAttribute("calendarFutureYears") +
		"&calendarTotalYears=" + dateTextBox.getAttribute("calendarTotalYears") +
		"&dateFormat=" + ((dateFormat == null || typeof (dateFormat) == "undefined") ? "dd/MM/yyyy" : dateFormat) +
		"&dateFormatSeparator=" + ((dateFormatSeparator == null || typeof (dateFormatSeparator) == "undefined") ? "/" : dateFormatSeparator) +
		"&gLang=" + gLang + "&withPostBack=" + ((typeof (withPostBack) != "undefined" && withPostBack)?"1":"0"), "Calendar", "width=" +
		CalWidth + ",height=" + CalHeight + ",top=" + topPos +
		",left=" + leftPos + ",scroll=no,toolbar=0,status=0");
	    /*
		dateTextBox.focus();
		if (mydate != "NO_DATE") 
		{
		    dateTextBox.value = mydate;
		    //if (typeof (withPostBack) != "undefined" && withPostBack) __doPostBack(dateTextBox.name, '')
		}
		*/
	}
	 
	//document.getelementById("DTP_" & id).focus()
	return false;
}



function FindElementPosition(el)
{
    
    var obj = el;
    var currentX = obj.offsetLeft;
    var currentY = obj.offsetTop;
     
    while(obj=obj.offsetParent)
    {
        currentX += obj.offsetLeft;
        currentY += obj.offsetTop;
    }
    
    return [currentX,currentY];
}




 function FindMonth(months, month)
        {
            for (var i = 0; i < months.length; i++)
            {
                if (months[i].toUpperCase() ==month.toUpperCase()) return i + 1;

            }

            throw "invalid month name";

        }


 function FindDay(days,day)
        {
            for (var i = 0;i< days.Length; i++)
            {
                if (days[i].toUpperCase()==day.toUpperCase()) return i + 1;

            }

            throw new "invalid day name";

        }




		function convertToDate(dateStr,dateFormat,dateSeparator)
		{
            
            var str = dateStr.split(dateSeparator);
            var fStr = dateFormat.split(dateSeparator);

            if (str.length != fStr.length) return null;

            var year = -1;
            var month = -1;
            var day = -1;

            for (var i = 0; i < str.length; i++)
            {
                switch (fStr[i].toUpperCase())
                {

                    case "YYYY":
                    case "YY":
                        if (isNaN(str[i].replace(/\s/,"z")/1)) return null;
                        year = parseInt(str[i], 10);
                        break;
                    case "MM":
                        if (isNaN(str[i].replace(/\s/,"z")/1)) return null;
                        month = parseInt(str[i], 10);
                        break;
                    case "MMM":
                        month = FindMonth(MonthNames, str[i]);
                        break;
                    case "MMMM":
                        month = FindMonth(FullMonthNames, str[i]);
                        break;
                    case "DD":
                        if (isNaN(str[i].replace(/\s/,"z")/1)) return null;
                        day = parseInt(str[i], 10);
                        break;
                    case "DDD":
                        day = FindDay(DayNames, str[i]);
                        break;
                    case "DDDD":
                        day = FindDay(FullDayNames, str[i]);
                        break;
                }
            }

            if (year == -1 || month == -1 || day == -1) throw ("invalid format:cannot convert to date");


             try
            {
                var res =  new Date(year, month-1, day);
                res.setFullYear(year);
                res.setMonth(month-1);
                res.setDate(day);
                
                return res;
                
            }
            catch(e)
            {
                return null;
            }

	}
	
	
	function formatDate(date,dateFormat,dateSeparator)
	{
	
        if (date==null || isNaN(date))
        {
            return "";
        }
        

        return dateFormat.replace(/(yyyy|mmmm|mmm|mm|dddd|ddd|dd|hh|nn|ss|a\/p)/gi,
        function($1)
        {
            switch ($1.toLowerCase())
            {
            case 'yyyy': return date.getFullYear();
            case 'mmmm': return FullMonthNames[date.getMonth()];
            case 'mmm':  return MonthNames[date.getMonth()];
            case 'mm':   return (( String(date.getMonth()+1).length==1)?"0"+ (date.getMonth()+1):(date.getMonth()+1));
            case 'dddd': return FullDayNames[date.getDay()];
            case 'ddd':  return DayNames[date.getDay()];
            case 'dd':   return (( String(date.getDate()).length==1)?"0"+ date.getDate():date.getDate());            
            }
       });
	}
	
	
	
	

	
	
	

		
