
function getrandom() {
	var n=Math.random();
	return n;
}

var model = {};
var rpp = 20; // Rows per page;
var resultsArea = 'results';
var resultStats = 'status';
var status_bar = 'status_bar';
var navArea = 'navBar';
var navArea2 = 'navBar2';
var currentView = $H({'TABS':'1', 'SID':'0', 'PID':'0','GID':'0'});
var outterSearch = 1;
/* ================================================================================================ */

var History = Class.create({
	initialize: function(){
		;
	}
});

function searchStatus(){
	var html = [];
	var i = 0;
	var src = search.getSearch(currentView.get('SID'));
	if (!Object.isUndefined(src)){
		var data = src.getSearchData();
		var tab = currentView.get('TABS');
		html[i++] = '<table id="search_results" class="search_results">';
		switch(parseInt(tab)){
			case 0:
			//	html[i++] = '<tr class="search_res_head"><td>Результаты поиска:<td></tr>';
				html[i++] = '<tr>';
				html[i++] = '<td>Вы искали предприятие: ';
				var name = data.get('N');
				var address = data.get('A');
				var phone = data.get('P');
				var city = data.get('C');
				if (name){html[i++] = '<span class="srch_title"> с названием "</span>'+name+'"';}
				if (address){html[i++] = '<span class="srch_title"> по адресу "</span>'+address+'"';}
				if (phone){html[i++] = '<span class="srch_title"> с телефоном "</span>'+phone+'"';}
				if (city){
					var opt = $$('option[value="'+city+'"]');
					if (!Object.isUndefined(opt)){				
						html[i++] = '<span class="srch_title"> в "</span>'+opt[0].text+'"';
					}
				}
				html[i++] = '</td></tr>';
				html[i++] = '<tr><td>Найдено: '+src.count+' предприятий</td></tr>';
			break;
			case 1:
			//	html[i++] = '<tr class="search_res_head"><td>Результаты поиска:<td></tr>';
				html[i++] = '<tr>';
				var name = data.get('N');
				var city = data.get('C');
				html[i++] = '<td>Товар/услугу "'+name+'" ';
				if (city){
					var opt = $$('option[value="'+city+'"]');
					if (!Object.isUndefined(opt)){				
						html[i++] = '<span class="srch_title"> в "</span>'+opt[0].text+'"';
					}
				}
				html[i++] = ' предлагают: '+src.count+' предприятий</td></tr>';
			break;
			case 2:
				html[i++] = '<tr>';
				html[i++] = '<td>Вы искали предприятие: ';
				var cl_id = data.get('CL');
				var city = data.get('C');
				if (cl_id){
					if (!Object.isUndefined(classificator)){
						for (var j=0;j<classificator.length;j++){
							if (classificator[j].ID==cl_id){html[i++] = '<span class="srch_title"> со сферой деятельности </span>"'+classificator[j].VALUE+'"';}
						}
					}
				}
				if (city){
					var opt = $$('option[value="'+city+'"]');
					if (!Object.isUndefined(opt)){				
						html[i++] = '<span class="srch_title"> в "</span>'+opt[0].text+'"';
					}
				}
				html[i++] = '</td></tr>';
				html[i++] = '<tr><td>Найдено: '+src.count+' предприятий</td></tr>';
			break;
		}
		html[i++] = '</table>';
		$(resultStats).update(html.join("\n"));
	}
}

function navBar(){
	var html= [];
	var i = 0;
	if (currentView.get('SID') !='0'){
		html[i++] = '<table class="search_results"><tr class="search_res_head">';
		html[i++] = '<td id="pager" class="pager">'+pager.render()+'</td>';
		var pid = currentView.get('PID');
		if (pid != '0'){
			html[i++] = '<td class="back_button">назад</td>';
		};
		html[i++] = '<tr></table>';
	}
	var res = html.join("\n");
	$(navArea).update(res);
	$(navArea2).update(res);
}

function renderHeadRow(td2,td1){
	if (Object.isUndefined(td1)){td1 = '№ п/п';}
	if (Object.isUndefined(td2)){td2 = 'Наименование, адрес';}
 	var str ='';
	str += '<tr class="search_res_head">';
	str +=	'<td class="td1">'+td1+'</td>';
	str +=	'<td class="td2">'+td2+'</td>';
//	str +=	'<td class="td3">Телефоны</td>';
	str +=	'</tr>';
	return str;
}

function tabHead(tab){
	var tabs = [
		{'NAME':'Предприятия','TAB':'0'},
		{'NAME':'Виды деятельности','TAB':'2'},
		{'NAME':'Товары и услуги','TAB':'1'}
	];
	var i = 0;
	var j;
	var html = [];
	html[i++]= '<div><ul class="tabber">';
	for (j=0;j<tabs.length;j++){
		html[i++]= '<li value="'+tabs[j].TAB+'" class="tab ';
		if (tabs[j].TAB!=tab) html[i++]= 'in'; 
		html[i++]= 'active">'+tabs[j].NAME+'</li>';
	}
	html[i++]= '<li class="empty_tab">&nbsp;</li>';
	html[i++]= '</ul></div>';
	return html.join('');		
}

