var monthminus=-1;
var yearminus=-1;
var yearplus=1;
var monthplus=1;
var date= new Date();
var month=(date.getMonth());
var day=(date.getDate());
var dayNm=(date.getDay());
var year=(date.getYear());
var calDiv1='calendar1'
var frameName1='';
var calendarNameG='';
if(navigator.appName!='Microsoft Internet Explorer') {
	year=year+1900;
}
var monthArray=new Array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');

var dayArray=new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

var dayName=new Array('Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa');
function incMonth(month1, year1) {
	var monthNew=parseInt(month1);
	if(monthNew<11) {
		month=monthNew+1;
		var yearNew=parseInt(year1);
		year=yearNew;
	}
	else {
		var yearNew=parseInt(year1);
		year=yearNew+1;
		month=0;
	}
}
function decMonth(month1, year1) {
	var monthNew=parseInt(month1);
	if(monthNew>0) {
		month=monthNew-1;
		var yearNew=parseInt(year1);
		year=yearNew;
	}
	else {
		var yearNew=parseInt(year1);
		year=yearNew-1;
		month=11
	}
}
function incYear(year1) {
	var yearNew=parseInt(year1);
	year=yearNew+1;
}
function decYear(year1) {
	year=(parseInt(year1))-1;
}
var obj;
var selectID=0;
var cal_new=0;
var dateNew1=new Date();
var dateNew_month=(dateNew1.getMonth());
var dateNew_day=(dateNew1.getDate());
var dateNew_dayNm=(dateNew1.getDay());

var dateNew_year=(dateNew1.getYear());
var dateRes;

if(navigator.appName!='Microsoft Internet Explorer') {
	dateNew_year=parseInt(dateNew_year)+1900;
}
function changeDate(resPeriod, resBase) {
	if(resBase=='m') {
		dateNew1.setMonth(parseInt(dateNew_month+parseInt(resPeriod)))
	}
    else if(resBase=='y') {
		dateNew1.setYear((parseInt(dateNew_year)+parseInt(resPeriod)))
	}
    else {
		dateNew1.setDate((parseInt(dateNew_day)+parseInt(resPeriod)))
	}
    dateRes = {"dp":dateNew1.getDate(), "mp":(parseInt(dateNew1.getMonth())+1), "yp":dateNew1.getYear()};
    if(navigator.appName!='Microsoft Internet Explorer') {
		dateRes["yp"]=dateRes["yp"]+1900;
    }
}
function showDate1(obj, calendarName, calNo, iframeName, curFmt) {
	if(((document.getElementById(calendarName).style.display)=='block') && (calendarName==calendarNameG)) {
		hideDate();
	}
    else {
		hideDate();
		calendarNameG=calendarName;
        	frameName1=iframeName;
  			showDate(obj, curFmt);
  			if(document.getElementById("DivErrorDOB")!=null){document.getElementById("DivErrorDOB").innerHTML='&nbsp;';}
	}
}

