





// JavaScript Document

function AbDebug()
{
}

AbDebug.DOC_FRAME = null;
AbDebug.DOC_LOADED = false;
AbDebug.DOC_INIT = false;

// Nivo napake oz. informacije
AbDebug.LOG_INFO = 1;
AbDebug.LOG_WARN = 1 << 1;
AbDebug.LOG_ERROR = 1 << 2;
AbDebug.LOG_FATAL = 1 << 3;

// Scope napake oz. informacije
AbDebug.INFO_APPLICATION = 1;
AbDebug.INFO_PARSE = 1 << 1;
AbDebug.INFO_AJAX_REQUEST = 1 << 2;
AbDebug.INFO_AJAX_RESPONSE = 1 << 3;
AbDebug.INFO_GENERAL = 1 << 4;
AbDebug.INFO_OTHER = 1 << 5;
AbDebug.INFO_NOT_IMPLEMENTED = 1 << 6;

AbDebug._invoke = function( p_msg )
{
	AbDebug.invoke( p_msg );
}

AbDebug.invoke = function( p_msg, p_level, p_type )
{
	if( !AbDebug.DOC_INIT )
	{
		AbDebug.DOC_INIT = true;
		frame = document.getElementById('AbDebug');
		frame.style.position = "absolute";
		frame.style.right = "0px";
		frame.style.top = "0px";
		frame.style.width = "300px";
		frame.style.height = "400px";
		frame.style.border = "1px solid black";
			
		AbDebug.DOC_FRAME = frame.contentWindow.document;
	}

	if( AbDebug.DOC_FRAME )
	{
		var Node = AbDebug.createMessage( p_msg, p_type );

		switch( p_level )
		{
			case AbDebug.LOG_WARN:
				Node.className = "l_warn";
				break;
			case AbDebug.LOG_ERROR:
				Node.className = "l_error";
				break;
			case AbDebug.LOG_FATAL:
				Node.className = "l_fatal";
				break;
			default:
				Node.className = "l_info";
		}
		
		// Compatibility with IE...
		var impNode = AbDebug.DOC_FRAME.createElement('div');
		impNode.innerHTML = Node.innerHTML;
		impNode.className = Node.className;	
		var fbody = AbDebug.DOC_FRAME.body;	
		
		if( fbody.firstChild )
		{
			fbody.insertBefore(impNode, fbody.firstChild );
		}
		else
		{
			fbody.appendChild( impNode );
		}
	}
}

AbDebug.createMessage = function( p_msg, p_type )
{
	var DNode = document.createElement('div');
	var Text = "";
	var dNow = new Date();
	var dh = dNow.getHours();
	var dm = dNow.getMinutes();
	var ds = dNow.getSeconds();
	
	var strTime = AbStringUtil("[", new String(dh), ":", new String(dm), ":", new String(ds), "]", " ");
	
	switch( p_type )
	{
		case AbDebug.INFO_APPLICATION:
			Text = "Application:";
			break;
		case AbDebug.INFO_PARSE:
			Text = "Parse:";
			break;
		case AbDebug.INFO_AJAX_REQUEST:
			Text = "Http Request:";
			break;
		case AbDebug.INFO_AJAX_RESPONSE:
			Text = "Http Response:";
			break;
		case AbDebug.INFO_GENERAL:
			Text = "General:";
			break;
		case AbDebug.INFO_OTHER:
			Text = "Other:";
			break;
		case AbDebug.INFO_NOT_IMPLEMENTED:
			Text = "Not implmented:";
		default:
			break;
	}
	
	var spanNode = document.createElement("span");
	spanNode.innerHTML = AbStringUtil( new String(strTime), new String(Text), " ", new String(p_msg) );
	
	DNode.appendChild( spanNode );
	return DNode;
}

function trace(message,level,type)
{
	if( AbDebug.DOC_LOADED )
	{
		AbDebug.invoke( message, level, type );
	}
}
var AbStringUtil = function() // Tako joinamo stringe v aplikaciji (CONCATENATION) 
{
	arguments.join = Array.prototype.join; // Hvala Zimbra ( Zelo hitro delovanje )
	AbStringUtil.usageCount++;
	return arguments.join( "" );
}

AbStringUtil.usageCount = 0;

AbStringUtil.getStatistic = function()
{
	return AbStringUtil.usageCount;
}
// JavaScript Document

var AbAmenity = function( p_id, p_name, p_name2 )
{
	this.Id = p_id;
	this.Name = p_name;
	this.SLName = p_name2;
	
	this.insert();
}

AbAmenity.prototype.Id = null;
AbAmenity.prototype.Name = null;
AbAmenity.prototype.SLName = null;

AbAmenity._List = new Array;

AbAmenity.prototype.insert = function()
{
	var aml_iter, list;
	list = AbAmenity._List;
	for( aml_iter = 0; aml_iter < list.length; aml_iter++ )
	{
		if( list[ aml_iter ].Id == this.Id )
		{
			return;
		}
	}
	
	AbAmenity._List.push( this );
}

AbAmenity.prototype.toString = function()
{
	return "AbAmenity";
	//return AbStringUtil("{", this.Id , "," , this.Name , "}");	
}

AbAmenity.prototype.toArray = function()
{
	var ret = new Array( this.Id, this.Name );
	return ret;
}

AbAmenity.getAllAmenities = function()
{
	return AbAmenity._List;
}

AbAmenity.toString = function()
{
	return "AbAmenity";
}
// JavaScript Document

var AbBrowser = function()
{
}

AbBrowser.prototype.test = function()
{
	return true;
}

AbBrowser.isSupported = function()
{
	var testing_element = new AbBrowser();
	
	if(testing_element.test)
	{
		return true;
	}
	else
	{
		return false;
	}
}

AbBrowser.isIE = function()
{
	if( document.all )
	{
		return true;
	}
	
	return false;
}

AbBrowser.sourceEvent = function( e )
{
	if( AbBrowser.isIE() )
	{
		if(window.event)
		{
			return window.event.srcElement;
		}
		else
		{
			return null;
		}
	}
	else
	{
		if(e)
		{
			if(e.target)
			{
				return e.target;
			}	
			return null;
		}
		return null;
	}
}

AbBrowser.toString = function()
{
	return "AbBrowser";
}

AbBrowser.prototype.toString = function()
{
	return "AbBrowser";
}
// JavaScript Document

var AbConnection = function()
{
	var xmlhttp;
	try 
	{ 
		xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); 
	}
	catch (e) 
	{
		try 
		{ 
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
		}
		catch (e) 
		{
			try 
			{
				xmlhttp = new XMLHttpRequest(); 
			}
			catch (e) 
			{
				trace(" AJAX Not Supported ", AbDebug.LOG_FATAL, AbDebug.INFO_APPLICATION );
				xmlhttp = false;
			}
		}
	}
	
	this.xmlhttp = xmlhttp;
	
	if (!xmlhttp)
	{
		trace( AbStringUtil( "No AJAX" ), AbDebug.LOG_FATAL, AbDebug.INFO_APPLICATION );
		return null;
	}
	else
	{
		return this;
	}
}

AbConnection.prototype.params = null;
AbConnection.prototype.xmlhttp = null;

AbConnection.prototype.toString = function()
{
	return "AbConnection";
}
// JavaScript Document

var AbCredentials = function( p_username, p_password )
{
	this.setUsername( p_username );
	this.setPassword( p_password );
}

AbCredentials.prototype.username = null;
AbCredentials.prototype.password = null;

AbCredentials.prototype.setUsername = function( p_username )
{
	if( p_username )
		this.username = p_username;
}

AbCredentials.prototype.getUsername = function()
{
	return this.username;
}

AbCredentials.prototype.setPassword = function( p_password )
{
	if( p_password )
		this.password = p_password;
}

AbCredentials.prototype.getPassword = function()
{
	return this.password;
}

AbCredentials.prototype.toString = function()
{
	return "AbCredentials";
}
// JavaScript Document

var AbCreditCard = function()
{
}

// Card Details
AbCreditCard.prototype._PK = new Number( -1 );
AbCreditCard.prototype._Card = new String;
AbCreditCard.prototype._CardNumber = new String;
AbCreditCard.prototype._CardSecurity = new String;
AbCreditCard.prototype._CardValidity = new Date;

// Card Holder Details
AbCreditCard.prototype._FirstName = new String;
AbCreditCard.prototype._LastName = new String;
AbCreditCard.prototype._Address = new String;
AbCreditCard.prototype._Post = new String;
AbCreditCard.prototype._City = new String;
AbCreditCard.prototype._Country = new String;

AbCreditCard.prototype.toString = function()
{
	return "AbCreditCard";
}

AbCreditCard.fields = new Object;
AbCreditCard.fieldsList = new String("txt_card,txt_number,txt_security_code,lng_card_month,lng_card_year,txt_card_name,txt_card_surname,txt_card_address,txt_card_post,txt_card_city,txt_card_country,f_default");
AbCreditCard._missingField = false;
AbCreditCard._init = false;

AbCreditCard.init = function()
{
	fieldsList = AbCreditCard.fieldsList.split(",");
	
	for( cc_key in fieldsList )
	{
		var value = new String( fieldsList[ cc_key ] );
		
		var newElem = document.getElementById( value );
		
		if( newElem )
		{
			AbCreditCard.fields[ value ] = newElem;
		}
		else
		{
			AbCreditCard._missingField = true;
			trace( AbStringUtil( "AbCreditCard Missing Element: ", value ), AbDebug.LOG_WARN, AbDebug.INFO_APPLICATION );
		}
	}
	
	AbCreditCard._init = true;
}

AbCreditCard.saveForm = function()
{
	if( !AbCreditCard._init )
		AbCreditCard.init();

	if( AbCreditCard._missingField )
	{
		trace( AbStringUtil( "AbCreditCard.save Missing Fields" ), AbDebug.LOG_WARN, AbDebug.INFO_APPLICATION );
		return;
	}

	var fields = AbCreditCard.fields;
	
	var xmlc = new AbXmlHttp();
	var ccUrl = "/ajax/profile_creditcard.cfm";
	var strUrl = "";
	
	for( keys in fields )
	{
		if( fields[ keys ].nodeName.toLowerCase() == "input" )
		{
			switch( fields[ keys ].type )
			{
				case "checkbox":
					if( fields[ keys ].checked == true )
					{
						strUrl = AbStringUtil( strUrl, "&", keys, "=", fields[ keys ].value );
					}
					break;
				case "radio":
					if( fields[ keys ].checked == true)
					{
						strUrl = AbStringUtil( strUrl, "&", keys, "=", fields[ keys ].value );
					}
					break;
				default:
					strUrl = AbStringUtil( strUrl, "&", keys, "=", fields[ keys ].value );
					break;
			}
		}
		else
		{
			strUrl = AbStringUtil( strUrl, "&", keys, "=", fields[ keys ].value );
		}
	}
	
	xmlc.connect( ccUrl, "POST", strUrl, AbCreditCard._opAjaxAdd );
}

AbCreditCard.remove = function() // Nevem ��e.
{
}

AbCreditCard._opAjaxAdd = function( xml, p1, p2, p3 )
{
	alert( "Dodajanje..." );
}

AbCreditCard._opAjaxRemove = function( xml, p1, p2, p3 )
{
}

AbCreditCard.flagChange = function()
{
	var areaCC = document.getElementById('areaCC');
	var flag = document.getElementById('f_cc');
	
	if( !areaCC )
		return;
		
	areaCC.style.display = ( flag.checked ? ( AbBrowser.isIE() ? 'block' : 'table-row-group' ) : 'none');
}
// JavaScript Document

var AbCurrency = function ( )
{
	
}

AbCurrency.prototype.Currency = new String;
AbCurrency.prototype.ExchangeRate = new Number(0.0000);

AbCurrency.prototype.toString = function ( )
{
	return "AbCurrency";	
}
// JavaScript Document

var AbCurrencySet = function ( )
{
	
}

AbCurrencySet.prototype._ResultSet = new Array;

AbCurrencySet.prototype._addResult = function ( struct )
{
	if ( struct == "AbCurrency" )
		this._ResultSet.push( struct ); 
}

AbCurrencySet.prototype.getResults = function ( )
{
	for ( i = 0; i < exchng_rate.length; i++ )
	{
		var struct = new AbCurrency;
		
		struct.Currency = exchng_currency[i].toString();
		struct.ExchangeRate = exchng_rate[i];
		
		AbSearchEngine._Exchange._addResult( struct );

	}
	

}
Date.prototype.toString = function()
{
	var format = AbDate.getDateFormat();
	var separator = AbDate.getDateSeparator();
	var outputString = "";
	var flen = format.length;
	var date_iter;
	
	for( date_iter = 0; date_iter < format.length; date_iter++ )
	{
		var newValue;
		
		switch( format.charAt( date_iter ) )
		{
			case 'd':
				newValue = this.getDate();
				break;
			case 'm':
				newValue = ( this.getMonth() + 1 );
				break;
			case 'y':
				newValue = this.getFullYear();
				break;
			default:
				break;
		}
		
		if( date_iter != (flen - 1) )
		{
			outputString = AbStringUtil( outputString, newValue, separator );
		}
		else
		{
			outputString = AbStringUtil( outputString, newValue );
		}
	}

	return outputString;
}

var AbDate = function()
{
	AbDate.Init();
}

// Notranji datotecni elementi
AbDate.DATE_FROM = null;
AbDate.DATE_TO = null;
AbDate.DAYS_LENGTH = new Number( 0 );
AbDate._Lock = new Array( false, false );
AbDate._Init = false;
AbDate._fields = new String( "dat_from,dat_to,lng_days,departureDate,arrivalDate" );
AbDate._keys = new String( "ELEMENT_FROM,ELEMENT_TO,ELEMENT_LENGTH,ELEMENT_FROM_LABEL,ELEMENT_TO_LABEL" );
AbDate._error = false;
AbDate._dateFormat = new String( 'dmy' ); // Future
AbDate._dateSeparator = new String( '.' ); // -||-
AbDate._dateDiff = new Number( 3 );
AbDate._lastAccess = null;
AbDate._lastDates = null;
AbDate._elements = new Object;

// Bliznjice do elementov na prvi strani (DOM)
AbDate.ELEMENT_FROM = null;
AbDate.ELEMENT_TO = null;
AbDate.ELEMENT_LENGTH = null;
AbDate.ELEMENT_TO_LABEL = null;
AbDate.ELEMENT_FROM_LABEL = null;

AbDate.Init = function()
{
	if( AbDate._Init )
		return;
	else
		AbDate._Init = true;

	var fields = AbDate._fields.split(",");
	var keys = AbDate._keys.split(",");
	
	for( var kkk_iter = 0; kkk_iter < fields.length; kkk_iter++ )
	{
		var key = fields[kkk_iter];
		trace( AbStringUtil( key ) );
		var newElement = $( key );
			
		if( newElement )
		{
			if( kkk_iter == 2 )
			{
				newElement.onchange = AbDate._updateDay;
			}
			else if( kkk_iter == 3 || kkk_iter == 4 )
			{
			}
			else
			{
				newElement.onchange = AbDate._update;
				newElement.onfocus = AbDate.updateCurrentDatesHistory;
			}
			
			AbDate[ keys[ kkk_iter ] ] = newElement;
			AbDate._elements[ keys[ kkk_iter ] ] = newElement;
		}
		else
		{
			if( key.toLowerCase() != "lng_days" )
			{
				trace( AbStringUtil( "AbDate.Init ", key, " Not found" ), AbDebug.LOG_WARN, AbDebug.INFO_APPLICATION );
				AbDate._error = true;
			}
		}
	}
	
	if( AbDate.ELEMENT_FROM && AbDate.ELEMENT_TO )
	{
		AbDate._lastAccess = AbDate.ELEMENT_FROM.value;	
		AbDate.DATE_FROM = AbDate.parseDate( AbDate.ELEMENT_FROM.value, 1 );
		AbDate.DATE_TO = AbDate.parseDate( AbDate.ELEMENT_TO.value, 2 );
		AbDate._update();
	}
}

AbDate.populize = function()
{
	if( !AbDate._Init )
	{
		AbDate.Init();
	}
		
	if( AbDate._error )
	{
		trace( "AbDate._error Missing atleast one field of Dates", AbDebug.LOG_WARN, AbDebug.INFO_APPLICATION );
		return false;
	}
	
	AbDate.DATE_FROM = AbDate.parseDate( AbDate.ELEMENT_FROM.value, 1 );
	AbDate.DATE_TO = AbDate.parseDate( AbDate.ELEMENT_TO.value, 2 );
	
	AbDate.DAYS_LENGTH = AbDate.calculateDays();
	
	return true;
}

AbDate.getDates = function()
{
	if( AbDate.populize() )
	{
		AbDate.setDaysElement( AbDate.calculateDays() );
	}
	return new Array( AbDate.DATE_FROM, AbDate.DATE_TO );
}

AbDate._update = function( p_event, p_element )
{
	AbDate._Lock[ 0 ] = true;
	
	if( p_element )
	{
		AbDate._lastAccess = p_element;
	}
	else
	{
		var src = AbBrowser.sourceEvent( p_event );
		
		if( src )
		{
			AbDate._lastAccess = src;
		}
		else
		{
			AbDate._lastAccess = AbDate.ELEMENT_FROM;
		}
	}

	if( !AbDate._Lock[ 1 ] & AbDate.populize() ) // Bremzamo ciklanje updatov (Event) ? & je zadosti za bit operacije && je za vse
	{
		var From = AbDate.DATE_FROM;
		var To = AbDate.DATE_TO;
		
		var len = AbDate.calculateDays();		
		//var len_max = AbDate.ELEMENT_LENGTH.options.length;
		
		var today = new Date;
		
		if( today > From )
		{
			From = new Date( (new Date()).getTime() );
			From.setDate( From.getDate() + parseInt( 1, 10 ) );
		}
		
		if( From > To )
		{
			if( "dat_from" == AbDate._lastAccess.name.toLowerCase() ) // isSameNode ne dela v IE
			{
				var d_num = AbDate.calculateCurrentDays();
				
				To.setTime( From.getTime() );
				To.setDate( To.getDate() + parseInt( d_num, 10 ) );
			}
			else
			{
				if( To < today )
				{
					alert( AbMsg['ERROR_PAST_DATE'] );//alert( "Sporocilo, da je nemogo��e izbrati v preteklost" );
					To.setTime( AbDate._lastDates[ 1 ].getTime() );
				}
				else
				{
					var d_num = AbDate.calculateCurrentDays();
					From.setTime( To.getTime() );
					From.setDate( From.getDate() - parseInt( d_num, 10 ) );
				}
			}
		}
		// FROM
		AbDate.ELEMENT_FROM_LABEL.innerHTML = AbDay.getDayByNumber( From.getDay() );
		AbDate.setTextField( AbDate.ELEMENT_FROM, From.toString() );
		
		// TO
		AbDate.ELEMENT_TO_LABEL.innerHTML = AbDay.getDayByNumber( To.getDay() );
		AbDate.setTextField( AbDate.ELEMENT_TO, To.toString() );
		
		AbDate.setDaysElement( len );
	}
	else
	{
		trace( AbStringUtil("AbDate._update failed"), AbDebug.LOG_WARN, AbDebug.INFO_APPLICATION );
	}
	
	AbDate._Lock[ 0 ] = false;
}

