// Product title: Gurt JavaScript Tree Menu
// Product version details: 1.0.0, 11-06-2005 (mm-dd-yyyy)
// Product URL: http://gurtom.com/products/calendars/js
// Contact info: feedback@gurtom.com (specify product title in the subject)
// Notes: This script is free. Feel free to copy, use and change this script as 
// long as this head part remains unchanged.  Visit official site for details.
// Copyright: (c) 2005 by Gurtom.Com

var ALTCLS= [],objaUA,objaD;

function gurtCalendar(clsSettings){
	var _ = this;
	_.clsId = ALTCLS.length;
	ALTCLS[_.clsId] = _;
	if (!objaUA) objaUA = new _UserAgent();
	if (!objaD) objaD = new _DManager();
	_.nameControl = 'dataArea'+_.clsId;
	_.icoName = 'icoCls'+_.clsId;
	_.posName = 'icoPos'+_.clsId;
	_.divName = 'clsDiv'+_.clsId;
	_.gridName = 'clsGrid'+_.clsId;
	_.titleName =  'clsTitle'+_.clsId;
	_.pmiName = 'clsPMI'+_.clsId;
	_.nmiName = 'clsNMI'+_.clsId;
	_.pyiName = 'clsPYI'+_.clsId;
	_.nyiName = 'clsNYI'+_.clsId;
	_.pmaName = 'clsPMA'+_.clsId;
	_.nmaName = 'clsNMA'+_.clsId;
	_.pyaName = 'clsPYA'+_.clsId;
	_.nyaName = 'clsNYA'+_.clsId;
	_.chiefDa = new Date();
	_.chiefFormat = !clsSettings.dateFormat ? 'm/d/Y' : clsSettings.dateFormat;
	_.clsApp = clsSettings['appearance'];
	CLSBuildControl(_);
}

function CLSBuildControl(_) {
	var writerBuf = new writer();
	writerBuf.into  ('<table cellpadding="0" cellspacing="0" border="0" ><tr><td><input type="Text" id="' , _.nameControl , '"  name="' , _.nameControl , '" value=""  class ="',_.clsApp['DataArea'],'" ></td><td align="right" width="25"><a href="javascript:CLSDisplayCalendar(ALTCLS[' + _.clsId + ']);" ><img src="',_.clsApp['IcoCalVis'],'" alt="" name="'+ _.icoName +'" id="'+ _.icoName +'" width="23" height="19" border="0"></a></td></tr><tr><td align="left" colspan="2"><img src="/images/spacer.gif" alt="" name="'+ _.posName +'" id="'+ _.posName +'" width="1" height="1" border="0"></td></tr></table>');
	document.write(writerBuf.out());
	CLSBuildCalendar(_);
	CLSSetControl(_);
	CLSUpdateCalendarControl(_);
}

