var CC_cur_day = null;	
var CC_obj = null;	
var CC_days = null;	
var CC_months = null;	
var CC_years = null;	
var CC_cur_date = null;
var CC_daysInMonth = null;
var CC_startingPos = null;
var CC_lastPos = null;
var CC_frm = null;
var CC_date_name = null;
var CC_initial_array = null;
var CC_func_on_click = null;
var CC_initial_date = null;

function CC_save( ) {
	CC_close();
	CMSD_setValue( CC_frm , CC_date_name , CC_cur_date );
	}

function CC_close( ) {
	if( CC_obj ) {
		CC_obj.style.display = "none";
		}
	}

function CC_show( date , obj , evt , frm , date_name ) {
	if( !CC_obj ) {
		if( !CC_make() ) {
			alert( "CC_show::Ошибка при создании календаря" );
			return false;
			}
		}
	//else 
	CC_frm = frm;
	CC_date_name = date_name;
	
	if( obj && evt ) {
		WP_positioning( CC_obj , WP_getMouseX( evt ) , WP_getMouseY( evt ) , 0 , 0 , 210 , 300 );
		}
	
	CC_obj.style.display = "block";
	CC_showDate( date );
	}
function CC_make( parent_obj , initial_array , func_on_click , initial_date , start_year , end_year ) {
	if( initial_array ) {
		CC_initial_array = initial_array;
		}
	if( func_on_click ) {
		CC_func_on_click = func_on_click;
		}
	if( initial_date ) {
		CC_initial_date = initial_date;
		}	
		
	CC_obj = document.createElement( "DIV" );
	//CC_obj.innerHTML = "<form><table><tr><td id='CC_selectors'><SELECT id='CC_months' onChange='CC_onChangeDate(\"month\",this.value)'></SELECT><SELECT id='CC_years' onChange='CC_onChangeDate(\"year\",this.value)'></SELECT></td></tr><tr id='CC_days_of_wheek_tr'><td id='CC_days_of_wheek'></td></tr><tr id='CC_days_tr' onKeyDown='CC_dayByKeyboard(CC_cur_day,event)'><td id='CC_days'></td></tr><tr><td><input type='button' value='OK' onClick='CC_save()'><input type='button' value='Отмена' onClick='CC_close()'></td></tr></table></form>";
	CC_obj.innerHTML = "<form><table id='CC_table' border=0 cellpadding='0' cellspacing='0'><tr><td id='CC_selectors'><SELECT id='CC_months' onChange='CC_onChangeDate(\"month\",this.value)'></SELECT><SELECT id='CC_years' onChange='CC_onChangeDate(\"year\",this.value)'></SELECT></td></tr><tr><td id='CC_before_days_of_wheek'></td></tr><tr id='CC_days_of_wheek_tr'><td id='CC_days_of_wheek'></td></tr><tr><td id='CC_afret_days_of_wheek'></td></tr><tr id='CC_days_tr' onKeyDown='CC_dayByKeyboard(CC_cur_day,event)'><td id='CC_days'></td></tr></table></form>";
	CC_obj.id = "CC_obj";
	if( parent_obj ) {
		CC_obj = parent_obj.appendChild( CC_obj );
		}
	else {
		CC_obj = document.body.appendChild( CC_obj );
		}
	CC_months = getElement( "CC_months" ); //Создаем месяца
	var tmp_months = new Array( "Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь");
	for( i = 0 ; i < tmp_months.length ; i++ ) {
		CC_months.options[CC_months.length] = new Option(tmp_months[ i ], i, false, false);
		}
	CC_years = getElement( "CC_years" ); //Создаем года
	for( i = ( start_year ? start_year : 2000 ) ; i < ( end_year ? end_year + 1 : 2011 ) ; i++ ) {
		CC_years.options[CC_years.length] = new Option(i, i, false, false);
		}
	var CC_days_of_wheek = getElement( "CC_days_of_wheek" ); //Создаем месяца
	//alert( CC_days_of_wheek );
	var tmp_days_of_wheek = new Array( "Пн", "Вт","Ср","Чт","Пт","Сб","Вс");
	for( i = 0 ; i < tmp_days_of_wheek.length ; i++ ) {
		CC_days_of_wheek.innerHTML += "<div>"+tmp_days_of_wheek[ i ]+"</div>";
		}
	
	CC_days = getElement( "CC_days" );
	$CC_days = $(CC_days);
	for( i = 1 ; i <= 42 ; i++ ) {
	
		//CC_days.innerHTML += "<input _day='" + i + "' id='CC_day_" + i + "' onFocus='calendar_onClickDay(this);CC_onChangeDate(\"day\",this.value)' onKeyDown='CC_dayByKeyboard(this,event)'/>";
		//CC_days.innerHTML += "<span _day='" + i + "' id='CC_day_" + i + "' onClick='CC_onChangeDate(\"day\",this.innerHTML)' onDblClick='CC_onChangeDate(\"day\",this.innerHTML);CC_save()' />";
		$CC_days.append( "<span _day='" + i + "' id='CC_day_" + i + "' onClick='CC_onChangeDate(\"day\",this.innerHTML)' onDblClick='CC_onChangeDate(\"day\",this.innerHTML);CC_save()' />" );
		//if( i % 7 == 0 ) { aler
		}
	
	return true;
	}