AbDate._updateDay = function()
{
	AbDate._Lock[ 1 ] = true;
	
	if( !AbDate._Lock[ 0 ] & AbDate.populize() ) // Bremzamo ciklanje updateov (Event)
	{
		var From = AbDate.DATE_FROM;
		var Length = AbDate.ELEMENT_LENGTH.options[AbDate.ELEMENT_LENGTH.options.selectedIndex].value;
		
		if( Length > 0 )
		{
			var To = new Date( From.getTime() );
			To.setDate( new Number( From.getDate() ) + new Number( Length ) );
			
			AbDate.ELEMENT_TO_LABEL.innerHTML = AbDay.getDayByNumber( To.getDay() );			
			AbDate.setTextField( AbDate.ELEMENT_TO, To.toString() );
		}
	}
	else
	{
		trace( AbStringUtil("AbDate._updateDay failed"), AbDebug.LOG_WARN, AbDebug.INFO_APPLICATION );
	}
	
	AbDate._Lock[ 1 ] = false;
}

AbDate.setDaysElement = function( p_value )
{
	var setElement = AbDate.ELEMENT_LENGTH;
	
	if( setElement && setElement.options )
	{
		for( var day_iter = 0; day_iter < setElement.options.length; day_iter++ )
		{
			if( setElement.options[ day_iter ].value == p_value )
			{
				setElement.options.selectedIndex = day_iter;
				break;
			}
		}
	}
}

AbDate.checkDates = function()
{
	AbDate.populize();
	var now = new Date;
	var dates = AbDate.getDates();
	
	if( dates[ 0 ] <= now )
	{
		alert( AbMsg['ERROR_PAST_DATE'] );
		return false;
	}
	
	if( dates[ 1 ] <= dates[ 0 ] )
	{
		alert( AbMsg['ERROR_CHECKOUT_BEFORE_CHECKIN'] );
		return false;
	}
	
	return true;
}

AbDate.calculateDays = function()
{
	var number = ( AbDate.DATE_TO.getTime() - AbDate.DATE_FROM.getTime() );
	number /= 1000;
	number /= 60;
	number /= 60;
	number /= 24;
	
	return new Number( Math.round( number ) );
}

AbDate.calculateCurrentDays = function()
{
	var number = (AbDate._lastDates[1] - AbDate._lastDates[0]);
	number /= 1000;
	number /= 60;
	number /= 60;
	number /= 24;
	
	return new Number( Math.ceil( number ) );
}

AbDate.setTextField = function( p_elem, p_value )
{
	p_elem.value = p_value;
}

AbDate.getDateFormat = function()
{
	return AbDate._dateFormat;
}

AbDate.getDateSeparator = function()
{
	return AbDate._dateSeparator;
}

AbDate.parseDate = function( p_string, p_which )
{
	var format = AbDate.getDateFormat();
	var newValue = p_string.split( AbDate.getDateSeparator() );
	var day, month, year;
	var parse_iter = 0;
	var errors_found = false;
	
	for( parse_iter = 0; parse_iter < p_string.length; parse_iter++ )
	{
		switch( format.charAt( parse_iter ) )
		{
			case 'd':
				day = new Number( newValue[ parse_iter ] );
				if( isNaN( day ) )
					errors_found = true;
				break;
			case 'm':
				month = new Number( newValue[ parse_iter ] );
				if( isNaN( month ) )
					errors_found = true;
				break;
			case 'y':
				year = new Number( newValue[ parse_iter ] );
				if( isNaN( year ) )
					errors_found = true;
				break;
			default:
				break;
		}
	}
	
	if( errors_found && p_which )
		return AbDate._lastDates[ p_which - 1 ];
	
	var newDate = new Date( year, month - 1, day );	

	return newDate;
}

AbDate.formatDateString = function( p_number )
{
	return p_number < 10 ? AbStringUtil( "0", p_number ) : p_number;
}

AbDate.updateCurrentDatesHistory = function()
{
	AbDate._lastDates = new Array( AbDate.parseDate( AbDate.ELEMENT_FROM.value, 1 ), AbDate.parseDate( AbDate.ELEMENT_TO.value, 2 ) );
}

AbDate.parseSOAPDate = function( p_date_string )
{
	if( typeof(p_date_string) != "string" )
		return null;
	
	var p_date = p_date_string.split( "T" );
	var date = p_date[ 0 ].split( "-" );
	var p_time = p_date[ 1 ].split( "+" );
	var time = p_time[ 0 ].split( ":" );
	return new Date( date[ 0 ], (date[ 1 ]-1), date[ 2 ], time[ 0 ], time[ 1 ], time[ 2 ] );
}

// JavaScript Document

var AbInitItem = function( p_func, p_new )
{
	this.pFunc = p_func;
	this.fNew = p_new;
}

AbInitItem.prototype.pFunc = null;
AbInitItem.prototype.fNew = false;

AbInitItem.prototype.toString = function()
{
	return "AbInitItem";
}

var AbInit = function()
{
}

AbInit._Events = new Array;
AbInit._ReturnedValues = new Array;

AbInit.addEvent = function( p_func, p_new )
{
	if( p_func == "AbInitItem" )
	{
		AbInit._Events.push( p_func );
	}
	else
	{
		AbInit._Events.push( new AbInitItem( p_func, (p_new ? true : false) ) );
	}
}

AbInit._invoke = function()
{
	trace( AbStringUtil("AbInit._invoke"), AbDebug.LOG_INFO, AbDebug.INFO_APPLICATION );
	
	var ev = this._Events.reverse(); // FIFO v LIFO s pop metodo
	
	while( ev.length )
	{
		var init = ev.pop();
		
		if( init.pFunc && init.fNew )
		{
			AbInit._ReturnedValues.push( new init.pFunc() );
		}
		else if( init.pFunc )
		{
			AbInit._ReturnedValues.push( init.pFunc() );
		}
		else
		{
			trace( AbStringUtil("No function defined."), AbDebug.LOG_WARN, AbDebug.INFO_APPLICATION );
		}
	}
}
// JavaScript Document

var AbLanguage = function( p_id, p_lang, p_def )
{
	this.Id = p_id;
	this.Name = p_lang ? p_lang : null;
	this.Default = p_def ? p_def : false;
	
	if( !AbLanguage._Current || p_def )
	{
		AbLanguage._Current = this;
	}
}

AbLanguage.prototype.Id = null;
AbLanguage.prototype.Name = null;
AbLanguage.prototype.Default = false;

AbLanguage._Lang = new Array;
AbLanguage._Current = null;

AbLanguage.getCurrentLanguage = function()
{
	return AbLanguage._Current;
}
// JavaScript Document

var AbLoadingBar = function()
{
	
}

AbLoadingBar._Layer = null;
AbLoadingBar._x = 0;
AbLoadingBar._y = 0;

AbLoadingBar._off_x = 16;
AbLoadingBar._off_y = 16;

AbLoadingBar._image = document.createElement('img');
AbLoadingBar._image.src = "/images/ajax-loader.gif";
AbLoadingBar._image.width = "16";
AbLoadingBar._image.height= "16";
AbLoadingBar._image.border= "0";

AbLoadingBar.getLoadingLayer = function()
{
	if( !AbLoadingBar._Layer )
	{
		AbLoadingBar.LoadingImg = AbLoadingBar._image;
		
		var doc = document.createElement("div");
		doc.className = "SearchWaiting";
		doc.style.left = AbStringUtil( AbLoadingBar._x + AbLoadingBar._off_x, "px" );
		doc.style.top = AbStringUtil( AbLoadingBar._y + AbLoadingBar._off_y, "px" );
		doc.innerHTML = AbMsg['SEARCH_WAITING'];
		//doc.appendChild( AbLoadingBar.LoadingImg );
		AbLoadingBar._Layer = doc;
		AbLoadingBar.setVisibility( false );
		document.body.appendChild( AbLoadingBar._Layer );
	}
	
	return AbLoadingBar._Layer;
}

AbLoadingBar.setPosition = function( p_x, p_y )
{
	AbLoadingBar._x = p_x;
	AbLoadingBar._y = p_y;
	
	var x = AbLoadingBar.getLoadingLayer();
	x.style.left = AbStringUtil( p_x + AbLoadingBar._off_x, "px" );
	x.style.top = AbStringUtil( p_y + AbLoadingBar._off_y, "px" );
}

AbLoadingBar.setVisibility = function( p_bool )
{
	var x = AbLoadingBar.getLoadingLayer();
	x.style.display = p_bool ? "block" : "none";
	x.style.zIndex = 9999;
}

AbLoadingBar.prototype.toString = function()
{
	return "AbLoadingBar";
}
// JavaScript Document

var AbLogin = function()
{
}

AbLogin.sendRequest = function( p_cred )
{
	if( p_cred != "AbCredentials" )
	{
		trace( AbStringUtil("AbLogin.sendRequest Type Mismatch"), AbDebug.LOG_WARN, AbDebug.INFO_APPLICATION );
		return;
	}
		
	var xml = new AbXmlHttp();
	var u, p, t;
	
	u = p_cred.getUsername().value;
	p = p_cred.getPassword().value;
	t = "signin";
	
	var params = AbStringUtil(	"&txt_username=", u,
						  		"&txt_password=", p,
								"&signin=", t);
	
	xml.connect( "/ajax/signin.cfm","POST", params, AbLogin._process );
	
	return false;
}

AbLogin._process = function( xml, p1, p2, p3 )
{
	var rootNode;
	try
	{
		rootNode = xml.responseXML.firstChild;
	}
	catch( ex )
	{
		return;
	}
	
	var statusNode = rootNode.firstChild;
	
	while( statusNode.nodeType != 1 )
	{
		statusNode = statusNode.nextSibling;
		
		if( !statusNode )
			break;
	}
	
	switch( statusNode.nodeName )
	{
		case "success":
			AbLogin.onSuccess( statusNode );
			break;
		case "failure":
			AbLogin.onFailure( statusNode );
			break;
	}
}

AbLogin.sendRegisterRequest = function( p_form )
{
	var fields = p_form.elements;	
	var query = "&signin_type=2";
	
	for( ff = 0; ff < fields.length; ff++ )
	{
		var current = fields[ff];
		var key = "";
		var value = "";
		
		switch( current.type.toLowerCase() )
		{
			case "checkbox":
			{
				key = current.name;
				
				if( current.checked )
					value = "1";
			}
				break;
			default:
				key = current.name;
				value = current.value;
				break;
		}
		
		if( key )
			query = AbStringUtil( query, "&", key, "=", value );
	}
	
	var success = new AbXmlHttp();
	
	success.connect( "/include/signin.cfm", "POST", query, this.onLoad );
	
	return false;
}

AbLogin.refresh = function()
{
	AbLogin.onSuccess();
}

AbLogin.onSuccess = function( p_node ) // p_node je brezpredmeten tukaj
{
	window.location = window.location;
/*	AbPassengerList.TYPE = 2;
	var newXmlHttp = new AbXmlHttp();
	newXmlHttp.connect( "/include/profile.cfm", "GET", "&profile_type=2", AbLogin.onLoad );
	AbLogin.LoadLoginHead();*/
	
}

AbLogin.LoadLoginHead = function()
{
	var docHead = new AbXmlHttp();
	docHead.connect( "/include/headmain.cfm", "GET", "&profile_type=2", AbLogin.onLoadHead );
}

AbLogin.onFailure = function( p_node )
{
	alert( AbMsg['LOGIN_ERROR'] ); // TODO
}

AbLogin.onLoad = function( xml, p1, p2, p3 )
{
	var doc = document.getElementById('RezervacijaLoginOkno');	
	if( doc )
		doc.innerHTML = xml.responseText;
		
	if( general_ol )
		general_ol();
}

AbLogin.onLoadHead = function( xml )
{
	var doc = document.getElementById('PrijavnoOkno');
	
	if( doc )
		doc.innerHTML = xml.responseText;
}
// JavaScript Document

Number.prototype.toMoney = function()
{
	var amount = new Number( this );
	
	amount = new String( amount.toFixed(2) ); // Pretvorim ��tevilo v string
	
	var delimiter = "."; // separator za tiso��
	
	var a = amount.split('.',2);
	
	var d = a[1];
	
	if(isNaN(d)) d='00';
	
	var i = parseInt(a[0], 10);
	
	if( isNaN(i) ) 
	{ 
		return ''; 
	}
	
	var minus = '';
	
	if(i < 0) 
	{ 
		minus = '-'; 
	}
	
	i = Math.abs(i);
	
	var n = new String(i);
	
	var a = [];
	
	while(n.length > 3)
	{
		var nn = n.substr(n.length-3);
		a.unshift(nn);
		n = n.substr(0,n.length-3);
	}
	
	if(n.length > 0) 
	{ 
		a.unshift(n); 
	}
	
	n = a.join(delimiter);
	
	//if(d.length < 1) { amount = n; }
	
	amount = n + ',' + d; 
	
	amount = minus + amount;
	
	return amount;
}
// JavaScript Document

var AbParam = function( key, value )
{
	this._Key = key;
	this._Value = value;
}

AbParam.prototype._Key = null;
AbParam.prototype._Value = null;

AbParam.prototype.toString = function()
{
	return "AbParam";
}
// JavaScript Document

var AbPassenger = function( p_name, p_surname, p_birthday, p_pk, p_type )
{
	this.SeqId = AbPassenger.NextId++;
	this.firstname = p_name;
	this.lastname = p_surname;
	this.birthday = p_birthday;
	this.type = p_type ? p_type : 1;
	this.pId = p_pk;
}

AbPassenger.NextId = 1;
AbPassenger.prototype.SeqId = null;
AbPassenger.prototype.firstname = null;
AbPassenger.prototype.lastname = null;
AbPassenger.prototype.birthday = null;
AbPassenger.prototype.isDummy = false;
AbPassenger.prototype.type = null;
AbPassenger.prototype.pId = null;

AbPassenger.prototype.toString = function()
{
	return (this.SeqId);
}

AbPassenger.prototype.toType = function()
{
	return "AbPassenger";
}

AbPassenger.prototype.toPK = function()
{
	return (this.pId);
}

AbPassenger.prototype.isChild = function()
{
	var danes = new Date();
	
	var starost = (danes - this.birthday)/(1000*60*60*24*365.25);
	
	if (starost < AbSearchEngine.CHILD_AGE_LIMIT)
	{
		return true;
	}
	else
	{
		return false;
	}
}
var AbPassengerList = function(roomNumber)
{
	if( !this._Init )
	{
		// Dodamo reference do DOM elemetov HTMLja
		this.FIELD_PKEYI = document.getElementById('lng_user_traveler_pkeyi' + roomNumber);
		this.FIELD_NAME = document.getElementById(AbStringUtil('txt_potnik_ime', roomNumber) );
		this.FIELD_SURNAME = document.getElementById(AbStringUtil('txt_potnik_priimek', roomNumber) );
		this.FIELD_DAY = document.getElementById('lng_day' + roomNumber);
		this.FIELD_MONTH = document.getElementById('lng_month' + roomNumber);
		this.FIELD_YEAR = document.getElementById('lng_year' + roomNumber);
		this.BUTTON_ADD = document.getElementById('traveler_add' + roomNumber);
		// Dodamo trigger za dodajanje.
		if( this.BUTTON_ADD )
		{
			this.BUTTON_ADD.onclick = this._opAdd;
			this._Init = true;
		}
		this._List = new Array();
		this.roomNumber = roomNumber;
	}
}

// Dodamo najvec 10 potnikov
AbPassengerList.prototype.MAX_TRAVELERS = 6;
AbPassengerList.prototype.MAX_ADULT = 3;
AbPassengerList.prototype.MAX_CHILDREN = 3;
// Sistemska polja
AbPassengerList.prototype.roomBumber = 1;
AbPassengerList.prototype._Init = false;
AbPassengerList.prototype.FIELD_NAME = null;
AbPassengerList.prototype.FIELD_SURNAME = null;
AbPassengerList.prototype.FIELD_DAY = null;
AbPassengerList.prototype.FIELD_MONTH = null;
AbPassengerList.prototype.FIELD_YEAR = null;
AbPassengerList.prototype.FIELD_PKEYI = null;
AbPassengerList.prototype.BUTTON_ADD = null;

// Tip, sinhroniziramo z Rezervacijo ali Profilom?
AbPassengerList.TYPE = 1;

// Seznam potnikov 
AbPassengerList.prototype._List = new Array();

AbPassengerList.prototype.Init = function(roomNumber)
{
}

AbPassengerList.setType = function( p_value )
{
	AbPassengerList.TYPE = p_value ? p_value : 1;
}

AbPassengerList.prototype.addPassenger = function( p_traveler )
{
	if( p_traveler.toType() == "AbPassenger" )
		this._List.push( p_traveler );
	else
		trace("AbPassengerList.addPassenger Type Mismatch", AbDebug.LOG_WARN, AbDebug.INFO_APPLICATION );
}

AbPassengerList.prototype.removePassenger = function ( p_traveler )
{
	var localList = this._List;
	for( i=0; i < localList.length; i++ )
	{
		if( localList[i] == p_traveler )
		{
			this._List.splice(i, 1);
		}
	}
}

AbPassengerList.prototype._opAdd = function( e )
{
	//this.Init();
	var source = AbBrowser.sourceEvent( e );
	//this je kazalec na gumb Dodaj in ne objekt AbPassengerList
	var objekt = eval(AbStringUtil("window.Room", this.id.replace(/traveler_add/gi, ""), "Passengers"));
	var pcount = objekt.getOldness();
	var _traveler;
	//validacija obv. vnosa
	/*if (AbPassengerList.FIELD_NAME.value == "")
	{
		alert("Vnesite ime potnika!");
		return;
	}
	else if (AbPassengerList.FIELD_SURNAME.value == "")
	{
		alert("Vnesite priimek potnika!");
		return;
	}*/
	if( source )
	{
		_traveler = new AbPassenger( objekt.FIELD_NAME.value, objekt.FIELD_SURNAME.value, new Date(objekt.FIELD_YEAR.value, parseInt(objekt.FIELD_MONTH.value-1, 10), objekt.FIELD_DAY.value), objekt.FIELD_PKEYI.value);
		
		if( _traveler.isChild() )
			pcount.children++;
		else
			pcount.adults++;
		// Validacija vnosov
		if (objekt.FIELD_NAME.value == "")
		{
			alert (AbMsg['PROFILE_NO_NAME']);
			return;
		}
		else if (objekt.FIELD_SURNAME.value == "")
		{
			alert (AbMsg['PROFILE_NO_SURENAME']);
			return;
		}
		else if (objekt.FIELD_YEAR.value <= 1900)
		{
			alert (AbMsg['PROFILE_WRONG_DATE']);
			return;
		}
		// Sinhronizacija z iskanjem
		if( pcount.adults > objekt.MAX_ADULT )
		{
			alert( AbMsg['PROFILE_MAX_ADULT'] );
			return;
		}
		
		if( pcount.children > objekt.MAX_CHILDREN )
		{
			alert( AbMsg['PROFILE_MAX_CHILDREN'] );
			return;
		}
		// Sinhronizacija z iskanjem
		
		//AbPassengerList._save( _traveler, row );
		
		objekt.FIELD_PKEYI.value = "";
		objekt.FIELD_NAME.value = "";
		objekt.FIELD_SURNAME.value = "";
		objekt.FIELD_NAME.focus();
	}
	else
	{
		if( objekt._ajaxList.length > 0 )
		{
			_traveler = objekt._ajaxList.shift();
		}		
	}
	
	if( objekt._List.length >= objekt.MAX_TRAVELERS ) // To treba menjati
	{
		alert( AbStringUtil( AbMsg['PROFILE_TOO_MUCH'], " ", objekt.MAX_TRAVELERS , " " , AbMsg['PROFILE_PASSENGERS'] ) );
		return;
	}
	
	
		
	var ev = objekt.BUTTON_ADD;
 	var row = ev || source; // ��e ne obstaja dodaj, preverimo dodaj tipko / za vsak slucaj
	
	if( !row )
		return;
	
	while( row && row.nodeName != 'TR' )
	{
		row = row.parentNode;
	}
		
	objekt.addPassenger( _traveler ); // Fizicno dodamo v Array potnika :)
	
	var newRow = document.createElement('tr');
	
	td1 = document.createElement('td');
	td1.appendChild( document.createTextNode( _traveler.firstname ) ); // Simple izpis
	td2 = document.createElement('td');
	td2.appendChild( document.createTextNode( _traveler.lastname ) ); // Simple izpis
	td3 = document.createElement('td');
	td3.appendChild( document.createTextNode( _traveler.birthday ) ); // Simple izpis
	td4 = document.createElement('td');
	
	// gumb Odstrani
	var input = document.createElement('input');
	input.type = 'button';
	input.id = AbStringUtil("traveler_remove", this.id.replace(/traveler_add/gi, ""));
	input.onclick = objekt._opRemove;
	input.value = AbMsg['PROFILE_PASSENGER_REMOVE'];
	input.data = _traveler;
	input.style.width = '50px';
	
	td4.appendChild( input );
	
	newRow.align = 'Left';
	newRow.appendChild( td1 );
	newRow.appendChild( td2 );
	newRow.appendChild( td3 );
	newRow.appendChild( td4 );
	
	row.parentNode.appendChild( newRow );
}

