// <?php
//
// 	header("Content-type: text/javascript; charset=UTF-8");
//
// 	header('Last-Modified: '.gmdate('D, d M Y H:i:s',filemtime(__FILE__)).' GMT' );
// 	header('Expires: '.gmdate('D, d M Y H:i:s',time()+604800).' GMT' );
//
// 	ob_start( "ob_gzhandler" );
//
// ?>
var d	= document;
var w	= window;
var $j = function() {};

if (typeof(jQuery) != "undefined") { // Заради глупавото IE, ако се провери само с if(jQuery) хвърля грешка!
   	$j = jQuery.noConflict();
}

$ = function (id){
    return document.getElementById(id);
}

function toggle_box(id, force)
{
	var box	= d.getElementById(id);
	if( ! box ) { return false; }
	if( force === undefined ) {
		box.style.display	= box.style.display=="none" ? "" : "none";
		return;
	}
	box.style.display	= force ? "" : "none";
}

window.onload	= function() {
	input_set_autocomplete();
}

function ajax_init(is_xml)
{
	var req = false;
	if (w.XMLHttpRequest) {
		req = new XMLHttpRequest();
		if (req.overrideMimeType) {
			if( is_xml ) { req.overrideMimeType("application/xml"); }
			else { req.overrideMimeType("text/plain"); }
		}
	} else if (w.ActiveXObject) {
		try { req = new w.ActiveXObject("MSXML3.XMLHTTP"); } catch(exptn) {
		try { req = new w.ActiveXObject("MSXML2.XMLHTTP.3.0"); } catch(exptn) {
		try { req = new w.ActiveXObject("Msxml2.XMLHTTP"); } catch(exptn) {
		try { req = new w.ActiveXObject("Microsoft.XMLHTTP"); } catch(exptn) {
		}}}}
	}
	return req;
}

function obj_find_coords(obj)
{
	var X=0, Y=0;
	if( obj.offsetParent ) {
		X =	obj.offsetLeft;
		Y =	obj.offsetTop;
		if( obj.offsetParent ) {
			do {
				obj = obj.offsetParent;
				X +=	obj.offsetLeft;
				Y +=	obj.offsetTop;
			}
			while( obj.offsetParent );
		}
	}
	return [X,Y];
}
function get_screen_scroll()
{
	var x=0, y=0;
	if( typeof( window.pageYOffset ) == 'number' ) {
		x	= window.pageXOffset;
		y	= window.pageYOffset;
	} else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
		x	= document.body.scrollLeft;
		y	= document.body.scrollTop;
	} else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
		y	= document.documentElement.scrollTop;
		x	= document.documentElement.scrollLeft;
	}
	return [x, y];
}



