<!DOCTYPE HTML PUBLIC ")">
<html><head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"></head><body>/* Browser detection */
function compare_version(ver1, ver2) {
	if (typeof(ver1) == 'string')
		ver1 = ver1.split('.');
	else if (typeof(ver1) == 'number')
		ver1 = [ver1];

	if (typeof(ver2) == 'string')
		ver2 = ver2.split('.');
	else if (typeof(ver2) == 'number')
		ver2 = [ver2];

	var i = 0;
	while (1) {
		if (!ver1[i]) {
			if (!ver2[i])
				return 0;
			else
				return 1;
		} else if (!ver2[i])
			return -1;

		if (parseInt(ver1[i]) &gt; parseInt(ver2[i]))
			return -1;
		else if (parseInt(ver1[i]) &lt; parseInt(ver2[i]))
			return 1;

		i++;
	}
}

var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++) datastring="data[i].string;" dataprop="data[i].prop;" this.versionsearchstring="data[i].versionSearch" ||="" (datastring.indexof(data[i].substring)="" !="-1)" else="" (dataprop)="" return="" data[i].identity;="" }="" },="" searchversion:="" function="" (datastring)="" {="" index="dataString.indexOf(this.versionSearchString);" (index="=" -1)="" return;="" var="" version="dataString.substring(index+this.versionSearchString.length+1);" if="" (version.indexof(="" )=""> 0) {
			version = version.substring(0, version.indexOf(' '));
		}

		return version;
	},
	isValid: function (browsers) {
		var i = 0;
		var valid = false;

		for (i = 0; i &lt; browsers.length; i++) {
			if (browsers[i].agent == this.browser) {
				if (compare_version(browsers[i].version, this.version) &gt;= 0) {
					valid = true;
					break;
				}
			}

		}

		return valid;
	},
	dataBrowser: [
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();

//If javascript enabled don't do php check
function setJavascriptON() {
	document.getElementById("check_type_diff").value = 0;
}

function getCheckedTypeId() {
	for (i = 0; i &lt; document.formular.type.length; i++) {
		if (document.formular.type[i].checked == true) {
			return "r"+document.formular.type[i].value.toUpperCase(); 
		}
	}

	return "rS";
}

function getCheckedTypeVal() {
	for (i = 0; i &lt; document.formular.type.length; i++) {
		if (document.formular.type[i].checked == true) {
			return document.formular.type[i].value; 
		}
	}

	return "s";
}

function showWarning(_category, _warning, _warn_id) {
	var warn_element = document.getElementById(_warn_id);
	var warn_text = categoryHasWarning(_category, _warning);

	if (!warn_element) {
		return false;
	}

	if (!warn_text) {
		warn_element.innerHTML = "";
		showField(_warn_id, "none");
	} else {
		warn_element.innerHTML = warn_text;
		showField(_warn_id, "block");	
	}

}

function showOriginal(_category) {
	var Msg = document.getElementById("orig_msg");
	var warning = categoryHasWarning(_category, "org_warning");
	var checkedType = getCheckedTypeId();

	if (checkedType != "rS" || !warning) {
		Msg.innerHTML = "";
		showField("orig_msg", "none");
	} else {
		showField("orig_msg", "none");
		Msg.innerHTML = warning;
		// Adding it to msg innerhtml so that the compare works. 
		// In innerHTML the ä gets converted to its real value so both sides needs to be compared
		if (document.getElementById("err_msg_body").innerHTML != Msg.innerHTML) {
			showField("orig_msg", "block");
		} else {
			Msg.innerHTML = "";
		}
	}
}

function displayStores(_show) {
	var hasStores = document.getElementById('store') != null;
	if (hasStores) {
		if (_show == "block") {
			showField("lstore", "block");
			showField("istore", "block");
			} else {
			showField("lstore", "none");
			showField("istore", "none");
		}
	}
}

function showType(_typeId, _nameId) {
	var Name = document.getElementById(_nameId);
	var companyAd = document.getElementById(_typeId);

	Name.innerHTML = '';
	var inner_html = '';
	if (_typeId == "company_ad_id") {
		inner_html = "Nom de l'entreprise:";
		Name.innerHTML = inner_html;
		displayStores("block");

		showField("dsiren", "block");
		showField("lsiren", "block");

		/*var infopage = document.getElementById("infopage_display");
		if (infopage.getAttribute("is_admin") != "1")
			showField("infopage_display", "block");*/
	} else {
		inner_html = "Nom:";
		Name.innerHTML = inner_html;
		displayStores("none");
		showField("dsiren", "none");
		showField("lsiren", "none");

		/*var infopage = document.getElementById("infopage_display");
		if (infopage.getAttribute("is_admin") != "1")
			showField("infopage_display", "none");*/
	}
	showExtras();
}

function showPrice(_type, _price, _label) {
	var features = get_settings('features', key_lookup);
	var Price = document.getElementById(_label);
	if (!has_feature("no_price", features)) {
		if (has_feature("monthly_rate", features)) {
			Price.innerHTML = "Loyer mensuel:";
		} else if (has_feature("weekly_rate", features)) {
			Price.innerHTML = "Prix / Semaine:";
		} else {
			Price.innerHTML = "Prix:";
		}
		showField(_price, "block");
		showField(_label, "block");
	} else {
		showField(_price, "none");
		showField(_label, "none");
	}
}

/*function showTips(_type, _category) {
	var features = get_settings('features', key_lookup);
 	 if (has_feature("info_swap", features)) {
		showField("info_swap", "block");
	} else {
		showField("info_swap", "none");
	}
}*/

var reset_type = false;

function typeChanged(_type, _price, _label, _catId, _typeId) {

	var Category = document.getElementById(_catId);
	var checkedType = getCheckedTypeId();

	showPrice(_type,
_price, _label); showTips(Category.value); showExtras(); // show or
hide original message, showOriginal depends on checked type
showOriginal(Category.value); showMessages(Category.value,
checkedType.substr(1).toLowerCase()); reset_type = false;
}
function apartmentTypeChanged(_catId) { showCategory(_catId); }
function getCategoryTips(_cat) { var private_ad =
document.getElementById("private_ad_id").checked; var tips = false; if
(_cat &lt;= 0) return tips; if (!private_ad &amp;&amp;
categoryList[_cat].tips['company'].length) { tips =
categoryList[_cat].tips['company']; } else if (private_ad &amp;&amp;
categoryList[_cat].tips['private'].length) { tips =
categoryList[_cat].tips['private']; } else if
(categoryList[_cat].tips.all.length) { tips =
categoryList[_cat].tips.all; } return tips;
}
function showTips(_category) { var Msg =
document.getElementById("category_tips"); var tips =
getCategoryTips(_category); if (!tips) { Msg.innerHTML = "";
showField("category_tips", "none"); } else { showField("category_tips",
"block"); Msg.innerHTML = tips; }
}
function showExtras() { var Category =
document.getElementById("category").value; var checkedType =
getCheckedTypeVal(); var features = get_settings('features',
key_lookup); showTips(Category); displayFeatures(Category, checkedType,
features);
} function showCategory(_catId, _showId, _typeId, _textId) { var
Category = document.getElementById(_catId); var Type =
document.getElementById(_typeId); var adType =
document.getElementById("dtype"); var checkedType = getCheckedTypeId();
var features = get_settings('features', key_lookup); var typeName; //
type &amp; features depend on checked type from former category //
alert("category : " +_catId + ", type : " + _typeId + ", checkedType :
" + checkedType); /* NOT_LBC */ //showTips(checkedType,
Category.value); /*var zipcode_inner_html = ''; if
(document.getElementById('zipcode_holder_1').innerHTML.length &gt;
document.getElementById('zipcode_holder_2').innerHTML.length) {
zipcode_inner_html =
document.getElementById('zipcode_holder_1').innerHTML; } else {
zipcode_inner_html =
document.getElementById('zipcode_holder_2').innerHTML; } if
(has_feature("displace_zipcode", features)) {
document.getElementById('zipcode_holder_1').innerHTML = '';
document.getElementById('zipcode_holder_2').innerHTML =
zipcode_inner_html; } else {
document.getElementById('zipcode_holder_1').innerHTML =
zipcode_inner_html;
document.getElementById('zipcode_holder_2').innerHTML = ''; } if
(has_feature("zipcode_optional", features)) {
showField("zipcode_optional", "inline"); } else {
showField("zipcode_optional", "none"); }*/ if
(has_feature("zipcode_hint", features)) { showField("zipcode_hint",
"none"); } else { showField("zipcode_hint", "inline"); } if
(has_feature("mcertified_extra", features)) {
showField("mcertified_extra", "inline"); } else {
showField("mcertified_extra", "none"); } /* NOT_LBC */
/*if(!has_feature("no_licenseplate", features))
document.getElementById('no_licenseplate').checked = false; */ /* Hide
price if noprice feature is set */ if(has_feature("noprice", features))
{ showField("price_box", "none"); } else { showField("price_box",
"inline"); } /* Hide video if no_video feature is set */ if
(has_feature("no_video", features)) { showField("video_box", "none"); }
else { showField("video_box", "inline"); } if (Category.value != 0
&amp;&amp; categoryList[Category.value] &amp;&amp;
categoryList[Category.value]['level'] % 2) { enable_field("video"); }
else { disable_field("video"); } if (adType &amp;&amp;
categoryList[Category.value] &amp;&amp;
categoryList[Category.value]['level'] % 2) { adType.innerHTML = ''; var
inner_html = ''; /*Due to bug in Internet explorer 5.2 for OS X */ var
types = get_settings("types", key_lookup); var typeArray; if (types) {
typeArray = types.split(","); } else { typeArray =
categoryList[Category.value]['type'].split(","); } for (var i in
typeArray) { var t = typeArray[i]; if (t != 'o') { typeName =
typeList[t] /* Check if category has type with different name */ if
(category_params[Category.value] &amp;&amp;
category_params[Category.value][t] &amp;&amp;
category_params[Category.value][t]['labels'] &amp;&amp;
category_params[Category.value][t]['labels']['newad']) { typeName =
category_params[Category.value][t]['labels']['newad']; } inner_html += '<input name="type" value="'+t+'" +(t="=&quot;s&quot;?'checked=&quot;checked&quot;':'')+'" id="r'+t.toUpperCase()+'" onclick="typeChanged(\''+t+'\', \'dprice\', \'lprice\', \'category\', \'company_ad_id\');apartmentTypeChanged(\'category\');" type="radio"> <label for="r'+t.toUpperCase()+'">'+typeName+'</label><br>';
			  }
		}

		adType.innerHTML = inner_html;

		if (!has_feature("no_ad_type", features)) {
			if (document.getElementById(checkedType)) { 
				setChecked(checkedType, true);
				showPrice(document.getElementById(checkedType).value, 'dprice', 'lprice');
			} else if (document.formular.type[0]) {
				setChecked("r"+document.formular.type[0].value.toUpperCase(), true);
				showPrice(document.formular.type[0].value, 'dprice', 'lprice');
				reset_type = true;
			}
		}
	}

	// type has been updated
	features = get_settings('features', key_lookup);

	if (has_feature("only_private", features)) {
		setChecked("private_ad_id", true);
		setChecked("company_ad_id", false);
		showField("dcompany_ad", "none");
		showField("company_ad_id", "none");
		showField("lcompany_ad", "none");
		showField("dprivate_ad", "inline");
		showField("private_ad_id", "inline");
		showField("lprivate_ad", "inline");
		showType("private_ad", "lname");
	} else if (has_feature("only_company", features)) {
		setChecked("company_ad_id", true);
		setChecked("private_ad_id", false);
		showField("dcompany_ad", "inline");
		showField("dprivate_ad", "none");
		showField("private_ad_id", "none");
		showField("lprivate_ad", "none");
		showField("company_ad_id", "inline");
		showField("lcompany_ad", "inline");
		showType("company_ad_id", "lname");
	} else {
		showField("dcompany_ad", "inline");
		showField("dprivate_ad", "inline");
		showField("company_ad_id", "inline");
		showField("lcompany_ad", "inline");
		showField("private_ad_id", "inline");
		showField("lprivate_ad", "inline");
	}	

	if (has_feature("no_ad_type", features)) {
		showField("field_ad_type", "none");
		showPrice("s", 'dprice', 'lprice');
		reset_type = true;
	} else {
		showField("field_ad_type", "block");
	}


	showWarning(Category.value, "region_warning", "info_region");
	showWarning(Category.value, "address_warning", "info_address");
	showWarning(Category.value, "zipcode_warning", "info_zipcode");

	/* Display other features */
	showExtras();
	showOriginal(Category.value);
	showExtraImagesNumbers(_catId);
	if (v_enabled) {
		showVideoPrice(_catId);
		showVideoLength(_catId);
	}	
	showMessages(Category.value, checkedType.substr(1).toLowerCase());
}

function showDepartment(_regionId) {
	var region = document.getElementById(_regionId);		

	document.formular.dpt_code.options.length = 1;

	if (typeof(region_departments[region.value]) == "undefined") {
		showField("ddpt_code", "none");	
		showField("ldpt_code", "none");	
		showField("err_dpt_code", "none");	
		if (document.getElementById('store') != null)
			document.getElementById("store").focus();
		else
			document.getElementById("name").focus();
		return;
	}

	var count = 1;
	for (var i in region_departments[region.value]) {
		document.formular.dpt_code.options[count] = new Option(region_departments[region.value][i], i);
		if (document.formular.dpt_code.value == region_departments[region.value][i])
			document.formular.dpt_code.options[count].selected = true;
		count++;
	}

	showField("ddpt_code", "block");
	showField("ldpt_code", "block");
	document.getElementById("dpt_code").focus();

}

function saveNoSalesmen(elemObj) {
	if (elemObj.checked) {
		document.cookie= "no_salesmen=1;";
	} else {
		document.cookie= "no_salesmen=0;";
	}
}

/*
 * Show extra images price and nr of allowed images for chosen category
 */
function showExtraImagesNumbers(_catId) {
	var Category = document.getElementById(_catId);
	var number = document.getElementById('extra_images_num');
	var price = document.getElementById('extra_images_price');
	var max_allowed_images = default_max_extra_images;

	if (categoryList[Category.value] &amp;&amp; categoryList[Category.value]['level'] % 2) {
		// Check if category has special
		if (number &amp;&amp; typeof(number) != 'undefined')
			number.innerHTML = language_numbers[categoryList[Category.value]['extra_images']];
		if (price &amp;&amp; typeof(price) != 'undefined')
			price.innerHTML = categoryList[Category.value]['extra_images_price'];
		max_allowed_images = categoryList[Category.value]['extra_images'];

		// Show or hide
		if (uploaded_images &lt; max_allowed_images) {
			showField("extra_images_form", "inline");
			showField("image_button", "inline");
			enable_field("image2");
			showField("image2", "inline");
		} else {
			showField("extra_images_form", "none");
			showField("image2", "none");
			disable_field("image2");
			showField("image_button", "none");
		}

		// Show field for text about extra images 
		showField("extra_images_text", "block");
	} else {
		// Hide field for text about extra images
		showField("extra_images_text", "none");
		
		// Show defaults numbers
		if (number &amp;&amp; typeof(number) != 'undefined')
			number.innerHTML = language_numbers[default_max_extra_images];
		if (price &amp;&amp; typeof(price) != 'undefined')
			price.innerHTML = default_price_extra_images;
	}
}


/*
 * 
 */ 
function showVideoPrice(_catId) {
	var category = document.getElementById(_catId);
	var video_info = document.getElementById('video_info');

	if (category.value == 0 || categoryList[category.value] &amp;&amp; !(categoryList[category.value]['level'] % 2)) {
		video_info.innerHTML = 'Fungerar med filmer från din kamera, mobil och videokamera!&nbsp; Långa filmer kortas ner.';
	} else {
		video_info.innerHTML = '(Ordinarie pris <span id="video_price"></span>&nbsp;kr extra)&nbsp; Fungerar med filmer från din kamera, mobil och videokamera!&nbsp; Långa filmer kortas till <span id="video_length"></span> sekunder.';
	}

	var price = document.getElementById('video_price');

	if (categoryList[category.value] &amp;&amp; categoryList[category.value]['level'] % 2) {
		if (price &amp;&amp; typeof(price) != 'undefined')
			price.innerHTML = categoryList[category.value]['video_price'];
	}
	else if (price &amp;&amp; typeof(price) != 'undefined')
		price.innerHTML = default_price_video;
}

function showVideoLength(_catId) {
	var category = document.getElementById(_catId);

	var length = document.getElementById('video_length');

	if (categoryList[category.value] &amp;&amp; categoryList[category.value]['level'] % 2) {
		if (length &amp;&amp; typeof(length) != 'undefined')
			length.innerHTML = categoryList[category.value]['video_length'];
	}
	else if (length &amp;&amp; typeof(length) != 'undefined')
		length.innerHTML = default_video_length;
}

/*
 * AJAX
 */
function ajax_request(dest, post, callback, params) {
	var xmlhttp = false;
	
	try {
		xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
	} catch (e) {
		// browser doesn't support ajax. handle however you want
	}
	xmlhttp.onreadystatechange = function () { ajax_callback(callback, params, xmlhttp); };
	
	xmlhttp.open((post ? "POST" : "GET"), dest, true);
	xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	xmlhttp.send(post);
}

function ajax_callback(callback, params, xmlhttp) {
	if (xmlhttp.readyState == 4) {
		if (xmlhttp.status == 200 &amp;&amp; xmlhttp.responseText.indexOf('&lt; 0) {
			callback(eval("(" + xmlhttp.responseText + ")"), xmlhttp, params);
		} else {
			callback(false, xmlhttp, params);
		}
	}
}

/*
 * Validate email and check for store
 */
function checkEmail(store_id) {
	if (!document.getElementById('email')) {
		return;
	}

	var email = document.getElementById('email').value;

	if (document.forms[0].company_ad[0].id == "company_ad_id"  &amp;&amp; !document.forms[0].company_ad[0].checked) {
			return;
		}

	if (document.forms[0].company_ad[1].id == "company_ad_id"  &amp;&amp; !document.forms[0].company_ad[1].checked) {
			return;
		}

	if (!/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/.test(email)) {
		return;
	}
/* Don't call this since we don't have stores yet
 	var url = "/ajax?a=getstores";
	var postdata = "email=" + escape(email);

	ajax_request(url, postdata, checkEmailCB, store_id ? store_id : null)
*/
}

function checkEmailCB(result, xmlhttp, arg) {
	var storediv = document.getElementById('store_holder');
	var store_list = '';

	for (var store_id in result) {
		if (arg != null &amp;&amp; store_id == arg)
			store_list += "" + result[store_id] + "\n";
		else
			store_list += "" + result[store_id] + "\n";
	}
	
	if (storediv) {
		if (store_list) {
			storediv.innerHTML = "    <div class="labelform" id="lstore">Välj butik:</div>" +
						"    <div class="adinput" id="istore">" +
						"	<select name="store" id="store"></select>";
		} else
			storediv.innerHTML = "";
	}

	/*if (document.getElementById('infopage_display').getAttribute("is_admin") != "1") {
		if (store_list) {
			document.getElementById('infopage').disabled = false;
			document.getElementById('infopage_title').disabled = false;
			document.getElementById('infopage_disable').style.color = '#000';
			document.getElementById('infopage_store_text').style.display = 'none';
		} else {
			document.getElementById('infopage').disabled = true;
			document.getElementById('infopage_title').disabled = true;
			document.getElementById('infopage').value = '';
			document.getElementById('infopage_title').value = '';
			document.getElementById('infopage_disable').style.color = '#999';
			document.getElementById('infopage_store_text').style.color = '#000';
			document.getElementById('infopage_store_text').style.display = 'inline';
		}
	}*/
}

function actionSelected() {
	if (document.getElementById('passwd_request')) {
		if(document.getElementById('cmd_edit').checked) {
			document.getElementById('passwd_request').style.display = 'block';
		} else {
			document.getElementById('passwd_request').style.display = 'none';
		}
	}
}

/*
 * Progress bar
 */
function ProgressBar(_container) {
	this.progress = [];
	this.container = _container || 'progressbar_container';
	this.completed = false;

	/* Don't show estimate until progress reach (x) procent */
	this.ESTIMATE_MIN_PROGRESS = 10;
	/* Speed calculation include latest (x) procent */
	this.SPEED_CALC_LATEST = 30;

	/* Clear container */
	this.clear();

	/* Init the container */
	var container = document.getElementById(this.container);
	if (!container)
		return;

	/* Create progress table */
	var progress_bar = document.createElement('div');
	progress_bar.className = 'progress_bar';

	var progress_cell = document.createElement('div');
	progress_cell.className = 'progress_blue';
	progress_cell.style.width = '0px';

	var debug = document.createElement('div');
	debug.className = 'progress_debug';

	progress_bar.appendChild(progress_cell);
	container.appendChild(progress_bar);
	container.appendChild(debug);
	container.appendChild(document.createElement('br'));
}

ProgressBar.prototype.clear = function () {
	this.progress = [];

	var container = document.getElementById(this.container);
	if (!container) return;

	while (container.childNodes.length &gt; 0)
		container.removeChild(container.childNodes[0]);
}

ProgressBar.prototype.update = function (progress, total) {
	if (this.completed) return;

	var id = this.progress.length;
	var time = new Date();
	this.progress[id] = {progress: progress, total: total, time: time.getTime()};
	this.completed = progress == total;
};

ProgressBar.prototype.current = function () {
	var id = this.progress.length;

	if (id == 0) return;

	return this.progress[id - 1];
};

ProgressBar.prototype.procent = function (_id) {
	var progress = this.progress[_id] || this.current();

	if (progress &amp;&amp; progress.progress)
		return Math.round( progress.progress / progress.total * 100 );

	return 0;
};

ProgressBar.prototype.speed = function () {
	if (this.progress.length == 0) return;

	var start_at = this.progress.length - Math.floor(this.progress.length * this.SPEED_CALC_LATEST / 100) - 1;

	if (start_at &lt; 0)
		start_at = 0;

	var first = this.progress[start_at];
	var current = this.current();

	var bytes = current.progress - first.progress;
	var time = (current.time - first.time) / 1000;

	return Math.round((bytes / 1000) / time);
};

ProgressBar.prototype.estimate = function () {
	if (this.procent() &lt; this.ESTIMATE_MIN_PROGRESS) return ;

	var speed = this.speed();
	var progress = this.current();

	var remaining_bytes = progress.total - progress.progress;

	var remaining_seconds = Math.round(remaining_bytes / speed) / 1000;

	return Math.round(remaining_seconds);
};

ProgressBar.prototype.draw = function () {
	var container = document.getElementById(this.container);
	if (!container) return;
	container.style.display = 'block';

	var estimate = this.estimate();
	var speed = this.speed();
	var procent = this.procent();

	if (container.childNodes.length) {
		var progress_bar = container.getElementsByTagName('div')[0];
		var progress_cell = container.getElementsByTagName('div')[1];
		progress_cell.style.width = Math.round((progress_bar.offsetWidth - 2) * procent / 100)+'px';

		var debug = container.getElementsByTagName('div')[2];
		var minutes_left = Math.floor(estimate / 60);
		var seconds_left = estimate - minutes_left * 60;
		var time_left = '';

		if (minutes_left  + seconds_left &gt; 0)
			time_left = 'Tid kvar: ';
		if (minutes_left &gt; 0)
			time_left += minutes_left + " min ";
		if (seconds_left &gt; 0)
			time_left += seconds_left + " s";

		debug.innerHTML = procent + "%&nbsp;&nbsp;&nbsp;" + time_left;
	}
};

ProgressBar.prototype.update_draw = function(progress, total) {
	if (this.completed) return;

	this.update(progress, total);
	this.draw();
};

/*
 * Video uploader
 */
function VideoUploader(_form, _container) {
	/* Allowed browsers */
	if (!BrowserDetect.isValid([
					{agent: 'Firefox', version: '1.5'},
					{agent: 'Explorer', version: '5.5'},
					{agent: 'Safari', version: '412.2'},
					{agent: 'Opera', version: '8'}
				])) return;

	this.form = _form || document.getElementsByTagName('form')[0];
	this.container = _container || 'ajax_uploader';

	this.upload_id = false;
	this.progress = false; 
	this.encoded = false;

	this.init();
}

VideoUploader.prototype.init = function () {
	var self = this;
	this.form.original_action = this.form.action;
	this.form.onsubmit = function () { return self.upload() };
};

VideoUploader.prototype.iframe = function () {
	var iframe_span = document.getElementsByName(this.container)[0];

	if (iframe_span)
		document.body.removeChild(iframe_span.parentNode);

	/* IE has problems adding iframes with createElement */
	iframe_span = document.createElement('span');
	iframe_span.innerHTML = '';

	document.body.appendChild(iframe_span);
};

VideoUploader.prototype.upload = function () {
	this.upload_id = new Date().getTime();
	this.encoded = false;
	this.form.setAttribute('target', window.name);

	/* Upload video */
	if (this.form.video &amp;&amp; this.form.video.value.length &gt; 0) {
		/* Create iframe */
		this.iframe();

		/* Change state */
		var action = this.form.original_action.replace(/(add_video_)?verify/, 'upload_video');

		this.form.action = action + '/' + this.upload_id;

		/* Set form target to iframe*/
		this.form.setAttribute('target', this.container);

		/* Remove loading_dots */
		var loading = document.getElementById('loading');
		if (loading) {
			if (loading.timer)
				clearTimeout(loading.timer);
			loading.style.display = 'none';
		}

		this.start_progress();
		return true;
	} 

	/* Normal state */
	return true;
};

VideoUploader.prototype.start_progress = function () {
	var self = this;

	/* Start progress bar */
	setTimeout(function () { self.update_progress(0, null, self, true); }, 500);
};

VideoUploader.prototype.update_progress = function (result, xmlhttp, self, first_time) {
	if (self.encoded) {
		return;
	}

	if (first_time) {
		/* Hide input fields */
		var video_input_box = document.getElementById('video_input_box');
		video_input_box.style.display = 'none';
		showField('err_video', 'none');

		/* Create a progress bar */
		self.progress = new ProgressBar();

		/* Upload started return form to its original state */
		var old_input_field = video_input_box.getElementsByTagName('input')[0];
		old_input_field.parentNode.removeChild(old_input_field);
		video_input_box.innerHTML = '<input name="video" id="video" type="file">'
+ video_input_box.innerHTML; self.form.setAttribute('target',
window.name); self.form.action = self.form.original_action; } /* Check
result */ if (!result) { /* XXX TECHNICAL ERROR? */ } else if
(result.error) { self.show_result(result.error); return; } else { /*
Update progress bar */ self.progress.update_draw(result.progress,
result.total); } if (!self.progress.completed) { /* Still uploading */
setTimeout( function () {
ajax_request(self.form.action.replace(/(add_video_)?verify/,
'upload_progress') + '/'+self.upload_id, null, self.update_progress,
self) ; }, 1000); return; } /* Done uploading, wait for encoding */
self.wait_encoding();
};
VideoUploader.prototype.wait_encoding_dots = function (step) { var self
= this; var step = step % 4; var dots =
document.getElementById('progress_dots'); if (this.progress.completed
&amp;&amp; !this.encoded) { dots.innerHTML = ''; for (var i = 0; i &lt;
step; i++) dots.innerHTML += '.'; setTimeout(function () {
self.wait_encoding_dots(step + 1); }, 500); }
};
VideoUploader.prototype.wait_encoding = function (step) { var self =
this; var step = step || 0; /* XXX maybe progress bar should have this
part of code! */ if (this.progress.completed &amp;&amp; !this.encoded)
{ var container = document.getElementById(this.progress.container); if
(container &amp;&amp; container.childNodes.length) { var debug =
container.getElementsByTagName('div')[2]; if
(!(debug.innerHTML.indexOf('Bearb') &gt;= 0)) { debug.innerHTML =
"100%&nbsp;&nbsp;&nbsp;Bearbetar, vänta<span id="progress_dots"></span>";
				this.wait_encoding_dots(1);
			}
		}

		setTimeout(function () { self.wait_encoding(step + 1); }, 10);
	}
};

VideoUploader.prototype.show_result = function (result) {
	this.form.action = this.form.original_action;
	this.form.setAttribute('target', window.name);
	this.form.video.value = '';

	this.progress.completed = true;
	this.encoded = true;

	var progress_container = document.getElementById(this.progress.container);

	if (result == 'OK') {
		if (progress_container) {
			var debug = progress_container.getElementsByTagName('div')[2];
			debug.innerHTML = 'Klar.';
		}

		/* Remove the file field */
		var video_input_box = document.getElementById('video_input_box');
		video_input_box.getElementsByTagName('input')[0].disabled = true;

		var button = document.getElementsByName('validate')[0];
		showProgressBar(button);
		window.scrollTo(0, findPosY(button));
		document.forms[0].submit();
	} else {
		if (progress_container)
			this.progress.clear();

		/* Get video_input_box */
		var video_input_box = document.getElementById('video_input_box');

		/* Show input fields */
		var old_input_field = video_input_box.getElementsByTagName('input')[0];
		old_input_field.parentNode.removeChild(old_input_field);
		video_input_box.innerHTML = '<input name="video" id="video" type="file">' + video_input_box.innerHTML;

		video_input_box.style.display = 'block';

		/* Show error */
		var error_field = document.getElementById('err_video').getElementsByTagName('span')[0];
		error_field.innerHTML = result;
		showField('err_video', 'block');
	}
};

/*
 * Change form state and query
 */
function form_action_state(state, query) {
	var form = document.getElementsByTagName('form')[0];
	form.action = form.action.replace(/verify/, state);
	if (query) {
		var queryArray = query.split("&amp;");
		for (var i in queryArray) {
			var q = queryArray[i];
			var keyvalueArray = q.split("=");
 			var input = document.createElement('input');

			input.type = 'hidden';
			input.name = keyvalueArray[0];
			input.value = keyvalueArray[1];
			form.appendChild(input);
		}
	}
	form.setAttribute('target', window.name);
	form.submit();

	return false;
}

function click_extra_images(elem) {
	var form = document.getElementsByTagName('form')[0];
	var input = document.createElement('input');

	input.type = 'hidden';
	input.name = 'extra_images';
	input.value = '1';
	form.appendChild(input);

	showProgressBar(elem);
	form.submit();
}

function get_apartment_type() {
	var apartment_type = document.formular.apartment_type;
	for (i = 0; i &lt; apartment_type.length; i++) {
		if (apartment_type[i].checked == true) {
			return apartment_type[i].value; 
		}
	}

	return "tenant_ownership";
}

function key_lookup(keyname) {
	if (keyname == 'type')
		return getCheckedTypeVal();
	else if (keyname == 'apartment_type')
		return get_apartment_type();
	else if (keyname == 'company_ad') {
		if (document.getElementsByName(keyname)[0].checked)
			return document.getElementsByName(keyname)[0].value;
		else
			return document.getElementsByName(keyname)[1].value;
	} else if (document.getElementById(keyname))
		return document.getElementById(keyname).value;
	else
		return null;
}

function has_feature(feature, features) {
	if (!features) {
		return (categoryHasFeature(document.getElementById("category").value, feature, getCheckedTypeVal()) ||
			categoryHasFeature(document.getElementById("category").value, feature));
	}

	if (features &amp;&amp; features.indexOf(feature) &gt;= 0)
		return true;

	return false;
}

function showMoreInfo(feature_to_toggle) {
	var element_to_toggle = document.getElementById(feature_to_toggle+"_info");
	var feature;

	if ((element_to_toggle.style.display == "none")||(element_to_toggle.style.display == ""))
		element_to_toggle.style.display="block";
	else if (element_to_toggle.style.display == "block")
		 element_to_toggle.style.display="none";

	for (feature in top_list_types) {
		if (feature != feature_to_toggle) {
			document.getElementById(feature+"_info").style.display = "none";
		}
	}
}
</div></data.length;i++)></body></html>