AbPassengerList.prototype._opRemove = function( e )
{
	var ev = AbBrowser.sourceEvent( e );
	//var delXml = new AbXmlHttp( null, ev );
	//var urlBuild = AbStringUtil( "id=", ev.data.toPK(), "&type=", AbPassengerList.TYPE )
	//delXml.connect( "/ajax/profile_traveler_delete.cfm", "POST", urlBuild, AbPassengerList._delete );
	//this je kazalec na gumb Odstrani in ne objekt AbPassengerList
	var objekt = eval(AbStringUtil("window.Room", this.id.replace(/traveler_remove/gi, ""), "Passengers"));
	objekt._delete( null, null, ev, null );
}

AbPassengerList._opProfileProc = function( p_element )
{
	var root = p_element.childNodes;
	
	for( var xml_iter = 0; xml_iter < root.length; xml_iter++ )
	{
		if( root[ xml_iter ].nodeType == 1 )
		{
			var proc_element = root[ xml_iter ];
			var parent = proc_element.childNodes;
			
			var name, surname, birthday, pk;
			
			pk = root[ xml_iter ].getAttribute('pk');
			
			for( var pas_iter = 0; pas_iter < parent.length; pas_iter++ )
			{
				if( parent[ pas_iter ].nodeType == 1 )
				{
					var node = parent[ pas_iter ];
					switch( node.nodeName )
					{
						case 'name':
							name = node.firstChild.nodeValue;
							break;
						case 'surname':
							surname = node.firstChild.nodeValue;
							break;
						case 'birthday':
							birthday = node.firstChild.nodeValue;
							break;
						default:
							break;
					}
				}
			}
			
			var dates = birthday.split(".");
					
			var newTraveler = new AbPassenger( name, surname, new Date(parseInt(dates[2], 10), (parseInt(dates[1], 10)-1), parseInt(dates[0],10) ), pk );
			AbPassengerList._ajaxList.push( newTraveler );
			AbPassengerList._opAdd(); // Kon��no dodamo potnika
		}
	}
}

AbPassengerList.prototype.toString = function()
{
	var newArray = this._List;
	return new String(newArray);
}

AbPassengerList.prototype.getNumberOfTravelers = function()
{
	return this._List.length;
}

// JavaScript Document

AbPassengerList.prototype._ajaxList = new Array; // Shranimo tukaj informacije, in nato poklicemo _opAdd

AbPassengerList._submitForm = function( ev )
{
	var name_array = new Array;
	var last_array = new Array;
	var birthday_array = new Array;
	var pk_array = new Array;
	
	var source = AbBrowser.sourceEvent( ev );
	
	var city = source['lkp_city_fkeyi_ref'].value;
	var cityName = source['txt_full_name'].value.replace(/^\s*|\s*$/g,"");
	if( city.length == 0 )
	{
		if (cityName.length == 0)
		{
			alert( AbMsg['ERROR_MISSING_CITY'] + "!" );
			return false;
		}
		else
		{
			source['txt_full_name'].focus();
			document.getElementById('city_error').innerHTML = AbMsg['DROPDOWN_CITY'];
			return false;
		}
	}
	
	
	if( !AbDate.checkDates() )
		return false;
	/*
	for( var pl_iter = 0; pl_iter < this._List.length; pl_iter++ )
	{
		name_array.push( this._List[ pl_iter ].firstname );
		last_array.push( this._List[ pl_iter ].lastname );
		birthday_array.push( new String( this._List[ pl_iter ].birthday ) );
		pk_array.push( this._List[ pl_iter ].toPK() );
	}
	
	var field = { name: name_array, lastname: last_array, birthday: birthday_array, pk: pk_array };
	
	for ( key in field )
	{
		var inputfield = document.createElement('input');
		inputfield.value = AbStringUtil( field[ key ] );
		inputfield.type = 'hidden';
		inputfield.name = AbStringUtil("passenger_", new String(key));
		source.appendChild( inputfield );
	}
	*/
	return true;
}

AbPassengerList.prototype._save = function( p_traveler, p_data )
{
	if( p_traveler.toType() != "AbPassenger" )
	{
		trace( AbStringUtil("AbPassengerList._save Type Mismatch"), AbDebug.LOG_WARN, AbDebug.INFO_APPLICATION );
		return;
	}
	else if( AbPassengerList.TYPE == 0 )
	{
		trace( AbStringUtil("AbPassengerList._save We don't want to save"), AbDebug.LOG_INFO, AbDebug.INFO_APPLICATION );
		return;
	}
	
	var saveXml = new AbXmlHttp( p_data );
	
	var data = AbStringUtil(	"&txt_first_name=", new String( p_traveler.firstname ),
								"&txt_last_name=", new String( p_traveler.lastname ),
								"&dat_birthday=", new String( p_traveler.birthday ),
								"&type=", AbPassengerList.TYPE
							);
	
	saveXml.connect( "/ajax/profile_traveler_save.cfm", "POST", data, AbProfile._opAjaxProcStore );
}

AbPassengerList.prototype._delete = function( xml, ev1, ev2, ev3 )
{
	var row = ev2;
	var data = ev2.data;
	
	while( row.nodeName != 'TR' )
	{
		row = row.parentNode;
	}
	
	this.removePassenger( data );
	row.parentNode.removeChild( row );
}

AbPassengerList.prototype.getOldness = function()
{
	var count1 = 0, count2 = 0;
	var passengerList = this._List;
	
	for( key in passengerList )
	{
		if( passengerList[ key ].isChild() )
		{
			count1++;
		}
		else
		{
			count2++;
		}
	}
	return { adults: count2, children: count1 };
}

AbPassengerList.prototype.getMissingNumbers = function(roomName)
{
	var correct = false;
	var string = null;
	var pstruct = this.getOldness();
	
	var adults = this.MAX_ADULT - pstruct.adults;
	var children = this.MAX_CHILDREN - pstruct.children;
	
	if( adults == 0 && children == 0 )
		correct = true;
		
	if( !correct )
	{
		if (adults != 0)
			string = AbStringUtil("\n", AbMsg['PROFILE_YOUR_ADULTS'], " ", pstruct.adults, ", ", AbMsg['PROFILE_BUT_MUST_BE'], " ", this.MAX_ADULT, "! " );
		else
			string = "";
		if( this.MAX_CHILDREN > 0 )
		{
			string = AbStringUtil(string, "\n", AbMsg['PROFILE_YOUR_CHILDREN'], " ", pstruct.children, ", ", AbMsg['PROFILE_BUT_MUST_BE'], " ", this.MAX_CHILDREN, "!" );
		}
		string = AbStringUtil( AbMsg['PROFILE_CORRECT_PASSENGERS'], " ", this.roomNumber, " (", roomName, ")!", string );
	}
	
	return { isOK: correct, msg: string };
}
// JavaScript Document

var AbProfile = function()
{
}

AbProfile._opAjaxProc = function( xml )
{
	try
	{
		var root = xml.responseXML.firstChild;
		var next = root.firstChild;
	
		if( next.nodeName == 'nosession' )
		{
			return;
		}
			
		do
		{
			switch( next.nodeType )
			{
				case 1:
					{
						switch( next.nodeName )
						{
							case 'basic':
								break;
							case 'travelers':
								AbPassengerList._opProfileProc( next );
								break;
							case 'creditcards':
								break;
							default:
								break;
						}
					}
					break;
				default:
					break;
			}
			
			if( next.nextSibling )
			{
				next = next.nextSibling;
			}
			else
			{
				next = false;
			}
		} while( next );
	}
	catch( ex )
	{
		trace( "XML Not understood, missing nodes", AbDebug.LOG_WARN, AbDebug.INFO_PARSE );
	}
}

AbProfile._opAjaxProcStore = function( xml, p1, p2, p3 )
{
	//var row = p2;
}

AbProfile._opAjaxProcRemove = function( xml, p1, p2, p3 )
{
}

AbProfile.getRemoteData = function()
{
	var xmlData = new AbXmlHttp();
	var seed = new Date();
	var post = AbStringUtil( "profile_type=", AbPassengerList.TYPE, "&seed=", seed.getTime());
	xmlData.connect( "/ajax/profile_all.cfm", "GET", post, AbProfile._opAjaxProc );
	
	return false;
}

AbProfile.MENU = new Array;
AbProfile.ELEMENT = new Array;
AbProfile.ELEMENT_MENU = new Array;

AbProfile.MENU[ 0 ] = "SearchHistory";
AbProfile.MENU[ 1 ] = "Messages";
AbProfile.MENU[ 2 ] = "MyProfile";
AbProfile.MENU[ 3 ] = "Shopping";

AbProfile._Init = function()
{
	for( i=0; i < AbProfile.MENU.length; i++ )
	{
		AbProfile.ELEMENT[ i ] = document.getElementById( AbProfile.MENU[ i ] );
		AbProfile.ELEMENT_MENU[ i ] = document.getElementById( AbStringUtil( AbProfile.MENU[ i ], "Menu" ) );
	}
}

AbProfile._showMenu = function( p_num )
{
	AbProfile._Init();
	
	for( i=0; i < AbProfile.ELEMENT.length; i++ )
	{
		if( i == p_num )
		{
			if( AbProfile.ELEMENT[ i ] )
			{
				// AbProfile.ELEMENT_MENU[ i ].className = 'TypeTabSelect';
				AbProfile.ELEMENT[ i ].style.display = 'inline';
			}
		}
		else
		{
			if( AbProfile.ELEMENT[ i ] )
			{
				// AbProfile.ELEMENT_MENU[ i ].className = 'TypeTab';
				AbProfile.ELEMENT[ i ].style.display = 'none';
			}
		}
	}
}

AbProfile.FORM = null;
AbProfile.FORM_TYPE = 1; // Default -- Profile
AbProfile.FORM_METHOD = "POST";
AbProfile.FORM_URL = "/ajax/data_save.cfm";

AbProfile.P_NONE = 0;
AbProfile.P_NAME = 1;
AbProfile.P_ADDRESS = 2;
AbProfile.P_TELEPHONE = 4;
AbProfile.P_USERNAME = 8;
AbProfile.P_DEFAULT_DESTINATION = 16;
AbProfile.P_MAX_STARS = 32;

AbProfile.TXT_FIRST_NAME = "";
AbProfile.TXT_LAST_NAME = "";
AbProfile.TXT_ADDRESS = "";
AbProfile.LKP_POST_FKEYI_REF = "";
AbProfile.TXT_POST_PKEYC1 = "";
AbProfile.TXT_POST = "";
AbProfile.LKP_COUNTRY_FKEYI_REF = "";
AbProfile.TXT_COUNTRY = "";
AbProfile.TXT_PHONE = "";

AbProfile.InitForm = function()
{
	if( !AbProfile.FORM )
	{
		AbProfile.FORM = document.forms['profile'];
		
		if( AbProfile.FORM )
		{
			return true;
		}
		else
		{
			return false;
		}
	}
	else
	{
		return true;
	}
}

AbProfile.SaveEdit = function( p_type, p_where )
{
	if( !AbProfile.InitForm() )
	{
		trace( AbStringUtil( "AbProfile.SaveEdit Missing Form" ), AbDebug.LOG_ERROR, AbDebug.INFO_APPLICATION );
		return;
	}
		
	if( p_where == 2 )
	{
		AbProfile.FORM_TYPE = 2;
	}
		
	switch( p_type )
	{
		case AbProfile.P_NAME:
			AbProfile.SaveName();
			break;
		case AbProfile.P_ADDRESS:
			AbProfile.SaveAddress();
			break;
		case AbProfile.P_TELEPHONE:
			AbProfile.SaveTelephone();
			break;
		case AbProfile.P_USERNAME:
			AbProfile.SaveUsername();
			break;
		case AbProfile.P_DEFAULT_DESTINATION:
			AbProfile.SaveDefaultDestination();
			break;
		case AbProfile.P_MAX_STARS:
			AbProfile.SaveMaxStars();
			break;
		default:
			break;
	}
}

AbProfile.SaveEditCallback = function( xml, p1, p2, p3 )
{
	var action_success = false;
	var section = p2.section;
	var type = p2.type;
	
	var rootNode = xml.responseXML.firstChild;
	var nextNode = rootNode.firstChild;
	var textNode = new Array;
	var splitText = p2.comma ? p2.comma : " ";
	
	while( nextNode.nodeType != 1 )
	{
		nextNode = nextNode.nextSibling;
	}
	
	switch( nextNode.nodeName )
	{
		case "success":
		{
			var attrs = nextNode.attributes;
			var f_list = p2.fields;
						
			for( var attr_iter = 0; attr_iter < attrs.length; attr_iter++ )
			{
				if( AbProfile.checkAttribute( f_list, attrs[ attr_iter ].nodeName ) )
				{
					textNode.push( attrs[ attr_iter ].nodeValue );
				}
			}
			
			var gElement = document.getElementById( AbStringUtil( section, "_node" ) );
			
			if( gElement )
			{
				if( AbProfile.P_MAX_STARS != type )
				{
					var txtNode = "";
					for( var gel_iter = 0; gel_iter < textNode.length; gel_iter++ )
					{
						if( gel_iter != (textNode.length - 1) )
						{
							txtNode = AbStringUtil( txtNode, textNode[ gel_iter ], splitText );
						}
						else
						{
							txtNode = AbStringUtil( txtNode, textNode[ gel_iter ] );
						}
					}
				}
				else
				{
					var txtNode = "";
					
					if( textNode.length != 0 )
					{
						txtNode = AbStringUtil( "<img src=\"/images/zvezda", textNode[ 0 ], ".gif\">" );
					}
					
				}
				gElement.innerHTML = txtNode;
			}
			action_success = true;
		}
			break;
		case "failure":
		{
			trace( AbStringUtil( "Failure tag detected!" ), AbDebug.LOG_WARN, AbDebug.INFO_AJAX_RESPONSE );
			action_success = false;
		}
			break;
		default:
			break;
	}
	
	if( action_success )
		editsection_close( section );	
}

AbProfile.SaveName = function()
{
	var section = 'NameSurname';
	var fields = "txt_first_name,txt_last_name";
	AbProfile.TXT_FIRST_NAME = document.getElementById("txt_first_name").value;
	AbProfile.TXT_LAST_NAME = document.getElementById("txt_last_name").value;
	
 	if ( !document.getElementById("txt_first_name").value.length || !document.getElementById("txt_last_name").value.length )
	{
		alert (AbMsg['PROFILE_MISSING_FIELDS']);
	}
	else
	{
		var params = { section: section, fields: fields, type: AbProfile.P_NAME, comma: " " }; // Nastavitev
		
		var q = AbProfile.buildQuery( fields, AbProfile.FORM_TYPE );
		
		var xmlBasic = new AbXmlHttp( null, params );
		xmlBasic.connect( "/ajax/profile_traveler_basic.cfm", AbProfile.FORM_METHOD, q, AbProfile.SaveEditCallback );
	}
}

AbProfile.SaveAddress = function()
{
	var section = 'Address';
	var fields = "txt_address,txt_post_out,txt_country";
	var sfields = "txt_address,lkp_post_fkeyi_ref,lkp_country_fkeyi_ref,txt_post_pkeyc1,txt_post,txt_country";
	AbProfile.TXT_ADDRESS = document.getElementById("txt_address").value;
	AbProfile.LKP_POST_FKEYI_REF = document.getElementById("lkp_post_fkeyi_ref").value;
	AbProfile.TXT_POST_PKEYC1 = document.getElementById("txt_post_pkeyc1").value;
	AbProfile.TXT_POST = document.getElementById("txt_post").value;
	AbProfile.LKP_COUNTRY_FKEYI_REF = document.getElementById("lkp_country_fkeyi_ref").value;
	AbProfile.TXT_COUNTRY = document.getElementById("txt_country").value;

 	if ( !document.getElementById("txt_address").value.length || !document.getElementById("txt_post_pkeyc1").value.length || !document.getElementById("txt_country").value.length )
	{
		alert ( AbMsg['PROFILE_MISSING_FIELDS'] );
	}
	else
	{
		var params = { section: section, fields: fields, type: AbProfile.P_ADDRESS, comma: ", " };
		
		var q = AbProfile.buildQuery( sfields, AbProfile.FORM_TYPE );
		
		var xmlAddress = new AbXmlHttp( null, params );
		xmlAddress.connect( "/ajax/profile_traveler_address.cfm", AbProfile.FORM_METHOD, q, AbProfile.SaveEditCallback );
	}
}

AbProfile.SaveTelephone = function()
{
	var section = 'Telefon';
	var fields = "txt_phone";
	var sfields = "txt_phone";
	AbProfile.TXT_PHONE = document.getElementById("txt_phone").value;
	
	if ( !document.getElementById("txt_phone").value.length )
	{
		alert( AbMsg['PROFILE_MISSING_FIELDS'] );
	}
	else
	{
		var params = { section: section, fields: fields, type: AbProfile.P_TELEPHONE, comma: "" };
		
		var q = AbProfile.buildQuery( sfields, AbProfile.FORM_TYPE );
		
		var xmlPhone = new AbXmlHttp( null, params );
		xmlPhone.connect( "/ajax/profile_traveler_phone.cfm", AbProfile.FORM_METHOD, q, AbProfile.SaveEditCallback );
	}
}

