	function inArray (v, a){
		var i;
		for (i = 0; i < a.length; i++) {
			if (a[i] == v) return true;
		}
		return false;
	};
	
	function getValueFrom2DimArrayByFirstEl(arr, el) {
		var i = 0;
		for (i = 0; i < arr.length; i++) {
			if (arr[i][0] == el) return i;
		}
		
		return -1;
	}
	
	function caleGen(m, y, div_id, submit_id, oneTouch, iLeft, iRight) {
		var passedM = m;
		var passedY = y;
		
		if (y != thisYear) y = y - thisYear;
		else y = 0;
		var start = 12 * y + m;
		
		// GLOBAL
		selectedMonth = m;
		selectedYear = y;
		// ---
		
		var i = 0;
		var k = 0;
		
		var j = 0;
		var monthStarted = false; // FLAG
		var monthEnded = false; // FLAG
		
		while (k != start) {
			if (days[i] == '!') k++;
			i++;
		}
		
		start = i;
		var end = i;
		while (days[end] != '!') end++;
		
		var nextMonth = 0;
		var nextYear = 0;
		var prevMonth = 0;
		var prevYear = 0;
		
		if (passedY == gloYearRightLimit   &&   passedM == 12) {
			nextMonth = passedM;
			nextYear = passedY;
		} else if (passedM < 12) {
			nextMonth = passedM + 1;
			nextYear = passedY;
		} else {
			nextMonth = 1;
			nextYear = passedY + 1;
		}
		
		if (passedY == gloYearLeftLimit   &&   passedM == 1) {
			prevMonth = passedM;
			prevYear = passedY;
		} else if (passedM > 1) {
			prevMonth = passedM - 1;
			prevYear = passedY;
		} else {
			prevMonth = 12;
			prevYear = passedY - 1;
		}
		
		var html = '<table width="180" height="100%" style="font-size: 8pt; border: 1px solid #526182;"><tr><td colspan="8"><table width="100%" style="font-size:8pt"><tr><td>&nbsp;&nbsp;&nbsp;<img src="'+ iLeft +'" alt="<" onClick="caleGen('+prevMonth+', '+prevYear+', \''+div_id+'\', \''+submit_id+'\', '+oneTouch+', \''+ iLeft +'\', \''+ iRight +'\');" style="cursor: pointer;" /></td><td align="center" class="cale_date">'+monthes[passedM - 1]+' '+passedY+'</td><td align="right"><img src="'+ iRight +'" alt=">" onClick="caleGen('+nextMonth+', '+nextYear+', \''+div_id+'\', \''+submit_id+'\', '+oneTouch+', \''+ iLeft +'\', \''+ iRight +'\');" style="cursor: pointer;" />&nbsp;&nbsp;&nbsp;</td></tr></table><br /></td></tr>';
		
		monthStarted = false; // FLAG
		monthEnded = false; // FLAG
		k = 7;
		j = 0;
		
		var week = parseInt(weeks[m - 1]);
		if (week > 51) week = 1;
		
		var curWeek = 0;
		var fullDate = '';
		var ts = parseInt(weeks_ts[m - 1 + ((passedY - thisYear) * 12)]);
		
		for (i = start; i < end; i++){
			if (k > 6){
				k = 0;
				curWeek = week + j;
				curTs = ts + 604800 * j;
				html += '</tr><tr>';
				j += 1;
			}
			k++;
			
			if (monthStarted && days[i] == '01') monthEnded = true;
			if (!monthStarted && days[i] == '01') monthStarted = true;
			
			if (monthStarted && !monthEnded){
				fullDate = (days[i].length == 1 ? '0' : '') + days[i] +'.'+ (passedM < 10 ? '0' : '') + passedM +'.'+ passedY;
				
				html += '<td align="center" style="cursor:pointer" class="cale_day_in" onClick="';
				
				if (oneTouch == true) html += 'submitDate(\''+fullDate+'\', \''+div_id+'\', \''+submit_id+'\');"';
				else html += 'workWithDates(\''+fullDate+'\', \''+curWeek+'\', this, \''+curTs+'\');"';
				if (inArray(fullDate, dates_res)) html += ' style="background: #e9e9e9;"';
				html += '>'+ days[i] +'</td>';
			} else html += '<td align="center" class="cale_day_out">'+ days[i] +'</td>';
			
		}
		
		html += '</tr></table>';
		
		$(div_id).innerHTML = html;
	}
	
	function workWithDates(day, week, link, ts){
		if (!inArray (day, dates_res)){
			dates_res.push(day);
			weeks_res.push(week);
			weeks_ts_res.push(ts);
			link.style.backgroundColor = '#e9e9e9';
		} else {
			link.style.backgroundColor = '#fff';
			var i = 0;
			var tmp = new Array();
			var tmp2 = new Array();
			var tmp3 = new Array();
			for (i = 0; i < dates_res.length; i++){
				if (dates_res[i] != day){
					tmp.push(dates_res[i]);
					tmp2.push(weeks_res[i]);
					tmp3.push(weeks_ts_res[i]);
				}
			}
			dates_res = tmp;
			weeks_res = tmp2;
			weeks_ts_res = tmp3;
		}
	}
	
	function submitDate(value, id, submit_id){
		$(submit_id).value = value;
		$(id).style.display = 'none';
	}
	
	function submitDates(id, submit_id){
		var tmp = new Array();
		var res = new Array();
		var res2 = new Array();
		
		var i = 0;
		for (i = 0; i < weeks_res.length; i++){
			if (!inArray(weeks_res[i], res)){
				res.push(weeks_res[i]);
			}
		}
		for (i = 0; i < weeks_ts_res.length; i++){
			if (!inArray(weeks_ts_res[i], res2)){
				res2.push(weeks_ts_res[i]);
			}
		}
		
		document.getElementById(submit_id).value = res.sort().join(', ');
		if (document.getElementById('add_campaign').style.display == 'block') $('weeks_ts').value = res2.sort().join(',');
		else $('weeks_ts-').value = res2.sort().join(',');
		document.getElementById(id).style.display = 'none';
		
		//clearData();
	}
	
	function cancelDates(id){
		$(id).style.display = 'none';
	}