function getCityReference(asID,label){
	if (Object.isUndefined(towns)){return ''}
	var html=[],i=0;
	html[i++]= '<div class = "search75_item"><div class = "search75_label">'+label+'</div><div class = "search75_input">';
	html[i++]='<select id="'+asID+'">';
	html[i++]='<option value="">не имеет значения</option>';
	for (var j=0;j<towns.length;j++){
		var sel = '', town = towns[j].VALUE;
	//	if (town.startsWith('ТЮМЕНЬ')){sel='selected="selected"';} 
		html[i++]='<option '+sel+' value="'+towns[j].ID+'">'+towns[j].VALUE+'</option>';
	}
	html[i++]='</select></div></div>';
	return html.join('');
}
function getNameField(asID,label){
	var html=[],i=0;
	html[i++]= '<div class = "search75_item"><div class = "search75_label">'+label+'</div><div class = "search75_input">';
	html[i++]='<input id="'+asID+'" class="submitable"/>';
	html[i++]='</div></div>';
	return html.join('');
}
function getNameField2(asID,label){
	var html=[],i=0;
	html[i++]= '<div class = "search75_item"><div class = "search75_label">'+label+'</div><div class = "search75_input">';
	html[i++]='<input id="'+asID+'" class="submitable"/>';
	html[i++]='</div><div class = "search75_btn">';
	html[i++]='<input type="submit" id="'+asID+'" value="Найти" class="psearch up_pusher2"/>';
	html[i++]='</div></div>';
	return html.join('');
}
function getAddressField(asID,label){
	var html=[],i=0;
	html[i++]= '<div class = "search75_item"><div class = "search75_label">'+label+'</div><div class = "search75_input">';
	html[i++]='<input id="'+asID+'" class="submitable"/>';
	html[i++]='</div></div>';
	return html.join('');
}
function getPhoneField(asID,label){
	var html=[],i=0;
	html[i++]= '<div class = "search75_item"><div class = "search75_label">'+label+'</div><div class = "search75_input">';
	html[i++]='<input id="'+asID+'" class="submitable"/>';
	html[i++]='</div><div class = "search75_btn">';
	html[i++]='<input type="submit" id="'+asID+'" value="Найти" class="psearch up_pusher2"/>';
	html[i++]='</div></div>';
	return html.join('');
}
function getSearchButton(asID,label){
	var html=[],i=0;
	html[i++]= '<div style="z-index:0" class = "search75_item lower"><div class = "search75_btn">';
	html[i++]='<input type="submit" id="'+asID+'" value="'+label+'" class="psearch up_pusher2"/>';
	html[i++]='</div>';
	return html.join('');
}

function getMsgErrorLine(fl){
	
	var html=[],i=0;
	html[i++]= '<div class = "search75_item2">';
	html[i++]='<div id="status_bar" class="ok">';
	if (fl){
		html[i++] = '<span style="padding-left:50px"><b>Подсказка:</b> Введите один из параметров';
	}
	html[i++]='</div></div>';
	return html.join('');

}
function getClassificator(){
	if (Object.isUndefined(classificator)){return ''}
	var html=[],i=0;
	html[i++]= '<div class = "search75_item_cl"><div class = "search75_classificator">';
	for (var j=0;j<classificator.length;j++){
		html[i++]='<p class="search75_classificator_item" id="'+classificator[j].ID+'">'+classificator[j].VALUE+'</p>';
	}
	
	html[i++]='</div></div>';
	return html.join('');
}

function tabBody(tab){
	var i = 0;
	var j;
	var html = [];
	html[i++]='<div class="tabcontent">'
	switch(parseInt(tab)){
		case 0:
			html[i++]= getCityReference('pcity','Город');
			html[i++]= getNameField('pname','Название');
			html[i++]= getAddressField('paddress','Адрес');
			html[i++]= getPhoneField('pphone','Телефон');
			html[i++]= getMsgErrorLine(1);
		break;
		case 1:
			html[i++]=getCityReference('pcity','Город');
			html[i++]=getNameField2('pname','Наименование');
			html[i++]= getMsgErrorLine();
		break;
		case 2:
			html[i++]=getCityReference('pcity','Город');
			html[i++]=getClassificator();
		break;
	}
	html[i++]='</div>';
	return html.join('');
}

