var _rn = "\r\n";

var VH_ExtForms = {
	
	Init: function()
	{
		// initialization lists
		this._InitUL();
	},
	
	
	_InitUL: function()
	{
		/*var uls = document.getElementsByTagName('ul');
		for ( var i=0; i < uls.length; i++ )
		{
			
		}*/
	},
	
	
	FIE: function(){}
};


var VH_Global = {
	
	GetBrowser: function()
	{
		var ua = navigator.userAgent.toLowerCase();
		if (ua.indexOf("msie") != -1 && ua.indexOf("opera") == -1 && ua.indexOf("webtv") == -1) return "msie";
		if (ua.indexOf("opera") != -1) return "opera";
		if (ua.indexOf("gecko") != -1) return "gecko";
		if (ua.indexOf("safari") != -1) return "safari";
		if (ua.indexOf("konqueror") != -1) return "konqueror";
		return "unknown";
	},
	
	StrReplace: function(srch, rplc, subject )
	{
		if(!(rplc instanceof Array))
		{
			rplc=new Array(rplc);
			if(srch instanceof Array)
			{
				while(srch.length>rplc.length)
				{
					rplc[rplc.length]=rplc[0];
				}
			}
		}
		
		if ( !(srch instanceof Array) )
		{
			srch=new Array(srch);
		}
		
		while (srch.length>rplc.length)
		{
			rplc[rplc.length]='';
		}
		
		if (subject instanceof Array)
		{
			for(k in subject)
			{
				subject[k]=this.StrReplace(srch,rplc,subject[k]);
			}
			
			return subject;
		}
		
		for(var k=0; k<srch.length; k++)
		{
			var i = subject.indexOf(srch[k]);
			
			while(i>-1)
			{
				subject = subject.replace(srch[k], rplc[k]);
				i = subject.indexOf(srch[k],i);
			}
		}
		
		return subject;
	},
	
	
	HtmlSpecialCharsDecode: function(text)
	{
		text = this.StrReplace('&quot;', '"', text);
		text = this.StrReplace('&amp;', '&', text);
		return text;
	},
	
	AddSlashes: function(text)
	{
		return text.replace('/(["\'\])/g', "\\$1").replace('/\0/g', "\\0");
	},
	
	ShowLangs: function(id)
	{
		var layer = document.getElementById(id);
		layer.className = layer.className == '' ? 'hided' : '';
		VH_Control._control_dd = id;
	},
	
	
	Drop: function(id)
	{
		var layer = document.getElementById(id);
		layer.className = layer.className == '' ? 'hided' : '';
		VH_Control._control_dd = id;
	},
	
	
	ShowHide: function(id)
	{
		var l = document.getElementById(id);
		l.style.display = l.style.display == 'block' ? 'none' : 'block';
	},
	
	
	ShowLayer: function(id)
	{
		var layer = document.getElementById(id);
		if ( layer )
		{
			layer.style.display = layer.style.display == 'none' ? 'block' : 'none';
			//alert(layer.style.display);
			VH_Control._control_layer = id;
		}
	},
	
	
	ShowLayerId: function(id)
	{
		document.getElementById(id).style.display='block';
	},
	
	
	HideLayerId: function(id)
	{
		var l = document.getElementById(id);
		if ( l )
		{
			l.style.display='none';
		}
	},
	
	// to check email address
	CheckEmail: function(email)
	{
		var preg = /^[\.\-_A-Za-z0-9]+?@[\.\-A-Za-z0-9]+?\.[A-Za-z0-9]{2,6}$/;
		return preg.test(email);
	},
	
	
	CheckFillField: function(field)
	{
		var status = document.getElementById('status-' + field.id);
		
		if ( field.value == '' )
		{
			status.className='f-name error';
			return false;
		}
		else
		{
			status.className='f-name';
			return true;
		}
	},
	
	
	CheckSelectField: function(field)
	{
		var status = document.getElementById('status-' + field.id);
		
		if ( (field.value == 0) || (field.value == '') )
		{
			status.className='f-name error';
			return false;
		}
		else
		{
			status.className='f-name';
			return true;
		}
	},
	
	
	CheckFillEmail: function(field)
	{
		var status = document.getElementById('status-' + field.id);
		
		if ( field.value == '' )
		{
			status.className='f-name error';
			return false;
		}
		else if ( !this.CheckEmail(field.value) )
		{
			status.className='f-name error';
			return false;
		}
		else
		{
			status.className='f-name';
			return true;
		}
	},
	
	
	CheckFillName: function(field, preg)
	{
		var status = document.getElementById('status-' + field.id);
		preg = typeof(preg) != 'undefined' ? preg : new RegExp('^([A-Za-zА-Яа-я ]{3,60})$');
		
		if ( field.value == '' )
		{
			status.className='f-name error';
			return false;
		}
		else if ( !preg.test(field.value) )
		{
			status.className='f-name error';
			return false;
		}
		else
		{
			status.className='f-name';
			return true;
		}
	},
	
	
	CheckDblPassword: function(password,password2)
	{
		var passwordStatus = document.getElementById('status-' + password.id);
		var password2Status = document.getElementById('status-' + password2.id);
		
		if ( (password.value != '') && (password.value == password2.value) )
		{
			passwordStatus.className='f-name';
			password2Status.className='f-name';
			return true;
		}
		else
		{
			passwordStatus.className='f-name error';
			password2Status.className='f-name error';
			return false;
		}
	},
	
	
	CheckAll: function(checkboxids, checked)
	{
		if ( checkboxids == 0 )
		{
			return false;
		}
		else
		{
			var cb = null;
			for ( var i = 0; i < checkboxids.length; i++ )
			{
				cb = document.getElementById(checkboxids[i]);
				if ( cb && (cb.type == 'checkbox') && !cb.disabled )
				{
					cb.checked = checked;
				}
			}
		}
	},
	
	
	CheckAllBg: function(checkboxids, checked, trs)
	{
		if ( checkboxids == 0 )
		{
			return false;
		}
		else
		{
			var cb = null;
			for ( var i = 0; i < checkboxids.length; i++ )
			{
				cb = document.getElementById(checkboxids[i]);
				if ( cb && (cb.type == 'checkbox') && !cb.disabled )
				{
					cb.checked = checked;
					document.getElementById(trs[i]).className = cb.checked ? 'selected' : '';
				}
			}
		}
	},
	
	
	CheckAllBg2: function(ids, checked)
	{
		if ( ids == 0 )
		{
			return false;
		}
		else
		{
			var cb = input = td = null;
			for ( var i = 0; i < ids.length; i++ )
			{
				cb = document.getElementById('cb'+ids[i]);
				td = document.getElementById('td'+ids[i]);
				input = document.getElementById('hotel'+ids[i]);
				
				if ( cb && (cb.type == 'checkbox') && !cb.disabled )
				{
					cb.checked = checked;
					td.style.background = cb.checked ? '#ccffcc' : '#ffcccc';
					input.value = cb.checked ? 1 : 0;
				}
			}
		}
	},
	
	Trim: function(str, charlist)
	{
		charlist = !charlist ? ' \s\xA0' : charlist.replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^\:])/g, '\$1');
		var re = new RegExp('^[' + charlist + ']+|[' + charlist + ']+$', 'g');
		return str.replace(re, '');
	},
	
	FIE: function(){}
};


