var rHuDatePattern = /(\d{4})-(\d{2})-(\d{2})/;
var rUsDatePattern = /(\d{2})\/(\d{2})\/(\d{4})/;
function dateKeyPressed(e)
{
	if (!e) e = window.event;
	oTarget = (e.target) ? e.target : e.srcElement;
	while ((!oTarget.id) && oTarget.parentNode)
	{
		oTarget = oTarget.parentNode;
	}
	sTargetId = oTarget.id;
	sTargetId = sTargetId.substring(0,sTargetId.lastIndexOf('_'));
	switch (e.keyCode)
	{
		case 37: //left
			oTarget= document.getElementById(sTargetId+'_mo');
			iVal = parseInt(oTarget.value);
			if (iVal>0) iVal-=1;
			oTarget.value=iVal;
			break;
		case 40: //down
			oTarget= document.getElementById(sTargetId+'_yr');
			oTarget.value=parseInt(oTarget.value)-1;
			break;
		case 39: //right
			oTarget= document.getElementById(sTargetId+'_mo');
			iVal = parseInt(oTarget.value);
			if (iVal<11) iVal+=1;
			oTarget.value=iVal;
			break;
		case 38: //up;
			oTarget= document.getElementById(sTargetId+'_yr');
			oTarget.value=parseInt(oTarget.value)+1;
			break;
		case 27: //esc
			closeDateControl(sTargetId);
			break;
	}
	if (37<= e.keyCode && e.keyCode<=40 ) 
	{
		oTarget.onchange();
		e.cancelBubble = true;
		if (e.stopPropagation) e.stopPropagation();
		return false;
	}
}

function dateYrChange(e)
{
	if (!e) e = window.event;
	oTarget = (e.target) ? e.target : e.srcElement;
	switch (e.keyCode)
	{
//				case 37: 
		case 40: 
			oTarget.value=parseInt(oTarget.value)-1;
			oTarget.onchange();
			break;
//				case 39: 
		case 38: 
			oTarget.value=parseInt(oTarget.value)+1;
			oTarget.onchange();
			break;
	}
	if (37<= e.keyCode && e.keyCode<=40  ) 
	{
		
		e.cancelBubble = true;
		if (e.stopPropagation) e.stopPropagation();
		return false;
	}
	
}

function parseDate(sString)
{
	var oRegExpVal;
	oRegExpVal = rHuDatePattern.exec(sString)
	if (oRegExpVal)
	{
		oSelectedDate=new Date(oRegExpVal[2]+'/'+oRegExpVal[3]+'/'+oRegExpVal[1]);
		return oSelectedDate;
	}
	oRegExpVal = rUsDatePattern.exec(sString)
	if (oRegExpVal)
	{
		oSelectedDate=new Date(oRegExpVal[0]);
		return oSelectedDate;
	}
	return false;
}

function closeDateControl(sId)
{
	oIframeElement = document.getElementById(sId+'_ifr');
	if (oIframeElement) oIframeElement.outerHTML='';
	oSlot = document.getElementById(sId+'_slot');
	oSlot.innerHTML='';
	oSlot.style.display='none';
}

function dateFillIn(sId, sDate)
{
	oField = document.getElementById(sId);
	oField.value=sDate;
	closeDateControl(sId);
}

function updateGrid(sId)
{
	iYear= document.getElementById(sId+'_yr').value;
	iMonth= document.getElementById(sId+'_mo').value;
	oDate= new Date(iYear, iMonth, 1);
	
	oBaseElement = document.getElementById(sId);
	oSelectedDate = parseDate(oBaseElement.value);
	
	oGridDivElement = document.getElementById(sId+'_grid');
	oGridDivElement.innerHTML = getDateControlGridHtml(sId, oDate, oSelectedDate);
}

function getDateControlGridHtml(sId, oDate, oSelectedDate)
{
	oTodayDate = new Date();
	sSelectedDate = (oSelectedDate) ?  oSelectedDate.getFullYear()+'-'+oSelectedDate.getMonth()+'-'+oSelectedDate.getDate():'' ; 
	sTodayDate =  oTodayDate.getFullYear()+'-'+oTodayDate.getMonth()+'-'+oTodayDate.getDate();

	iMonth = oDate.getMonth();
	iFullYear = oDate.getFullYear();
	oDate.setDate(1);
	oDate.setDate(oDate.getDate()-((oDate.getDay()+6)%7)); // First Mo date
	
	sContent ='';
	sContent += '<table class="smart-calendar">';
	sContent += '<thead><tr>';
	for (iDow=0; iDow<=6; iDow++ ) sContent += '<th>'+asDOW[iDow]+'</th>';
	sContent += '</tr></thead>';
	sContent += '<tbody>';
	while (oDate.getFullYear() <= iFullYear && (oDate.getFullYear() < iFullYear || oDate.getMonth() <= iMonth ))
	{
		sContent += '<tr>';
		for(iDow = 0; iDow <=6; iDow++)
		{
			sDate=oDate.getFullYear()+'-'+((oDate.getMonth()>8)?'':'0')+(oDate.getMonth()+1)+'-'+((oDate.getDate()>9)?'':'0')+oDate.getDate();
			sClass = '';
			sThisDate = oDate.getFullYear()+'-'+oDate.getMonth()+'-'+oDate.getDate();
			if (sTodayDate == sThisDate) sClass='smart-today ';
			if (oDate.getMonth() != iMonth) sClass='smart-othermonth ';
			if (sSelectedDate == sThisDate) sClass='smart-selected ';
			if (oDate.getDay()==6 || oDate.getDay()==0) sClass+='smart-weekend';
			else sClass+='smart-weekday';
			sContent +='<td class="'+sClass+'"><a href="javascript:dateFillIn(\''+sId+'\', \''+sDate+'\')">'+oDate.getDate()+'</td>';
			oDate.setDate(oDate.getDate()+1);
		}
		sContent += '</tr>';
	}
	sContent += '</tbody></table>';
	return sContent;
}