function tabulator(tab){
	var url = window.location.href; 
	//url = uridecode(url);
	var curl = $H(url.toQueryParams()),flag = 1;
	//if ((outterSearch>0)&&curl.get('tab')) {
//		tab = curl.get('tab');
	//}
	if (tab == "") tab = "0";
	var i = 0, html = [];
	html[i++]= '<div class="tabulator">';
	html[i++]= tabHead(tab);
	html[i++]= tabBody(tab);
	html[i++]= '</div>';
	$('tabulator').update(html.join(''));
	//var tabs = parseInt(tab)+1;
	currentView.set('TABS',tab);
	Behaviour.apply();
	//$$('.lower').each(function(elm){elm.setStyle({height:'10px'})});
	/*
		outside presearch configuration
	*/
	var name= curl.get('name'), phone = curl.get('phone'), address = curl.get('address');
	if ((outterSearch>0)&&(name||phone||address)){
		switch(parseInt(currentView.get('TABS'))){
			case 0:
				if (name){ $('pname').value = name;}
				if (phone){ $('pphone').value = phone;}
				if (address){$('paddress').value = address;}
			break;
			case 1:
				if (name){ $('pname').value = name;}
			break;
		}
		searchIt();
		outterSearch--;
	}
	
}

function synPage(data){
	var html=[],i=0;
	html[i++] = '<table id="search_results" class="search_results">';
	html[i++] = '<tr class="search_res_head"><td colspan="2"><span class="publInfo_header">Выберите товар или услугу</span></td></tr>';
	if (!Object.isUndefined(data[0])){
		for (var j=0;j<data.length;j++){
			var cl = 'odd';
			if (j % 2){
				cl = 'even';
			}
			html[i++]= '<tr class="search_res_line price '+cl+'" value="'+data[j].N+'"><td>'+(j+1)+'</td><td>'+data[j].N+'</td></tr>';
		}
		
	}else{html[i++]= '<tr class="even"><td colspan="2" style="text-align:center">Ничего не найдено</td></tr>';}
	html[i++] = '</table>';
	$(resultsArea).update(html.join(""));
	Behaviour.apply();
}

var Pager = Class.create({
	initialize: function(){
		; 
	},
	render: function(){
		var sid = currentView.get('SID'), pid = currentView.get('PID'), gid = currentView.get('GID');
		var html = [], src, klass;
		if (pid != '0' && gid =='0'){ return '&nbsp';}
		if (sid != '0' && pid =='0'){
			src = search.getSearch(sid);
			klass = 'pager_nav';
		}
		if (gid != '0' && pid !='0'){
			src = prices.getPrice(pid);
			klass = 'pager_nav_price';
		}
		var pages = src.pages, page = src.lastVP, i= parseInt(page)-5, mpage = parseInt(page)+5;
		if (mpage > pages) mpage = parseInt(pages);
		if (i<0) i = 0;
		if (i>0) html[i++]='... ';
		for (i; i<mpage; i++){
			if (i == parseInt(page)) html[i] = '<span class="pager_cur">'+(parseInt(i)+1)+'</span>';
				else html[i] = '<span class="'+klass+'">'+(parseInt(i)+1)+'</span>';
		}
		if (mpage<parseInt(pages)) html[i++]=' ...';
		return 'Страницы: '+html.join(' ');
	}
});

var Search = Class.create({
	initialize: function(id,type,data,params){
		this.id = id;
		this.type = type;
		this.data = $H(data);
		this.results = $H({}); //$A(results);
		this.rpp = params.get('ROWS');
		this.count = params.get('COUNT');
		this.clas = params.get('CLASS');
		this.pages = params.get('PAGES');
		this.lastVP = 0;
	},
	getSearchId:function(){
		return this.id;
	},
	getSearchType:function(){
		return this.type;
	},
	getSearchData:function(){
		return this.data;
	},
	addPage: function(i,page){
		var p = $A(page);
		this.results.set(i,p);
	},
	getPage: function(n){
		return this.results.get(n); 
	},
	renderPage: function(n){
		var page = this.getPage(n);
		var l = page.length;
		var x = 0;
		var html = [];
		html[x++] = '<table class="search_results">';
		if (l>0){
			var i = 1;
			var j=0;
			html[x++] = renderHeadRow();
			for (j = 0; j<l; j++){
				switch(this.type){
					case '1':
						var id = page[j];
						var publ = publishers.get(id); 
						html[x++] = publ.basicInfo(i);
						i++;
					break;
				}
			}
			html[x++] = renderHeadRow();
		}
		currentView.set('SID',this.id);
		currentView.set('PID','0');
		currentView.set('GID','0');
		this.lastVP = n;
		html[x++] = '</table>';
		navBar();
		$(resultsArea).update(html.join(""));
		Behaviour.apply();
		return ;
	}
});

var Searches = Class.create(Enumerable,{
	initialize: function(){
		this.searches = $H({});
	},
	addSearch: function(search){
		this.searches.set(search.getSearchId(),search);
	},
	getSearch: function(id){
		var sres = this.searches.get(id);
		if (Object.isUndefined(sres)){
			return ;//alert("Unknown search element");
		} else {return sres;}; 
	}
});