function CLSBuildCalendar(_){
	var writerBuf = new writer();
	writerBuf.into('<div  id="',_.divName,'"  name="',_.divName,'"  style="position: absolute; background-color:beige; visibility:hidden;  width:186; height:1; z-index: ',_.clsId+1,'"><table  width="100%" cellpadding="0" cellspacing="1" border="0" class="',_.clsApp['OuterFrame'],'"><tr><td ><table  width="100%" cellpadding="0" cellspacing="0" border="0" class="',_.clsApp['InnerFrame'],'"  ><tr><td  colspan="3" class="',_.clsApp['TopPartNavpanel'],'"><img src="/images/spacer.gif" width="1 px" height="1 px"></td></tr><tr><td  width="100%"  colspan="3" class="',_.clsApp['Navpanel'],'"><table cellpadding="1" cellspacing="1" border="0" ><tr><td><a href="#" name="',_.pyaName,'" id="',_.pyaName,'"><img src="',_.clsApp['PrevYear'],'" alt="',_.clsApp['messages']['AltPrevYear'],'" name="',_.pyiName,'" id="',_.pyiName,'" width="18" height="21" border="0"></a></td><td><a href="#" name="',_.pmaName,'" id="',_.pmaName,'"><img src="',_.clsApp['PrevMonth'],'" alt="',_.clsApp['messages']['AltPrevMonth'],'" name="',_.pmiName,'" id="',_.pmiName,'" width="18" height="21" border="0"></a></td><td  width="100%" class="',_.clsApp['InfoTitle'],'" id="',_.titleName,'" name="',_.titleName,'">',_.clsApp['longmonth'][_.chiefDa.getMonth()],'&nbsp;',_.chiefDa.getFullYear(),'</td><td><a href="#" name="',_.nmaName,'" id="',_.nmaName,'"><img src="',_.clsApp['NextMonth'],'" alt="',_.clsApp['messages']['AltNextMonth'],'" name="',_.nmiName,'" id="',_.nmiName,'" width="18" height="21" border="0"></a></td><td><a href="#" name="',_.nyaName,'" id="',_.nyaName,'"><img src="',_.clsApp['NextYear'],'" alt="',_.clsApp['messages']['AltNextYear'],'" name="',_.nyiName,'" id="',_.nyiName,'" width="18" height="21" border="0"></a></td></tr></table></td></tr><tr><td colspan="3" class="',_.clsApp['BottomPartNavpanel'],'"><img src="/images/spacer.gif" width="1 px" height="1 px"></td></tr><tr class="',_.clsApp['MidRow'],'"><td><img src="/images/spacer.gif"  width="4 px"height="1 px"></td><td  align="center" id="',_.gridName,'" name="',_.gridName,'">',CLSUnitedGrid(_),'</td><td width="4 px"><img src="/images/spacer.gif"  width="4 px" height="1 px"></td></tr><tr><td colspan="3" class="',_.clsApp['BottomPartNavpanel'],'"><img src="/images/spacer.gif" width="1 px" height="1 px"></td></tr></table></td ></tr></table></div>');
	
	if(objaUA.ie6){
		writerBuf.into('<iframe id="IE6bug',_.divName,'" src="/images/spacer.gif"  name="IE6bug',_.divName,'" style="position: absolute; left:0; top:0; width:0; height:0; visibility:hidden; filter:alpha(opacity=0); z-index: ' ,_.clsId, '"></iframe>');       
	}
	document.write(writerBuf.out());
}

function CLSDateReset(inDate){
	var tmpDate = inDate ? new Date(inDate) : new Date();
	tmpDate.setHours(0);
	tmpDate.setMinutes(0);
	tmpDate.setSeconds(0);
	tmpDate.setMilliseconds(0);
	return tmpDate;
}

function CLSDateType(c,inDate){
	var resType = 1;
	var tmpDate = new Date(inDate);
	tmpDate = CLSDateReset(tmpDate);
	var tmpchiefDa = c.chiefDa;
	if (CLSDateReset(tmpchiefDa).valueOf() == tmpDate.valueOf()) resType |= 2;
	if (tmpDate.getMonth() != tmpchiefDa.getMonth() || tmpDate.getFullYear() != tmpchiefDa.getFullYear())	resType |= 8;
	if (tmpDate.getDay() == 0 || tmpDate.getDay() == 6)	resType |= 4;
	return resType;
}

function CLSDisplayCalendar(_) {
	if(objaUA.ie6) var s_visib2 = String(_.clsDiv2.style.visibility).toLowerCase();  
	var s_visib = String(_.clsDiv.style.visibility).toLowerCase();
	if (s_visib == 'visible' || s_visib == 'show') {
		_.clsDiv.style.visibility = 'hidden';
		if(objaUA.ie6) {_.clsDiv2.style.visibility = 'hidden';}
		_.clsIco.src = _.clsApp['IcoCalVis'];
	}
	else {
		CLSRePosition(_);
		if(CLSVerifyDataArea(_))CLSUpdateCalendarData(_);
		_.clsDiv.style.visibility = 'visible';
		if(objaUA.ie6) {
			_.clsDiv2.style.width = _.clsDiv.offsetWidth;
			_.clsDiv2.style.height  = _.clsDiv.offsetHeight;
			_.clsDiv2.style.visibility = 'visible';
		}
		_.clsIco.src = _.clsApp['IcoCalUnVis'];
	}
}

function CLSUserClickHandler(_,inDa,typeClick) {
	var tmpDa = inDa ? new Date(inDa) : new Date(_.chiefDa); 
	_.chiefDa = new Date(tmpDa);
	if(!typeClick) {CLSDisplayCalendar(_);_.clsDataArea.value = objaD.GenerateDate(_.chiefDa,_.chiefFormat);}
	CLSUpdateCalendarData(_);
}