/******************
 * © Visual Hotels
 * @author: Fedorov Artem
 * @description: объект по управлению формами, слоаями и прочими фиговинами на сайте
 *
 */
var VH_Control = {
	
	/**
	 * @description: активные слои
	 */
	_ActiveLayers: 0,
	
	
	_to_control_dd: true,
	_control_dd: '',
	
	_to_control_layer: true,
	_control_layer: '',
	
	
	arr: null,
	
	
	_CanHide: true,
	CanHide: function(value,seconds,callback)
	{
		seconds = parseInt(seconds) || 0;
		callback = callback || "return false";
		
		if ( seconds > 0 )
		{
			setInterval(callback, seconds);
		}
		else
		{
			this._CanHide = value;
		}
	},
	
	
	/**
	 * init drop down
	 */
	_InitDropDown: function(dds)
	{
		var dd = document.getElementById(dds);
		var divs = dd.getElementsByTagName('div');
		for ( var i = 0; i < divs.length; i++ )
		{
			if ( divs[i].className == 'drop-icon' )
			{
				divs[i].onmouseover = function(){VH_Control._to_control_dd = false;}
				divs[i].onmouseout = function()	{VH_Control._to_control_dd = true; }
			}
		}
		
		var lis = dd.getElementsByTagName('li');
		for ( var i = 0; i < lis.length; i++ )
		{
			if ( lis[i].className == 'drop-text' )
			{
				lis[i].onmouseover = function()	{VH_Control._to_control_dd = false;}
				lis[i].onmouseout = function()	{VH_Control._to_control_dd = true; }
			}
		}
	},
	
	
	/**
	 * to hide drop down
	 */
	_HideDropDown: function(dds_ul)
	{
		var layer = document.getElementById(dds_ul);
		layer.className = 'hided';
	},
	
	
	/**
	 * to init layers
	 */
	_InitLayers: function(layers)
	{
		for ( var i = 0; i < layers.length; i++ )
		{
			var _layers = document.getElementById(layers[i]);
			_layers.onmouseover = function(){VH_Control._to_control_layer = false;}
			_layers.onmouseout = function()	{VH_Control._to_control_layer = true; }
		}
	},
	
	
	/**
	 * to hide layer
	 */
	_HideLayer: function(layer_id)
	{
		if ( this._CanHide )
		{
			var layer = document.getElementById(layer_id);
			layer.style.display = 'none';
		}
	},
	
	
	/**
	 * @description: initialization
	 */
	Init: function(dds, layers)
	{
		dds = dds || '';
		layers = layers || '';
		
		this.arr = [dds, layers];
		
		if ( dds != '' )
		{
			this._InitDropDown(dds);
		}
		
		if ( layers != '' )
		{
			layers = layers.split('|');
			this._InitLayers(layers);
		}
		
		VH_ExtForms.Init();
		document.onclick = function()
		{
			VH_Global.HideLayerId('visualhotels-messagebox');
			
			// to control drop down
			if ( VH_Control.arr[0] != '' )
				if ( (VH_Control._control_dd != '') && VH_Control._to_control_dd )
				{
					VH_Control._HideDropDown(VH_Control._control_dd);
				}
			
			// to control layers
			if ( VH_Control.arr[1] != '' )
				if ( (VH_Control._control_layer != '') && VH_Control._to_control_layer )
				{
					//alert('asd');
					VH_Control._HideLayer(VH_Control._control_layer);
				}
		}
	},
	
	FIE: function(){}
};