function showDate(obj, curFmt, calendarName) {
	obj=obj;
	var isleap1=Date.isleap(year);
	if(isleap1)
	dayArray[1]=29;
	else
	dayArray[1]=28;
	monthDay='';
	var firstDate = new Date(monthArray[month]+" 01, "+year+" 00:00:00");
	var firstDay=firstDate.getDay();
	findPosCal(obj, calendarNameG);
	findPosCal(obj, frameName1);
	var basicDiv1=document.createElement('div');
	var basicDiv=document.createElement('table');
	basicDiv.className="calClass";
	basicDiv.style.border="1px solid #63ceff";
	basicDiv.style.background="#e7f9fd";
	var basicTR_new=document.createElement('tr');
	var basicTd1=document.createElement('td');
	basicTd1.innerHTML="<a href='javascript:decYear(\""+year+"\"),showDate(\""+obj+"\", "+curFmt+");'>&lt;&lt;</a>";
	var basicTd2=document.createElement('td');
    basicTd2.innerHTML="<a href='javascript:decMonth(\""+month+"\", \""+year+"\"),showDate(\""+obj+"\", "+curFmt+");'>&lt;</a>";
	var basicTd3=document.createElement('td');
	basicTd3.setAttribute('colspan', 3);
	basicTd3.innerHTML="<strong>"+monthArray[month]+" "+year+"</strong>";
	var basicTd4=document.createElement('td');
	basicTd4.innerHTML="<a href='javascript:incMonth(\""+month+"\", \""+year+"\"),showDate(\""+obj+"\", "+curFmt+");'>&gt;</a>";
	var basicTd5=document.createElement('td');
	basicTd5.innerHTML="<a href='javascript:incYear(\""+year+"\"),showDate(\""+obj+"\", "+curFmt+")'>&gt;&gt;</a>";

	basicTR_new.appendChild(basicTd1);
	basicTR_new.appendChild(basicTd2);
	basicTR_new.appendChild(basicTd3);
	basicTR_new.appendChild(basicTd4);
	basicTR_new.appendChild(basicTd5);

	basicDiv.appendChild(basicTR_new);
	/*find day 1st*/
	var firstDayNo=dayNm%7;
	var basicTR=document.createElement('tr');
	for(var i=1; i<=dayName.length; i++) {
		var basicTD=document.createElement('td');
        basicTD.className="weekDay";
		basicTD.innerHTML=dayName[i-1];
		basicTR.appendChild(basicTD);
	}
	basicDiv.appendChild(basicTR);
	var k=1;
	var     loop=0;

	while(k<=dayArray[month]) {
        for(var i=1; i<=(((dayArray[month]+firstDayNo)/7)+1); i++) {
			basicTR=document.createElement('tr');
            for (var l=0; l<7; l++) {
	            if(firstDay>0) {
					var basicTD1=document.createElement('td');
					basicTD1.align='right';
					basicTD1.innerHTML='&nbsp';
					basicTR.appendChild(basicTD1);
					firstDay=firstDay-1;
				}
				else {
			    	if(k<=dayArray[month]) {
						var basicTD=document.createElement('td');
						basicTD.align='right';

						basicTD.innerHTML="<a id='"+calendarNameG+"date"+k+"' href='javascript:setDate1("+k+", \""+obj+"\", \""+calendarNameG+"date"+k+"\", \""+year+"\", \""+month+"\", " + curFmt + ");' >"+k+"</a>";
						basicTR.appendChild(basicTD);
						k=k+1;
					}
					else
						break;
				}
			}
			basicDiv.appendChild(basicTR);
		}
	}
	var close_new=document.createElement('tr');
	var closeTd1=document.createElement('td');
	closeTd1.setAttribute('colspan', 7);
	closeTd1.style.padding='4px';
	closeTd1.innerHTML="<a href='javascript:hideDate()' style='display:inline;'>Close</a>";
	close_new.appendChild(closeTd1);
	basicDiv.appendChild(close_new);

	basicDiv1.appendChild(basicDiv)
	document.getElementById(calendarNameG).innerHTML=basicDiv1.innerHTML;
}
function selectCal(selectOBJ) {
	for(var i=1; i<dayArray[month];i++) {
		document.getElementById(calendarNameG+'date'+i).className='';
	}
	var obj1=document.getElementById(selectOBJ);
	obj1.className='selDate';
	hideDate();
}
function splitDate(dateId) {
    var fieldVal=document.getElementById(dateId).value;
    if(fieldVal!='') {
    	var splitVar=fieldVal.split('-');
	    month=splitVar[1]-1;
	    year=splitVar[0];
	    date=splitVar[2];
	    document.getElementById(calendarNameG+"date"+splitVar[2]).className='selDate';
    	selectID=1;
    }
}
function hideDate() {
    var ij=1;
    while(document.getElementById('calendar'+ij)) {
    	document.getElementById('calendar'+ij).style.display='none';
    	document.getElementById('iframeLayer'+ij).style.display='none';
    	ij=ij+1;
    }
}
function showDivDate() {
    document.getElementById(calendarNameG).style.display='block';
    document.getElementById(frameName1).style.display='block';
}
function setDate1(newDate, objNew, selectOBJ, curYear, curMonth, curFmt) {
	var newMonth=parseInt(curMonth)+1;
	var newYear=curYear;
	var obj1=document.getElementById(objNew);
	if(newMonth<10)
	newMonth="0"+String(newMonth);
	if(newDate<10)
	newDate="0"+String(newDate);
	obj1.value = (curFmt ?  newDate + "/" + newMonth + "/" + newYear : newDate + "-" + newMonth + "-" + newYear);
	obj1.value = (curFmt == 2 ?  newMonth + "/" + newDate : obj1.value);
	selectCal(selectOBJ);
}
Date.isleap = function(year) {                                                                                                	//check the year is a leap year or not.
 	return ((year % 400) == 0) ? 1 :((year % 100) == 0) ? 0 :((year % 4)   == 0) ? 1 :0;
}
function findPosCal(iframePos, divID) {
	obj=document.getElementById(iframePos);
	var curleft = curtop = 0;
	if (obj.offsetParent) {
        curleft = obj.offsetLeft
        curtop = obj.offsetTop
        while (obj = obj.offsetParent) {
            curleft += obj.offsetLeft
            curtop += obj.offsetTop
        }
    }
	document.getElementById(divID).style.top=curtop+20+"px";
	document.getElementById(divID).style.left=curleft+"px";
	showDivDate();
}
function calendarHide(e) {
    if (! e)
        e = window.event; // ie
    if (typeof e.target != 'undefined')
        srcEle = e.target; // firefox
    else if (typeof e.srcElement != 'undefined')
        srcEle = e.srcElement; // ie
    else
        return true;
    var tmpEle = srcEle;
    if(tmpEle.id != "cal1" && tmpEle.id != "cal2")
        hideDate();
}