function CLSUpdateCalendarData(_){
	CLSUpdateCalendarControl(_);
	_.clsInfoTitle.innerHTML = _.clsApp['longmonth'][_.chiefDa.getMonth()]+'&nbsp;'+_.chiefDa.getFullYear();
	_.clsUnitedGrid.innerHTML = '';
	_.clsUnitedGrid.innerHTML =  CLSUnitedGrid(_);
}

function CLSSetControl(_){
	var tmpDate;
	_.clsDiv = CLSObja(_,_.divName);
	if(objaUA.ie6) _.clsDiv2 = CLSObja(_,'IE6bug'+_.divName);
	_.clsIco = CLSObja(_,_.icoName);
	_.clsPos  = CLSObja(_,_.posName);
	_.clsDataArea = CLSObja(_,_.nameControl);
	_.clsUnitedGrid = CLSObja(_,_.gridName);
	_.clsInfoTitle = CLSObja(_,_.titleName);
	_.clsPMI = CLSObja(_,_.pmiName);
	_.clsNMI = CLSObja(_,_.nmiName);
	_.clsPYI = CLSObja(_,_.pyiName);
	_.clsNYI = CLSObja(_,_.nyiName);
	_.clsPMA = CLSObja(_,_.pmaName);
	_.clsNMA = CLSObja(_,_.nmaName);
	_.clsPYA = CLSObja(_,_.pyaName);
	_.clsNYA = CLSObja(_,_.nyaName);
}

function CLSShiftDate (inDate, shiftYear, shiftMonth ,shiftHour,shiftMinute,shiftSecond) {
	var tmpDate = new Date(inDate);
	if (shiftYear) tmpDate.setFullYear(tmpDate.getFullYear() + shiftYear);
	if (shiftMonth) {tmpDate.setMonth(tmpDate.getMonth() + shiftMonth);}
	if (shiftHour) {tmpDate.setHours(tmpDate.getHours() + shiftHour);}
	if (shiftMinute) {tmpDate.setMinutes(tmpDate.getMinutes() + shiftMinute);}
	if (shiftSecond) {tmpDate.setSeconds(tmpDate.getSeconds() + shiftSecond);}
	if(!(shiftHour||shiftMinute||shiftSecond)) {
		if (tmpDate.getDate() != inDate.getDate()) {tmpDate.setDate(0);}
	}
	return tmpDate.valueOf();
}

function CLSUpdateCalendarControl(_){
	_.clsPYA.href = "javascript:  CLSUserClickHandler(ALTCLS["+_.clsId+"],"+CLSShiftDate (_.chiefDa,-1)+",2);";
	_.clsNYA.href = "javascript:  CLSUserClickHandler(ALTCLS["+_.clsId+"],"+CLSShiftDate (_.chiefDa,1)+",2);";
	_.clsPMA.href = "javascript: CLSUserClickHandler(ALTCLS["+_.clsId+"],"+CLSShiftDate (_.chiefDa,null,-1)+",1);";
	_.clsNMA.href = "javascript: CLSUserClickHandler(ALTCLS["+_.clsId+"],"+CLSShiftDate (_.chiefDa,null,1)+",1);";
}

function CLSVerifyDataArea(_){
	if (_.clsDataArea.value)	{
			tmpDate = objaD.ParseDate(_.clsDataArea.value+'',_.chiefFormat);
			if(!tmpDate) {
				alert(_.clsApp['messages']['Warning']);
				tmpDate=new Date()
			};
			if(tmpDate.valueOf() != _.chiefDa.valueOf()) {
				_.chiefDa = new Date(tmpDate);
				return true;
			}
			else  {
				_.clsDataArea.value = objaD.GenerateDate(_.chiefDa,_.chiefFormat);
				return false;
			}
	}
	else return false;
}

function CLSDayTitle (o) {
	var writerBuf = new writer();
	writerBuf.into('<tr  class="',o.clsApp['WeekDay'],'">');
	for (var iWD = 0; iWD < 7; iWD++) writerBuf.into('<td>',o.clsApp.weekdays[(iWD+1)%7],'</td>');
	writerBuf.into('</tr>');
	return(writerBuf.out());
}

