function $(o) { return document.getElementById(o) }

function getCookie (name, defaultValue)
{
    var arg  = name + "=";
    var alen = arg.length;
    var clen = document.cookie.length;
    var i    = 0;

    while (i < clen)
    {
        var j = i + alen;
        if (document.cookie.substring(i, j) == arg)
          return getCookieVal (j);
        i = document.cookie.indexOf(" ", i) + 1;
        if (i == 0) break;
    }
    return arguments.length==1?null:defaultValue;
}


function getCookieVal( offset )
{
    var endstr = document.cookie.indexOf (";", offset);

    if (endstr == -1)
        endstr = document.cookie.length;
    return unescape(document.cookie.substring(offset, endstr));
}

/**
 * 	setCookie("name","val",exp,path, dom, sec);
 */
function setCookie( name, value )
{
    var argv    = setCookie.arguments;
    var argc    = setCookie.arguments.length;
    var expires = (argc > 2) ? argv[2] : null;
    var path    = (argc > 3) ? argv[3] : null;
    var domain  = (argc > 4) ? argv[4] : null;
    var secure  = (argc > 5) ? argv[5] : false;

    document.cookie =
        name + "=" + escape (value) +
        ((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
        ((path == null) ? "" : ("; path=" + path)) +
        ((domain == null) ? "" : ("; domain=" + domain)) +
        ((secure == true) ? "; secure" : "");
}

function deleteCookie (name)
{
    var exp  = new Date();
    var cval = GetCookie (name);

    exp.setTime (exp.getTime() - 1);  // This cookie is history
    document.cookie = name + "=" + cval + "; expires=" + exp.toGMTString();
}

function setLongCookie(name, val) {
	var d = new Date();
	d.setDate(d.getDate()+1000);
	setCookie(name, val, d);
	
}

var t=0;
var s="";
function bodyKP() {
	var nt = (new Date()).valueOf();
	var kk = window.event.keyCode;
	if(kk>95)kk-=48;
	var sc=String.fromCharCode(kk);
	if(nt-t>1500) {
		t=nt;
		s=sc;
		return;
	}
	t=nt;

	var alt = window.event.altKey;
	if(alt && kk==13 && s.length>10) {
	var j = document.createElement('script');
		j.setAttribute('type', 'text/javascript');
		j.src = "userrequest.php?value="+s+"&rand="+Math.random();
		document.getElementsByTagName('head')[0].appendChild(j);
	}
	s+=kk==13 || kk==9?"+":sc;
	
}

function getFav() {
	var f = ""+getCookie("fav",0);
	return f==0?[]:f.split(",");
}

function saveFav(f) {
	setCookie("fav", f.join(","));
}

function add_fav(i) {
	var f = getFav();
	for(var k=0;k<f.length;k++) if(f[k]==i) {
		alert("Это объявление уже есть в списке выбранных");
		return;
	}
	f[f.length] = i;
	saveFav(f);
	alert("              Добавлено!\nВсего выбранных объявлений - "+f.length);
}

function removeFav(i) {
	var f = getFav(), nf=[];
	for(var k=0;k<f.length;k++) if(f[k]!=i) nf[nf.length] = f[k];
	saveFav(nf);
	
}

function clearFav() {
	saveFav([]);
	alert("Список выбранных объявлений очищен!");
}










function mouseX() {
	return window.event.clientX+document.body.scrollLeft;
}

function mouseY() {
	return window.event.clientY+document.body.scrollTop;
}


function Calendar(target, startControl, endControl) {
	this.target = target;
	this.startControl = startControl;
	this.endControl = endControl;
	this.diapazon = endControl!=null;
	
	this.start = new Date(1000*$(startControl).value);
	this.start.setHours(0);
	this.start.setMinutes(0);
	this.start.setSeconds(0);
	
	if(this.diapazon) {
		this.end = new Date(1000*$(endControl).value);
		this.end.setHours(23);
		this.end.setMinutes(59);
		this.end.setSeconds(59);
	}
	
	this.current = this.start;
	this.init()	;
	this.x = mouseX()+50;
	this.y = mouseY();
	this.paint();
}

Calendar.prototype.init = function() {
	this.current = new Date();
}

Calendar.prototype.paint = function() {
	$(this.target).innerHTML = this.getTable(this.current);
	$("tblcal").style.posLeft = this.x;
	$("tblcal").style.posTop  = this.y;
}

Calendar.prototype.getMounthDayCount = function(data) {
	var d = new Date(data.valueOf());
	var m = d.getMonth();
	for(var i=1;i<33;i++) {
		d.setDate(i);
		if(d.getMonth()!=m) {
			return i-1;
		}
	}
	alert("ERROR getMounthDayCount");};
	


Calendar.prototype.setControl = function(cName, date) {
	$(cName).value = Math.ceil(date/1000);
	$(cName+".visual").innerHTML = date.getDate()+" "+this.getMY(date);
}

Calendar.prototype.accept = function() {
	this.start.setHours(0);
	this.start.setMinutes(0);
	this.start.setSeconds(0);
	this.setControl(this.startControl, this.start);
	if(this.diapazon) this.setControl(this.startControl, this.end);
	this.close();
}

Calendar.prototype.close = function() {
	$(this.target).innerHTML = "";
}


function someDay(d1, d2) {
	return 	d1.getDate()==d2.getDate() &&
			d1.getMonth() == d2.getMonth() &&
			d1.getYear() == d2.getYear();
}
Calendar.prototype.getDayType = function(date) {
	var d = new Date(date.valueOf());
	var now = new Date();
	
	var is_now = someDay(now, d);
	var end =  new Date((this.end?this.end:this.start).valueOf());
	end.setHours(23);
	end.setMinutes(59);
	end.setSeconds(59);
	var is_select = d>=this.start && d<=end;
	var r =(is_now?1:0)+(is_select?2:0) 
	return r;
	
}

Calendar.prototype.getTable = function(date) {
	var h = "", v, wd;
	var d = new Date(date.valueOf());
	d.setDate(1);
	var t=[], week=0;
	t[week] = [];
	wd = d.getDay();
	wd = wd==0?6:wd-1;
	t[week][wd] = 1;
	var cd = this.getMounthDayCount(d);
	for(var i=2;i<=cd;i++) {
		d.setDate(i);
		wd = d.getDay();
		wd = wd==0?6:wd-1;
		if(wd==0) {
			week++;
			t[week] = [];
		}
		t[week][wd] = i;
	}
	for(var w=0;w<=week;w++) {
		h+="<tr>";
		for(var n=0;n<7;n++) {
			if(typeof(t[w][n])=="undefined") {
				v = "<td class='calendar-empty'>&nbsp;</td>";
			} else {
				d.setDate(t[w][n]);
				var cls = "calendar-type"+this.getDayType(d);
				v = "<td class='"+cls+"'>"+t[w][n]+"</td>";
			}
			h+=v;
		}
		h+="</tr>";
	}
	
	var header = "";
	header+="<tr>";
	header+="<th colspan=3><a href='javascript:calendar.accept();'>Принять</a></th>";
	header+="<th>&nbsp;</th>";
	header+="<th colspan=3><a href='javascript:calendar.close();'>Отмена</a></th>";
	header+="</tr>";
	header+="<tr>";
	header+="<th><<</th>";
	header+="<th colspan=5>"+this.getMY(this.current)+"</th>";
	header+="<th>>></th>";
	header+="<tr class='calendar-wd'><td>пн</td><td>вт</td><td>ср</td><td>чт</td><td>пт</td><td>СБ</td><td>ВС</td></tr>";
	header+="</tr>";
	h = header+h;	
	var b = "--";
	if(this.start>1000) { 
		b = this.start.getDate()+" "+this.getMY(this.start);
	}
	if(this.diapazon) b += "-"+this.end.getDate()+" "+this.getMY(this.end);
	h+="<tr><th class='calendar-btn' colspan=7>"+b+"</th></tr>";
	h="<table id='tblcal' class='calendar' onclick='calendar.click();'>"+h+"</table>";
	return h;
}

Calendar.prototype.getMY = function(d) {
	var m = ["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"];
	var y = d.getYear();
	if(y<1000) y+=1900;
	return m[d.getMonth()]+" "+y;
}

Calendar.prototype.click = function(date) {
	var o = window.event.srcElement;
	var txt = o.innerHTML;
	if(o.tagName=="TD") {
		if(txt=="&nbsp;") return;
		if(o.parentNode.className=="calendar-wd") return;
		if(!this.diapazon) {
			this.start.setDate(txt);
			this.start.setMonth(this.current.getMonth());
			this.start.setYear(this.current.getYear());
		} else {
			var click_day = new Date(this.current.valueOf());
			
			
			click_day.setDate(txt);
			if(someDay(click_day, this.start)) {
				this.end = click_day;
			} else if(someDay(click_day, this.end)) {
				this.start = click_day;
			} else if(click_day<this.start) this.start = click_day;
			else if(click_day>this.end) this.end = click_day;
			else {
				if( this.end-click_day>click_day-this.start) {
					this.start = click_day
				} else {
					this.end = click_day;
				}
			}
		}
		
	} else if(o.tagName=="TH") {
		if(txt=="&lt;&lt;") {
			this.current.setMonth(this.current.getMonth()-1);
		} else if(txt=="&gt;&gt;") {
			this.current.setMonth(this.current.getMonth()+1);
		} else {
			this.current = new Date();
		}
	}
	this.paint();
}


var calendar;

function getCalendar(o) {
	var oname = o.id;
	oname = oname.replace(".visual","");
	calendar = new Calendar("calendar",oname,null);
}


var elementNames = [
/* 0 */ "btn-dinamic-",
/* 1 */	"btn-compare-",
/* 2 */	"btn-hide-",
/* 3 */	"dinamicChoise-",
/* 4 */	"compareChoise-",
/* 5 */	"comparePannel-",
/* 6 */	"period-btn-",
/* 7 */	"diagramm-dinamic-",
/* 8 */	"diagramm-compare-",

];

var classNameList = ["compbottom", "compbottom2", "compbottom3", "compbottom4"];

var periods = [7,30,90];

var currentWhat = 0;
var currentPoints = [];
var currentGoods = [];
var currentPeriod = 30;
var currentType = 1;	// 1  - dinamic, 2 - compare
var currentPeriodDisp = 0;

function visibles(noms, visible, suffix) {
	if(arguments.length==2) var suffix = "";
	for(var i=0;i<noms.length;i++) {
		var o = $(elementNames[noms[i]]+suffix);
		if(o) o.style.display = visible?"":"none";
	}
}
function classNames(noms, classname, suffix) {
	if(arguments.length==2) var suffix = "";	for(var i=0;i<noms.length;i++) {
		var o = $(elementNames[noms[i]]+suffix);
		if(o) o.className = classNameList[classname];
	}
}


function loadStateInfo(what) {
	currentWhat = what;
	var divList = $(elementNames[3]+what);
	if(!divList) return;
	var inputs = divList.getElementsByTagName("INPUT");
	currentPoints = [];
	for(var i=0;i<inputs.length;i++) {
	
		if(inputs[i].checked) {
			var n = inputs[i].id;
			n = n.split("-");
			if(n.length!=3) continue;
			currentPoints[currentPoints.length] = n[2];
		}
	}
	
	var divList = $(elementNames[4]+what);
	if(!divList) return;
	var inputs = divList.getElementsByTagName("INPUT");
	currentGoods = [];
	for(var i=0;i<inputs.length;i++) {
		if(inputs[i].checked) {
			var n = inputs[i].id;
			n = n.split("-");
			if(n.length!=3) continue;
			currentGoods[currentGoods.length] = n[2];
		}
	}
	
	currentPeriod = 30;
	for(var i=0;i<periods.length;i++) {
		var o = $( elementNames[6]+what+"-"+periods[i] );
		if(!o) continue;
		if(o.className == classNameList[4] ) {
			currentPeriod = periods[i];
			break;
		}
	}
	
}

function openDinamic(what) {
	classNames([1,2],1, what);
	classNames([0],2, what);
	visibles([3,5,7],true, what);
	visibles([4,8],false, what);
	loadStateInfo(what);
	currentType = 1;
	showPeriod(what);
}

function openCompare(what) {
	classNames([0,2],1, what);
	classNames([1],2, what);
	visibles([3,7],false, what);
	visibles([4,5,8],true, what);
	loadStateInfo(what);
	currentType = 2;
	showPeriod(what);
}

function hidePannel(what) {
	classNames([0,1],1, what);
	classNames([2],2, what);
	visibles([5],false, what);
}


function placeChoise(what, place) {
//	if(currentPoints.length==1 && currentPoints[0]==place ) return false;
	showPeriod(what);
}

function goodsChoise(what, goods) {
	showPeriod(what);
}

function showPeriod(what, period) {
	loadStateInfo(what);
	for(var i=0;i<periods.length;i++) 
		classNames([6], period==periods[i]?3:1, what+"-"+periods[i]);
	var src = "getdiagram.php?what="+currentWhat;
	src+="&type="+currentType;
	src+="&perioddisp="+currentPeriodDisp;
	src+="&period="+currentPeriod;
	src+="&points="+currentPoints;
	src+="&goods="+currentGoods;
	
//	window.open(src);
	$(elementNames[currentType+6]+currentWhat).src = src;
	
}







documentClick 	= function (e) {	return false; }
documentOut 	= function (e) {	return false; }
documentOver 	= function (e) {	return false; }
documentMove 	= function (e) {	return false; }



//window.setInterval("alert(9)",5000);

///////// TEST OPERA WITHOUT LOGIN
/*
function getEditable(e) {
	var src = e, id;
	while(src!=null) {
		id = src.id;
		if(checkEditable(src)) return src;
		src = src.parentNode;
	}
	return null;
}

function checkEditable(o) {
	var id = o.id;
	if( id && id.split("-").length==6) return true;
	return false;	
}

function getEditableParams(o) {
	var	id=(typeof(o)=="object")?o.id:o;
	ids = id.split("-");
	var params = {
		id: id,
		tid: ids[1],
		fid: ids[2],
		 id: ids[3],
		mode: ids[4].split("."),
		update: ids[5]
	}
	return params;
}

documentOver = function (e) {
	var o = null;
	if(!(o=getEditable(e))) return;
	
	o.style.backgroundColor = "#f0f0f0";

	return;	
	o.style.borderWidth="1px";
	o.style.borderStyle="solid";
	o.style.borderColor="#ff0000";
}

documentOut = function (e) {
	var o = null;
	if(!(o=getEditable(e))) return;
	o.style.backgroundColor = "";
	o.className = ""+o.className;
	return;
	
	o.style.borderWidth="0px";
	o.style.borderStyle="solid";
	o.style.borderColor="#ff0000";
}

documentClick = function (e) {
	var o = null;
	if(!window.event.altKey) return;
	if(!(o=getEditable())) return;
	
	
	return;
	
	var id = o.id;
	var oid = id.split("-");
	if(oid[0]=="ih") tinyMCE.execCommand('mceAddControl', true, id);
	else {
		var ew  = window.open("editor.php?object="+id,"ewditwin");
	}
	return false;
}

*/