var autocomplete_open	= false;
var autocomplete_data	= {};
function input_set_autocomplete()
{
	var all	= d.getElementsByTagName("INPUT");
	for(var i=0; i<all.length; i++) {
		input_set_autocomplete_to(all[i]);
	}
	d.body.onclick	= function() {
		setTimeout(input_hide_autocompletes, 100);
	}
}
function input_set_autocomplete_to(obj)
{
	if( obj.type != "text" ) { return; }
	if( obj.getAttribute("rel") != "autocomplete" ) { return; }
	obj.setAttribute("autocomplete", "off");
	obj.setAttribute("uniqindex", Math.round(Math.random()*99999));
	obj.onfocus	= function() {
		input_hide_autocompletes();
	};
	obj.onblur= function() {
		input_hide_autocompletes();
	}
	obj.onkeydown	= function(e) {
		e = e || window.event
		var code	= e.charCode || e.keyCode || e.which;
		if( code == 38 || code == 40 ) {
			input_scroll_autocomplete(code==38?"UP":"DOWN");
		}
		if( code == 13 && autocomplete_open && autocomplete_data.id==this.getAttribute("uniqindex") ) {
            stop_event(e);
			input_scroll_autocomplete_to(autocomplete_data.focusIndex);
			if( autocomplete_data.is_inv_form && autocomplete_data.data[autocomplete_data.focusIndex] && autocomplete_data.data[autocomplete_data.focusIndex][2] ) {
				eval(autocomplete_data.data[autocomplete_data.focusIndex][2]+";");
			}
			input_hide_autocompletes();
			return false;
		}
		if( code == 0 /*Firefox bug с кирилица*/||  (code>=48 && code<=57) || (code>=65 && code<=90) || (code>=97 && code<=122) || (code>=1040 && code<=1103) || (code==34 || code==39 || code==45) ) {
			if (this.timer) {
				clearTimeout(this.timer);
			}
			var parentEl = this;
			this.timer = setTimeout(function(){parentEl.onkeyup2()}, 100);
		}
	};

	/*
	   ВНИМАНИЕ: УЛТРА ГРОЗЕН ХАК
	   Тука трябва да е onkeyup и да работи нормално, но понеже някой н00б е писал Опера за линукс, в някакви
	   супер странни кейсове изобщо не се fire-ва onkeyup... Затова таймаутваме, за да работи навсякъде еднакво!
	   http://stackoverflow.com/questions/2455740 за повече инфо, ако някой някой ден отговори на тоя въпрос :(
	*/
	obj.onkeyup2	= function(e) {
		this.setAttribute("origvalue", this.value);
		input_show_autocomplete(this);
	}

}
function input_show_autocomplete(obj)
{

	if( autocomplete_open && autocomplete_data.id==obj.getAttribute("uniqindex") && autocomplete_data.word==obj.getAttribute("origvalue") ) {
		return;
	}

	input_hide_autocompletes();
	if(obj.value.length < 1) { return; }
	var req = ajax_init(true);
	if( ! req ) { return; }
	autocomplete_open	= obj;
	autocomplete_data	= ({ id: -1, word: "", loaded: false, data: [], focusIndex: false, is_inv_form: false });
	autocomplete_data.id	= obj.getAttribute("uniqindex");
	autocomplete_data.word	= obj.value;
	if( obj.form && obj.form.name == "new_invoice_form" ) {
		autocomplete_data.is_inv_form	= true;
	}
	obj.setAttribute("origvalue",	obj.value);
	var dv	= d.createElement("DIV");
	dv.id	= "inp_dropbox_"+autocomplete_data.id;
	dv.className	= "input_dropbox";
	dv.style.display	= "none";
	dv.style.position	= "absolute";
	var coords	= obj_find_coords(obj);
	var tmpw	= obj.style.width ? parseInt(obj.style.width,10) : 200;
	var tmph	= obj.style.height ? parseInt(obj.style.height,10) : 21;
	tmpw	+= 8;
	tmph	+= 4;
	dv.style.top	= (coords[1]+tmph)+"px";
	dv.style.left	= (coords[0])+"px";
	dv.style.width	= tmpw+"px";
	req.onreadystatechange	= function() {
		if( req.readyState != 4  ) { return; }
		if( obj.value != autocomplete_data.word ) { return; }
		if( obj.getAttribute("uniqindex") != autocomplete_data.id ) { return; }
		if( ! req.responseXML ) { return; }
		var data	= req.responseXML.getElementsByTagName("result");
		if( !data || !data[0] ) { return; }
		data	= data[0].getElementsByTagName("word");
		var i, j, w, r, e, dv2;
		for(i=0; i<data.length; i++) {
			w	= data[i].getAttribute("w");
			r	= data[i].getAttribute("r");
			e	= data[i].getAttribute("e");
			if( !w || !r ) { continue; }
			while(w.match("&lt;")) { w = w.replace("&lt;", "<"); }
			while(w.match("&gt;")) { w = w.replace("&gt;", ">"); }
			j	= autocomplete_data.data.length;
			autocomplete_data.data[j]	= [w, r, e];
			dv2	= d.createElement("DIV");
			dv2.id	= "inp_dropbox_"+autocomplete_data.id+"_row_"+j;

			dv2.innerHTML	= w;
			dv2.setAttribute("autorowindex", j);
			dv2.onmouseover	= function() {
				input_scroll_autocomplete_to(this.getAttribute("autorowindex"), true);
			};
			dv2.onclick	= function() {
				input_scroll_autocomplete_to(this.getAttribute("autorowindex"));
				if( autocomplete_data.is_inv_form && autocomplete_data.data[autocomplete_data.focusIndex] && autocomplete_data.data[autocomplete_data.focusIndex][2] ) {
					eval(autocomplete_data.data[autocomplete_data.focusIndex][2]+";");
				}
				input_hide_autocompletes();
			};
			dv.appendChild(dv2);
		}


		if( j == 0 && autocomplete_data.data[j][1] == obj.value ) {
			return;
		}

		autocomplete_data.loaded	= true;
		if( autocomplete_data.data.length > 0 ) {
			dv.style.display	= "";
		}
	}
	d.body.appendChild(dv);
	req.open("POST", "/ajax/input-autocomplete/"+(autocomplete_data.is_inv_form?"invform:true/":"")+"?input="+obj.name+"&r="+Math.round(Math.random()*1000), true);
	req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	req.send("word="+encodeURIComponent(autocomplete_data.word));
}
function input_hide_autocompletes()
{
	if( ! autocomplete_open ) { return; }
	var box	= d.getElementById("inp_dropbox_"+autocomplete_open.getAttribute("uniqindex"));
	if( box ) {
		box.style.display	= "none";
		box.parentNode.removeChild(box);
	}
	autocomplete_open	= false;
	autocomplete_data	= {};
}
function input_scroll_autocomplete(dir)
{
	if( ! autocomplete_open ) { return; }
	if( autocomplete_data.focusIndex === false ) {
		nw	= dir=="DOWN" ? 0 : (autocomplete_data.data.length-1);
	}
	else {
		nw	= autocomplete_data.focusIndex + (dir=="DOWN" ? 1 : -1);
		if( nw == autocomplete_data.data.length ) { nw = 0; } else
		if( nw == -1 ) { nw = autocomplete_data.data.length-1; }
	}
	input_scroll_autocomplete_to(nw);
}
function input_scroll_autocomplete_to(pos, dontshow)
{
	if( ! autocomplete_open ) { return; }
	if( autocomplete_data.focusIndex !== false ) {
		var old	= d.getElementById("inp_dropbox_"+autocomplete_data.id+"_row_"+autocomplete_data.focusIndex);
		if( old ) { old.className = ""; }
	}
	if( pos!==false && autocomplete_data.data[pos] ) {
		if( ! dontshow ) {
			autocomplete_open.value	= autocomplete_data.data[pos][1];
		}
		autocomplete_data.focusIndex	= pos;
		var nw	= d.getElementById("inp_dropbox_"+autocomplete_data.id+"_row_"+pos);
		if( nw ) { nw.className = "selected"; }
	}
}