AbProfile.SaveUsername = function()
{
	var section = 'Email';
	var fields = "txt_email";
	var sfields = "txt_old_password,txt_password,txt_password_r";
	var error = false;

	if ( !document.getElementById("txt_old_password").value.length || !document.getElementById("txt_password").value.length || !document.getElementById("txt_password_r").value.length )
	{
		error = true;
		alert ( AbMsg['PROFILE_MISSING_FIELDS'] );
	}
/*
	else if ( document.getElementById("txt_old_password").value != staro_geslo )
	{
		error = true;
		alert ( AbMsg['PROFILE_WRONG_PASSWORD'] );
	}
*/
	else if ( document.getElementById("txt_password").value != document.getElementById("txt_password_r").value )
	{
		error = true;
		alert ( AbMsg['PROFILE_PASSWORD_MISMATCH'] );
	}
	
	if( !error )
	{
		var params = { section: section, fields: fields, type: AbProfile.P_USERNAME, comma: "" };
	
		var q = AbProfile.buildQuery( sfields, AbProfile.FORM_TYPE );
	
		var xmlUsername = new AbXmlHttp( null, params );
		xmlUsername.connect( "/ajax/profile_traveler_email.cfm", AbProfile.FORM_METHOD, q, AbProfile.SaveEditCallback );
	}
}

AbProfile.SaveDefaultDestination = function()
{
	var section = 'Destination';
	var fields = "txt_full_name";
	var sfields = "lkp_city_fkeyi_ref,txt_full_name";

	var params = { section: section, fields: fields, type: AbProfile.P_DEFAULT_DESTINATION, comma: "" };
		
	var q = AbProfile.buildQuery( sfields, AbProfile.FORM_TYPE );
		
	var xmlDefDestination = new AbXmlHttp( null, params );
	xmlDefDestination.connect( "/ajax/profile_traveler_dest.cfm", AbProfile.FORM_METHOD, q, AbProfile.SaveEditCallback );
}

AbProfile.SaveMaxStars = function()
{
	var section = 'Stars';
	var fields = "lng_min_star";
	var sfields = "lng_min_star";
	
	var params = { section: section, fields: fields, type: AbProfile.P_MAX_STARS, comma: "" };
		
	var q = AbProfile.buildQuery( sfields, AbProfile.FORM_TYPE );
		
	var xmlStars = new AbXmlHttp( null, params );
	xmlStars.connect( "/ajax/profile_traveler_stars.cfm", AbProfile.FORM_METHOD, q, AbProfile.SaveEditCallback );
}

AbProfile.buildQuery = function( p_list, p_type )
{
	if( typeof( p_list ) != "string" )
		return null;
	
	var sstream = p_list.split(",");
	var squery = AbStringUtil( "type=", p_type );
	
	for( var string_iter = 0; string_iter < sstream.length; string_iter++ )
	{
		var currentItem  = sstream[ string_iter ];
		var currentValue = AbProfile.FORM[ currentItem ];
		
		if( currentValue )
		{
			squery = AbStringUtil( squery, "&", currentItem, "=", encodeURIComponent( currentValue.value ) );
		}
		else
		{
			trace( AbStringUtil( "AbProfile.buildQuery Missing ", currentItem ), AbDebug.LOG_WARN, AbDebug.INFO_APPLICATION );
		}
	}
	
	return squery;
}

AbProfile.checkAttribute = function( p_list, p_attribute )
{
	var attrs = p_list.split(",");
	
	for( var chk_iter = 0; chk_iter < attrs.length; chk_iter++ )
	{
		if( attrs[ chk_iter ] == p_attribute )
		{
			return true;
		}
	}
	return false;
}

AbProfile.emptyFields = function( p_list )
{
	var attrs = p_list.split(",");
	
	for( var epty_iter = 0; epty_iter < attrs.length; epty_iter++ )
	{
		var cItem = AbProfile.FORM[ epty_iter ];
		
		if( cItem && cItem.value )
		{
			cItem.value = "";
		}
	}
}
/*
	Nakupi
*/
AbProfile._openIds = new Array;

AbProfile.checkOpenReservation = function( p_id )
{
	var ids = AbProfile._openIds;
	for( oi_key in ids )
	{
		if( ids[ oi_key ] == p_id )
		{
			return oi_key;
		}
	}
	return -1; // neg = not found
}

AbProfile.removeKey = function( p_pos )
{
	if( AbProfile._openIds.splice( p_pos ) )
		return true;
	else
		return false;
}

AbProfile.getReservationBuy = function( ev, p_id )
{
	/*if( AbProfile.checkOpenReservation( p_id ) != -1 )
		return; // Already open*/
		
	var source = AbBrowser.sourceEvent( ev );

	if( !source )
		return; // nevemo kje so drugace
		
	var row = source;
	
	while( row && row.nodeName != 'TR' )
	{
		row = row.parentNode;
	}
	
	var BuyRes = new AbXmlHttp( p_id, row );
	var BuyUrl = AbStringUtil( "date=" , (new Date()).getTime(), "&reservation=", p_id );
	
	AbProfile._openIds.push( p_id );
	row.id = p_id;
	
	BuyRes.connect( "/ajax/profile_nakup.cfm", "POST", BuyUrl, AbProfile.getReservationBuyCallback);
}

AbProfile.getReservationBuyCallback = function( xml, p1, p2, p3 )
{
	var data = xml.responseText;
	var row = p2;
	var last_object = row;
	
	//AbProfile.closeAllOpenGrids( row );
	
	while( row )
	{
		row = row.nextSibling;
		if( row && row.nodeType == 1 )
		{
			last_object = row;
			break;
		}
	}
	
	var td = document.createElement('td');
	td.innerHTML = data;
	td.colSpan = p2.cells.length;
	var tr = document.createElement('tr');
	tr.className = 'GridOpen';
	tr.id = p1;
	tr.appendChild( td );
	
	if( row )
	{
		row.parentNode.insertBefore( tr, row ); // dodamo element
	}
	else
	{
		p2.parentNode.appendChild( tr );
	}
	
	p2.className = 'GridSelect';
}

AbProfile.closeAllOpenGrids = function( tr_element, p_id )
{
	var nodes = tr_element.parentNode.childNodes;
	
	for( var cl_iter = 0; cl_iter < nodes.length; cl_iter++ )
	{
		var nodeIter = nodes[ cl_iter ];
		
		if( nodeIter.nodeType == 1 )
		{
			switch( nodeIter.className )
			{
				case "GridOpen":
					if( !p_id )
					{
						nodeIter.parentNode.removeChild( nodeIter );
					}
					else if( nodeIter.id == p_id )
					{
						nodeIter.parentNode.removeChild( nodeIter );
					}
					break;
				case "GridSelect":
					nodeIter.className = "Grid";
					AbProfile.removeKey( nodeIter.id );
					break;
			}
		}
	}
}

AbProfile._checkBuy = function( ev )
{
	var source = AbBrowser.sourceEvent( ev );
	var el = document.getElementById('tbodyCC');
	
	if( source.checked && el )
	{
		el.style.display = AbBrowser.isIE() ? 'block' : 'table-row-group';
	}
	else if( !source.checked && el )
	{
		el.style.display = 'none';
	}
}

AbProfile.rbChanged = function (divNumber)
{
	//var sBuy = document.getElementById ("f_buy");
	//var sRes = document.getElementById ("f_res");
	var buyDiv = document.getElementById ("tbodyCC");
	var resDiv = document.getElementById ("tbResOnly");
	
	if(divNumber == 2)
	{
		buyDiv.style.display = AbBrowser.isIE() ? 'block' : 'table-row-group';
		resDiv.style.display = 'none';
	}
	else
	{
		buyDiv.style.display = 'none';
		resDiv.style.display = AbBrowser.isIE() ? 'block' : 'table-row-group';
	}
}

AbProfile.changeHistoryPage = function( p_page )
{
	var cHP = new AbXmlHttp( null, "StatSearchHistory" );
	cHP.connect( "/ajax/profile_zgodovina.cfm", "POST", AbStringUtil( "zgodovina_page=", p_page ), AbProfile._callbackStats );
}

AbProfile.changeReservationPage = function( p_page )
{
	var cRP = new AbXmlHttp( null, "StatReservationHistory" );
	cRP.connect( "/ajax/profile_enquire.cfm", "POST", AbStringUtil( "rezervacija_page=", p_page, "&isReservation=1" ), AbProfile._callbackStats );
}

AbProfile.changeEnquiryPage = function( p_page )
{
	var cEP = new AbXmlHttp( null, "StatEnquireHistory" );
	cEP.connect( "/ajax/profile_enquire.cfm", "POST", AbStringUtil( "rezervacija_page=", p_page, "&isReservation=0" ), AbProfile._callbackStats );
}

AbProfile._callbackStats = function( xml, p1, p2, p3 )
{
	var element = document.getElementById(p2);
	
	if( element )
	{
		element.innerHTML = xml.responseText;
	}
}

AbProfile.getReservationMore = function( ev, p_id )
{
	var source = AbBrowser.sourceEvent( ev );
	source.onclick = AbProfile.getReservationLess;
	source.innerHTML = AbStringUtil( "[", AbMsg['SEARCH_LESS'], "]" );
	AbProfile.getReservationBuy( ev, p_id );
}

AbProfile.getReservationLess = function( ev )
{
	var source = AbBrowser.sourceEvent( ev );
	var tr = source;
	
	while( tr.nodeName != 'TR' )
	{
		tr = tr.parentNode;
	}
	var source_id = tr.id;
	
	AbProfile.closeAllOpenGrids( tr, source_id );
	var aHref = AbProfile.createHyperLink( "javascript: void(0);", AbStringUtil( "AbProfile.getReservationMore( event, ", source_id, " );" ), AbStringUtil( "[" , AbMsg['SEARCH_MORE'], "]" ) );
	source.parentNode.innerHTML = aHref;	
}

AbProfile.createHyperLink = function( a, onclick, text )
{
	return AbStringUtil( "<a href=\"" , a, "\" onclick=\"" , onclick, "\">" , text, "</a>" );
}
// JavaScript Document

var AbProvider = function(p_id, p_name)
{
	this.Id = p_id;
	this.Name = p_name;
	
	AbProvider._List.push( this );
}

AbProvider.prototype.Id = null;
AbProvider.prototype.Name = null;
AbProvider._List = new Array;

AbProvider.prototype.toString = function()
{
	return "AbProvider";
}

AbProvider.toArray = function()
{
	return this._List;
}

AbProvider.getElement = function( p_id )
{
	var arr = AbProvider._List
	for( var prov_iter = 0; prov_iter < arr.length; prov_iter++ )
	{
		if( arr[ prov_iter ].Id == p_id )
		{
			return arr[ prov_iter ].Name;
		}
	}
	return null;
}
// JavaScript Document

var AbSlider = function()
{
	//TODO: Scrollbar bom doma naredo pa ju3 prilepim tu notri
}

AbSlider.Slider = null;
AbSlider.MouseOffset = null;

AbSlider.getObjectPosition = function (obj)
{
	var xOff = obj.offsetLeft;
	var yOff = obj.offsetTop;
	
	while (obj = obj.offsetParent)
	{
		xOff += obj.offsetLeft;
		yOff += obj.offsetTop;		
	}

	return {x:xOff, y:yOff};
}

AbSlider.Slide_validate = function(el, type, value)
{
	temp = el;
	while ((temp != null) && (temp.tagName != "BODY")) 
	{
		if (eval("temp." + type) == value) 
		{
			el = temp;
			return el;
		}
		temp = temp.parentNode;
	}
	return el;
}

AbSlider.Slide_onMouseDown = function(e)
{
	if (!e)
	{
		e = window.event;
		var tmp = AbSlider.Slide_validate(e.srcElement, "className", "AbSlider_Hand");
	}
	else
	{
		var tmp = AbSlider.Slide_validate(e.target, "className", "AbSlider_Hand");
	}
	if(tmp.className == "AbSlider_Hand") 
	{
		AbSlider.Slider = tmp;
		
//		MouseOffset = AbSlider.GetMouseOffset(AbSlider.Slider, e);
		AbSlider.MouseOffset = AbSlider.getObjectPosition (document.getElementById ("idAbSliderX"));
		
		if(e.returnValue){
			e.returnValue = false;
			e.cancelBubble = true;
		}
		if(e.preventDefault){
			e.preventDefault();
			e.stopPropagation();
		}	
	}
	else 
	{
		AbSlider.Slider = null;
	}	
}

AbSlider.Slide_onMouseUp = function()
{
	if(AbSlider.Slider) 
	{
		AbSearchSerializer.SlideCut( document.getElementById("horInfo").value );
		AbSlider.Slider = null;
	}
}

AbSlider.Slide_onMouseMove = function(e)
{
	if(!e)
	{
		e = window.event;
	}
	var mousePos = AbSlider.MouseCoords(e);

	if(AbSlider.Slider)
	{
		// parentNode.clientWidth zamenjan z offsetWidth.
		
		if ( ((mousePos.x - AbSlider.MouseOffset.x) >= 0) && (mousePos.x - AbSlider.MouseOffset.x <= AbSlider.Slider.parentNode.offsetWidth - AbSlider.Slider.offsetWidth) )
		{
			AbSlider.Slider.style.left = (mousePos.x - AbSlider.MouseOffset.x) + "px";
		}
		else if ( mousePos.x - AbSlider.MouseOffset.x < 0 )
		{
			AbSlider.Slider.style.left = "0px";
		}
		else if ( mousePos.x - AbSlider.MouseOffset.x > AbSlider.Slider.parentNode.clientWidth - AbSlider.Slider.offsetWidth - 0 )
		{
			AbSlider.Slider.style.left = (AbSlider.Slider.parentNode.offsetWidth - AbSlider.Slider.offsetWidth) + "px";
		}
		
		AbSlider.Slider.value = parseFloat(AbSlider.Slider.style.left) / (AbSlider.Slider.parentNode.offsetWidth - AbSlider.Slider.offsetWidth);
		document.getElementById('horInfo').value = 100*AbSlider.Slider.value;
		AbSearchSerializer.SlideInfo( 100*AbSlider.Slider.value );
		
		if(e.returnValue){
			e.returnValue = false;
			e.cancelBubble = true;
		}
		if(e.preventDefault){
			e.preventDefault();
			e.stopPropagation();
		}	
	}
	
	AbLoadingBar.setPosition( mousePos.x, mousePos.y );
}

AbSlider.MouseCoords = function(ev)
{
	if(ev.pageX)
	{
		return {x:ev.pageX, y:ev.pageY};
	}
	
	return {
		x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
		y:ev.clientY + document.body.scrollTop - document.body.clientTop
	};
}

AbSlider.GetMouseOffset = function (target, ev)
{
	ev = ev || window.event;

	var docPos    = AbSlider.GetPosition(target);
	var mousePos  = AbSlider.MouseCoords(ev);
	return {x:mousePos.x - docPos.x}
}

AbSlider.GetPosition = function (e)
{
	var left = (0 - 20);

	while (e.offsetParent)
	{
		left += e.offsetLeft;
		e     = e.offsetParent;
	}

	left += e.offsetLeft;

	return {x:left}
}
// JavaScript Document

var AbResult = function()
{
	this.SeqId = AbResult._nextId++;
}

// Statika
AbResult._nextId = 1;
// Minimalno deljeni.
AbResult.prototype.SeqId = null;
AbResult.prototype.SellType = null;
AbResult.prototype.Name = null;
AbResult.prototype.HotelId = null;
AbResult.prototype.RoomId = null;
AbResult.prototype.RoomType = null;
AbResult.prototype.Provider = null;
AbResult.prototype.Rooms = new Number(0);
AbResult.prototype.Stars = new Number(0);
AbResult.prototype.Description = new String;
AbResult.prototype.HotelName = new String;
// Tourico
AbResult.prototype.Address = new String;
AbResult.prototype.Adults = new Number(0);
AbResult.prototype.Children = new Number(0);
AbResult.prototype.DoubleBed = false;
AbResult.prototype.Tax = Number(0);
AbResult.prototype.Brand = new String;
AbResult.prototype.Img = null;
AbResult.prototype.RoomName = null;
// Cene
AbResult.prototype.Price = new Number(0.00);
AbResult.prototype.OriginalPrice = new Number(0.00);
AbResult.prototype.PriceAdults = new Number(0.00);
AbResult.prototype.OriginalPriceAdults = new Number(0.00);
AbResult.prototype.PriceChildren = new Number(0.00);
AbResult.prototype.OriginalPriceChildren = new Number(0.00);
// Davki
AbResult.prototype.Currency = new String;
AbResult.prototype.OriginalCurrency = new String;
// Niz storitev, to se polni z SearchHotelByID... extra klic.
AbResult.prototype.Amenity = new Array;
// To rabi samo last minute:
AbResult.prototype.Arrangement = 1;
AbResult.prototype.From = null;
AbResult.prototype.To = null;
AbResult.prototype.URL = null;

AbResult.prototype.toString = function()
{
	return "AbResult";
}
// JavaScript Document

var AbResultSet = function()
{
	this._ResultSet = new Array;
}

// Dodamo rezultat v array.
AbResultSet.prototype.addResult = function( p_result )
{
	//trace( "AbResultSet.addResult", AbDebug.LOG_INFO, AbDebug.INFO_APPLICATION );
	if( p_result == "AbResult" )
	{
		trace( AbStringUtil("Result #", p_result.SeqId, " Added"), AbDebug.LOG_INFO, AbDebug.INFO_PARSE );
		this._ResultSet.push( p_result );
	}
	else
	{
		trace( AbStringUtil("Invalid Result Object") , AbDebug.LOG_WARN, AbDebug.INFO_APPLICATION );
	}
}

AbResultSet.prototype.length = function()
{
	return this._ResultSet.length;
}