var Publisher = Class.create({
	initialize: function(data,sid) {
		var params = $H(data);
		this.id = params.get('I');				//PUBLISHER_ID
		this.name  = params.get('N');			//PUBLISHER's NAME
		this.sname = params.get('SN');			//PUBLISHER's SHORTNAME
		this.pname = params.get('PN');			//PUBLISHER's property full name 
		this.pshort = params.get('PS');			//PUBLISHER's property short name
		this.note = params.get('D');			//PUBLISHER's property short name
		this.address = params.get('A');
		this.num = params.get('C');
		this.web = params.get('W');
		this.mail = params.get('M');
		this.price = params.get('G');		// Price indicator
		this.phones = new Phones();
		var phone = params.get('P');
		if (Object.isArray(phone)){
			var n = phone.length;
			var i = 0;
			for (i = 0; i<n; i++){
				this.phones.add(new Phone(phone[i]));
			}
		}
		this.business_spheres = params.get('B');
		this.special = params.get('S');
		this.advert = params.get('AD');
		this.search_id = this.sid;
	},
	getId: function(){
		return this.id;
	},
	basicInfo: function(i) {
		var cl = 'odd', j = 0, html = [], fix = 0;
		if (i % 2){
			cl = 'even';
		}
		html[j++] = '<tr id="'+this.id+'" class="search_res_line publisher '+cl+'">';
		html[j++] = '<td align="center">'+this.num+'</td>';
		html[j++] = '<td><p class="search_res_name"><b>'+ this.name + '</b></p><p class="search_res_address"><b>Адрес:</b> ' + this.address + '</p>';
	//	html[j++] = '<p class="search_res_spheres"><b>Сферы деятельности:</b><br/>'+this.getBSpheres()+'</p>';
		if (Prototype.Browser.IE){
			fix = 20;
		} else {
			fix = 40;
		}
		html[j++] = '<p><span style="width:250px; padding-left:'+fix+'px">';
		if (this.price == '1'){
			html[j++]='<b>Товары и услуги: есть</b>';
			fix = 16;
		} else {
			html[j++]='Товары и услуги: нет';
			fix = 0;
		}
		html[j++] = '</span><span style="padding-left:'+(parseInt('30')-parseInt(fix))+'px">';
		if (this.special == ''){
			html[j++] = 'Спецпредложение: нет';
			fix = 0;
		} else {
			html[j++]='<b>Спецпредложение: есть</b>';
			fix = 16;
		}
		html[j++] = '</span><span style="padding-left:'+(parseInt('25')-parseInt(fix))+'px">';
		if (this.advert == ''){
			html[j++] = 'Реклама: нет';
		} else {
			html[j++]='<b>Реклама: есть</b>';
		}
		html[j++] = '</span></p>';
		html[j++] = '';
		html[j++] = '</td></tr>';
		return html.join("");
	},
	fullInfo: function(){
		var i = 0;
		var html = [];
		html[i++] = '<table class="search_results">';
		html[i++] = '<tr class="search_res_head"><td colspan="2"><span class="publInfo_header">Карточка предприятия</span></td></tr>';
		html[i++] = '<tr class=""><td class="ptd1 odd">Название:</td><td class="ptd2 even">' + this.pshort +' '+ this.name + '</td></tr>';
		html[i++] = '<tr class=""><td class="ptd1 odd">Сокр. название:</td><td class="ptd2 even">' + this.sname + '</td></tr>';
		html[i++] = '<tr class=""><td class="ptd1 odd">Форма собственности:</td><td class="ptd2 even">' + this.pname + '</td></tr>';
		html[i++] = '<tr class=""><td class="ptd1 odd">Сферы деятельности:</td><td class="ptd2 even">'+this.getBSpheres()+'</td></tr>';
		html[i++] = '<tr class=""><td class="ptd1 odd">Адрес:</td><td class="ptd2 even">' + this.address + '</td></tr>';
		html[i++] = '<tr class=""><td class="ptd1 odd">Телефоны:</td><td class="ptd2 even">'+this.getPhones(1)+'</td></tr>';
		html[i++] = '<tr class=""><td class="ptd1 odd">Сайт:</td><td class="ptd2 even">';
		if (this.web != ''){
			html[i++] = '<a title="Перейти на сайт фирмы" href="http://' + this.web + '">' + this.web + '</a>'; 
		} else {
			html[i++] = 'нет';
		}
		html[i++] = '</td></tr>';
		html[i++] = '<tr class=""><td class="ptd1 odd">e-mail:</td><td class="ptd2 even">';
		if (this.mail != ''){
			html[i++] = '<a title="Написать письмо" href="mailto:' + this.mail + '">' + this.mail + '</a>'; 
		}  else {
			html[i++] = 'нет';
		}
		html[i++] = '</td></tr>';
		html[i++] = '<tr class=""><td class="ptd1 odd">Дополнительно:</td><td class="ptd2 even">'+this.note.unescapeHTML()+'</td></tr>';
		html[i++] = '<tr class=""><td class="ptd1 odd">Товары и услуги:</td><td class="ptd2 even">';
		if (this.price == '1'){
			html[i++]='<span class="price price1">Посмотреть</span>';
		} else {
			html[i++]='нет';
		}
		html[i++] = '</td></tr>';
		html[i++] = '<tr class=""><td class="ptd1 odd">Спецпредложение:</td><td class="ptd2 even">';
		if (this.special == ''){
			html[i++] = 'нет';
		} else {
			html[i++]='<span class="specability specability1">Посмотреть</span>';
		}
		html[i++] = '</td></tr>';
		html[i++] = '<tr class=""><td class="ptd1 odd">Реклама:</td><td class="ptd2 even">';
		if (this.advert == ''){
			html[i++] = 'нет';
		} else {
			html[i++]='<span class="advert specability1">Посмотреть</span>';
		}
		html[i++] = '</td></tr>';
		html[i++] = '</table>';
		currentView.set('PID',this.id);
		currentView.set('GID','0');
		navBar();
		$(resultsArea).update(html.join(""));
		Behaviour.apply();
		document.location.href = '#search_results';
	},
	advertize: function(){
		var i = 0, html = [], str = this.advert.gsub('&quot;','"');
		html[i++] = '<table id=="search_results" class="search_results">';
		html[i++] = '<tr class="search_res_head"><td><span class="publInfo_header">Реклама</span></td></tr>';
		html[i++] = '<tr class=""><td class="ptd2 even">' + str.unescapeHTML() + '</td></tr>';
		html[i++] = '</td></tr>';
		html[i++] = '</table>';
		currentView.set('PID',this.id);
		currentView.set('GID','0');
		navBar();
		$(resultsArea).update(html.join(""));
		Behaviour.apply();
	},
	specability: function(){
		var i = 0, html = [], str = this.special.gsub('&quot;','"');
		html[i++] = '<table id=="search_results" class="search_results">';
		html[i++] = '<tr class="search_res_head"><td><span class="publInfo_header">Специальное предложение</span></td></tr>';
		html[i++] = '<tr class=""><td class="ptd2 even">' + str.unescapeHTML() + '</td></tr>';
		html[i++] = '</td></tr>';
		html[i++] = '</table>';
		currentView.set('PID',this.id);
		currentView.set('GID','0');
		navBar();
		$(resultsArea).update(html.join(""));
		Behaviour.apply();
	},
	setPhones: function(phones) {
		if (!( function() { return phones instanceof Phones })) 
			throw "Invalid phones information!"
		this.phones = phones; 
	},
	getPhones: function(full){
		if (full){
			return this.phones.invoke('fullInfo').join("");
		} else {
			return this.phones.invoke('basicInfo').join("");
		}
	},
	getBSpheres: function(){
		var spheres = this.business_spheres;
		var html = [];
		if (Object.isArray(spheres)){
			var n = spheres.length;
			var i = 0;
			for (i = 0; i<n; i++){
				html[i] = '<p> - '+spheres[i].N+'</p>';
			}
		}
		return html.join("");
	}
});