function CLSDayGrid(a){
	var writerBuf = new writer();
	var firstDay = new Date(a.chiefDa);
	firstDay.setDate(1);
	firstDay.setDate(1 - (7 + firstDay.getDay() - 1) % 7);
	var tmpDay = new Date(firstDay);
	while (tmpDay.getMonth() == a.chiefDa.getMonth() || tmpDay.getMonth() == firstDay.getMonth()) {
		writerBuf.into('<tr>');
		for (var iWD = 0; iWD < 7; iWD++) {
			writerBuf.into(CLSDayCell(a,tmpDay));
			tmpDay.setDate(tmpDay.getDate() + 1);
		}
		writerBuf.into('</tr>\n');
	}
	return(writerBuf.out());
}

function CLSUnitedGrid(_){
	var writerBuf = new writer();
	writerBuf.into('<table cellpadding="2"  cellspacing="1" border="0" width="100%"   class="',_.clsApp['DateGrid'],'">');
	writerBuf.into(CLSDayTitle(_));
	writerBuf.into(CLSDayGrid(_));
	writerBuf.into('</table>');
	return(writerBuf.out());
}
function _UserAgent() {
	var _ = this;
	var b = navigator.appName;
	var v = _.version = navigator.appVersion;
	var ua=_.uas = navigator.userAgent.toLowerCase();
	var re_num = /opera/;
	_.op = re_num.exec(ua)?true:false;
	_.ie = (b == "Microsoft Internet Explorer");
	
	if(_.op) {_.ie = false;}
	
	_.v = parseInt(v);
	if (_.ie) {
		_.ie4 = _.ie5 = _.ie55 = _.ie6 = false;
		if (v.indexOf('MSIE 6') > 0) {_.ie6 = true; _.v = 6;}
	}
	_.win32 = ua.indexOf("win")>-1;
	_.mac = ua.indexOf("mac")>-1;
}


function dmMakeWorkTemplate(inFormat){
	var _=this,ch_c,_c=0,a_r=[];
	var a_spec_char=["\\\\","\\/","\\.","\\+","\\*","\\?","\\$","\\^","\\|"];
	for(i = 0; i < inFormat.length; i ++){
		ch_c = inFormat.substr(i,1);
		if(_.dmFormatChar.indexOf(ch_c) != -1 && ch_c != ''){
			a_r[_c]=ch_c;
			_.dmTmpFormat[_c++]=ch_c;
		}
	}
	_c=1;
	var a_r=a_r.sort();
	for(i in a_spec_char) {
		inFormat=inFormat.replace(eval("/"+a_spec_char[i]+"/g"),a_spec_char[i]);
	}
	for(i=0;i<a_r.length;i++){
		re=new RegExp(a_r[i]);
		inFormat=inFormat.replace(re,_.dmRegFormatChar[a_r[i]])
	}
	return new RegExp("^"+inFormat.replace(/\s+/g,"\\s+")+"$");
}

function dmMakeIntData(a_date){
	var _=this,tmpData= _.DateReset(),i,flag_date = false;
	tmpData.setMonth(0);
	for(i in a_date){
		if(_.dmSignFormatChar.indexOf(a_date[i][1])!=-1){
			var key=a_date[i][1];
			var value=_.dmCallChar[a_date[i][1]][2](a_date[i][0]);
			if(key == 'd') { flag_date = true; value_date = value;}
			if(typeof(tmpData[_.dmCallChar[key][0]])=='function'){
				tmpData[_.dmCallChar[key][0]](value);
				if((key=='m')&&flag_date) {
					tmpData[_.dmCallChar['d'][0]](value_date);
				}
			}
		}
	}
	return tmpData;
}

function dmGenerateDate(inData,inFormat){
	var _=this,ch_cc,_cc=0,a_r=[],i=0,s_='',to='';
	var dt_d=new Date(inData);
	do{
		ch_cc = inFormat.substr(i,1);
		if(_.dmFormatChar.indexOf(ch_cc)!=-1&&ch_cc!=''){
			if(typeof(dt_d[_.dmCallChar[ch_cc][1]])!='function')	to=new String(_.dmCallChar[ch_cc][1](dt_d));
			else to=new String(dt_d[_.dmCallChar[ch_cc][1]]());
			s_+=to
		}
		else s_+=ch_cc;
		i++
	} while (i < inFormat.length)
	return s_;
}

