function addEvent(elm, evType, fn, useCapture) {
	if (elm.addEventListener) {
		elm.addEventListener(evType, fn, useCapture);
		return true;
	}
	else if (elm.attachEvent) {
		var r = elm.attachEvent('on' + evType, fn);
		return r;
	}
	else {
		elm['on' + evType] = fn;
	}
}

function createFilenameFromName(form_name, name_input_name, filename_input_name) {
	var fnam = eval('document.'+form_name+'.'+filename_input_name);
	var nam = eval('document.'+form_name+'.'+name_input_name);
	if (fnam.value.length == 0) {
		var fname = nam.value.replace(/ /g, "-");
		fname = fname.replace(/&/g, "And");
		fname = fname.replace(/\'/g, "");
		fname = fname.replace(/\./g, "");
		fname = fname.replace(/,/g, "");
		fname = fname.replace(/\"/g, "");
		fnam.value = fname;
	}
}

// ------------
// --- AJAX ---
// ------------

function createRequestObject() {
    var ro;
    var browser = navigator.appName;
    if(browser == "Microsoft Internet Explorer") {
        ro = new ActiveXObject("Microsoft.XMLHTTP");
    } else {
        ro = new XMLHttpRequest();
    }
    return ro;
}

function ajaxFilenameExists() {
	var http1 = '';
	var form_name = '';
	var filename_input = '';
	var result_element_id = '';
	
	this.init = function (fn, fi, rei) {
		http1 = createRequestObject();
		form_name = fn;
		filename_input = fi;
		result_element_id = rei;
	}
	this.sndReq = function () {
		var uri = '/cms/ajax/getsubcat.php?action=filename_exists';
		uri += '&filename='+encodeURI(eval('document.forms[\''+form_name+'\'].'+filename_input).value);

		http1.open('get', uri);
		http1.onreadystatechange = this.handleResponse;
		http1.send(null);
	}
	this.handleResponse = function () {
		if(http1.readyState == 4) {
			var elem = document.getElementById(result_element_id);
			var response = http1.responseText;
			if(response == "1") {
				elem.innerHTML = '<span style="font-weight: bold; color: red;">This filename is occupied ! Please choose another filename.</span>'; 
			} else {
				elem.innerHTML = 'Filename OK'; 
			}
		}
	}
	this.checkFilename = function () {
		var elem = document.getElementById(result_element_id);
		elem.innerHTML = '';
		this.sndReq();
	}
}

function ajaxStoreClick() {
	var http1 = '';

	this.init = function () {
		http1 = createRequestObject();
	}

	this.sndReq = function (id, type) {
		var uri = '/cms/ajax/getsubcat.php?action=ad_click&type=' + encodeURI(type) + '&id=' + encodeURI(id);
		http1.open('get', uri);
		http1.onreadystatechange = this.handleResponse;
		http1.send(null);
		//alert('URI='+uri);
	}

	this.handleResponse = function () {}
}

function ajaxCategoryHierarchyCombo() {
	var http1 = '';
	var http2 = '';
	var which = '';
	var form_name = 'Form1';
	var select_list_name = '';
	var info_id = 'where_info';
	var value_input_name = '';

	this.init = function (wh, fn, sln, ii, vin) {
		http1 = createRequestObject();
		http2 = createRequestObject();
		which = wh;
		form_name = fn;
		select_list_name = sln;
		info_id = ii;
		value_input_name = vin;
	}

	this.sndReq = function (cat) {
		http1.open('get', '/cms/ajax/getsubcat.php?action=getsubcat&cat='+cat);
		http1.onreadystatechange = this.handleResponse;
		http1.send(null);

		http2.open('get', '/cms/ajax/getsubcat.php?action=breadcrumb_links&cat='+cat+'&which='+which);
		http2.onreadystatechange = this.handleResponse2;
		http2.send(null);
	}

	this.handleResponse = function () {
		//alert('handle-response, state='+http1.readyState);
		var select_list = eval('document.forms[\''+form_name+'\'].'+select_list_name);
		if(http1.readyState == 4) {
			var response = http1.responseText;
			var opts = new Array();
			var temp = new Array();

			//alert(response);

			if(response.indexOf('|' != -1)) {
				//empty select
				for (var i = select_list.options.length; i > 0; i--) {
					select_list.options[i] = null;
				}
		
		    		//fill select with options
				select_list.options[0] = new Option('-- Choose subcategory --', '');
				opts = response.split('$');
				for (var i = 1; i < opts.length; i++) {
					temp = opts[i-1].split('|');
					//alert('i='+i+'    name='+temp[1]);
					select_list.options[i] = new Option(temp[1], temp[0]);
				}
			}
		}
	}

	this.handleResponse2 = function () {
		//alert('handle-response2, state='+http2.readyState);
		if (http2.readyState == 4) {
			var element = document.getElementById(info_id);
			var response = http2.responseText;
			element.innerHTML = response;
		}
	}

	this.change = function (cat) {
		if (cat == '')
			return false;
		this.sndReq(cat);
		var value_input = eval('document.forms[\''+form_name+'\'].'+value_input_name);
		value_input.value = cat;
	}
}


function ajaxScCategoryHierarchyCombo() {
	var http1 = '';
	var http2 = '';
	var which = '';
	var form_name = 'Form1';
	var select_list_name = '';
	var info_id = 'where_info';
	var value_input_name = '';
	var name_input_name = '';

	this.init = function (wh, fn, sln, ii, vin, nin) {
		http1 = createRequestObject();
		http2 = createRequestObject();
		which = wh;
		form_name = fn;
		select_list_name = sln;
		info_id = ii;
		value_input_name = vin;
		name_input_name = nin;
	}

	this.sndReq = function (cat) {
		//alert('cat='+cat);
		http1.open('get', '/cms/ajax/getsubcat.php?action=sc_getsubcat&sc_cat='+cat);
		http1.onreadystatechange = this.handleResponse;
		http1.send(null);

		http2.open('get', '/cms/ajax/getsubcat.php?action=sc_breadcrumb_links&sc_cat='+cat+'&which='+which);
		http2.onreadystatechange = this.handleResponse2;
		http2.send(null);
	}

	this.handleResponse = function () {
		//alert('handle-response, state='+http1.readyState);
		var select_list = eval('document.forms[\''+form_name+'\'].'+select_list_name);
		if(http1.readyState == 4) {
			var response = http1.responseText;
			var opts = new Array();
			var temp = new Array();

			//alert(response);

			if(response.indexOf('|' != -1)) {
				//empty select
				for (var i = select_list.options.length; i > 0; i--) {
					select_list.options[i] = null;
				}
		
		    		//fill select with options
				select_list.options[0] = new Option('-- Choose subcategory --', '');
				opts = response.split('$');
				for (var i = 1; i < opts.length; i++) {
					temp = opts[i-1].split('|');
					if (i==1) {
						//this is name of parent category
						//alert('parent_name = ' + temp[1]);
						var value_input = eval('document.forms[\''+form_name+'\'].'+name_input_name);
						value_input.value = temp[1];
					} else {
						//alert('i='+i+'    name='+temp[1]);
						select_list.options[i-1] = new Option(temp[1], temp[0]);
					}
				}
			}
		}
	}

	this.handleResponse2 = function () {
		//alert('handle-response2, state='+http2.readyState);
		if (http2.readyState == 4) {
			var element = document.getElementById(info_id);
			var response = http2.responseText;
			element.innerHTML = response;
		}
	}

	this.change = function (cat) {
		if (cat == '')
			return false;
		this.sndReq(cat);
		var value_input = eval('document.forms[\''+form_name+'\'].'+value_input_name);
		value_input.value = cat;
	}
}

function ajaxScCategoryParents() {
	var http1 = '';

	this.sndReq = function (cat) {
		http1 = createRequestObject();
		var uri = '/cms/ajax/getsubcat.php?action=sc_parents&sc_cat='+cat;
		//alert('uri=\''+uri+'\'');
		http1.open('get', uri);
		http1.onreadystatechange = this.handleResponse;
		http1.send(null);
	}

	this.handleResponse = function () {
		//alert('handle-response, state='+http1.readyState);
		if(http1.readyState == 4) {
			var response = http1.responseText;
			var opts = new Array();
			var temp = new Array();
			//alert('Response='+response);
			if(response.indexOf('|' != -1)) {
				opts = response.split('$');
				cat_parents = new Array(opts.length - 1);
				for (var i = 1; i < opts.length; i++) {
					temp = opts[i-1].split('|');
					//alert('Parent: id='+temp[0]+' name='+temp[1]);
					cat_parents[i-1] = new Array(2);
					cat_parents[i-1][0] = temp[0];
					cat_parents[i-1][1] = temp[1];
				}
				GenerateHiddenFields();
			}
		}
	}
}

function ajaxAlphabetCombo() {
	var http1 = '';
	var which = '';
	var form_name = '';
	var select_list_name = '';
	var value_input_name = '';
	var letter = '';
	var chosen_id = '';

	this.init = function (wh, fn, sln, vin) {
		//alert('ajaxAlphabetCombo:init()');
		http1 = createRequestObject();
		which = wh;
		form_name = fn;
		select_list_name = sln;
		value_input_name = vin;
	}

	this.sndReq = function (let) {
		//alert('sned req letter = '+let);
		if (which == 'company') {
			http1.open('get', '/cms/ajax/getsubcat.php?action=getcompletter&letter='+let);
		} else {
			http1.open('get', '/cms/ajax/getsubcat.php?action=getlocletter&letter='+let);
		}
		http1.onreadystatechange = this.handleResponse;
		http1.send(null);
	}

	this.handleResponse = function () {
		//alert('handle-response, letter='+letter+'  state='+http1.readyState);
		var select_list = eval('document.forms[\''+form_name+'\'].'+select_list_name);
		if(http1.readyState == 4) {
			var response = http1.responseText;
			var opts = new Array();
			var temp = new Array();

			//alert(response);

			if(response.indexOf('~' != -1)) {
				//empty select
				for (var i = select_list.options.length; i > 0; i--) {
					select_list.options[i] = null;
				}
		
		    		//fill select with options
				if (which == 'company') {
					select_list.options[0] = new Option('-- Choose company -- ' + letter, '');
				} else {
					select_list.options[0] = new Option('-- Choose location -- ' + letter, '');
				}
				opts = response.split('|');
				for (var i = 1; i < opts.length; i++) {
					temp = opts[i-1].split('~');
					//alert('i='+i+'    name='+temp[1]);
					select_list.options[i] = new Option(temp[1], temp[0]);
					if ((chosen_id != '') && (chosen_id == temp[0])) {
						//alert('found !!');
						select_list.options[i].selected = 1;
					}
				}
			}
		}
	}

	this.LetterChosen = function (let, id) {
		if (let == '') {
			var select_list = eval('document.forms[\''+form_name+'\'].'+select_list_name);
			if (which == 'company') {
				select_list.options[0] = new Option('-- Choose company -- ' + letter, '');
			} else {
				select_list.options[0] = new Option('-- Choose location -- ' + letter, '');
			}
		} else {
			letter = let;
			chosen_id = id;
			//alert('Letter chosen: '+let+'  id='+id);
			this.sndReq(let);
		}
	}

	this.optionChosen = function (id) {
		//alert('Option chosen');
		//document.forms[form_name].eval(value_input_name).value = id;
		var value_input = eval('document.forms[\''+form_name+'\'].'+value_input_name);
		value_input.value = id;
	}
}


function ajaxGetCoord() {
	var http1 = '';
	var form_name = '';
	var address_name = '';
	var city_name = '';
	var state_name = '';
	var zip_name = '';
	var latitude_name = '';
	var longitude_name = '';
	
	this.init = function (fn, ad, ci, st, zi, la, lo) {
		//alert('ajaxGetCoord:init()');
		http1 = createRequestObject();
		form_name = fn;
		address_name = ad;
		city_name = ci;
		state_name = st;
		zip_name = zi;
		latitude_name = la;
		longitude_name = lo;
	}

	this.sndReq = function () {
		var form = eval('document.forms[\''+form_name+'\']');
		var uri = '/cms/ajax/getsubcat.php?action=getcoord';
		uri += '&address='+encodeURI(eval('document.forms[\''+form_name+'\'][\'' + address_name + '\'].value'));
		uri += '&city='+encodeURI(eval('document.forms[\''+form_name+'\'][\'' + city_name + '\'].value'));
		uri += '&state='+encodeURI(eval('document.forms[\''+form_name+'\'][\'' + state_name + '\'].value'));
		uri += '&zip='+encodeURI(eval('document.forms[\''+form_name+'\'][\'' + zip_name + '\'].value'));

		//alert('get: uri='+uri);
		http1.open('get', uri);
		http1.onreadystatechange = this.handleResponse;
		http1.send(null);
	}

	this.handleResponse = function () {
		//alert('handle-response, state='+http1.readyState);
		var form = document.forms[form_name];
		if(http1.readyState == 4) {
			var response = http1.responseText;
			//alert(response);
			var temp = new Array();

			if(response.indexOf('|' != -1)) {
				temp = response.split('|');
				if (temp[0] == "error") {
					alert('Yahoo API Error: \''+temp[1]+'\'');
				} else {
					eval('document.forms[\''+form_name+'\'][\'' + latitude_name + '\']').value = temp[0];
					eval('document.forms[\''+form_name+'\'][\'' + longitude_name + '\']').value = temp[1];
					eval('document.forms[\''+form_name+'\'][\'' + city_name + '\']').value = temp[2];
					eval('document.forms[\''+form_name+'\'][\'' + zip_name + '\']').value = temp[3];
				}
			}
		}
	}

	this.getcoord = function () {
		//alert('Getcoord');
		this.sndReq();
	}
}

function ajaxGetFillCompanyAddress() {
	var http1 = '';
	var form_name = '';
	var address1_name = '';
	var address2_name = '';
	var city_name = '';
	var state_name = '';
	var zip_name = '';
	
	this.init = function (fn, ad1, ad2, ci, st, zi) {
		http1 = createRequestObject();
		form_name = fn;
		address1_name = ad1;
		address2_name = ad2;
		city_name = ci;
		state_name = st;
		zip_name = zi;
	}

	this.sndReq = function (id_company) {
		var form = eval('document.forms[\''+form_name+'\']');
		var uri = '/cms/ajax/getsubcat.php?action=company_address';
		uri += '&id_company='+encodeURI(id_company);

		http1.open('get', uri);
		http1.onreadystatechange = this.handleResponse;
		http1.send(null);
	}

	this.handleResponse = function () {
		//alert('handle-response, state='+http1.readyState);
		var form = document.forms[form_name];
		if(http1.readyState == 4) {
			var response = http1.responseText;
			//alert(response);
			var temp = new Array();

			if(response.indexOf('|' != -1)) {
				temp = response.split('|');
				eval('document.forms[\''+form_name+'\'][\'' + address1_name + '\']').value = temp[0];
				eval('document.forms[\''+form_name+'\'][\'' + address2_name + '\']').value = temp[1];
				eval('document.forms[\''+form_name+'\'][\'' + city_name + '\']').value = temp[2];
				eval('document.forms[\''+form_name+'\'][\'' + state_name + '\']').value = temp[3];
				eval('document.forms[\''+form_name+'\'][\'' + zip_name + '\']').value = temp[4];
				agc.getcoord();
			}
		}
	}

	this.getaddress = function (id_company) {
		//alert('Getaddress');
		this.sndReq(id_company);
	}
}


function ajaxGetSimilarCompanies() {
	var http1 = '';
	var form_name = '';
	var company_name = '';
	var info_name = '';
	var reference_uri = '';
	
	this.init = function (fn, cn, inn, ru) {
		http1 = createRequestObject();
		form_name = fn;
		company_name = cn;
		info_name = inn;
		reference_uri = ru;
	}

	this.sndReq = function () {
		var form = eval('document.forms[\''+form_name+'\']');
		var uri = '/cms/ajax/getsubcat.php?action=similar_companies';
		uri += '&company_name='+encodeURI(eval('document.forms[\''+form_name+'\'][\'' + company_name + '\'].value'));

		http1.open('get', uri);
		http1.onreadystatechange = this.handleResponse;
		http1.send(null);
	}

	this.handleResponse = function () {
		//alert('handle-response, state='+http1.readyState);
		var form = document.forms[form_name];
		if(http1.readyState == 4) {
			var response = http1.responseText;
			//alert('Response='+response);
			var comps = new Array();
			var temp = new Array();
			var warning_text = '';

			if(response.indexOf('|' != -1)) {
				comps = response.split('|');
				var i = 0;
				for (i = 1; i < comps.length; i++) {
					temp = comps[i-1].split('~');
					if (warning_text == '') {
						warning_text += '<strong>These companies with similar name already exists in DB.<br />\nWould you want to edit one of them instead?</strong><br />\n<ul>\n';
					}
					warning_text += '<li><a href="'+reference_uri+'com='+temp[0]+'&fill=yes" title="edit '+temp[1]+'">'+temp[1]+'</a></li>\n';
				}
				if (i > 0) {
					warning_text += '</ul>\n';
					var element = document.getElementById(info_name);
					element.innerHTML = warning_text;
					element.style.visibility = "visible";
				}
			}
		}
	}

	this.checkSimilarCompanies = function () {
		//alert('GetSimilarCompanies');
		this.sndReq();
	}
}


// ------------------
// --- POPUP MENU ---
// ------------------

var timerID = 0;
var timerElement = null;

function findPosX(obj) {
	var curleft = 0;
	if (obj.offsetParent) {
		while (obj.offsetParent) {
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj) {
	var curtop = 0;
	var printstring = '';
	if (obj.offsetParent) {
		while (obj.offsetParent) {
			printstring += ' element ' + obj.tagName + ' has ' + obj.offsetTop;
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}

function TimerHandler() {
	timerElement.style.visibility="hidden";
	timerId = 0;
}

function showId(obj, element) {

	if (timerID != 0) {
		clearTimeout(timerID);
		timerElement.style.visibility="hidden";
	}

	var posX = findPosX(obj);
	var posY = findPosY(obj);
	document.getElementById(element).style.top = posY + 22 + 'px';
	document.getElementById(element).style.left = posX + 0 + 'px';
	document.getElementById(element).style.visibility="visible";

	timerElement = document.getElementById(element);
}

function hideSubMenu() {
	timerID = setTimeout("TimerHandler()", 500);
}

function subMenuOver() {
	if (timerID != 0) {
		clearTimeout(timerID);
	}
}