function CC_onChangeDate( type , value ) {
	var new_date = new Date( CC_cur_date.UTC );
	//alert( 
	if( type == "day" && CC_cur_date.getDate() != value ) {
		CC_cur_date.setDate( value );
		
		//CC_showDate( CC_cur_date );
		if( CC_func_on_click ) {
			eval( CC_func_on_click + "('" + CC_cur_date + "')" );
			//alert( CC_func_on_click );
			}
		}
	else if( type == "month" && CC_cur_date.getMonth() != value ) {
		if( value > 11 ) {
			value = 0;
			CC_cur_date.setFullYear( CC_cur_date.getFullYear() + 1 );
			}
		else if ( value < 0 ) {
			
			value = 11;
			CC_cur_date.setFullYear( CC_cur_date.getFullYear() - 1 );
			}
		CC_cur_date.setMonth( value );
		CC_showDate( CC_cur_date );
		}	
	else if( type == "year" && CC_cur_date.getFullYear() != value ) {
		CC_cur_date.setFullYear( value );
		CC_showDate( CC_cur_date );
		}
	}


function CC_getCurDate(  ) {
	return CC_cur_date;
	}
function CC_showDate( obj , initial_array ) {
	//alert( obj );
	//alert( initial_array );
	
	if( !obj ) {
		obj = new Date();
		}
	CC_cur_date = obj;
	
	var tmp_filled_day = new Date();
	var now   = new Date();
	var x_day   = obj.getDate();
	var x_month = obj.getMonth();
	var x_year  = obj.getFullYear();	
	CC_months.item( x_month ).selected = true;
	var min_year = CC_years.item( 0 ).value;
	if( !CC_years.item( x_year - min_year ) ) {
		alert( 'Недопустимый год' );
		return false;
		}
	CC_years.item( x_year - min_year ).selected = true;
			
	var firstOfMonth = new Date (x_year, x_month, 1);
	
	
	
	CC_startingPos = firstOfMonth.getDay();
	
	try{
		//console.log( 'x_year: ' + x_year + ', x_month: ' + x_month );
		if( x_year == 2011 && x_month == 4 && CC_startingPos == 0 ) {
			CC_startingPos = 7;
			}
		
		}
	catch(e){}
	
	//alert( CC_startingPos );
	CC_daysInMonth = CC_getDaysInMonth( x_month + 1 , x_year );
	if( x_day > CC_daysInMonth ) x_day = CC_daysInMonth;
	var tmp_day = null;
	var day = 0;
	
	for( k = 1 ; k <= 42 ; k++ ) {
		tmp_day = getElement( "CC_day_" + k );
		tmp_day.className = "";
		if( k >= CC_startingPos && k <= ( CC_startingPos + CC_daysInMonth - 1 ) ) {
			day++;
			CC_lastPos = k;
			//tmp_day.value = day;
			tmp_day.innerHTML = day;
			//if( day == x_day ) try{ tmp_day.focus() } catch(exeption) {};
			
			//tmp_day.className = day == x_day ? "CC_day_cur" : "";
			//if( day == x_day ) try{ tmp_day.focus() } catch(exeption) {};
			tmp_filled_day = new Date( x_year, x_month, day );
			
			//alert( CC_initial_date + "  " + tmp_filled_day );
			
			if( ( CC_initial_date && tmp_filled_day.toString() == CC_initial_date.toString() ) ) {
				tmp_day.className = "CC_day_cur";
				}
			
			if( CC_initial_array && CC_initial_array[ tmp_filled_day ] ) {
				//alert( 'ddd' );
				tmp_day.className += " CC_day_have";
				}
			}
		else {
			//tmp_day.value = "";
			tmp_day.innerHTML = "";
			}
		}
	}
	