AbResultSet.prototype._parseWDDX = function( p_xml, p_type, p_params, p_all )
{
	trace( "AbResultSet._parseWDDX", AbDebug.LOG_INFO, AbDebug.INFO_APPLICATION );
	
	try
	{
		var XMLDoc = p_xml.responseXML.firstChild;
	}
	catch( ex )
	{
		trace( AbStringUtil("XML ERROR: <a href='", p_all.url ,"' target='_blank'>LINK</a>") , AbDebug.LOG_ERROR, AbDebug.INFO_AJAX_RESPONSE );
		return;
	}
	finally
	{
		trace("XML OK", AbDebug.LOG_INFO, AbDebug.INFO_AJAX_RESPONSE );
	}
	
	var Data = XMLDoc.firstChild.nextSibling.firstChild;
	
	var numRecords = Data.getAttribute("length");
	
	for( var ph_iter = 0; ph_iter < Data.childNodes.length; ph_iter++ )
	{
		var cNode = Data.childNodes[ ph_iter ];
		var rNode = new AbResult();
		
		for( var list_iter = 0; list_iter < cNode.childNodes.length; list_iter++ )
		{
			var sNode = cNode.childNodes[ list_iter ];
			var aNode = sNode.getAttribute("name");
			
			preveriNode = sNode.firstChild;
			
			if( preveriNode.firstChild )
			{
				vNode = preveriNode.firstChild.nodeValue;
			}
			else
			{
				vNode = "";
			}

			switch( aNode )
			{
				case "veriga":
					rNode.Brand = vNode;
					break;
				case "dvojna_postelja":
					rNode.DoubleBed = vNode;
					break;
				case "davek":
					rNode.Tax = vNode;
					break;
				case "valutaOriginal":
					rNode.OriginalCurrency = vNode;
					break;
				case "otrok":
					rNode.Children = vNode;
					break;
				case "id":
					rNode.HotelId = vNode;
					break;
				case "nazivHotela":
					rNode.HotelName = vNode;
					break;
				case "naslov":
					rNode.Address = vNode;
					break;
				case "valuta":
					rNode.Currency = vNode;
					break;
				case "sob":
					rNode.Rooms = new Number( vNode );
					break;
				case "odraslih":
					rNode.Adults = new Number( vNode );
					break;
				case "naziv":
					rNode.Name = vNode;
					break;
				case "slikica":
					rNode.Img = new Image;
					rNode.Img.src = new String(vNode);
					rNode.sImg = new String( vNode );
					break;
				case "cena":
					rNode.Price = new Number( parseFloat(vNode) );
					rNode.OriginalPrice = new Number( parseFloat(vNode) );
					break;
				case "cenaOriginal":
					//rNode.OriginalPrice = new Number( parseFloat(vNode) );
					break;
				case "cenaOtroci":
					rNode.PriceChildren = new Number( parseFloat(vNode) );
					rNode.OriginalPriceChildren = new Number( parseFloat(vNode) );
					break;
				case "cenaOdrasli":
					rNode.PriceAdults = new Number( parseFloat(vNode) );
					rNode.OriginalPriceAdults = new Number( parseFloat(vNode) );
					break;
				case "nacinProdaje":
					rNode.SellType = vNode;
					break;
				case "idSobe":
					rNode.RoomId = new String( vNode );
					break;
				case "provider":
					rNode.Provider = new Number( vNode );
					break;
				case "nazivSobe":
					rNode.RoomName = vNode;
					break;
				case "zvezdic":
					rNode.Stars = vNode;
					break;
				case "opis":
					rNode.Description = vNode;
					break;
				default:
					break;
			}
		}
		// Preverimo, ��e smo ��e dodali isti hotel na zahtevek.
		var test = this.hasBeenQueued( rNode );
		
		if( !test )
		{
			var hotelParam = { hotelId: rNode.HotelId, roomId: rNode.RoomId, provider: rNode.Provider };
			//trace( AbStringUtil( "HotelId: ", rNode.HotelId, " 2nd: ", hotelParam.hotelId ), AbDebug.LOG_WARN, AbDebug.INFO_APPLICATION );
			AbSearchEngine.appendSearch( new AbSearch( rNode.Provider, AbSearch.SEARCH_HOTEL_BY_ID, hotelParam ) );
			AbSearchEngine._invoke();
		}
		else
		{
			//trace( AbStringUtil("Ima dvojni zapis? ", test ), AbDebug.LOG_INFO, AbDebug.INFO_APPLICATION );
		}
		// Dodamo rezultat k Searchu...
		if( AbSearchEngine._DisplaySearch.length() < 5 )
		{
			AbSearchEngine._DisplaySearch.addResult( rNode );
		}
		
		AbSearchEngine._Results.addResult( rNode );
	}
}
// Parsamo HOTEL ne iskanje...
AbResultSet.prototype._parseWDDX2 = function( p_xml, p_type, p_params )
{
	//trace( "AbResultSet._parseWDDX2", AbDebug.LOG_INFO, AbDebug.INFO_APPLICATION );
	try
	{
		var XMLDoc = p_xml.responseXML.firstChild;
		var Data = XMLDoc.firstChild.nextSibling.firstChild;
	}
	catch( ex )
	{
		trace("XML je neveljaven oz. ni tipa xml ", AbDebug.LOG_ERROR, AbDebug.INFO_AJAX_RESPONSE );
		return;
	}
	
	// Get Already Loaded Hotel
	var thisHotel = this.getHotelsById( p_params.hotelId, p_params.provider );
	
	if( thisHotel.length == 0 )
	{
		trace( AbStringUtil( "Hotels ID#", p_params.hotelId, " doesn't exist"), AbDebug.LOG_WARN, AbDebug.INFO_PARSE );
	}
	
	for( var phi_iter = 0; phi_iter < Data.childNodes.length; phi_iter++ )
	{
		var cNode = Data.childNodes[ phi_iter ];
		var aNode = cNode.getAttribute("name");
		
		preveriNode = cNode.firstChild;
			
		if( preveriNode.firstChild )
		{
			vNode = preveriNode.firstChild.nodeValue;
		}
		else
		{
			vNode = "";
		}
		
		switch( aNode )
		{
			case "slikica":
				if( p_params.provider == 2 )
				{
					//this._updateRecords( thisHotel, "Img", vNode );
					this._updateRecords( thisHotel, "sImg", vNode );
					trace( vNode );
				}
				break;
			case "opis":
				if( (p_params.provider == 2) || (thisHotel[0].Description == "") )
				{
					this._updateRecords( thisHotel, "Description", vNode );
					//thisHotel.Description = vNode;
				}
				break;
			case "storitveId":
			{
				var rs = this._parseWDDXRecordSet( cNode.firstChild );
				this._updateRecords( thisHotel, "Amenity", rs );
			}				
				break;
			default:
				break;
		}
	}
}

AbResultSet.prototype._parseWDDXLastminute = function( p_xml, p_type, p_params, p_all )
{
	trace( "AbResultSet._parseWDDXLastminute", AbDebug.LOG_INFO, AbDebug.INFO_APPLICATION );
	try
	{
		var XMLDoc = p_xml.responseXML.firstChild;
	}
	catch( ex )
	{
		trace( AbStringUtil("XML ERROR: <a href='", p_all.url ,"' target='_blank'>LINK</a>") , AbDebug.LOG_ERROR, AbDebug.INFO_AJAX_RESPONSE );
		return;
	}
	finally
	{
		trace("XML OK", AbDebug.LOG_INFO, AbDebug.INFO_AJAX_RESPONSE );
	}
	
	var Data = XMLDoc.firstChild.nextSibling.firstChild;
	
	var numRecords = Data.getAttribute("length");
	
	for( var ph_iter = 0; ph_iter < Data.childNodes.length; ph_iter++ )
	{
		var cNode = Data.childNodes[ ph_iter ];
		var rNode = new AbResult();

		for( var list_iter = 0; list_iter < cNode.childNodes.length; list_iter++ )
		{
			var sNode = cNode.childNodes[ list_iter ];
			var aNode = sNode.getAttribute("name");
			
			preveriNode = sNode.firstChild;
			
			if( preveriNode.firstChild )
			{
				vNode = preveriNode.firstChild.nodeValue;
			}
			else
			{
				vNode = "";
			}
				
			switch( aNode )
			{
				case "provider":
					rNode.Provider = new Number( vNode );
					break;
				case "nacinProdaje":
					rNode.SellType = new Number( vNode );
					break;
				case "sob":
					rNode.Rooms = new Number( vNode );
					break;
				case "id":
					rNode.HotelId = new Number( vNode );
					break;
				case "nazivHotela":
					rNode.HotelName = vNode;
					break;
				case "odhLetalisce":
					rNode.AirportName = vNode;
					break;
				case "vkljuceno":
					rNode.Included = vNode;
					break;
				case "dodatno":
					rNode.Optional = vNode;
					break;
				case "od":
					rNode.From = AbDate.parseSOAPDate( vNode );
					break;
				case "do":
					rNode.To = AbDate.parseSOAPDate( vNode );
					break;
				case "naziv":
					rNode.Name = vNode;
					break;
				case "naslov":
					rNode.Address = vNode;
					break;
				case "opis":
					rNode.Description = vNode;
					break;
				case "odraslih":
					rNode.Adults = new Number( vNode );
					break;
				case "otrok":
					rNode.Children = new Number( vNode );
					break;
				case "url":
					rNode.URL = vNode;
					break;
				case "valutaOriginal":
					rNode.OriginalCurrency = vNode;
					break;
				case "cenaOriginal":
					rNode.OriginalPrice = new Number( parseFloat(vNode) );
					break;
				case "cenaOtrociOriginal":
					rNode.OriginalPriceChildren = new Number( parseFloat(vNode) );
					break;
				case "cenaOdrasliOriginal":
					rNode.OriginalPriceAdults = new Number( parseFloat(vNode) );
					break;
				case "valuta":
					rNode.Currency = vNode;
					break;
				case "cena":
					rNode.Price = new Number( parseFloat(vNode) );
					break;
				case "cenaOtroci":
					rNode.PriceChildren = new Number( parseFloat(vNode) );
					break;
				case "cenaOdrasli":
					rNode.PriceAdults = new Number( parseFloat(vNode) );
					break;
				case "zvezdic":
					rNode.Stars = vNode;
					break;
				case "slikica":
					rNode.Img = new Image;
					rNode.Img.src = new String(vNode);
					rNode.sImg = new String( vNode );
					break;
				case "idSobe":
					rNode.RoomId = new String( vNode );
					break;
				case "aranzma": // lahko bi vzeli tudi nazivSobe
					rNode.RoomName = vNode; // aran��ma bomo izpisali tam kjer je pri hotelu ime sobe
					break;
				case "storitveId":
				{
					//trace( sNode.nodeName + " " + sNode.getAttribute("name") );
					var rs = this._parseWDDXRecordSet( sNode.firstChild );
					this._updateRecords( new Array( rNode ), "Amenity", rs );
				}				
					break;
				default:
					break;
			}
		}

		AbSearchEngine._Results.addResult( rNode );
	}
}

AbResultSet.prototype._updateRecords = function( p_hotels, p_variable, p_value )
{
	//trace( "AbResultSet._updateRecords", AbDebug.LOG_INFO, AbDebug.INFO_APPLICATION );
	for( var hotel_iter = 0; hotel_iter < p_hotels.length; hotel_iter++ )
	{
		p_hotels[ hotel_iter ][ p_variable ] = p_value;
	}
}

AbResultSet.prototype.hasBeenQueued = function( p_result )
{
	//trace( "AbResultSet.hasBeenQueued", AbDebug.LOG_INFO, AbDebug.INFO_APPLICATION );
	var fields_to_check = new Array("HotelId");
	var results = AbSearchEngine.getResults();
	
	for( var queue_iter = 0; queue_iter < results.length; queue_iter++ )
	{
		var bool_sum = false;
		
		for( var queue1_iter = 0; queue1_iter < fields_to_check.length; queue1_iter++ )
		{
			if( results[ queue_iter ][ fields_to_check[ queue1_iter ] ] == p_result[ fields_to_check[ queue1_iter ] ] )
			{
				return true;
			}
		}
	}
	
	return false;
}

AbResultSet.prototype._parseWDDXRecordSet = function( p_recordset )
{
	var rootNode = p_recordset;
	
	var fields = rootNode.childNodes;
	
	var amenities = new Array;
	
	for( var af_iter = 0; af_iter < fields.length; af_iter++ )
	{
		if( fields[ af_iter ].nodeType == 1 )
		{
			var typeNode = fields[ af_iter ].getAttribute("name");
			
			switch( typeNode )
			{
				case "LNG_AMENITY_PKEYI":
				{
					var id = this._parseWDDXFields( fields[ af_iter ] );
				}
					break;
				
				case "TXT_PRINTABLE_NAME_SLO":
				{
					var name2 = this._parseWDDXFields( fields[ af_iter ] );
				}
					break;
					
				case "TXT_PRINTABLE_NAME_ENG":
				{
					var name = this._parseWDDXFields( fields[ af_iter ] );	
				}
					break;
					
				default:
					break;
			}
		}
	}
	
	var len = id.length || name.length; // WTF ?
	
	for( var amf_iter = 0; amf_iter < len; amf_iter++ )
	{
		amenities.push( new AbAmenity( id[ amf_iter ], AbStringUtil( " ", name[ amf_iter ] ), AbStringUtil( " ", name2[ amf_iter ] ) ) );
	}
	
	return amenities;
}

AbResultSet.prototype._parseWDDXFields = function( p_node )
{
	var rootNode = p_node;
	var nodes = rootNode.childNodes;
	
	var ret = new Array;
	
	for( var node_iter = 0; node_iter < nodes.length; node_iter++ )
	{
		ret.push( nodes[ node_iter ].firstChild.nodeValue );
	}
	
	return ret;
}

AbResultSet.prototype.getHotelsById = function( p_id, p_provider )
{
	//trace( "AbResultSet.getHotelsById", AbDebug.LOG_INFO, AbDebug.INFO_APPLICATION );
	var results = AbSearchEngine.getResults();
	var hotels = new Array;
	
	for( var pr_iter = 0; pr_iter < results.length; pr_iter++ )
	{
		if( (results[ pr_iter ].HotelId == p_id) && (results[ pr_iter ].Provider == p_provider) )
		{
			hotels.push( results[ pr_iter ] );
		}
	}
	
	return hotels;
}

AbResultSet.prototype._updateRecord = function( id, values )
{
	//trace( "AbResultSet._updateRecord", AbDebug.LOG_INFO, AbDebug.INFO_APPLICATION );
}

AbResultSet.prototype.toString = function()
{
	return "AbResultSet";
}
// JavaScript Document

var AbSearch = function(p_id, p_type, p_params)
{
	AbSearchEngine._Searches++;

	switch( p_type )
	{
		case AbSearch.SEARCH_HOTEL:
			trace( AbStringUtil("SearchHotel: ", p_id) , AbDebug.LOG_INFO, AbDebug.INFO_APPLICATION);	
			break;
		case AbSearch.SEARCH_HOTEL_BY_ID:
			trace( AbStringUtil("SearchHotelById: ", p_id, " ", p_params.hotelId, "/", p_params.roomId) , AbDebug.LOG_INFO, AbDebug.INFO_APPLICATION );
			break;
		case AbSearch.SEARCH_VACATION:
			trace( AbStringUtil("SearchVacation: ", p_id ), p_id, AbDebug.LOG_WARN, AbDebug.INFO_APPLICATION );
			break;
		case AbSearch.SEARCH_LASTMINUTE:
			trace( AbStringUtil("SearchLastMinute: ", p_id ), p_id, AbDebug.LOG_WARN, AbDebug.INFO_APPLICATION );
			break;
		default:
			trace( AbStringUtil("NotDefinedSearch: " ), p_id, AbDebug.LOG_WARN, AbDebug.INFO_APPLICATION );
			break;
	}
	
	this.Id = p_id;
	this.Type = p_type;
	
	if( p_params )
	{
		this.Params = p_params;
	}
	else
	{
		this.Params = null;
	}
	
	AbSearch._History.push( this );
	AbSearchEngine._SearchStack.push( this );
}

AbSearch._History = new Array;
AbSearch._wait = false;

AbSearch.SEARCH_HOTEL = 1;
AbSearch.SEARCH_HOTEL_BY_ID = 2;
AbSearch.SEARCH_VACATION = 4;
AbSearch.SEARCH_FLIGHT = 8;
AbSearch.SEARCH_LASTMINUTE = 16;
AbSearch.SEARCH_LASTMINUTEBORSE = 32;
AbSearch.SEARCH_OTHER = 64;

AbSearch.prototype.Id = null;
AbSearch.prototype.Type = null;
AbSearch.prototype.Params = null;
AbSearch.prototype.baseURL = "/com/search.cfc";
AbSearch.prototype.XmlHttpVar = null;

// Tukaj se izvede Search za posamezen Search, torej, ��e bi radi imeli hotele, potem to enkrat se pozene, in vrne rezultat
AbSearch.prototype._invoke = function()
{
	this.XmlHttpVar = new AbXmlHttp( this.Type, this.Params );
	v_ajax = this.XmlHttpVar;

	AbSearchEngine._QSearch[ this.Type ]++;
	
	switch( this.Type )
	{
		case AbSearch.SEARCH_HOTEL:
		{
			AbLoadingBar.setVisibility( true );
			var qstring = this.buildSearchUrl( "Search" );	
			//prompt( "URL", xurl );
			trace( AbStringUtil("SearchHotels ", this.Id, " ", AbProvider.getElement( this.Id ) ), AbDebug.LOG_INFO, AbDebug.INFO_AJAX_REQUEST );
			v_ajax.connect(this.baseURL, "GET", qstring, this._process);
		}
			break;
		case AbSearch.SEARCH_HOTEL_BY_ID:
		{
			var qstring = this.buildSearchByUrl();
			//prompt( null, url );
			v_ajax.connect(this.baseURL, "GET", qstring, this._process);
			trace( AbStringUtil( "SearchHotelsByID ", qstring ), AbDebug.LOG_WARN, AbDebug.INFO_AJAX_REQUEST );
		}
			break;
		case AbSearch.SEARCH_VACATION:
		{
			AbLoadingBar.setVisibility( true );
			var qstring = this.buildSearchUrl( "Search" );	
			v_ajax.connect(this.baseURL, "GET", qstring, this._process);
			trace( AbStringUtil( "SearchVacation ", qstring ), AbDebug.LOG_WARN, AbDebug.INFO_AJAX_REQUEST );
		}
			break;
		case AbSearch.SEARCH_LASTMINUTE:
		{
			AbLoadingBar.setVisibility( true );
			var qstring = this.buildSearchUrl( "Search" );	
			v_ajax.connect(this.baseURL, "GET", qstring, this._process);
			trace( AbStringUtil( "SearchLastMinute ", qstring ), AbDebug.LOG_WARN, AbDebug.INFO_AJAX_REQUEST );
		}
			break;
		default:
			break;
	}
}

AbSearch.prototype.abort = function()
{
	if( this.XmlHttpVar )
		this.XmlHttpVar.abort();
}

AbSearch.prototype.buildSearchUrl = function( method )
{
	var provider, destination, passenger_name, passenger_lastname, passenger_birthday, from, to, currency, roomTypeId, numberOfRooms, stars, hotelName, returnAll, adults, children, type;
	//
	provider = this.Id;
	destination = AbSearchEngine.getAttribute("SearchCityId");
	//
	passenger_name = new String( AbSearchEngine.getPassengerNames() );
	passenger_lastname = new String( AbSearchEngine.getPassengerLastNames() );
	passenger_birthday = new String( AbSearchEngine.getPassengerBirthdays() );
	//
	from = new String( AbSearchEngine.getAttribute("SearchDateFrom") );
	to = new String( AbSearchEngine.getAttribute("SearchDateTo") );
	//
	currency = AbSearchEngine.getAttribute("SearchCurrency");
	
	if( currency == null )
		currency = AbSearchEngine.getAttribute("DefCurrency");
		
	roomTypeId = AbSearchEngine.getAttribute("SearchRoomType");
	
	roomTypeId1 = AbSearchEngine.getAttribute("SearchRoomType1");
	roomTypeId2 = AbSearchEngine.getAttribute("SearchRoomType2");
	roomTypeId3 = AbSearchEngine.getAttribute("SearchRoomType3");
	childAge1 = AbSearchEngine.getAttribute("SearchChildAge1");
	childAge2 = AbSearchEngine.getAttribute("SearchChildAge2");
	childAge3 = AbSearchEngine.getAttribute("SearchChildAge3");
	
	numberOfRooms = AbSearchEngine.getAttribute("SearchRooms");
	hotelName = AbSearchEngine.getAttribute("SearchHotel");
	adults = AbSearchEngine.getAttribute("SearchAdults");
	children = AbSearchEngine.getAttribute("SearchChildren");
	type = AbSearchEngine.getAttribute("SearchType");
	
	var url = AbStringUtil( 
						   "&method=", method, 
						   "&provider=", provider,
						   "&destination=", destination,
						   "&passenger_name=", passenger_name,
						   "&passenger_lastname=", passenger_lastname,
						   "&passenger_birthday=", passenger_birthday,
						   "&from=", from,
						   "&to=", to,
						   "&currency=", currency,
						   "&roomTypeId=", roomTypeId,
						   "&roomTypeId1=", roomTypeId1,
						   "&roomTypeId2=", roomTypeId2,
						   "&roomTypeId3=", roomTypeId3,
						   "&childAge1=", childAge1,
						   "&childAge2=", childAge2,
						   "&childAge3=", childAge3,
						   "&numberOfRooms=", numberOfRooms,
						   "&hotelName=", hotelName,
						   "&adults=", adults,
						   "&children=", children,
						   "&type=", type,
						   "&all=", returnAll
						   );
	return url;
}