var Publishers = Class.create(Enumerable,{
	initialize: function(){
		this.publs = $H({});
	},
	add: function(publisher){
		this.publs.set(publisher.getId(),publisher);
	},
	get: function(id){
		var sres = this.publs.get(id);
		if (Object.isUndefined(sres)){
			throw "Unknown publisher element";
		} else {
			return sres;
		}; 
	}
});

var Phone = Class.create({
	initialize: function(data) {
		this.phone = data.P;
		this.subordinate  = data.S;
		this.alt_num = data.A;
	},

	basicInfo: function() {
		return '<p class="search_res_phone">'+this.phone+'</p>';
	},
	
	fullInfo: function() {
		var str = [];
		if (this.subordinate){str[0] = this.subordinate + ": ";}
		str[1] = this.phone;
		if (this.alt_num){str[2] = " ("+this.alt_num+")";}
		return "<p>"+str.join('')+"</p>";
	}
	
});

var Phones = Class.create(Enumerable, { 
	initialize: function() { 
		this.phones = $A();
		this.count = 0; 
	}, 
	// implement _each to use Enumerable methods 
	_each: function(iterator) { 
		return this.phones._each(iterator); 
	},
	add: function(phone){
		if (!( function() { return phone instanceof Phone })) 
			throw "Invalid phone information!"
		this.phones[this.count++] = phone; 
	}
});

var Prices = Class.create({
	initialize: function(){
		this.prices = $H({});
	},
	addPrice: function(price){
		this.prices.set(price.pid,price);
	},
	getPrice: function(id){
		var sres = this.prices.get(id);
		if (Object.isUndefined(sres)){
			return ;//alert("Unknown price element");
		} else {return sres;}; 
	}
});

