// Product title: Gurt Calendar JavaScript
// 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;
	_.nameControl = clsSettings['name']+_.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.replace(/[0-9]/g, '') , '" 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="img/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=168 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="img/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="img/spacer.gif" width="1 px" height="1 px"></td></tr><tr class="',_.clsApp['MidRow'],'"><td><img src="img/spacer.gif"  width="4 px"height="1 px"></td><td  align="center" id="',_.gridName,'" name="',_.gridName,'">',CLSUnitedGrid(_),'</td><td width="4 px"><img src="img/spacer.gif"  width="4 px" height="1 px"></td></tr><tr><td colspan="3" class="',_.clsApp['BottomPartNavpanel'],'"><img src="img/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="img/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('');
};
}