AbSearch.prototype.buildSearchByUrl = function()
{
	var provider = this.Id;
	var hotelId = this.Params.hotelId;
	var roomId = this.Params.roomId;
	
	var passenger_name = new String( AbSearchEngine.getPassengerNames() );
	var passenger_lastname = new String( AbSearchEngine.getPassengerLastNames() );
	var passenger_birthday = new String( AbSearchEngine.getPassengerBirthdays() );	
	
	var from = new String( AbSearchEngine.getAttribute("SearchDateFrom") );
	var to = new String( AbSearchEngine.getAttribute("SearchDateTo") );
	
	var url = AbStringUtil( 
						   "&method=SearchById", 
						   "&provider=", provider,
						   "&id=", hotelId,
						   "&roomId=", roomId,
						   "&passenger_name=", passenger_name,
						   "&passenger_lastname=", passenger_lastname,
						   "&passenger_birthday=", passenger_birthday,
						   "&from=", from,
						   "&to=", to
						   );
	
	return url;
}

AbSearch.prototype._process = function( p_xml, p_type, p_params, p_all )
{
	AbSearchEngine._QSearch[ p_type ]--;
	
	switch( p_type )
	{
		case AbSearch.SEARCH_HOTEL:
		{
			trace("SearchHotels", AbDebug.LOG_INFO, AbDebug.INFO_PARSE);
			AbSearchEngine._Results._parseWDDX( p_xml, p_type, p_params, p_all );
		}
			break;
		case AbSearch.SEARCH_HOTEL_BY_ID:
		{
			trace("SearchHotelsByID", AbDebug.LOG_INFO, AbDebug.INFO_PARSE);
			AbSearchEngine._Results._parseWDDX2( p_xml, p_type, p_params, p_all );
		}
			break;
		case AbSearch.SEARCH_VACATION:
		{
			trace("SearchVacation", AbDebug.LOG_INFO, AbDebug.INFO_PARSE);
			AbSearchEngine._Results._parseWDDXLastminute( p_xml, p_type, p_params, p_all );
		}
			break;
		case AbSearch.SEARCH_LASTMINUTE:
		{
			trace("SearchLastMinute", AbDebug.LOG_INFO, AbDebug.INFO_PARSE);
			AbSearchEngine._Results._parseWDDXLastminute( p_xml, p_type, p_params, p_all );
		}
			break;
		default:
			break;
	}
	
	AbSearchEngine._Searches--;
	
	if( !AbSearchEngine._Finished && AbSearchEngine._QSearch[ AbSearch.SEARCH_HOTEL ] == 0 && !AbSearchEngine._Out )
	{
		var numResults = AbSearchEngine.getResults().length;
		var idProvider = AbProvider.toArray();
		var strProvider = new Array;
		var searchType = AbSearchEngine.getAttribute( "SearchType" )
		searchType = searchType ? searchType : 1; // Hehe :)
		
		for( key in idProvider )
		{
			strProvider.push( idProvider[ key ].Id );
		}

		var strCurrency = AbSearchEngine.getAttribute("SearchCurrency");
		AbLoadingBar.setVisibility( false );
		
		var urldata = AbStringUtil( "&search_type=", searchType, "&lng_results=", numResults, "&providers=", strProvider, "&txt_currency=", strCurrency );
		
		var reportSearch = new AbXmlHttp( null, null, null );
		
		reportSearch.connect( "/ajax/search_finish.cfm", "GET", urldata, null );
		AbSearchSerializer( AbSearchEngine.getSearchResults(), true );
		AbSearchEngine._Out = true;
	}
	
	if( AbSearchEngine.checkComplete() )
	{
		AbSearchEngine._Finished = true;
	}
	
	if( AbSearchEngine.canDisplayResults() )
	{
		AbSort._lock();
		AbSearchEngine.getResults().sort( AbSort.Comparator );
		AbSort._unlock();		

		AbSearchSerializer( AbSearchEngine.getResults(), true );
	}
	AbLoadingBar.setVisibility( false );
}

AbSearch.prototype.toString = function()
{
	return "AbSearch";
}

AbSearch.getCurrentBodyClass = function()
{
	if( !AbSearch._bodyClass )
		AbSearch._bodyDefClass = document.body.className;

	if( AbSearch._bodyDefClass.indexOf("ndex") != -1 )
	{
		AbSearch._bodyIndex = true;
	}
	else
	{
		AbSearch._bodyIndex = false;
	}
}

AbSearch.setWait = function( p_bool )
{
	AbSearch._wait = p_bool;
}
var AbSearchEngine = function()
{
}

AbSearchEngine._QueueList = new Array;

AbSearchEngine._Results = new AbResultSet(); // Vsi rezultati vedno tukaj
AbSearchEngine._Display = new AbResultSet(); // Uporabi ta objekt za prikazovanje... ob sakem ponovnem nalaganju pocisti predmet.
AbSearchEngine._DisplaySearch = new AbResultSet(); // Objekt za sprotno prikazovanje ponudb max. 5
AbSearchEngine._Exchange = new AbCurrencySet(); // valuta in menjalni te��aj
AbSearchEngine._Params = new Array; // Register spremenljivk
AbSearchEngine._Passengers = new Array; // seznam potnikov
AbSearchEngine._Searches = 0;
AbSearchEngine._QSearch = new Array;
AbSearchEngine._Finished = false;
AbSearchEngine._Out = false;
AbSearchEngine._SearchStack = new Array;
AbSearchEngine.CHILD_AGE_LIMIT = 18;

AbSearchEngine._Init = function()
{
	AbSearchEngine.setAttribute("DefRecPerPage", 10); // 10 zapisov na stran
	AbSearchEngine.setAttribute("DefPage", 1); // 1. stran se prvo nalozi
	AbSearchEngine.setAttribute("DefProvider", new Array(1,2) ); // Tourico, Kuoni
	AbSearchEngine.setAttribute("DefCurrency", "SIT"); // ��e zmeraj smo slovenci
	AbSearchEngine.setAttribute("DefNumRec", 0); // ��t. zapisov (0) seveda
	AbSearchEngine.setAttribute("DefStarRating", new Array); // Array zvezdic, 1,2,3,4,5.... 
	AbSearchEngine.setAttribute("DefAmenity", new Array); // Array IDjev.
	AbSearchEngine.setAttribute("DefSortBy", "Price"); // .Price
	
	trace( AbStringUtil( "AbSearchEngine._Init " ), AbDebug.LOG_INFO, AbDebug.INFO_GENERAL );
	
	if( AbSearch )
	{
		AbSearch.BODY = document.body;
	}
	
	for( var s_iter = 0; s_iter < (AbSearch.SEARCH_OTHER); s_iter++ )
	{
		AbSearchEngine._QSearch[ s_iter ] = 0;
	}
}

AbSearchEngine.canDisplayResults = function()
{
	if( this._Searches == 0 && this._Finished )
		return true;
	else
		return false;
}

AbSearchEngine.setAttribute = function( p_key, p_value )
{
	var foundAt = -1; // 0 ne sme obstajati.
	
	for( var attr_iter = 0; attr_iter < this._Params.length; attr_iter++ )
	{
		if( this._Params[ attr_iter ]._Key == p_key )
		{
			foundAt = attr_iter;
			break;
		}
	}
	
	if( foundAt == -1 )
	{
		this._Params.push( new AbParam( p_key, p_value ) );
	}
	else
	{
		this._Params[ foundAt ]._Value = p_value;
	}
}

AbSearchEngine.getAttribute = function( p_key )
{
	for( var attr_iter = 0; attr_iter < this._Params.length; attr_iter++ )
	{
		if( this._Params[ attr_iter ]._Key == p_key )
		{
			return this._Params[ attr_iter ]._Value;
		}
	}
	
	return null;
}

AbSearchEngine._invoke = function() // Zazenemo program za podatke.
{
	trace( AbStringUtil("AbSearchEngine._invoke"), AbDebug.LOG_INFO, AbDebug.INFO_AJAX_REQUEST );
	if( AbSearchEngine._QueueList.length > 0 )
	{
		while( AbSearchEngine._QueueList.length > 0 )
		{
			var invoker = AbSearchEngine._QueueList.pop();
			invoker._invoke();
		}
	}
	else
	{
		if( AbSearchEngine.checkComplete() )
		{
			AbSearchSerializer( AbSearchEngine.getResults() );
		}
	}
}

AbSearchEngine.abort = function()
{
	//Po britancih, ki ne marajo ��akati ve�� kot 4sec (To je res dolgo obdobje)
	//setTimeout( "AbLoadingBar.setVisibility( true );", 4000 );
	var queue = AbSearchEngine._SearchStack;
	while( queue.length > 0 )
	{
		var _search = queue.pop();
		_search.abort();
	}
}

AbSearchEngine.appendSearch = function( p_search )
{
	if( p_search == "AbSearch" )
	{
		this._QueueList.push( p_search );
		return p_search;
	}
	else
	{
		return null;
	}
}

AbSearchEngine.addPassenger = function( p_passenger )
{
	if( p_passenger.toType() == "AbPassenger" )
	{
		AbSearchEngine._Passengers.push( p_passenger );
	}
	else
	{
		trace( AbStringUtil("AbSearchEngine.addPassenger Type Mismatch") , AbDebug.LOG_WARN, AbDebug.INFO_APPLICATION );
	}
}

AbSearchEngine.getPassengers = function()
{
	return this._Passengers;
}

AbSearchEngine.getPassengerNames = function()
{
	var Names = new Array;
	var Passengers = this._Passengers;
	
	for( gpn=0; gpn < Passengers.length; gpn++ )
	{
		Names.push(Passengers[gpn].firstname);
	}
	
	return Names;
}

AbSearchEngine.getPassengerLastNames = function()
{
	var LastNames = new Array;
	var Passengers = this._Passengers;
	
	for( gpln=0; gpln < Passengers.length; gpln++ )
	{
		LastNames.push(Passengers[gpln].lastname);
	}
	
	return LastNames;
}

AbSearchEngine.getPassengerBirthdays = function()
{
	var Birthdays = new Array;
	var Passengers = this._Passengers;
	
	for( gpb=0; gpb < Passengers.length; gpb++ )
	{
		Birthdays.push(Passengers[gpb].birthday);
	}
	
	return Birthdays;
}

AbSearchEngine.createDummyChild = function()
{
	var newChild = new AbPassenger("Otrok", null, new Date( 1996, 0, 1 ));
	newChild.isDummy = true;
	newChild.lastname = newChild.SeqId;
	return newChild;
}

AbSearchEngine.createDummyAdult = function()
{
	var newAdult = new AbPassenger( "Odrasli", null, new Date(1976, 0, 1) );
	newAdult.isDummy = true;
	newAdult.lastname = newAdult.SeqId;
	return newAdult;
}

AbSearchEngine.createPassenger = function( p_name, p_lastname, p_birthday )
{
	trace( "AbSearchEngine.createPassanger", AbDebug.LOG_INFO, AbDebug.INFO_APPLICATION );
	var newPassenger = new AbPassenger();
	newPassenger.isDummy = false;
	newPassenger.firstname = p_name;
	newPassenger.lastname = p_lastname;
	newPassenger.birthday = p_birthday;
	return newPassenger;
}

AbSearchEngine.getResults = function()
{
	return this._Results._ResultSet;
}

AbSearchEngine.getDisplayResults = function()
{
	return this._Display._ResultSet;
}

AbSearchEngine.getSearchResults = function()
{
	return this._DisplaySearch._ResultSet;
}

AbSearchEngine.getCurrency = function ()
{
	return this._Exchange._ResultSet;
}

AbSearchEngine.checkComplete = function()
{
	var bit_and = 0;
	for( var bl_iter = 0; bl_iter < AbSearchEngine._QSearch.length; bl_iter++ )
	{
		bit_and |= AbSearchEngine._QSearch[ bl_iter ];
	}
	
	if( bit_and > 0 )
		return false;
	return true;
}
// JavaScript Document
var __dummy__ = ''; // ščžčđ bug

var AbSearchSerializer = function( result, inited )
{
	if( !AbSearchEngine.getAttribute( "SearchType" ) )
	{
		AbSearchEngine.setAttribute( "SearchType", 1 )
	}
	AbSearchSerializer._SearchType = AbSearchEngine.getAttribute("SearchType");
	AbSearchSerializer._SearchHotel = AbSearchEngine.getAttribute("SearchHotel");

	var stars = AbSearchEngine.getAttribute( "SearchStars" );
	
	if( stars )
	{
		if( stars > 0 )
		{
			var all_results = AbSearchEngine.getResults();
			
			for( key in all_results )
			{
				if( all_results[ key ].Stars == stars )
				{
					AbSearchEngine.setAttribute( "SearchStars", null );
					AbSearchSerializer._SelectedStars.push( stars );
					AbSearchSerializer._StartStars = stars;
					break;
				}
			}
		}
		else
		{
			AbSearchSerializer._StartStars = 0;
		}
	}

	AbSearchEngine._Display._ResultSet = AbSearchSerializer._StarsFilter( result, true );
	result = AbSearchEngine.getDisplayResults();
	result = AbSearchSerializer._NameFilter( result, true );
	

	
	AbSearchSerializer._Init( result );
	AbSearchSerializer.drawSlidePrice();
	AbSearchSerializer.drawResults ( result ); 
	AbSearchSerializer.SlideInfo( 100 );
	AbSearchSerializer.drawStars ();
	AbSearchSerializer.drawAmenity( result );
	AbSearchSerializer.drawHotelName();
	AbSearchSerializer.drawHeader( result );
	AbSearchSerializer.drawPages( result );
}

AbSearchSerializer._Content = null;
AbSearchSerializer._Pages = null;
AbSearchSerializer._OrderBySelect = null;
AbSearchSerializer._Heading = new String;
AbSearchSerializer._SelectedStars = new Array(); // obkljukane zvezdice v šifrantu
AbSearchSerializer._SelectedAmenities = new Array(); // obkljukane storitve v šifrantu
AbSearchSerializer._SliderState = null; // vrednost nastavljenega Sliderja
AbSearchSerializer._NoImageSrc = "/content/images/photo-not-available.gif";
AbSearchSerializer._LoadingImg = "/content/images/photo-loading.gif";
AbSearchSerializer._SearchType = null;
AbSearchSerializer._StartStars = 0;

AbSearchSerializer._imgProcess = function( img )
{
	img.src = AbSearchSerializer._NoImageSrc;
	
}

AbSearchSerializer._imgIfNotSet = function()
{
	if( AbSearchEngine.checkComplete() )
		return AbSearchSerializer._NoImageSrc;
	return AbSearchSerializer._LoadingImg;
}

AbSearchSerializer._update = function() // se uporablja za updatanje izpisa, ko spremenimo AbSearchEngine._Display
{
	//var page = this.getCurrentPage();
	AbSearchSerializer.drawSlidePrice();
	this._Init( AbSearchEngine._Display._ResultSet );
	this.drawResults();
	this.drawPages();
}