var Price = Class.create({
	initialize: function(params /*,data*/){
		//this.data = $H({});	//reserved for future
		this.pid = params.get('PID');
		this.rpp = params.get('ROWS');
		this.count = params.get('COUNT');
		this.clas = params.get('CLASS');
		this.pages = params.get('PAGES');
		this.lastVP = 0;
		this.results = $H({}); 
		
	},
	addPage: function(i,page){
		var p = $A(page);
		this.results.set(i,p);
	},
	getPage: function(n){
		return this.results.get(n); 
	},
	renderPage: function(n){
		var page = this.getPage(n);
		var i = 1;
		var html = [];
		var title = 'Товары и услуги "'+publishers.get(this.pid).name+'"';
		html[0] = '<table class="search_results">'+renderHeadRow(title);
		var j=0;
		var l = page.length;
		for (j = 0; j<l; j++){
			var cl = 'odd';
				if (j % 2){
				cl = 'even';
			}
			html[i++] = '<tr class="'+cl+'">';
			html[i++] = '<td>'+page[j].C+'</td>';
			html[i++] = '<td><p><b>'+page[j].N+'</b></p>';
			if(page[j].S !='') html[i++] = '<p>'+page[j].S.unescapeHTML()+'</p>';
			if(page[j].D !='') html[i++] = '<p>Описание:<br/><i>'+page[j].D.unescapeHTML()+'</i></p>';
			html[i++] = '</td>';
		}
		html[i++] = renderHeadRow(title)+'</table>';
		currentView.set('GID','1');	//shows that we're at price page
		this.lastVP = n;
		navBar();
		$(resultsArea).update(html.join(""));
		Behaviour.apply();
		return ;
	}
});

//training area :)

var publishers = new Publishers();
var search = new Searches();
var pager = new Pager();
var prices = new Prices();
/* --------------------------------------------- */

function builder(klass, target){
	if (klass == "publisherSearch"){
		$(target).update("<div>"+publishers.get('0123123').basicInfo()+"</div>");
	}
	alert(publishers.get('0123123').id);
	alert(search.getSearch('1').renderPage(1));
}