function fieldModify(sFieldId, iDelta)
{
	oField = document.getElementById(sFieldId);
	if (oField) 
	{
		oField.value = parseInt(oField.value)+iDelta;
		oField.onchange();
	}
}


function showDateControl(e)
{
	if (!e) e = window.event;
	sId = (e.target) ? e.target.id : e.srcElement.id;
	oDivElement = document.getElementById(sId+'_slot');
	if (oDivElement.innerHTML && e.type=='onClick') return false;
	
	oBaseElement = document.getElementById(sId);
	/*Parse date*/
	oParsedDate = parseDate(oBaseElement.value);
	if (oParsedDate)
	{
		oDate = oParsedDate;
		oSelectedDate = oParsedDate;
	}
	else
	{
		oDate = new Date();
		oSelectedDate = null;
	}
	
	sContent ='<table class="smart-dp-head"><tr>';
	sContent +='<td><input id="'+sId+'_yr" class="smart-dp-yr" onChange="updateGrid(\''+sId+'\')"  value="'+oDate.getFullYear()+'" maxlength=4></td>';
	sContent +='<td class="smart-dp-ud"><a href="javascript:fieldModify(\''+sId+'_yr\', 1)"><img src="'+sImgPath+'buttons/arrow7-u.gif"></a><a href="javascript:fieldModify(\''+sId+'_yr\', -1)"><img src="'+sImgPath+'buttons/arrow7-d.gif"></a></td>';
	sContent +='<td><select id="'+sId+'_mo" class="smart-dp-mo" onChange="updateGrid(\''+sId+'\')"></select></td>';
	sContent +='<td class="smart-dp-close"><a href="javascript:closeDateControl(\''+sId+'\')"><img src="'+sImgPath+'buttons/closebutton13.gif"></a></td></tr></table>';
	sContent +='<div id="'+sId+'_grid"></div>';
	oDivElement.innerHTML = sContent;
	oDivElement.onkeydown = dateKeyPressed;

	document.getElementById(sId+'_yr').onkeydown = dateYrChange;
	
	oDivElement.style.display='block';
	if (e.pageX)
	{
		if (e.offsetY || e.offsetX)
		{
			oDivElement.style.top = e.pageY-e.offsetY+'px';
			oDivElement.style.left = e.pageX-e.offsetX+'px';
		}
		else
		{	
			oDivElement.style.top = e.pageY+'px';
			oDivElement.style.left = e.pageX+'px';
		}
	}
	else
	{
		if (document.documentElement)
		{
		oDivElement.style.top = e.clientY-e.offsetY+document.documentElement.scrollTop ;
		oDivElement.style.left = e.clientX-e.offsetX+document.documentElement.scrollLeft ;
		}
	}
	if (oDivElement.focus) oDivElement.focus();
	
	oMonthSelector = document.getElementById(sId+'_mo');
	for (i=0; i<=11; i++) oMonthSelector.options[i]= new Option(asMonths[i],i);
	oMonthSelector.options[oDate.getMonth()].selected=true;
	oGridDivElement = document.getElementById(sId+'_grid');
	oGridDivElement.innerHTML = getDateControlGridHtml(sId, oDate, oSelectedDate);
	oBaseElement.blur();
	e.cancelBubble = true;
	if (e.stopPropagation) e.stopPropagation();
	if (oDivElement.insertAdjacentHTML)
	{	
		var ua = navigator.userAgent.toLowerCase(); 
		isOpera = (ua.indexOf('opera') != -1); 
		isIE = (ua.indexOf('msie') != -1 && !isOpera && (ua.indexOf('webtv') == -1) ); 
		if (isIE)
		{
			oDivElement.insertAdjacentHTML('afterEnd', '<iframe id="'+sId+'_ifr" src="javascript:;" scrolling="no" frameborder="0" style="position:absolute; top:0px; left:0px; display:none;">');
			oIframeElement = document.getElementById(sId+'_ifr');
			oIframeElement.style.width = oDivElement.offsetWidth;
		    oIframeElement.style.height = oDivElement.offsetHeight;
		    oIframeElement.style.top = oDivElement.style.top;
		    oIframeElement.style.left = oDivElement.style.left;
		    oIframeElement.style.zIndex = oDivElement.style.zIndex - 1;
		    oIframeElement.style.display = "block";
		}
	}
	return false;
}



function showHideFields(sForm, bShow)
{
	sHiddenFields = ','+document.forms[sForm].formhiddenfields.value+',';
	if (sHiddenFields == ',,') sHiddenFields = ',';
	aArgs = showHideFields.arguments;
	for (i=2; i<aArgs.length; i++) {
		
		oElement = document.getElementById('ezform-field-'+sForm+'-'+aArgs[i]);
		if (!oElement) return;
		//Remove element
		sHiddenFields = sHiddenFields.replace(new RegExp(','+aArgs[i]+','), ',');
		if(bShow){
			if (oElement.old_className) oElement.className = oElement.old_className;
		}
		else{
			if (!oElement.old_className) oElement.old_className = oElement.className;
			oElement.className = 'ezform-row-hidden';
			sHiddenFields+= (aArgs[i]+',');
		}
	}
	document.forms[sForm].formhiddenfields.value = sHiddenFields.substr(1,sHiddenFields.length-2)
}

function ezformHelpOver(sID, bDisplay)
{
	oHelpDiv = document.getElementById('ezform-help-'+sID)
	if (oHelpDiv) oHelpDiv.style.display =  (bDisplay)?'block':'none';
}