function CC_dayByKeyboard( el , e ) {
	var tmp_el_day = parseInt( el.getAttribute( "_day" ) );
	var tmp_next_day = null;
	var tmp_direction = "";
	var tmp_change_month = 0; 
	if( e.keyCode == 36 ) {
		tmp_direction = "first";
		tmp_next_day = CC_startingPos;
		}
	else if( e.keyCode == 35 ) {
		tmp_direction = "last";
		tmp_next_day = CC_lastPos;
		}
	else if( e.keyCode == 38 ) { 
		tmp_next_day = tmp_el_day - 7;
		tmp_direction = "up";
		}
	else if( e.keyCode == 40 ) {
		tmp_direction = "down";
		tmp_next_day = tmp_el_day + 7;
		}
	else if( e.keyCode == 37 ) {
		tmp_direction = "prev"
		tmp_next_day = tmp_el_day - 1;
		//alert( tmp_next_day );
		}
	else if( e.keyCode == 39 ) {
		tmp_direction = "next";
		tmp_next_day = tmp_el_day + 1;
		}
	else if( e.keyCode == 33 ) {
		tmp_direction = "prev_month";
		tmp_change_month = -1;
		}
	else if( e.keyCode == 34 ) {
		tmp_direction = "next_month";
		tmp_change_month = 1;
		}
	if( tmp_direction ) {
		e.cancelBubble = true;
		if( tmp_change_month != 0 ) {
			CC_onChangeDate( "month" , CC_cur_date.getMonth() + tmp_change_month );
			}
		else {
			var need_other_month = false;
			var tmp_target_el = getElement( "CC_day_" + tmp_next_day );
			if( tmp_target_el ) {
				if( !tmp_target_el.value ) {
					need_other_month = true;
					}
				else {
					tmp_target_el.focus();
					}
				}
			else {
				need_other_month = true;
				}
			if( need_other_month ) {
				if( tmp_direction == "next" || tmp_direction == "down" ) {
					CC_onChangeDate( "month" , CC_cur_date.getMonth() + 1 );
					CC_onChangeDate( "day" , 1 );
					}
				else if( tmp_direction == "prev" || tmp_direction == "up" ) {
					CC_onChangeDate( "month" , CC_cur_date.getMonth() - 1 );
					CC_onChangeDate( "day" , 1 );
					}
				}
			}
		}
	}
	
function CC_getDaysInMonth(x_month,x_year)  {
	var days;
	if (x_month==1 || x_month==3 || x_month==5 || x_month==7 || x_month==8 || x_month==10 || x_month==12)  days=31;
	else if (x_month==4 || x_month==6 || x_month==9 || x_month==11) days=30;
	else if (x_month==2) {
		if (CC_getDaysInMonth(x_year)) { days=29; }
		else { days=28; }
		}
	return (days);
	}
function CC_isLeapYear (x_year) {
	if (((x_year % 4)==0) && ((x_year % 100)!=0) || ((x_year % 400)==0)) {
		return (true);
		} 
	else { return (false); }
	}	