function doSearch(elm, params){
	var elm = $(elm);
	if (params.sid != '0' && (params['class'] == 'publisherSearch' || params['class'] == 'priceSearch')){
		var src = search.getSearch(params.sid);
		var page = src.getPage(params.page);
		if (!Object.isUndefined(page)){
			return src.renderPage(params.page);
		}
	}
	if (params['class'] == 'publisherPrice' && params.pid != '0'){
		var src = prices.getPrice(params.pid);
		if (!Object.isUndefined(src)){
			var page = src.getPage(params.page);
			if (!Object.isUndefined(page)){
				return src.renderPage(params.page);
			}
		}
	}
	new Ajax.Request( 'index.php',{
		method:'post',
		parameters : params,
		onCreate: function(){
			$(resultsArea).update('<div class="loading">Идёт загрузка данных...</div>');
			if (currentView.get('SID') == '0'){
				navBar();
			}
		},
		onSuccess: function(transport){
			var response = transport.responseText;
			var tmp = {};
			eval('tmp = '+ response);
			if (!Object.isUndefined(tmp.CLASS)){
				switch(tmp.CLASS){
					case 'publisherSearch':
						$(resultsArea).update('<div class="loading">Идёт обработка данных...</div>');
						var sparams = $H({});
						sparams.set('ROWS',tmp.ROWS);
						sparams.set('COUNT',tmp.COUNT);
						sparams.set('PAGE',tmp.PAGE);
						sparams.set('PAGES',tmp.PAGES);
						sparams.set('CLASS',tmp.CLASS);
						var srch = search.getSearch(tmp.SID);
						if (Object.isUndefined(srch)){
							srch = new Search(tmp.SID,'1',tmp.REQUEST,sparams);
							search.addSearch(srch);
						}
						srch.addPage(tmp.PAGE,tmp.RESULTS);
						var publs = tmp.DATA;
						publs.each(function(item) {
							publishers.add(new Publisher(item,tmp.SID));
						});
						search.getSearch(tmp.SID).renderPage(tmp.PAGE);
						searchStatus();
						document.location.href = '#search_results';	
					break;
					case 'priceSearch':
						$(resultsArea).update('<div class="loading">Идёт обработка данных...</div>');
						var sparams = $H({});
						sparams.set('ROWS',tmp.ROWS);
						sparams.set('COUNT',tmp.COUNT);
						sparams.set('PAGE',tmp.PAGE);
						sparams.set('PAGES',tmp.PAGES);
						sparams.set('CLASS',tmp.CLASS);
						var srch = search.getSearch(tmp.SID);
						if (Object.isUndefined(srch)){
							srch = new Search(tmp.SID,'1',tmp.REQUEST,sparams);
							search.addSearch(srch);
						}
						srch.addPage(tmp.PAGE,tmp.RESULTS);
						var publs = tmp.DATA;
						publs.each(function(item) {
							publishers.add(new Publisher(item,tmp.SID));
						});
						search.getSearch(tmp.SID).renderPage(tmp.PAGE);
						searchStatus();
						document.location.href = '#search_results';
					break;
					case 'publisherInfo':
						//var publ = publishers.get(tmp.ID);
					break;
					case 'publisherPrice':
						var sparams = $H({});
						sparams.set('PID',tmp.PID);
						sparams.set('ROWS',tmp.ROWS);
						sparams.set('COUNT',tmp.COUNT);
						sparams.set('PAGE',tmp.PAGE);
						sparams.set('PAGES',tmp.PAGES);
						sparams.set('CLASS',tmp.CLASS);
						var price = prices.getPrice(tmp.PID);
						if (Object.isUndefined(price)){
							price = new Price(sparams);
							prices.addPrice(price);
						}
						price.addPage(tmp.PAGE,tmp.DATA);
						price.renderPage(tmp.PAGE);
						document.location.href = '#search_results';
						//var publ = publishers.get(tmp.ID);
					break;
					case 'serviceSearch':
						synPage(tmp.DATA);
						document.location.href = '#search_results';
					break;
				}
			} else {
				$(resultsArea).update('<div class="error">Получены ошибочные данные!</div>');
			} 
		}
	});
}
/* ================================================================================================ */
function searchIt(elm){
	$(resultsArea).update('');
	$(resultStats).update('');
	$(navArea).update('');
	$(navArea2).update('');
	switch(parseInt(currentView.get('TABS'))){
		case 0:
			var name = $('pname').value.strip(), city = $('pcity').value, phone = $('pphone').value.strip(), address = $('paddress').value.strip();
			if(name.empty() && phone.empty() && address.empty()){
				$(status_bar).className = 'error';
				$(status_bar).update('Нужно ввести "Название", "Адрес" или "Телефон" для поиска.');
				return false;
			} 
			if(!name.empty() && name.length<3){
				$(status_bar).className = 'error';
				$(status_bar).update('Поле "Название" должно содержать минимум 3 символа.');
				return false;
			}
			if(!address.empty() && address.length<3){
				$(status_bar).className = 'error';
				$(status_bar).update('Поле "Адрес" должно содержать минимум 3 символа.');
				return false;
			}
			if(isNaN(phone)){
				$(status_bar).className = 'error';
				$(status_bar).update('Поле "Телефон" должно содержать только цифры.');
				return false;
			}
			if(!phone.empty() && phone.length<3){
				$(status_bar).className = 'error';
				$(status_bar).update('Поле "Телефон" должно содержать минимум 3 цифры.');
				return false;
			}
			if(!phone.empty() && phone.length>11){
				$(status_bar).className = 'error';
				$(status_bar).update('Поле "Телефон" должно содержать максимум 11 цифр.');
				return false;
			}
			var params = {
				'task'	:'ajax',
				'format':'raw',
				'class' :'publisherSearch',
				'name'	: name,
				'city'	: city,
				'sid'	: '0',
				'page'	: '0',
				'phone'	: phone,
				'address': address,
				'rnd'	: getrandom(),
				'option':'com_searcher'
			}
			$(status_bar).update('');
		break;
		case 1:
			var name = $('pname').value.strip();
			if(name.empty()){
				$(status_bar).className = 'error';
				$(status_bar).update('Нужно ввести "Название".');
				return false;
			} 
			if(!name.empty() && name.length<3){
				$(status_bar).className = 'error';
				$(status_bar).update('Поле "Название" должно содержать минимум 3 символа.');
				return false;
			}
			var params = {
				'task'	:'ajax',
				'format':'raw',
				'class' :'serviceSearch',
				'name'	: name,
				'sid'	: '0',
				'page'	: '0',
				'rnd'	: getrandom(),
				'option':'com_searcher'
			}
			$(status_bar).update('');
		break;
		case 2:
			var cl_id = $(elm).readAttribute('id'), city = $('pcity').value, cl_name=$(elm).innerHTML;
			$('results').update('');
			$('status').update('');
			var params = {
				'task'	:'ajax',
				'format':'raw',
				'class' :'publisherSearch',
				'city'	: city,
				'cl_id'	: cl_id,
				'cl_name': cl_name,
				'sid'	: '0',
				'page'	: '0',
				'rnd'	: getrandom(),
				'option':'com_searcher'
			}
		break;
	}
	currentView.set('SID','0');
	currentView.set('PID','0');
	currentView.set('GID','0');
	doSearch(elm,params);
}
var dynamics = {
		'input.psearch' : function(element){
			//alert('Кнопка поиска инициализирована');
			element.onclick = function(){
				searchIt($(this));
				return false;
			}
		},
		'tr.search_res_line':function(element){
			element.onclick = function(){
				var elm = $(this), params = {};
				if (elm.hasClassName('publisher')){ 
					var id = elm.readAttribute('id');
					var pname = publishers.get(id).name;
					params = {
						'task'	:'ajax',
						'format':'raw',
						'class' :'publisherInfo',
						'id'	: id,
						'pname' : pname,
						'pid'	: currentView.get('SID'),
						'rnd'	: getrandom(),
						'option':'com_searcher'
					}
					var publ = publishers.get(id);
					doSearch(elm,params);
					publ.fullInfo();
					return;
				}
				if (elm.hasClassName('price')){
					var id = elm.readAttribute('id'), city = $('pcity'), city_id ='';
					if (!Object.isUndefined(city)) city_id = city.value; 	
					var name = elm.readAttribute('value');
					if (Prototype.Browser.Opera){
						name = elm.down('td',1).innerHTML;
					}
					params = {
						'task'	:'ajax',
						'format':'raw',
						'class' :'priceSearch',
						'name'	: name,
						'page'	: '0',
						'sid'	: '0',
						'city'	: city_id,
						'rnd'	: getrandom(),
						'option':'com_searcher'
					}
					doSearch(elm,params);					
				}
			},
			element.onmouseover = function(){
				$(this).addClassName('search_res_line_hover');
			},
			element.onmouseout = function(){
				$(this).removeClassName('search_res_line_hover');
			}
		},
		'td.back_button':function(element){
			element.onclick = function(){
				if (currentView.get('GID') != '0'){
					var publ = publishers.get(currentView.get('PID')); 
					publ.fullInfo();
					return false;
				}
				if (currentView.get('PID') != '0'){
					var src = search.getSearch(currentView.get('SID'));
					src.renderPage(src.lastVP);
					return false;
				}
				
			},
			element.onmouseover = function(){
				$(this).addClassName('back_button_hover');
			},
			element.onmouseout = function(){
				$(this).removeClassName('back_button_hover');
			}
		},
		'span.pager_nav':function(element){
			element.onclick = function(){
				var elm = $(this), 
					page = elm.innerHTML-1, 
					src = search.getSearch(currentView.get('SID')), 
					request = src.getSearchData(), 
					params = {
					'task'	:'ajax',
					'format':'raw',
					'class' : src.clas,
					'name'	: request.get('N'),
					'cl_id'	: request.get('CL'),
					'city'	: request.get('C'),
					'sid'	: currentView.get('SID'),
					'page'	: page,
					'phone'	: request.get('P'),
					'address': request.get('A'),
					'rnd'	: getrandom(),
					'option':'com_searcher'
				};
				doSearch(elm,params)
			},		
			element.onmouseover = function(){
				$(this).addClassName('pager_nav_hover');
			},
			element.onmouseout = function(){
				$(this).removeClassName('pager_nav_hover');
			}
		},
		'span.pager_nav_price':function(element){
			element.onclick = function(){
				var elm = $(this);
				var page = elm.innerHTML-1;
				var params = {
					'task'	:'ajax',
					'format':'raw',
					'class' :'publisherPrice',
					'pid'	: currentView.get('PID'),
					'page'	: page,
					'rnd'	: getrandom(),
					'option':'com_searcher'
				};
				doSearch(elm,params);
			},		
			element.onmouseover = function(){
				$(this).addClassName('pager_nav_price_hover');
			},
			element.onmouseout = function(){
				$(this).removeClassName('pager_nav_price_hover');
			}
		},
		'span.price': function(element){
			element.onclick = function(){
				var elm = $(this), params = {
					'task'	:'ajax',
					'format':'raw',
					'class' :'publisherPrice',
					'pid'	: currentView.get('PID'),
					'page'	: '0',
					'rnd'	: getrandom(),
					'option':'com_searcher'
				};
				doSearch(elm,params);
			},		
			element.onmouseover = function(){
				$(this).addClassName('price_hover');
			},
			element.onmouseout = function(){
				$(this).removeClassName('price_hover');
			}
		},
		'span.specability':function(element){
			element.onclick = function(){
				var elm = $(this);
				var id = currentView.get('PID')
				var publ = publishers.get(id);
				publ.specability();
				return;
			},		
			element.onmouseover = function(){
				$(this).addClassName('specability_hover');
			},
			element.onmouseout = function(){
				$(this).removeClassName('specability_hover');
			}
		},
		'span.advert':function(element){
			element.onclick = function(){
				var elm = $(this);
				var id = currentView.get('PID')
				var publ = publishers.get(id);
				publ.advertize();
				return;
			},		
			element.onmouseover = function(){
				$(this).addClassName('specability_hover');
			},
			element.onmouseout = function(){
				$(this).removeClassName('specability_hover');
			}
		},
		'li.tab': function(element){
			element.onclick = function(){
				var elm = $(this);
				if (elm.hasClassName('inactive')){
					tab = elm.readAttribute('value');
					tabulator(tab);
				}
			},
			element.onmouseover = function(){
				$(this).addClassName('tab_hover');
			},
			element.onmouseout = function(){
				$(this).removeClassName('tab_hover');
			}
		},
		'input.submitable':function(element){
			element.onkeypress = function(e){
				if (!e) e = window.event;
				if (e.keyCode==13){
					var elm = $$('input.psearch');
					if (elm[0]) searchIt(elm[0]);
				}
			}
		},
		'p.search75_classificator_item':function(element){
			element.onclick = function(){
				searchIt($(this));
			},		
			element.onmouseover = function(){
				$(this).addClassName('search75_classificator_item_hover');
			},
			element.onmouseout = function(){
				$(this).removeClassName('search75_classificator_item_hover');
			}
		}					
	};
Behaviour.register(dynamics);