function dmParseDate(inDate,inFormat){ 
	var _=this,a_res = [], i, _c = 1;
	var workTemplate = _.MakeWorkTemplate(inFormat);
	var a = workTemplate.exec(inDate);
	if (!a || typeof(a) != 'object') {
		return null;
	}
	for (i in _.dmTmpFormat) {
		if (_.dmTmpFormat[i]=='A'||_.dmTmpFormat[i]=='a')
			_.dmIAKey = i;
		a_res[i] = [a[_c++], _.dmTmpFormat[i]]
	}
	i_a_key = a_res.length -1-_.dmIAKey;
	return _.MakeIntData(a_res.reverse());
}

function CLSDayCell(b,inDate){
	var tmpDay = new Date (inDate),typeDate = CLSDateType(b,tmpDay),typeName,tmpLink,inCell;
	if(typeDate&2) typeName = 'SelectedDay';
	else if(typeDate&8) typeName = 'OtherMonthDay';
	else typeName = 'CurrentMonthDay';
	tmpLink = 'javascript: CLSUserClickHandler(ALTCLS['+b.clsId+'],'+inDate.valueOf()+');';
	inCell = '<a href="'+tmpLink+'" class="'+b.clsApp[typeName]+'">' + inDate.getDate() + '</a>';
	if(typeDate&2) typeName = 'SelectedDay';
	else if(typeDate&4) typeName = 'HoliDay';
	else if(typeDate&8) typeName = 'OtherMonthDay';
	else typeName = 'WorkDay';
	inCell = '<td class="'+b.clsApp[typeName+'Cell']+'" align="center">' + inCell + '</td>';
	return inCell;
}

function _DManager(){
	var _=this;
	_.dmFormatChar='dmY';
	_.dmSignFormatChar='dmY';
	_.dmRegFormatChar = {'d' : "([0-9]{0,2})",'m' : "([0-9]{0,2})",'Y' : "([0-9]{4})"};
	_.dmCallChar={'d':['setDate',function(_v,_m){_v=_v.getDate();if(_v<10)return('0'+_v);else return _v},function(_v){return _v*1}],'m':['setMonth',function(_v){_v=_v.getMonth()+1;if(_v<10)return('0'+_v);else return _v},function(_v){return(_v*1-1)}],'Y':['setFullYear','getFullYear',function(_v){return _v*1}]};
	_.dmTmpFormat =[]; 	
	_.DateReset = CLSDateReset;
	_.MakeWorkTemplate = dmMakeWorkTemplate;
	_.MakeIntData = dmMakeIntData;
	_.GenerateDate = dmGenerateDate;
	_.ParseDate = dmParseDate;
}

function CLSRePosition (_) {
	var smx=0, smy=0;
	if( objaUA.ie && objaUA.mac) {
		 if (document.body.leftMargin)  smx = document.body.leftMargin * 1;
		 if (document.body.topMargin)  smy = document.body.topMargin * 1;
	}
	_.clsDiv.style.left =  CLSGlobalPosition(_,'Left')+smx+'px';
	_.clsDiv.style.top  = CLSGlobalPosition(_,'Top')+smy+'px';
	if(objaUA.ie6){
		_.clsDiv2.style.left	= _.clsDiv.style.left;
		_.clsDiv2.style.top	= _.clsDiv.style.top;
	}
}

function CLSGlobalPosition (_,displace) {
	var newPos = 0, tmpPos = _.clsPos;
	while (tmpPos)	{
		newPos += tmpPos["offset" + displace];
		tmpPos = tmpPos.offsetParent;
	}
	return newPos;
}

function CLSObja (_,_id) {
	if (document.images && document.images[_id]) return document.images[_id];
	else if (_.formName &&  document.forms[_.formName].elements[_id])  return document.forms[_.formName].elements[_id];
	else if (document.all && document.all[_id])  return document.all[_id];
	else if (document.getElementById)  return document.getElementById(_id);
	else return null;
}

function writer() {
	var _ = this;
	_.bufArray = [];
	_.into = function () {
		var n = arguments.length;
		for (var i = 0; i < n; i++)
			_.bufArray[_.bufArray.length] = arguments[i];
	};
	_.out = function () {
		return _.bufArray.join('');
	};
}