AbSearchSerializer._Init = function( result ) // izrisuje rezultate
{
	var lines = '<div id="screen-results">';
	
	var resultPage = new Array();
	var resultSorted = new Array();

	var max_results = AbSearchEngine.getAttribute("DefRecPerPage");
	var a = (AbSearchSerializer.getCurrentPage() - 1) * max_results;
	var b = a + max_results;
	
	if ( AbSearchEngine.getAttribute('SortBy') )
	{
		AbSort._lock();
		resultSorted = result.sort(AbSort.Comparator);
		AbSort._unlock();
	}
	
	else
	{
		AbSearchEngine.setAttribute('SortBy',AbSearchEngine.getAttribute('DefSortBy'));
		AbSort._lock();
		resultSorted = result.sort(AbSort.Comparator);
		AbSort._unlock();
	}
	
	resultPage = resultSorted.slice( a, b );
	
	if( resultPage.length > 0 )
	{
		for( var res_iter=0; res_iter < resultPage.length; res_iter++ )
		{
			var storitve = new Array;
			
			var seq = res_iter;
			var valuta = resultPage[ res_iter ].Currency;
			var cena = resultPage[ res_iter ].Price.toMoney();
			var cenaOtroci = resultPage[ res_iter ].PriceChildren.toMoney();
			var cenaOdrasli = resultPage[ res_iter ].PriceAdults.toMoney();
			var hotel = resultPage[ res_iter ].Name;
			var opis = resultPage[ res_iter ].Description;
			var zvezdic = resultPage[ res_iter ].Stars;
			var slikica = resultPage[ res_iter ].sImg;
			trace( AbStringUtil( "Slikica: ", slikica ) );
			var rid = resultPage[ res_iter ].RoomId
			var numberOfRooms = AbSearchEngine.getAttribute("SearchRooms");
			var rid1 = AbSearchEngine.getAttribute("SearchRoomType1");
			var rid2 = AbSearchEngine.getAttribute("SearchRoomType2");
			var rid3 = AbSearchEngine.getAttribute("SearchRoomType3");
			var childAge1 = AbSearchEngine.getAttribute("SearchChildAge1");
			var childAge2 = AbSearchEngine.getAttribute("SearchChildAge2");
			var childAge3 = AbSearchEngine.getAttribute("SearchChildAge3");
			var hid = resultPage[ res_iter ].HotelId;
			var provider = resultPage[ res_iter ].Provider;
			var roomName = resultPage[ res_iter ].RoomName;
			var searchType = AbSearchSerializer._SearchType;
			var amenities = resultPage[ res_iter ].Amenity;
			var from = resultPage[ res_iter ].From;
			var to = resultPage[ res_iter ].To;
			var imgZ = "*****".substr( zvezdic-1 );
			var rooms = resultPage[ res_iter ].Rooms;
			var adults = resultPage[ res_iter ].Adults;
			var children = resultPage[ res_iter ].Children;
			var amenitys = new Array;
			var hotelName = resultPage[res_iter].HotelName;
			var AirportName = resultPage[res_iter].AirportName;
			var Included = resultPage[res_iter].Included;
			var Optional = resultPage[res_iter].Optional;
			var opis_short = (new String( opis )).substr( 0, 200 );
			var amenitys_short = (new String( amenitys )).substr( 0, 200 );

			
			for( key in amenities )
			{
				amenitys.push( ( AbLanguage.getCurrentLanguage() == 1 ) ? amenities[ key ].SLName : amenities[ key ].Name );
			}
	
			if( slikica && slikica.indexOf( "photo-not-available" ) != -1 )
			{
				slikica = AbSearchSerializer._imgIfNotSet();
			}
			else if( !slikica )
			{
				slikica = AbSearchSerializer._imgIfNotSet();
			}
			lines = AbStringUtil( lines, '<div class="screen-result">' );
			
			lines = AbStringUtil( lines, '<div class="screen-result-image">' );
			lines = AbStringUtil( lines, '<img src="', slikica , '" width="97" height="68" border="1" onerror="AbSearchSerializer._imgProcess(this);" />' );
			if(searchType == 3) {
				lines = AbStringUtil( lines, '<div class="screen-result-price"><table style="font-size:smaller;text-align:left;padding:0;margin:auto;margin-top:0.5em;margin-bottom:0.5em;width:90%;"><tr><td><img src="/images/adult.png" alt="C/od.:" title="', AbMsg["PRICE_PER_ADULT"], '" /></td><td align="right">' + cenaOdrasli + '&nbsp;' + valuta + '</td></tr>', (children>0? AbStringUtil('<tr><td><img src="/images/child.png" alt="C/ot.:" title="', AbMsg["PRICE_PER_CHILD"], '" /></td><td align="right">' + cenaOtroci + '&nbsp;' + valuta + '</td><tr>'):''), '<th align="left"><img src="/images/total.png" alt="C/sk.:" title="', AbMsg["PRICE_TOTAL"], '" /></th><th align="right">', cena, '&nbsp;' + valuta + '</th></tr></table>', AbProvider.getElement( provider ) ,'</div>' );
			} else {
				lines = AbStringUtil( lines, '<div class="screen-result-price">', AbMsg["SEARCH_PRICE"], ':<br/><strong>' , cena, ' ', valuta, '</strong><br/>', AbProvider.getElement( provider ) ,'</div>' );				
			}
			lines = AbStringUtil( lines, '</div>' );
			
			lines = AbStringUtil( lines, '<div class="screen-result-text">' );
			
			
								 
			lines = AbStringUtil( lines, '<h1>', '<a href="/hotel.cfm?hotel=' , hid, '&rooms=', numberOfRooms, '&room=' , rid, '&room1=', rid1, '&room2=', rid2, '&room3=', rid3, '&age1=', childAge1, '&age2=', childAge2, '&age3=', childAge3, '&provider=' , provider, '&type=' , searchType, '&currency=', valuta, '" onclick="PleaseWait();">', hotel, '</a> ', "*****".substr( Math.floor(5-zvezdic) ), (((parseFloat(zvezdic))%1) > 0 ? '+' : '') , '</h1>' );
			
			if(searchType == 3) {
				lines = AbStringUtil(lines, '<h2>', hotelName, '</h2>');
			} else {
				lines = AbStringUtil( lines, '<h2>', roomName, '</h2>' );
			}
			
			if (AirportName !="")
				{
					lines = AbStringUtil( lines, '<div id="Odhodnoletalisce' , seq, '_Small"><b>' , AbMsg['DEPARTURE_AIRPORT'] , ': </b>',AirportName,'</div>');
				}
			if (Included !="")
				{
					lines = AbStringUtil( lines, '<div id="Vceni' , seq, '_Small"><b>' , AbMsg['INCLUDED'] , ': </b>',Included,'</div>');
				}
			
			if (Optional!="")		
				{
					lines = AbStringUtil( lines, '<div id="Opcija' , seq, '_Small"><b>' , AbMsg['OPTIONAL'] , ': </b>',Optional,'</div>');
				}
			lines = AbStringUtil( lines, '<div id="HotelOpis' , seq, '_Small"><b>' , AbMsg['SEARCH_DESCRIPTION'] , ':</b> ' , AbStringUtil( opis_short, "..." ), ' <span class="a" onclick="AbSearchSerializer.clickMore( \'HotelOpis\', \'' , seq, '\', true )">[' , AbMsg['SEARCH_MORE'], ']</span></div>' );
			lines = AbStringUtil( lines, '<div class="screen-result-hidden" id="HotelOpis' , seq, '_Large"><b>' , AbMsg['SEARCH_DESCRIPTION'] , ':</b> ' , opis, ' <span class="a" onclick="AbSearchSerializer.clickMore( \'HotelOpis\', \'' , seq, '\', false )">[' , AbMsg['SEARCH_LESS'], ']</span></div>' );
			
			if( searchType == 1 )
			{
				lines = AbStringUtil( lines, '<div id="HotelStoritve' , seq, '_Small"><b>' , AbMsg['DYNMENU_AMENITIES'], ':</b> ', AbStringUtil( amenitys_short, "..." ), ' <span class="a" onclick="AbSearchSerializer.clickMore( \'HotelStoritve\', \'' , seq, '\', true )">[' , AbMsg['SEARCH_MORE'], ']</span></div>' );
				lines = AbStringUtil( lines, '<div class="screen-result-hidden" id="HotelStoritve' , seq, '_Large"><b>' , AbMsg['DYNMENU_AMENITIES'], ':</b> ' , amenitys, ' <span class="a" onclick="AbSearchSerializer.clickMore( \'HotelStoritve\', \'' , seq, '\', false )">[' , AbMsg['SEARCH_LESS'], ']</span></div>' );
			}
			else
			{
				lines = AbStringUtil( lines, '<div id="HotelTermin"><b>' , AbMsg['SEARCH_FROM'], ':</b> ' , from, ' <b>' , AbMsg['SEARCH_TO'], ':</b> ' , to, ' </div>' );
				lines = AbStringUtil( lines, '<div id=""><b>' , AbMsg['SEARCH_ROOMS'], ':</b> ', rooms, ' <b>' , AbMsg['SEARCH_ADULTS'], ':</b> ' , adults, ' <b>' , AbMsg['SEARCH_CHILDREN'], ':</b> ' , children, '</div>' );
			}
			
			
			
			lines = AbStringUtil( lines, '</div>' );
			
			lines = AbStringUtil( lines, '<div class="screen-result-book"><strong>&gt; ', '<a href="/hotel.cfm?hotel=' , hid, '&rooms=', numberOfRooms, '&room=' , rid, '&room1=', rid1, '&room2=', rid2, '&room3=', rid3, '&age1=', childAge1, '&age2=', childAge2, '&age3=', childAge3, '&provider=' , provider, '&type=' , searchType, '&currency=', valuta, '" onclick="PleaseWait();">', AbMsg['SEARCH_BOOK'], '</a></strong></div><div class="rclear"></div>' );
			lines = AbStringUtil( lines, '<div class="clear"></div>' );
			lines = AbStringUtil( lines, '</div>' );
		}
	}
	else
	{
		lines = AbStringUtil( lines, "<div class=\"screen-alert\">" , AbMsg["SEARCH_NO_RESULTS"], "</div>" );
	}
	
	lines = AbStringUtil( lines, "</div>" );
	
	var final = document.getElementById('Rezultati');
	
	if( final )
		final.innerHTML = lines;
}

AbSearchSerializer.drawResults = function() // izrisuje informativno vrstico o številu prikazanih rezultatih in številu vseh rezultatov, ki jih je vrnilo iskanje po pogojih, ki jih je določil uporabnik
{
	var lines = "";
	
	var results = AbSearchEngine.getResults();
	var displayResults = AbSearchEngine.getDisplayResults();
	
	lines = AbStringUtil( AbMsg['SEARCH_SHOWING'], " <strong>",displayResults.length,"</strong> " , AbMsg['SEARCH_FROM'], " <strong>",results.length,"</strong> ", AbMsg['SEARCH_HOTELS'], ".");
	
	var final = document.getElementById("numResults");
	
	if( final )
		final.innerHTML = lines;
}

AbSearchSerializer.drawSlidePrice = function () // izrisuje okvir cene za slidebar - leva in desna cena (najmanjša in najvišja cena) pod slidebar-om
{	
	var displayResults = AbSearchEngine.getResults();
	
	var cenaOd = 0;
	var cenaDo = 0;

	for ( var dp_iter = 0; dp_iter < displayResults.length; dp_iter++ )
	{
		if ( displayResults[ dp_iter ].Price >= cenaDo )
		{
			cenaDo = displayResults[ dp_iter ].Price;
			cenaOd = displayResults[ dp_iter ].Price;
		}
	}
	
	for ( var dr_iter = 0; dr_iter < displayResults.length; dr_iter++)
	{
		if ( displayResults[ dr_iter ].Price <= cenaOd )
		{
			cenaOd = displayResults[ dr_iter ].Price;
		}
	}
	
	this._SliderState = cenaDo;

	var final1 = document.getElementById('priceFrom');
	var final2 = document.getElementById('priceTo');
		
	if ( final1 )
	{
		final1.innerHTML = (Math.round(cenaOd).toMoney()).replace(',00', "");
		final1.title = cenaOd;
	}
	
	if ( final2 )
	{
		final2.innerHTML = (Math.round(cenaDo).toMoney()).replace(',00', "");
		final2.title = cenaDo;
	}
}

AbSearchSerializer.drawStars = function() // dinamično izrisuje "zvezdice" v šifrantu
{
	var lines = new String("</b><br /><table width='100%' border='0' cellspacing='0' cellpadding='0'>");
	var last_zvezdic = new Array();
	var result = AbSearchEngine.getResults();
	
	if( AbSearchEngine.getResults().length > 0 )
	{
		var selected_star = AbSearchSerializer._StartStars;
		
		resultSorted = result.sort( this._sortStars );
		lines = AbStringUtil( lines, "<tr><td colspan='2'>", AbMsg['DYNMENU_STARS'], ":</td></tr>");
		
		for ( var rs_iter = 0; rs_iter < resultSorted.length; rs_iter++ )
		{
			
			var zvezdic = resultSorted[ rs_iter ].Stars;
			
			if ( typeof( last_zvezdic[ zvezdic.toString() ] ) == "undefined" )
			{
				if( selected_star == zvezdic )
				{
					lines = AbStringUtil( lines, "<tr><td width='10'><input type='checkbox' checked='checked' class='no-background' name='checkbox" , rs_iter, "' id='checkbox" , rs_iter, "' value='" , zvezdic, "' onclick='AbSearchSerializer.selectStars(this.value, this.checked); AbSearchSerializer.SlideCut(document.getElementById(\"horInfo\").value);' /></td><td><span class='a' onclick='javascript: getElementById(\"checkbox" , rs_iter,"\").click();'>", zvezdic , " ", ( zvezdic >= 2 ? AbMsg['FILTER_STARS'] : AbMsg['FILTER_STAR'] ), "</span></td></tr>" );
				}
				else
				{
					lines = AbStringUtil( lines, "<tr><td width='10'><input type='checkbox' class='no-background' name='checkbox" , rs_iter, "' id='checkbox" , rs_iter, "' value='" , zvezdic, "' onclick='AbSearchSerializer.selectStars(this.value, this.checked); AbSearchSerializer.SlideCut(document.getElementById(\"horInfo\").value);' /></td><td><span class='a' onclick='javascript: getElementById(\"checkbox" , rs_iter, "\").click();'>", zvezdic , " ", ( zvezdic >= 2 ? AbMsg['FILTER_STARS'] : AbMsg['FILTER_STAR'] ), "</span></td></tr>" );
				}
			}
			
			last_zvezdic[ zvezdic.toString() ] = zvezdic;
		}
		
	}
	else
	{
		lines = AbStringUtil("<tr><td>&nbsp;</td></tr>");
	}
		
	lines = AbStringUtil( lines, "</table>" );
	
	var final = document.getElementById("Zvezdice");
	
	if( final )
		final.innerHTML = lines;
}

AbSearchSerializer.drawHotelName = function()
{
	var lines = AbStringUtil( "<input type=\"text\" onKeyUp=\"AbSearchSerializer._typeHotel();\" class=\"field\" id=\"txtHotel\" name=\"txtHotel\" value=\"" , AbSearchSerializer._SearchHotel, "\">" );
	
	var final = document.getElementById('NazivHotela');
	
	if( final )
		final.innerHTML = lines;
}

AbSearchSerializer.sortAmenity = function( a, b )
{
	var key = AbLanguage.getCurrentLanguage() == 1 ? "SLName" : "Name";
	
	if( a[ key ] > b[ key ] )
		return 1;
	else
		return -1;
}

AbSearchSerializer.drawAmenity = function() // izpiše storitve
{
		
	var lines = "";
	var amenities_all = AbAmenity.getAllAmenities();
	amenities_all.sort( AbSearchSerializer.sortAmenity );
	
	if( amenities_all.length > 0 )
	{
		if( !AbSearchEngine.canDisplayResults() )
		{
			lines = "<img src=\"/content/images/load-results.gif\" width=\"16\" height=\"16\" border=\"0\" />";
		}
		else
		{
			lines = new String("<table width='100%' border='0' cellspacing='0' cellpadding='0'>");
			lines = AbStringUtil( lines, "<tr><td colspan='2'><ul><li>", AbMsg['DYNMENU_AMENITIES'], "</li></ul></td></tr>" );
			for ( var amenity_iter = 0; amenity_iter < amenities_all.length; amenity_iter++ )
			{		
				var amenityName = (AbLanguage.getCurrentLanguage().Id == 1) ? AbAmenity._List[ amenity_iter ].SLName : AbAmenity._List[ amenity_iter ].Name;
				var amenityId = AbAmenity._List[ amenity_iter ].Id;
				
				lines = AbStringUtil( lines, "<tr><td class='amenity-item'><input class='no-background' type='checkbox' id='amenity",amenityId,"' value='",amenityId,"' onclick='AbSearchSerializer.selectAmenity(this.value, this.checked); AbSearchSerializer.SlideCut(document.getElementById(\"horInfo\").value);' /></td><td><span class='a' onclick='document.getElementById(\"amenity",amenityId,"\").click();'>",amenityName,"</span></td></tr>" );
			}
			
			lines = AbStringUtil( lines, "</table>" );
		}
	}
	else
	{
		if( AbSearchEngine.checkComplete() )
		{
			lines = "";
		}
		else
		{
			lines = "<img src=\"/content/images/load-results.gif\" width=\"16\" height=\"16\" border=\"0\" />";
		}
	}

	
	var final = document.getElementById("Storitve");
	
	if ( final )
		final.innerHTML = lines;	
}

AbSearchSerializer.drawHeader = function() // izrisuje header (tisti del nad rezultati)
{
	var lines1 = new String();
	var lines2 = new String();
	
	lines1 = AbStringUtil( lines1, "<strong>&nbsp;" , AbMsg['SEARCH_CHECKIN'], ":</strong> ", AbSearchEngine.getAttribute('SearchDateFrom')," <img src='images/bg_dotted_border_left.png' width='1' height='23' align='absbottom' /> <strong>", AbMsg['SEARCH_CHECKOUT'], ":</strong> ",AbSearchEngine.getAttribute('SearchDateTo')," <img src='images/bg_dotted_border_left.png' width='1' height='23' align='absbottom' /><br />&nbsp;");
	
	lines2 = AbStringUtil( lines2, AbMsg['SEARCH_ORDER_BY'], ":<br/><select name='select3' id='select3' onchange='AbSearchEngine.setAttribute(\"SortBy\",(this.value)); AbSearchSerializer._update(); this.value = \"null\";'><option value='Price'>", AbMsg['SEARCH_ORDER_PRICE'], "</option><option value='Stars'>", AbMsg['SEARCH_ORDER_STARS'], "</option><option value='Name'>", AbMsg['SEARCH_ORDER_NAME'], "</option></select><br/><img src='/images/1px.gif' width='1' height='3' border='0' />");

	var final1 = document.getElementById('header1');
	var final2 = document.getElementById('header2');
	
	if( AbSearchEngine.getDisplayResults().length > 0 )
	{
		if ( final1 )
			final1.innerHTML = lines1;
		
		if ( final2 )
			final2.innerHTML = lines2;
	}
	
	// TODO: Order By in cela zgornja vrstica!
}

AbSearchSerializer.drawPages = function() // dinamično izrisuje nogo rezultatov (tisti del pod rezultati)
{
	var lines = "<table width='100%' border='0' cellspacing='0' cellpadding='2'><tr>";
	var page = AbSearchSerializer.getCurrentPage();
	var pages = AbSearchSerializer._calculateMaxPages();
	var text = "";
	
	for( var pi_iter = 0; pi_iter < pages; pi_iter++ )
	{
		var page_num = pi_iter+1;
		if( page != page_num )
			text = AbStringUtil( text, " <span class='a' onclick='AbSearchSerializer.setPage(", page_num, ")'>", page_num, "</span> " );
		else
			text = AbStringUtil( text, " <strong>", page_num, "</strong> " );
			
		if( page_num != pages )
			text = AbStringUtil( text, " | " );
	}
	
	lines = AbStringUtil( lines, "<td nowrap='nowrap' width='100'>", (page != 1 ? (AbStringUtil( "<span class='a' onclick='AbSearchSerializer.previousPage()'>", "&laquo; ", AbMsg['SEARCH_PAGE_PREVIOUS'], "</span>" )):"&nbsp;"), "</td>" );
	lines = AbStringUtil( lines, "<td align='center'>", AbMsg['SEARCH_PAGE'], " ", text, "</td>" );
	lines = AbStringUtil( lines, "<td nowrap='nowrap' width='100' align='right'>", (page != pages ? (AbStringUtil( "<span class='a' onclick='AbSearchSerializer.nextPage()'>", AbMsg['SEARCH_PAGE_NEXT'], " »", "</span>" )):"&nbsp;"), "</td>" );
	
	lines = AbStringUtil( lines, "</tr></table>" );
	
	var final = document.getElementById("pages-top");
	var final_bottom = document.getElementById("pages-bottom");
	var complete = AbSearchEngine.checkComplete();
	
	if( final && complete )
		final.innerHTML = lines;
	if( final_bottom && complete )
		final_bottom.innerHTML = lines;
}

AbSearchSerializer.getCurrentPage = function()
{
	var page = AbSearchEngine.getAttribute("Page");
	
	if( !page )
		page = AbSearchEngine.getAttribute("DefPage");
		
	return page;
}

AbSearchSerializer._calculateMaxPages = function()
{
	var results = AbSearchEngine.getDisplayResults();
	var max_results = AbSearchEngine.getAttribute("DefRecPerPage");
//	return Math.ceil( results.length / max_results );
	var max_pages = Math.ceil (results.length/max_results);
	return !max_pages? 1 : max_pages;
}

AbSearchSerializer._setPage = function( p_page )
{
	AbSearchEngine.setAttribute("Page", p_page);
}

AbSearchSerializer.nextPage = function()
{
	var page = this.getCurrentPage();
	this._setPage( page + 1 );
	this._update();
}

AbSearchSerializer.setPage = function( which )
{
	this._setPage( which );
	this._update();
}

AbSearchSerializer.previousPage = function()
{
	var page = this.getCurrentPage();
	
	if( page > 1 )
		this._setPage( page - 1 );
		
	this._update();
}

AbSearchSerializer._sortStars = function ( a, b )
{
	var x = a.Stars;
    var y = b.Stars;
    return (y - x);
}

AbSearchSerializer.SlideInfo = function ( procent ) // dinamično kreira ceno na sredini slider-a glede na njegov položaj
{
	var priceFrom, priceTo, cenaOd, cenaDo;
	
	priceFrom = document.getElementById("priceFrom");
	priceTo = document.getElementById("priceTo");
	
	cenaOd = priceFrom ? priceFrom.title : 0;
	cenaDo = priceTo ? priceTo.title : 0;

	var razlika = cenaDo - cenaOd;
	
	var trenutna = (((razlika * procent) / 100) + parseInt(cenaOd));
	
	lines = new String();
	
	trenutna = (Math.round(trenutna).toMoney()).replace(',00', '');
	
	lines = AbStringUtil("<strong>",trenutna,"</strong>");
	
	var range = document.getElementById("range");
	
	if( range )
		range.innerHTML = lines;
}