function pr_number_format(numb)
{
	if( isNaN(numb) ) { numb = 0; }
	numb	= Math.round(numb * 100);
	if( numb == 0 ) { return "0.00"; }
	numb	+= "";
	if( numb.length == 1 ) { return "0.0"+numb; }
	if( numb.length == 2 ) { return "0."+numb; }
	return numb.replace(/^([0-9]+)([0-9]{2})$/, "$1.$2");
}

function stop_event(e) {
   if(!e) {
	  e = window.event;
   }
   if (e.stopPropagation) e.stopPropagation();
   e.cancelBubble = true;
   if (e.preventDefault) e.preventDefault();
   e.returnValue = false;
   return false;
}

function is_valid_bulstat(num){
    return is_valid_bulstat9(num) || is_valid_bulstat13(num);
}

function is_valid_bulstat9(num){
    num = num.toString();
    if(! /^[\d]{9}$/.test(num) ){
        return false;
    }
    var control = parseInt(num.slice(8,9));
    var sum = 0;
    for(var i=1; i<=8; i++){
        sum += i * parseInt(num.slice(i-1,i));
    }
    var mod = sum % 11;
    if(mod < 10){
        return mod == control;
    }
    sum = 0;
    for(var i=1; i<=8; i++){
        sum += (i+2) * parseInt(num.slice(i-1,i));
    }
    mod = (sum % 11) % 10;
    return mod == control;
}

function is_valid_bulstat13(num){
    num = num.toString();
    if(! /^[\d]{13}$/.test(num) ){
        return false;
    }
    if(!is_valid_bulstat9(num.slice(0,9))){
        return false;
    }
    var control = parseInt(num.slice(12,13));
    var sum = 0;
    var weights = [2, 7, 3, 5];
    var nums = num.slice(8,12).split('');
    for(var i=0; i<weights.length; i++){
        sum += weights[i] * parseInt(nums[i]);
    }
    var mod = sum % 11;
    if(mod < 10){
        return mod == control;
    }
    sum = 0;
    weights = [4, 9, 5, 7];
    for(var i=0; i<weights.length; i++){
        sum += weights[i] * parseInt(nums[i]);
    }
    mod = (sum % 11) % 10;
    return mod == control;
}



function markBadField(name) {
	if(!name || name.length ==0) {
		var elem = document.getElementById('badField');
		if (elem && elem.value && elem.value.length > 0) {
			name = elem.value;
		}
		else {
			return true;
		}
	}
	var field = document.getElementsByName(name);
	console.log(name);
	if (field.length > 0) {
		for(var i = 0; i < field.length; i++) {
			var fld = field[i];
			if (fld) {
				fld.setAttribute('brd', fld.style.border);
				fld.setAttribute('bgr', fld.style.background);

				fld.style.border="1px solid red";
				fld.style.background = "#fff0f0";

				fld.onkeydown = fld.onchange = function() {
					this.style.border=this.getAttribute('brd');
					this.style.background = this.getAttribute('bgr');

					this.onkeydown = fld.onchange  = function(){};
				}
				if (fld.focus) {
					fld.focus();
				}
			}
		}
	}

	return true;
}


function hookEvent(element, event, func){
	if (!element) { return false; }
	if (element.attachEvent) {
		element.attachEvent('on'+event,func);
	}
	else if (element.addEventListener) {
		element.addEventListener(event, func, false);
	}
	else {
		return false;
	}
}

function Set_Cookie(c_name,value,expiredays)
{
var exdate=new Date();
exdate.setDate(exdate.getDate()+expiredays);
document.cookie=c_name+ "=" +escape(value)+
((expiredays==null) ? "" : ";expires="+exdate.toUTCString());
}