var dateFmt = "d-m-y";

function datevalid(id1, id2)
{
	var stdate=getDateFromFormat(document.getElementById(id1).value, dateFmt);
	var endate=getDateFromFormat(document.getElementById(id2).value, dateFmt);
	var currentDate = new Date();
	var month = currentDate.getMonth() + 1;
	if(String(month).length == 1) month = '0' + month;
	dte = currentDate.getDate();
        if(String(dte).length == 1) dte = '0' + dte ;
	var date = getDateFromFormat(dte + "-" + month + "-" + currentDate.getFullYear(), dateFmt);
	if(endate > date) { alert("The reports are available only till today. Please specify the valid dates."); return false; }
	if(stdate > date) { alert("The reports are available only till today. Please specify the valid dates."); return false; }
	if(mindate > stdate || mindate > endate) { alert("The reports are available only for the last 3 months. Please specify the valid dates."); return false; }
	if(stdate == 0 || endate == 0) { alert("The dates do not seem valid. Please specify again."); return false; }
	else if(stdate > endate) { alert("The 'To' date can not be less than 'From' date. Please specify the valid dates."); return false; }
	else { return true; }
}

function getDateFromFormat(val,format)
{
    val = val+"";
    format = format+"";
    var i_val = 0;
    var i_format = 0;
    var c = "";
    var token="";
    var token2="";
    var x,y;
    var now=new Date();
    var year=now.getYear();
    var month=now.getMonth()+1;
    var date=1;
    var hh=now.getHours();
    var mm=now.getMinutes();
    var ss=now.getSeconds();
    var ampm="";

    while (i_format < format.length) {
    c=format.charAt(i_format);
        token="";
        while ((format.charAt(i_format)==c) && (i_format < format.length)) {
            token += format.charAt(i_format++);
            }
 if (token=="yyyy" || token=="yy" || token=="y") {
            if (token=="yyyy") { x=4;y=4; }
            if (token=="yy")   { x=2;y=2; }
            if (token=="y")    { x=2;y=4; }
            year=_getInt(val,i_val,x,y);
            if (year==null) { return 0; }
            i_val += year.length;
            if (year.length==2) {
                if (year > 70) { year=1900+(year-0); }
                else { year=2000+(year-0); }
              }
            }
        else if (token=="m") {
            month=_getInt(val,i_val,token.length,2);
            if(month==null||(month<1)||(month>12)){return 0;}
            i_val+=month.length;}
        else if (token=="dd"||token=="d") {
            date=_getInt(val,i_val,token.length,2);
            if(date==null||(date<1)||(date>31)){return 0;}
            i_val+=date.length;}
        else {
            if (val.substring(i_val,i_val+token.length)!=token) {return 0;}
            else {i_val+=token.length;}
            }
        }
    if (i_val != val.length) { return 0; }
    if (month==2) {
        if ( ( (year%4==0)&&(year%100 != 0) ) || (year%400==0) ) { // leap year
            if (date > 29){ return 0; }
            }
        else { if (date > 28) { return 0; } }
        }
    if ((month==4)||(month==6)||(month==9)||(month==11)) {
        if (date > 30) { return 0; }
        }
    var newdate=new Date(year,month-1,date,hh,mm,ss);
    return newdate.getTime();
}
function _getInt(str,i,minlength,maxlength)
{
    for (var x=maxlength; x>=minlength; x--) {
        var token=str.substring(i,i+x);
        if (token.length < minlength) { return null; }
        if (_isInteger(token)) { return token; }
    }
    return null;
}

function _isInteger(val) { return val.match(/^[0-9]+$/) != null; }