AbSearchSerializer.selectStars = function ( star, state ) // se izvrši, ko kliknemo v šifrantu na zvezdico - doda izbrano zvezdico v array v katerega se shranjujejo zvezdice
{
	if ( state )
	{
		this._SelectedStars.push(star);
	}
	else
	{
		for ( var ss_iter = 0; ss_iter < this._SelectedStars.length; ss_iter++ )
		{
			if ( this._SelectedStars[ ss_iter ] == star )
			{
				this._SelectedStars.splice( ss_iter, 1 );
				break;
			}
		}
	}
										   
	this._Filter();
}

AbSearchSerializer.selectAmenity = function ( id, state )
{
	if ( state )
	{
		this._SelectedAmenities.push( id );
	}
	else
	{
		for ( var as_iter = 0; as_iter < this._SelectedAmenities.length; as_iter++)
		{
			if ( this._SelectedAmenities[ as_iter ] == id )
				this._SelectedAmenities.splice( as_iter, 1 );
		}
	}
	
	//alert("Počasi, počasi! Še delam na tem! :D");
	
	this._Filter();
}

AbSearchSerializer.SlideCut = function ( procent ) // reže rezultate glede na slider in na koncu požene this._Filter
{
	var priceFrom = document.getElementById("priceFrom");
	var priceTo = document.getElementById("priceTo");
	var cenaOd = 0, cenaDo = 0;
	
	if( priceFrom )
		cenaOd = priceFrom.title;
	if( priceTo )
		cenaDo = priceTo.title;

	var razlika = cenaDo - cenaOd;
	
	var trenutna = ((razlika * procent) / 99) + parseFloat(cenaOd);
	
	this._SliderState = trenutna;
	this._Filter();

}

AbSearchSerializer._Filter = function () // generalna funkcija za filtriranje, ki se sproži, če uporabimo šifrant
{
	var results = AbSearchEngine.getResults();
	
	var displayResults = results.slice( 0, results.length );
	
	displayResults = this._PriceFilter( displayResults );
	displayResults = this._AmenityFilter( displayResults );
	displayResults = this._StarsFilter( displayResults );
	displayResults = this._NameFilter( displayResults );	


	AbSearchEngine._Display._ResultSet = displayResults;
	
	AbSearchEngine.setAttribute("Page", 1);
	this._update();
}

AbSearchSerializer._PriceFilter = function( p_res )
{
	var newRes = new Array;

	for( var pf_iter = 0; pf_iter < p_res.length; pf_iter++ )
	{		
		if( this._SliderState && this._SliderState > 0 )
		{
			if( parseFloat( p_res[ pf_iter ].Price ) <= parseFloat( this._SliderState ) )
			{
				newRes.push( p_res[ pf_iter ] );
			}
		}
	}
	
	return newRes;
}

AbSearchSerializer._AmenityFilter = function( p_res )
{
	var newRes = new Array;
	var amenities = this._SelectedAmenities;
	
	if( amenities.length > 0 )
	{
		for( var af_iter = 0; af_iter < p_res.length; af_iter++ )
		{
			if( this._AmenityCheck( p_res[ af_iter ].Amenity ) )
			{
				newRes.push( p_res[ af_iter ] );
			}
		}
	}
	else
	{
		return p_res;
	}
	
	return newRes;
}

AbSearchSerializer._AmenityCheck = function( p_obj )
{
	for( var ac_iter = 0; ac_iter < p_obj.length; ac_iter++ )
	{
		if( this._Amenities( p_obj[ ac_iter ].Id ) )
		{
			return true;
		}
	}
	return false;
}

AbSearchSerializer._Amenities = function( p_id )
{
	var amenities = this._SelectedAmenities;
	
	for( var a_iter = 0; a_iter < amenities.length; a_iter++ )
	{
		if( amenities[ a_iter ] == p_id )
		{
			return true;
		}
	}
	
	return false;
}

AbSearchSerializer._StarsFilter = function( p_res, init )
{
	var newRes = new Array;
	
	if( AbSearchSerializer._SelectedStars.length > 0 )
	{
		for( var sf_iter = 0; sf_iter < p_res.length; sf_iter++ )
		{
			if( AbSearchSerializer._StarsCheck( p_res[ sf_iter ].Stars ) )
			{
				newRes.push( p_res[ sf_iter ] );
			}
		}
	}
	else
	{
		return p_res;
	}
	
	return newRes;
}

AbSearchSerializer._StarsCheck = function( p_num, init )
{
	if( init )
	{
		return AbSearchSerializer._StartStars == p_num;
	}
	else
	{
		var stars = AbSearchSerializer._SelectedStars;
		
		for( var sc_iter = 0; sc_iter < stars.length; sc_iter++ )
		{
			if( stars[ sc_iter ] == p_num )
			{
				return true;
			}
		}
		
		return false;
	}
}

AbSearchSerializer._NameFilter = function( p_res, inited )
{
	var element = document.getElementById('txtHotel')
	var newRes = new Array;
	
	if(element)
	{
		if( inited )
		{
			var val = AbSearchSerializer._SearchHotel;
			element.value = val ? val : "";
		}
	
		if( element.value == "" )
		{
			return p_res;
		}
		else
		{
			for( var nf_iter = 0; nf_iter < p_res.length; nf_iter++ )
			{
				if( p_res[ nf_iter ].Name.toLowerCase().indexOf( element.value.toLowerCase() ) != -1 )
				{
					newRes.push( p_res[ nf_iter ] );
				}
			}
		}
	}
	
	return newRes;
}

AbSearchSerializer.Currency = function ( valuta ) // dinamično ptretvori vene v izbrano valuto v dropdownu
{
	if( valuta != "ORIGINAL" )
	{
		var results = AbSearchEngine.getResults();
		var data = new Array;
		for( var ct_iter = 0; ct_iter < results.length; ct_iter++ )
		{
			var cresult = results[ ct_iter ];
			data.push( AbStringUtil( cresult.SeqId, "-", cresult.OriginalCurrency, "-", cresult.OriginalPrice, "-", cresult.OriginalPriceAdults, "-", cresult.OriginalPriceChildren ) );
		}
		
		var submitData = AbStringUtil( "data=", data.toString(), "&to=", valuta );
		
		var currencyXml = new AbXmlHttp( AbSearchEngine.getDisplayResults() );
		currencyXml.connect( "/ajax/search_currency.cfm", "POST", submitData, this._CurrencyCallback );
	}
	else
	{
		var results = AbSearchEngine._Results._ResultSet;
		var dresults = AbSearchEngine._Display._ResultSet;
		
		for( var srs_iter = 0; srs_iter < results.length; srs_iter++ )
		{
			results[ srs_iter ].Price = results[ srs_iter ].OriginalPrice;
			results[ srs_iter ].PriceChildren = results[ srs_iter ].OriginalPriceChildren;
			results[ srs_iter ].PriceAdults = results[ srs_iter ].OriginalPriceAdults;
			results[ srs_iter ].Currency = results[ srs_iter ].OriginalCurrency;
		}
		
		for( var drs_iter = 0; drs_iter < dresults.length; drs_iter++ )
		{
			dresults[ drs_iter ].Price = dresults[ drs_iter ].OriginalPrice;
			dresults[ drs_iter ].PriceChildren = dresults[ drs_iter ].OriginalPriceChildren;
			dresults[ drs_iter ].PriceAdults = dresults[ drs_iter ].OriginalPriceAdults;
			dresults[ drs_iter ].Currency = dresults[ drs_iter ].OriginalCurrency;
		}
		
		AbSearchEngine.setAttribute("Page", 1);
		AbSearchSerializer.drawSlidePrice();
		AbSearchSerializer.SlideInfo( 100 );
		AbSearchSerializer._update();
	}
}

AbSearchSerializer._CurrencyCallback = function( xml, p1, p2, p3 )
{
	//alert( xml );
	var xmlDoc = null;
	try
	{
		xmlDoc = xml.responseXML.firstChild;
	}
	catch( ex )
	{
	}
	
	if( xmlDoc.nodeName == "xml" )
		xmlDoc = xmlDoc.nextSibling;
	
	var currency = xmlDoc.attributes[0].nodeValue;
	
	var sets = xmlDoc.childNodes;
	for( var ogg_iter = 0; ogg_iter < sets.length; ogg_iter++ )
	{
		var set = sets[ ogg_iter ];
		var setSeq = null;
		var setValue = null;
		
		if( set.nodeType == 1 )
		{
			setSeq = set.attributes[0].nodeValue;
			setValue = set.attributes[1].nodeValue;
			setValue2 = set.attributes[2].nodeValue;
			setValue3 = set.attributes[3].nodeValue;
			AbSearchSerializer._updatePrices( setSeq, currency, setValue, setValue2, setValue3 );
		}
	}
	
	AbSearchEngine.setAttribute("Page", 1);
	AbSearchSerializer.drawSlidePrice();
	AbSearchSerializer.SlideInfo( 100 );
	AbSearchSerializer._update();
}

AbSearchSerializer._updatePrices = function( seq, currency, value, value2, value3 )
{
	var results = AbSearchEngine._Results._ResultSet;
	var dresults = AbSearchEngine._Display._ResultSet;
	
	for( var ww_iter = 0; ww_iter < results.length; ww_iter++ )
	{
		try
		{
			if( dresults[ ww_iter ].SeqId == seq )
			{
				dresults[ ww_iter ].Currency = currency;
				dresults[ ww_iter ].Price = parseFloat( value );
				dresults[ ww_iter ].PriceAdults = parseFloat( value2 );
				dresults[ ww_iter ].PriceChildren = parseFloat( value3 );
			}
		}
		catch( ex ){}
		
		if( results[ ww_iter ].SeqId == seq )
		{
			results[ ww_iter ].Currency = currency;
			results[ ww_iter ].Price = parseFloat( value );
			results[ ww_iter ].PriceAdults = parseFloat( value2 );
			results[ ww_iter ].PriceChildren = parseFloat( value3 );
			//return;
		}
	}
}

AbSearchSerializer._typeHotel = function( ev )
{
	source = AbBrowser.sourceEvent( ev );
	
	if( source )
	{
		AbSearchSerializer._SearchHotel = source.value;
	}
		
	this._Filter();
}

AbSearchSerializer.clickMore = function( p_type, p_index, p_more )
{
	var docL = document.getElementById( AbStringUtil( p_type, p_index, "_Large" ) );
	var docS = document.getElementById( AbStringUtil( p_type, p_index, "_Small" ) );
	
	if( p_more )
	{
		docL.style.display = 'block';
		docS.style.display = 'none';
	}
	else
	{
		docS.style.display = 'block';
		docL.style.display = 'none';
	}
}
// JavaScript Document

var AbSort = function()
{
}

AbSort.ASC = 1;
AbSort.DESC = 1 << 1;

AbSort.currentKey = null;
AbSort.previousKey = null;
AbSort.Type = AbSort.ASC;

AbSort._lock = function()
{
	AbSort.currentKey = AbSearchEngine.getAttribute("SortBy");
	
	if( AbSort.currentKey == null )
	{
		AbSort.currentKey = AbSearchEngine.getAttribute("DefSortBy");
		AbSearchEngine.setAttribute("SortBy", AbSort.currentKey);
	}
}

AbSort._unlock = function()
{
	AbSort.previousKey = AbSort.currentKey;
	AbSort.currentKey = null;
	
	if( AbSort.Type == AbSort.DESC )
	{
		AbSort.Type = AbSort.DESC;
	}
	else
	{
		AbSort.Type = AbSort.DESC;
	}
}

AbSort.Comparator = function( p_a, p_b )
{
	var f1 = AbSort.previousKey;
	var f2 = AbSort.currentKey;
	
	if( f1 == f2 )
	{
		if( AbSort.Type == AbSort.ASC )
		{
			if( p_b[f2] > p_a[f2] )
				return 1
			if( p_b[f2] < p_a[f2] )
				return -1;
			return 0;
		}
		else
		{
			if( p_a[f2] > p_b[f2] )
				return 1;
			if( p_a[f2] < p_b[f2] )
				return -1;
			return 0;
		}
	}
	else
	{
		if( !AbSort.Type )
		{
			if( p_a[f2] > p_b[f2] )
				return 1;
			if( p_a[f2] < p_b[f2] )
				return -1;
			return 0;
		}
		else if( AbSort.Type == AbSort.ASC )
		{
			if( p_b[f2] > p_a[f2] )
				return 1
			if( p_b[f2] < p_a[f2] )
				return -1;
			return 0;
		}
		else
		{
			if( p_a[f2] > p_b[f2] )
				return 1;
			if( p_a[f2] < p_b[f2] )
				return -1;
			return 0;
		}
	}
}
// JavaScript Document

var AbTab = function()
{
}

AbTab.selectedMenu = null;

AbTab.onover = function( ev )
{
	var input = AbBrowser.sourceEvent( ev );

	while( input.nodeName != "TD" )
	{
		input = input.parentNode;
	}
	
	if( /Select/.test( input.className ) )
	{
	}
	else
	{
		input.className = "TypeTabHover";
	}
}

AbTab.onout = function( ev )
{
	var input = AbBrowser.sourceEvent( ev );
	
	while( input.nodeName != "TD" )
	{
		input = input.parentNode;
	}
	
	if( /Select/.test( input.className ) )
	{
	}
	else
	{
		input.className = "TypeTab";
	}
}

AbTab.onclick = function( ev )
{
	var input = AbBrowser.sourceEvent( ev );
	
	while( input.nodeName != "TD" )
	{
		input = input.parentNode;
	}
	
	if( !( /Select/.test( input.className ) ) )
	{
		input.className = "TypeTabSelect";
		
		try
		{
			// ��e ni noben izbran, potem javi error, exception nic ne naredi, ker je dovoljeno izbirati
			AbTab.selectedMenu.className = "TypeTab";
			AbTab.selectedMenu = input;
		}
		catch( e )
		{
		}
		
		try
		{
			var elems = input.getElementsByTagName('a');
			
			if( elems.length == 0 )
			{
				throw( "Missing A attribute" );
			}
			else
			{
				location.href = elems[ 0 ].href;
			}
		}
		catch( ex )
		{
			trace( AbStringUtil( "Exception occured: ", ex ), AbDebug.LOG_ERROR, AbDebug.INFO_APPLICATION );
		}
	}
}
// JavaScript Document

var AbXmlHttp = function( p_type, p_params )
{
	this._type = p_type;
	this._params = p_params;
}

AbXmlHttp.prototype._params = null;
AbXmlHttp.prototype._type = null;
AbXmlHttp.prototype._url = null;
AbXmlHttp.prototype._Xml = null;

AbXmlHttp.prototype.toString = function()
{
	return "AbXmlHttp";
}

AbXmlHttp.prototype.abort = function()
{
	this._Xml.abort();
}

AbXmlHttp.prototype.connect = function(sURL, sMethod, sVars, fnDone)
{
	var _abc = new AbConnection();
	this._Xml = _abc.xmlhttp;
	var _xml = this._Xml;
	var _seed = new Date();
	_seed = AbStringUtil( "&dt=", _seed.getTime() );
	
	_abc.params = this._params;
	_abc.type = this._type;
	_abc.url = AbStringUtil( sURL, "?", sVars, _seed );
	
	if (!_xml)
	{
		return false;
	}
		
	sMethod = sMethod.toUpperCase();
	
    try 
	{
		if (sMethod == "GET")
		{
			if (sVars != "") 
			{
				sVars = AbStringUtil( "?", sVars, _seed );
			}
			else
			{
				sVars = AbStringUtil( "?", _seed );
			}
			
			_xml.open( sMethod, AbStringUtil( sURL, sVars ) , true );
			sVars = "";
		}
		else
		{
			_xml.open( sMethod, sURL, true );
			_xml.setRequestHeader( "Method", AbStringUtil( "POST ", sURL, " HTTP/1.1" ) );
			_xml.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" );
		}
	  
		if(fnDone) 
		{
			_xml.onreadystatechange = function() 
			{ 
				if (_xml.readyState == 4) 
				{
					if( !(/^2./.test(_xml.status)) )
					{
						trace( AbStringUtil( "<a href=\"", _abc.url ,"\" target=\"_blank\">", _xml.statusText, " ", _xml.status, "</a>" ), AbDebug.LOG_ERROR, AbDebug.INFO_AJAX_RESPONSE );
					}
					else
					{
						trace( AbStringUtil( _xml.statusText, " ", _xml.status), AbDebug.LOG_INFO, AbDebug.INFO_AJAX_RESPONSE );
						if( fnDone )
						{
							fnDone( _xml, _abc.type, _abc.params, _abc );
						}
						else
						{
							trace( AbStringUtil( "Callback function is not defined" ), AbDebug.LOG_WARN, AbDebug.INFO_AJAX_RESPONSE );
						}
					}
				}
			}
		}
		trace( AbStringUtil("Connecting to <a href=\"", _abc.url, "\" target=\"_blank\">", sURL, "</a> using ", sMethod, " method"), AbDebug.LOG_INFO, AbDebug.INFO_AJAX_REQUEST );
		_xml.send(sVars);
    }
    catch(z) 
	{
		trace( "Something is wrong", AbDebug.LOG_FATAL, AbDebug.INFO_AJAX_REQUEST );
		return false; 
	}
	
    return true;
}

var defaultDateSeparator = '.';
var defaultDateFormat = 'dmy';
var setMaxTravelers = null;

function general_ol()
{
	//AbPassengerList();
	//AbProfile.getRemoteData();
	if( setMaxTravelers )
		setMaxTravelers();
	//AbLogin.LoadLoginHead();
	
	var plist = AbPassengerList._List;
}

window.onload = function( ev )
{
/*	try
	{*/
		var mp = mouseCoords( ev )
		//AbInit.addEvent( AllInit );
		AbInit.addEvent( general_ol );
		AbInit.addEvent( debug );
		AbInit.addEvent( AbProfile._Init );
		AbInit.addEvent( AbSearchEngine._Init );
		AbInit.addEvent( SearchInit );
		// AbInit.addEvent( AbCreditCard.init );
		// AbInit.addEvent( AbDate.Init );
		AbInit.addEvent( AbSearchEngine._invoke );
		AbLoadingBar.setPosition( mp.x, mp.y );
		AbInit._invoke ( );
		
		// Za Slider
		document.onmousedown = AbSlider.Slide_onMouseDown;
		document.onmouseup = AbSlider.Slide_onMouseUp;
		document.onmousemove = AbSlider.Slide_onMouseMove;
/*	}
	catch( e )
	{
		ErrorReport( e );
	}*/
}

window.onbeforeunload = function( ev )
{
	AbSearchEngine.abort();	// Deinicializacija
}

function SearchInit()
{
}

function mouseCoords(ev)
{
	ev = ev || window.event;
	
	if(ev.pageX || ev.pageY)
	{
		return {x:ev.pageX, y:ev.pageY};
	}
	return {
		x: ev.clientX + document.body.scrollLeft - document.body.clientLeft,
		y: ev.clientY + document.body.scrollTop  - document.body.clientTop
	};
}
