function $GbID(id) { return document.getElementById(id); }

function addHandler(object, event, handler)
{
	if (typeof object.addEventListener != "undefined") object.addEventListener(event, handler, false);
	else if (typeof object.attachEvent != "undefined") object.attachEvent("on" + event, handler);
}

function selectTab(tabHolderId, tabId)
{
 var tabHolder = $GbID(tabHolderId);
 var tab = $GbID(tabId);
 if (tab.style.display != "block")
 {
 var tabItems = tabHolder.childNodes;
 for (var i = 0; i < tabItems.length; i++)
 {
 if (tabItems[i].nodeType == 1)
 {
 removeClass(tabItems[i], "selected");
 hide(tabItems[i].id + "Content");
 }
 }
 addClass(tab, "selected");
 removeClass(tab, "hidden");
 show(tab.id + "Content");
 }
}

function CheckDaysOfMonth(day, month, year)
{
	daysInMonth = new Array(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
	daysInFeb = (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );

	if ((month == 2 && day > daysInFeb) || day > daysInMonth[month - 1])
	{
		return false;
	}
	return true;
}

function toggleFlyStatusView()
{
	var flyPath = $GbID('flyStatusForm_flyPath');
	var flyNumber = $GbID('flyStatusForm_flyNumber');
	if (flyPath != null && flyNumber != null)
	{
		if (flyPath.checked)
		{
			show('flyPathControls');
			hide('flyNumberControls');
			$GbID('flightFlifo').value = '';
		}
		else if (flyNumber.checked)
		{
			hide('flyPathControls');
			show('flyNumberControls');
			//$GbID('fromFlIfo').value = '';
			//$GbID('toFlIfo').length = 0;
		}
	}
	return true;
}

function removeHandler(object, event, handler)
{
	if (typeof object.removeEventListener != "undefined") object.removeEventListener(event, handler, false);
	else if (typeof object.detachEvent != "undefined") object.detachEvent("on" + event, handler);
}

Function.prototype.bind = function(object)
{
	var method = this;
	return function() { return method.apply(object, arguments); }
}

function stopEventBubble(e)
{
	e.cancelBubble = true;
	if (e.stopPropagation) e.stopPropagation();
}

function getBounds(element)
{
	var left = 0, top = 0;
	//$GbID("debug").innerHTML += "( elementTop = " + element.style.top + ", elementLeft = " + element.style.left + ", element = " + element.nodeName + " ) ..... ";
	while (element.offsetParent)
	{
		left += element.offsetLeft;
		top += element.offsetTop;
		//$GbID("debug").innerHTML += "( top = " + top + ", left = " + left + ", element = " + element.nodeName + ", parent = " + element.offsetParent.nodeName + " ) ..... ";
		element = element.offsetParent;
	}
	
	var scrollTop = window.pageYOffset || element.scrollTop || document.getElementsByTagName('body')[0].scrollTop;
    var scrollLeft = window.pageXOffset || element.scrollLeft || document.getElementsByTagName('body')[0].scrollLeft;

	top -= scrollTop;
	left -= scrollLeft;
	
	//$GbID("debug").innerHTML += "<br>";
	return {left: left, top: top};
}

function show(obj)
{
	if (typeof obj == "string") $GbID(obj).style.display = "block"; else obj.style.display = "block";
}

function hide(obj)
{
	if (typeof obj == "string")	$GbID(obj).style.display = "none"; else	obj.style.display = "none";
}

function fixPNG(element)
{
	if (/MSIE (5\.5|6).+Win/.test(navigator.userAgent))
	{
		var src;
		if (/\.png$GbID/.test(element.src))
		{
			src = element.src;
			element.src = "img/blank.gif";
		}
		if (src) element.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "',sizingMethod='crop')";
	}
}

function initTopMenu()
{
	var menu = $GbID("menuTop");
	var items = menu.getElementsByTagName("ul")[0].childNodes;
	var itemsCount = items.length;
	/*last child is a link*/
	for (var i = 0; i < itemsCount - 1; i++)
	{
		var subMenu = items[i].childNodes[1];
		addHandler(items[i], "mouseover", showSubMenu.bind(subMenu));
		addHandler(items[i], "mouseout", hideSubMenu.bind(subMenu));
	}
}

function ticketTypeChanged(event)
{
	$('#searchFlyBlock').css('zoom', '0');
	if ($GbID("searchFly_twoWayTicket").checked)
	{
		/*$GbID("searchFly_arrivalDay").disabled = false;
		$GbID("searchFly_arrivalMonthYear").disabled = false;*/
		$GbID("searchFly_arrivalDayContainer").style.display = 'block';
		show("searchFly_arrivalCalendar");
	}
	if ($GbID("searchFly_oneWayTicket").checked)
	{
		/*$GbID("searchFly_arrivalDay").disabled = true;
		$GbID("searchFly_arrivalMonthYear").disabled = true;*/
		$GbID("searchFly_arrivalDayContainer").style.display = 'none';
		hide("searchFly_arrivalCalendar");
	}
	$('#searchFlyBlock').css('zoom', '1');
}

function showSubMenu() { show(this); }
function hideSubMenu() { hide(this); }

function showTooltip(divId, caller, event)
{
	/*
	var tt = $GbID(divId);
	var pos = getBounds(caller);
	tt.style.top = event.clientY - pos.top + 10 + "px";
	tt.style.left = event.clientX - pos.left + 10 + "px";
	*/
	/*
	$GbID("debug").innerHTML += "( clientX = " + event.clientX + ", posX = " + pos.left + " | ";
	$GbID("debug").innerHTML += "clientY = " + event.clientY + ", posY = " + pos.top + " ) ..... ";
	*/
	/*
	show(tt);
	*/
}

function addClass(element, className)
{
	if (typeof element == "string") $GbID(element).className += " " + className; else element.className += " " + className;
}

function removeClass(element, classRemove)
{
	var regexp = new RegExp(classRemove, "g");
	if (typeof element == "string") $GbID(element).className = $GbID(element).className.replace(regexp, "");
	else element.className = element.className.replace(regexp, "");
}

function selectMainServiceTab(tabId)
{
	var tab = $GbID(tabId);
	if (tab.style.display != "block") 
	{
		var tabItems = $GbID("mainServiceTabs").childNodes;
		for (var i = 0; i < tabItems.length; i++)
		{
			if (tabItems[i].nodeType == 1) 
			{
				removeClass(tabItems[i], "selected");
				hide(tabItems[i].id + "Content");
			}
		}
		addClass(tab, "selected");
		show(tab.id + "Content");
	}
}

var generateBlankOption = function()
{
	var text = document.createTextNode('Пункт назначения');
	var newOpt = document.createElement('option');
	newOpt.value = '';
	newOpt.appendChild(text);
	return newOpt;
}

var generateOption = function(station)
{
	var text = document.createTextNode(Stations[station]["name"]);
	var newOpt = document.createElement('option');
	newOpt.value = station;
	newOpt.appendChild(text);
	return newOpt;
}

var fillArrvSelect = function()
{
	var el = document.getElementById(this.idTo);
	var sourceEl = document.getElementById(this.idFrom);
	while(el.firstChild)
	{
		el.removeChild(el.firstChild);
	}
	try
	{
		if (sourceEl.value !== '')
		{
			var arrvStations = Stations[sourceEl.value]["mkts"];
			try {
				getMovie().sendFromJS(arrvStations[0],'to');
			} catch(e){}
			for(var i = 0; i < arrvStations.length; i++)
			{
				try
				{
					el.appendChild(generateOption(arrvStations[i]));
				}
				catch(e){}
			}
		}
		else
		{
			el.appendChild(generateBlankOption());
		}
	}
	catch(e){}
	try{
		//getMovie().sendFromJS($('#'+this.idFrom)[0].value, $('#'+this.idTo)[0].value); 
			//getMovie().sendFromJS($('#'+this.idFrom)[0].value, 'from'); 
			//getMovie().sendFromJS($('#'+this.idTo)[0].value, 'to');
	}catch(e){}
}

InitSearch = function(idTo, idFrom)
{
	var el = document.getElementById(idFrom);
	for(var i = 0; i < SortedStations.length; i++)
	{
		try
		{
			el.appendChild(generateOption(SortedStations[i]));
		}
		catch(e){}
	}
	try
	{
		el.idTo = idTo;
		el.idFrom = idFrom;
		el.onchange = fillArrvSelect;
	}
	catch(e){}
}

$(

function()
{
	try{
		InitSearch("searchFly_flyTo","searchFly_flyFrom");
		$('#searchFlyForm').css('zoom','1');
		$('#searchFlyBlock').css('zoom','1');
		$('#searchFly_departureMonthYear')[0].onchange = null;
		$('#searchFly_departureMonthYear, #searchFly_departureDay').change(processDatesFrom);
		$('#searchFly_arrivalDay, #searchFly_arrivalMonthYear').change(processDatesTo);
	}catch(e){}

}
)

var parseMonth = function(curDate){
	return parseInt(curDate.getMonth()) < 9 ? '0'+(curDate.getMonth()+1) : curDate.getMonth()+1;	
}

var parseDay = function(curDate){
	return curDate.getDate() < 10 ? '0'+curDate.getDate() : curDate.getDate();	
}

var processDatesFrom = function(){
	var toMonthYear = $('#searchFly_departureMonthYear')[0];
	var toDay = $('#searchFly_departureDay')[0];
	var fromMonthYear = $('#searchFly_arrivalMonthYear')[0];
	var fromDay = $('#searchFly_arrivalDay')[0];

	var today = new Date();
	var toDate = createDateFromSelect(true);
	var fromDate = createDateFromSelect();

	if (parseInt(toDay.value, 10) != toDate.getDate()){
		toDate.setDate(0);
		toDay.value = parseDay(toDate);
	}
	
	if(toDate < today){
		if(today.getDate() > toDate.getDate()){
			var tempDate = new Date();
			tempDate.setMonth(today.getMonth()+1);
			toMonthYear.value = tempDate.getFullYear() + '-' + (parseMonth(tempDate));
			toDate = createDateFromSelect(true);
			fromDate = createDateFromSelect();
		}
	}
	if(toDate > fromDate){
		var tempDate = new Date(toDate);
		tempDate.setDate(toDate.getDate()+3);	
		fromMonthYear.value = tempDate.getFullYear() + '-' + (parseMonth(tempDate));
		fromDay.value = parseDay(tempDate);
		toDate = createDateFromSelect(true);
		fromDate = createDateFromSelect();
	}
}

var processDatesTo = function(){
	var toMonthYear = $('#searchFly_departureMonthYear')[0];
	var toDay = $('#searchFly_departureDay')[0];
	var fromMonthYear = $('#searchFly_arrivalMonthYear')[0];
	var fromDay = $('#searchFly_arrivalDay')[0];

	var today = new Date();
	var toDate = createDateFromSelect(true);
	var fromDate = createDateFromSelect();

	if (parseInt(fromDay.value, 10) != fromDate.getDate()){
		fromDate.setDate(0);
		fromDay.value = parseDay(fromDate);
	}
	
	if(toDate > fromDate){	
		var tempDate = new Date(fromDate),
			f = false;
		tempDate.setDate(tempDate.getDate()-3);
		if (tempDate < new Date()){
			tempDate = new Date();
			f = true;
		}
		toMonthYear.value = tempDate.getFullYear() + '-' + (parseMonth(tempDate));
		toDay.value = parseDay(tempDate);
		toDate = createDateFromSelect(true);
		fromDate = createDateFromSelect();
		if (f){
			processDatesFrom();
		}
	}
}

/*
window.onload = function()
{
	calendar = new Calendar();
	calendar.lang = "RU";
	calendar.init('calendarPopup');
	calendar.process(false);
	try{
		InitSearch("searchFly_flyTo","searchFly_flyFrom");
		$('#searchFlyForm').css('zoom','1');
		$('#searchFlyBlock').css('zoom','1');
	}catch(e){}
	
}
*/

var createDateFromSelect = function(to)
{
	if(to){
		var monthYearArray = ($('#searchFly_departureMonthYear')[0].value).split('-');
		return new Date(monthYearArray[0], monthYearArray[1]-1, $('#searchFly_departureDay')[0].value, 23,59, 59);
	}else{
		monthYearArray = ($('#searchFly_arrivalMonthYear')[0].value).split('-');
		return new Date(monthYearArray[0], monthYearArray[1]-1, $('#searchFly_arrivalDay')[0].value, 23,59, 59);

	}
}

validateSearch = function(){
				$('#searchFlyBlock').css('zoom','0');
				$('#validation').empty();
				var errorPull = new Array();
				
				if($('#searchFly_flyFrom')[0].value == ''){
					errorPull.push(localizedMissingOrigin);
				}
				
				if($('#searchFly_flyTo')[0].value == ''){
					errorPull.push(localizedMissingDest);
				}
				
				var adults = parseInt($('#searchFly_countAdult')[0].value);
				var inf = parseInt($('#searchFly_countChildUnder2')[0].value);
				var chd = parseInt($('#searchFly_countChildUnder12')[0].value);

								
				if(inf > adults){
					errorPull.push(localizedTextTooManyInfants);
				}
				

				if((adults + chd) > applicationBookingMaxPassengers){
					errorPull.push(localizedTextExceedsMaxPaxAllowed);
				}
				
				var depDate = createDateFromSelect(true);

				var arrvDate = createDateFromSelect();
				
				if(!$('#searchFly_oneWayTicket')[0].checked){
					if(depDate > arrvDate){
						errorPull.push(localizedTextEarlierDatePre);
					}
				}
				var curDate = new Date();
				
				if(curDate > depDate){
					errorPull.push(localizedTextPastDatePre);
				}
				if(!$('#searchFly_oneWayTicket')[0].checked){
				if(curDate > arrvDate){
					errorPull.push(localizedTextPastDatePre);
				}
				}
				
				var mktDay1 = $GbID('searchFly_departureDay').value;
				var mktDay2 = $GbID('searchFly_arrivalDay').value;
				var mktMonth1 = $GbID('searchFly_departureMonthYear').value.substring(5, 7);
				var mktMonth2 = $GbID('searchFly_arrivalMonthYear').value.substring(5, 7);
				var mktYear1 = $GbID('searchFly_departureMonthYear').value.substring(0, 4);
				var mktYear2 = $GbID('searchFly_arrivalMonthYear').value.substring(0, 4);
				var mktMonthText1 = $GbID('searchFly_departureMonthYear').options[$GbID('searchFly_departureMonthYear').selectedIndex].text;
				var mktMonthText2 = $GbID('searchFly_arrivalMonthYear').options[$GbID('searchFly_arrivalMonthYear').selectedIndex].text;
								
				if (!CheckDaysOfMonth(mktDay1, mktMonth1, mktYear1))
				{
					errorPull.push(localizedTextInvalidDatePost + mktDay1 + " " + mktMonthText1);
				}
				if (!CheckDaysOfMonth(mktDay2, mktMonth2, mktYear2) && !$('#searchFly_oneWayTicket')[0].checked)
				{
					errorPull.push(localizedTextInvalidDatePost + mktDay2 + " " + mktMonthText2);
				}
				
				if(errorPull.length == 0){
					if(depDate.getYear() == curDate.getYear() && 
					depDate.getMonth() == curDate.getMonth() && 
					depDate.getDate() == curDate.getDate()
					){
						if(confirm(localizedTextTodaysDateMessage)){
							$('#sendSearch').click()
						}else{
							$('#left').css('zoom', '0');
							$('#left').css('zoom', '1');						}
							$('#searchFlyBlock').css('zoom', '1');
							return false;
					}else{
						$('#sendSearch').click()
					}
				}else{
					$('#validation').append(errorPull[0]);
				}
				$('#searchFlyBlock').css('zoom','1');
			}


checkFieldsHelper = function(fileds, form){
	var filedCol = $(fileds);
	var hasempty = false;
	for(var i = 0; i < filedCol.length; i++){
		var parentCss = $(filedCol[i]).parent().attr("class");
		var mailOK = false;
		if(filedCol[i].getAttribute('inptype') == 'mail'){
			var pattern = new RegExp("^[A-Z0-9._%+-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,6}$","i");
			if(pattern.test(filedCol[i].value)){
				mailOK = true;
			}
		}else{
			mailOK = true;
		}
		if(filedCol[i].value == '' || !mailOK){
			hasempty = true;
			$(filedCol[i]).parent().attr("class", parentCss + ' hasError');
		}else{
			$(filedCol[i]).parent().attr("class", parentCss.split(' ')[0]);;		
		}
	}
	if(hasempty == false){
	$(form).submit();

	}else{
	return false;
	}
}

consoleWrapper = function(str){
	/*console.debug(str + ' - > fromFlash');*/
}
