/*
 * GLOBAL VARS
 */

var last_clicked_at = 0;

/* 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]) > parseInt(ver2[i]))
      return -1;
    else if (parseInt(ver1[i]) < 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++) {
      var dataString = data[i].string;
      var dataProp = data[i].prop;
      this.versionSearchString = data[i].versionSearch || data[i].identity;
      if (dataString) {
        if (dataString.indexOf(data[i].subString) != -1)
          return data[i].identity;
      }
      else if (dataProp)
        return data[i].identity;
    }
  },
  searchVersion: function (dataString) {
    var index = dataString.indexOf(this.versionSearchString);
    if (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 < browsers.length; i++) {
      if (browsers[i].agent == this.browser) {
        if (compare_version(browsers[i].version, this.version) >= 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();


/* ----------------------------------------------------------------------- */
// file: pagequery_api.js
// javascript query string parsing utils
// pass location.search to the constructor: var page = new PageQuery(location.search)
// get values like: var myValue = page.getValue("param1") etc.
// djohnson@ibsys.com {{djohnson}}
// you may use this file as you wish but please keep this header with it thanks
/* ----------------------------------------------------------------------- */	

function PageQuery(q) {
	if(q.length > 1) this.q = q.substring(1, q.length);
	else this.q = null;
	this.keyValuePairs = new Array();
	if(q) {
		for(var i=0; i < this.q.split("&").length; i++) {
			this.keyValuePairs[i] = this.q.split("&")[i];
		}
	}
	this.getKeyValuePairs = function() { return this.keyValuePairs; }
	this.getValue = function(s) {
		for(var j=0; j < this.keyValuePairs.length; j++) {
			if(this.keyValuePairs[j].split("=")[0] == s)
				return this.keyValuePairs[j].split("=")[1];
		}
		return -1;
	}
	this.getParameters = function() {
		var a = new Array(this.getLength());
		for(var j=0; j < this.keyValuePairs.length; j++) {
			a[j] = this.keyValuePairs[j].split("=")[0];
		}
		return a;
	}
	this.getLength = function() { return this.keyValuePairs.length; }	
}

function queryString(key) {
	var page = new PageQuery(window.location.search); 
	return unescape(page.getValue(key)); 
}

/* --------------------------------------------------------------------------- */

/*
 * Array handling
 */
function isInArray(needle, arrayHaystack) {
	for (var x in arrayHaystack) {
		
		if (arrayHaystack[x].split(":")[0] == needle)
			return true;
	}

	return false;
}

/*
 * Cookie handling
 */
function setCookie(_name, _value, _days) {
  if (_days != null) {
    if (_days < 0) days = 3000; //permanent cookie
    var date = new Date();
    date.setTime(date.getTime()+(_days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
  } else var expires = "";
	if (_value != null && _value != "")
		document.cookie = _name + "=" + _value+expires+"; path=/";
}	

function getCookie(_name) {
	var cookieStr = document.cookie;
	var arr = cookieStr.split(";");
	
	for (var i = 0; i < arr.length; i++) {
		var cookieArr = arr[i].split("=");
		var cookieName = cookieArr[0].replace(" ", "");
		if (cookieName == _name) {
			return unescape(cookieArr[1]);
		}	
	}	

	return null;
}	
function getRawCookie(cookiename) {
    var cookiestring=""+document.cookie;
    var index1=cookiestring.indexOf(cookiename);
    if (index1==-1 || cookiename=="") return ""; 
    var index2=cookiestring.indexOf(';',index1);
    if (index2==-1) index2=cookiestring.length; 
    return unescape(cookiestring.substring(index1+cookiename.length+1,index2));
}
/*
 * Check if the given category has non default types
 */
function categoryHasNonDefaultTypes(_cat) {
	var result = false;

	// If no types
	if ( !categoryList[_cat] || !categoryList[_cat]['type']) return false;

	// Type array
	var typeArray = categoryList[_cat]['type'].split(",");

	// For every feature in category
	for (var t in typeArray) {
		// For this type check if its not part of the defaults
		if (!isInArray(typeArray[t], defaultTypes))
			result = true;
	}

	// Has only default types
	return result;
}

/*
 * Check if the given category has the given feature
 */
function categoryHasFeature(_cat, _feature, _type) {
	// Get category
	if (!_type || _type=='a') {
		return categoryList[_cat] && categoryList[_cat]['features'] && categoryList[_cat]['features'].indexOf(_feature) >= 0;
	} else {
		var category_type = category_params[_cat] ? category_params[_cat][_type] : null;
		return (category_type && isInArray(_feature, category_type["include"]));
	}
}

/*
 * Check if the given  category has a price list, and return it
 */
function categoryHasPriceList(_cat, _type) {
	if (categoryHasFeature(_cat, "pricelist", _type)){
        var feat='';
        if (!_type) {
            var feat ='' + categoryList[_cat]['features'];
        } else {
            var feat ='' + category_params[_cat][_type]['include'];
        }
		return feat.substr(feat.indexOf('pricelist:')+10, 1);
    }

	return false;
}

/*
 * Check if the given  category has a square list, and return it
 */
function categoryHasSquareList(_cat, _type) {
	if (categoryHasFeature(_cat, "squarelist", _type)){
        var feat='';
        if (!_type) {
            var feat ='' + categoryList[_cat]['features'];
        } else {
            var feat ='' + category_params[_cat][_type]['include'];
        }
		return feat.substr(feat.indexOf('squarelist:')+11, 1);
    }

	return false;
}

/*
 * Check if the given  category has a length list, and return it
 */
function categoryHasLengthList(_cat, _type) {
	if (categoryHasFeature(_cat, "lengthlist", _type)){
        var feat='';
        if (!_type) {
            var feat ='' + categoryList[_cat]['features'];
        } else {
            var feat ='' + category_params[_cat][_type]['include'];
        }
		return feat.substr(feat.indexOf('lengthlist:')+11, 1);
    }

	return false;
}

/*
 * Check if the given category has a warning message, and return it
 */
function categoryHasWarning(_cat, _warning_type) {
	if (!categoryList[_cat]) return false;
	
	if (categoryHasFeature(_cat, _warning_type)) {
		var warning_code = parseInt(categoryList[_cat]['features'].substr(categoryList[_cat]['features'].indexOf(_warning_type+':')+_warning_type.length+1));
		return eval(_warning_type+"["+warning_code+"]");
	} else if (typeof(categoryList[_cat][_warning_type]) != "undefined" && categoryList[_cat][_warning_type].length > 0) {
		return categoryList[_cat][_warning_type];
	}
	
	return false;
}


/*
 * Check if the given feature has been selected
 */
function setFeatureVal(_feat) {
	if (!document.getElementById(_feat)) return false;

	var cookie_str = getCookie('features');
	var feat_elements = document.getElementById(_feat).length;
	if (cookie_str && cookie_str.indexOf(_feat) >= 0) {
		var feature = parseInt(cookie_str.substr(cookie_str.indexOf(_feat+':')+_feat.length+1));
		for (var i = 0; i < feat_elements; i++) {
			if (feature == document.getElementById(_feat).options[i].value)
				document.getElementById(_feat).options[i].selected = true;
		}	
	}
}

function setJobCategoriesVal() {
	if (!document.getElementById("job_categories")) return false;
	var search_params = getRawCookie('sq');
    search_params = search_params.split('&');
    for (i=0;i<search_params.length;i++) {
        if (search_params[i].indexOf('jc=')<0) continue;
        category_selected = search_params[i].substr(3,search_params[i].length-1);
        elem = document.getElementById("jc_"+category_selected);
        if (elem) elem.click();
    }
}

/*
 * Check if the given feature has been selected
 */
function setRadioVal() {
	var cookie_str = getCookie('features');
	if (cookie_str && cookie_str.indexOf("st") >= 0) {
		var feature = cookie_str.substr(cookie_str.indexOf('st:')+3);
		for (var j = 0; j < document.f.st.length; j++) {
			if (document.f.st[j].value == feature) {
				document.f.st[j].checked = true;
			}
		}
	}
}


/*
 * Gets the ad type from caller argument
 */
function getAdTypeFromCaller(){
	var type;

	if (queryString('ca') < 0) {
        if (typeof defaultTypes != "undefined" )
            type = defaultTypes[0];
        else
            type = "";
	} else {	
		var caller = queryString('ca');
		var split_ca = caller.split("_");
		type = split_ca[split_ca.length - 1]
	} 

	return type;
}

/*
 * Layer handling
 */
function showField() {
	var ShowItem = document.getElementById(showField.arguments[0]);
	if (ShowItem)
		ShowItem.style.display = showField.arguments[1];
	if (showField.arguments.length == 3) {
		ShowItem.innerHTML = showField.arguments[2];
	}	
		
}

function scrollToTop() {
	window.scrollTo(0, 0);
}

function scrollToBottom() {
	window.scrollTo(0, 4000);
}

function scrollToObject(offsetTrail) {
	var offsetLeft = 0;
	var offsetTop = 0;

	// Calculate the position
	while (offsetTrail) { 
		offsetLeft += offsetTrail.offsetLeft;
		offsetTop += offsetTrail.offsetTop;
		offsetTrail = offsetTrail.offsetParent;
	}               

	if (typeof(document.body.leftMargin) != "undefined") {
		offsetLeft += document.body.leftMargin;
		offsetTop += document.body.topMargin;
	}       

	// Scroll
	window.scrollTo(0, offsetTop);
}

var focused = false;
function scrollToError(elemId) {
	if (focused) return;
	var offsetTrail = document.getElementById(elemId);

	scrollToObject(offsetTrail);
	
	if (document.getElementById(elemId))
        document.getElementById(elemId).focus();
	focused = true;
} 


function setFocus(_field) {
	document.getElementById(_field).focus();
}

function setChecked(_Id, _check) {
	var Item = document.getElementById(_Id);
	if (Item == null) return;
	Item.checked = _check;
}

function setValue(_Id, _check) {
	var Item = document.getElementById(_Id);
	if (Item == null) return;

	Item.value = _check;
}

/*
 * Popup
 */
//window.name = "shl";
var newWin;
function popUp(page, name, details) {
	newWin=window.open(page, name, details);
	newWin.focus();
}

/*
 * Table row hiliting for IE
 */
function tableRowHilite() {
	if (document.getElementById("hl") == null) return;
	
	var table = document.getElementById("hl");
	var rows = table.getElementsByTagName('tr');
	
	for (var i = 0; i < rows.length; i++)	{
		rows[i].onmouseover = function() {
			this.className += 'hilite';
		}
		
		rows[i].onmouseout = function()	{
			this.className = this.className.replace('hilite', '');
		}
	}
}

/*
 * Disable and enable input fields in forms
 */
function enable_field(_name) {
	var Item = document.getElementById(_name);

	if (Item == null) return;

	if (Item.disabled)
		Item.disabled = false;
}

function enable_fields(_name) {
	var Items = document.getElementsByName(_name);

	if (Items.length==0) return;

    for (i=0;i<Items.length;i++) {
        if (Items[i].disabled) Items[i].disabled = false;
    }
}

function disable_field(_name) {
	var Item = document.getElementById(_name);

	if (Item == null) return;

	if (!Item.disabled) {
		Item.value = "";
		Item.disabled = true;
	}
}
function disable_fields(_name) {
	var Items = document.getElementsByName(_name);

	if (Items.length == 0) return;

    for (i=0; i<Items.length; i++) {
        if (!Items[i].disabled) {
            //Items[i].value = "";
            Items[i].disabled = true;
        }
    }
}


/*
 * Text area limit
 */
function maxlength(e, obj, max) {
	if (!e) e = window.event; // IE

	if (e.which) {
		var keycode = e.which; // Mozilla
		var ie = false;
	} else {
		var keycode = e.keyCode; // IE
		var ie = true;
	}

	x = obj.value.length;

	if (x > max) {
		obj.value = obj.value.substr(0, max);
		x = max;
	}

	if (keycode == 0 && ie) { // PASTE ONLY FOR IE
		var select_range = document.selection.createRange();	
		var max_insert = max - x + select_range.text.length;
		var data = window.clipboardData.getData("Text").substr(0, max_insert);
		select_range.text = data;
	} else if (x == max && (keycode != 8 && keycode != 46)) {
		return false;
	}

	return true;
}

/*
 * Positioning of elements
 */
function findPosX(obj, end) {
	var curleft = 0;
	var width = obj.clientWidth;

	if (obj.offsetParent) {
		while (obj.offsetParent) {
			curleft += obj.offsetLeft;
			obj = obj.offsetParent;
		}
	} else if (obj.x)
		curleft += obj.x;

	return curleft + (end?width:0);
}

function findPosY(obj, end) {
	var curtop = 0;
	var height = obj.clientHeight;

	if (obj.offsetParent) {
		while (obj.offsetParent) {
			curtop += obj.offsetTop
				obj = obj.offsetParent;
		}
	} else if (obj.y)
		curtop += obj.y;

	return curtop + (end?height:0);
}

/*
 * Progress bar
 */
function progressBar(text) {
	document.write('<span id="loading" class="progressBar">'+text+'<span id="loading_dots"></span></span>');
}

function startProgressBar(pos) {
	var dots = "";

	pos %= 4;
	for (var i = 0; i < pos; i++)
		dots += ".";
	
	document.getElementById('loading_dots').innerHTML = dots;

	pos++;
	setTimeout('startProgressBar('+pos+')', 500);
}

/*
 * Position progress bar
 */
function showProgressBar(obj) {
	startProgressBar(1);
	//document.getElementById('loading').style.top = '' + (findPosY(obj, true)) + 'px';
	//document.getElementById('loading').style.left = '' + (findPosX(obj, true)) + 'px';
	document.getElementById('loading').style.display = "inline";
}

function displayFeatures (_cat, _type) {
	var category_type = category_params[_cat] ? category_params[_cat][_type] : null;
	var added = false;
	var map_features = ["latitude","longitude","zoom","show_pin"];
	for (var feature in features) {
		if (category_type && isInArray(feature,category_type["include"])) {
			var label = "l" + feature;	
			var labelid = document.getElementById(label);
			var inner_html = "";
			
            if (labelid) labelid.innerHTML = "";
			if (category_type["labels"] && category_type["labels"][feature]) {
				inner_html = category_type["labels"][feature] + ":";
			} else {
				inner_html = features[feature] + ":";
			}	

            if (labelid) labelid.innerHTML = inner_html;
                    
            //XXX: map related fields are hidden, must me enabled in a different way
            if (!isInArray(feature,map_features)){
              //showing zone select only if it contains valid values
					if (feature != "zone" || document.formular.zone.options.length>1){
						if (feature == 'clothing_old')
							checkCertiLogo(_cat);
						else{
							showField("d" + feature, "block");
							showField("l" + feature, "block");
						}
					}
				}
            if (!isInArray(feature, ["zone","carmodel","carversion","bikemodel","bikeversion"]) || document.formular.zone.options.length>1)
                enable_field(feature);
			
			// TODO Fix this later in html
			if (feature == "gearbox") {
				showField("car_fix", "block");
				added = true;
			}	
		} else	{
      //XXX: map related fields are hidden, must me disabled in a different way
      if (!isInArray(feature,map_features)){
        showField("d" + feature, "none");
        showField("l" + feature, "none");
      }
      disable_field(feature);
			if (!added)
				showField("car_fix", "none");
		}	
	}

  if (category_type && isInArray("map",category_type["include"])) {
    enable_field("latitude");
    enable_field("longitude");
    enable_field("zoom");
    enable_field("show_pin");
    document.getElementById("showmap_yes").checked=true;
    showHideMapForm();
  }else{
    disable_field("latitude");
    disable_field("longitude");
    disable_field("zoom");
    disable_field("show_pin");
    document.getElementById("showmap_no").checked=true;
    showHideMapForm();
  }
}

/*
 * Check if the given category/feature has a message, and return it
 */
function showMessages(_cat, _type) {
	try {
		var feature_arr = category_params[_cat][_type]['include'];

		for (var i = 0; i < feature_arr.length; i++) {
			if (typeof messages[_cat] != 'undefined' &&
			    typeof messages[_cat][feature_arr[i]] != 'undefined' &&
			    typeof messages[_cat][feature_arr[i]][_type] != 'undefined') {
				showField("m" + feature_arr[i], "inline", messages[_cat][feature_arr[i]][_type]);
				showField("d" + feature_arr[i], "inline");
				showField("l" + feature_arr[i], "inline");
				showPrice('none', 'dprice', 'lprice');
			} else if (typeof messages['default'][feature_arr[i]] != 'undefined' &&
				   typeof messages['default'][feature_arr[i]][_type] != 'undefined') {

				showField("m" + feature_arr[i], "inline", messages['default'][feature_arr[i]][_type]);
				showField("d" + feature_arr[i], "inline");
				showField("l" + feature_arr[i], "inline");
				showPrice('none', 'dprice', 'lprice');
			}
		}
	
	} catch (e) {
	}	
}

function select_all_weeks(_name, _form, _select) {
	for (var i = 1; i < 53; i++) {
		var week = eval("document." + _form + "." + _name + i);

		week.checked = _select;
	}	
}	

/*
 * Display images. Show border and display large image
 */
var next_image;
function waitForNextImage(next_image, ad_id) {
	var ad_id = ad_id ? ad_id : "";
	var image = document.getElementById("display_image" + ad_id).firstChild;

	if (next_image.width > 0) {
		image.width = next_image.width;
		image.height = next_image.height;
		next_image = null;
	} else {
		setTimeout("waitForNextImage(next_image, ad_id)", 100);
	}
}

function resizeImage(image, path, next_image, admin) {
	if (!next_image) {
		next_image = new Image;
		next_image.src = path;
	}

	if (next_image.width == 0) {
		next_image.onload = setTimeout(function () { resizeImage(image, path, next_image, admin); }, 0);
		return;
	}

	image.src = next_image.src;

	if (admin && next_image.width > 400) {
		var factor = (next_image.width - 400) / next_image.width;
		image.height = next_image.height * (1 - factor);
		image.width = 400;
	} else {
		image.width = next_image.width;
		image.height = next_image.height;
	}
}

function showLargeImage(strDisplayPath, ad_id, admin) {
	var ad_id = ad_id ? ad_id : "";
	var admin = admin ? admin : false;
	var image = document.getElementById("display_image" + ad_id).firstChild;

	if (admin) {
		resizeImage(image, strDisplayPath, null, admin);
	} else {
		if (navigator.userAgent.toLowerCase().indexOf('safari') > 0) {
			var next_image = new Image;
			next_image.src = strDisplayPath;

			image.src = next_image.src;
			waitForNextImage(next_image, ad_id);
		} else {
			image.src = strDisplayPath;
		}
	}
}

var styles = [];
var styles_name = []; 
function thumbnailBorder(thumb, image_num, ad_id) {
  var ad_id = ad_id ? ad_id : "";

  if (!thumb)
    return;

 // if (thumb.name != 'video')
 //   hide_video(ad_id);

  for (i = 0; i < image_num; i++) {
    var thumb_obj = document.getElementById('thumb' + i + ad_id);
    if (!styles[i]) {
      styles[i] = thumb_obj.className.replace("ad_border_solid_black", "ad_border_solid_grey");
    } 

    if (thumb.id == thumb_obj.id) {
      thumb_obj.className = "ad_thumb ad_border_solid_black";
    } else {
      thumb_obj.className = styles[i];
    }
  }

  var thumb_obj = document.getElementById('thumbmap' + ad_id);
  if (thumb_obj) {
    if (!styles_name['thumbmap']) {
      styles_name['thumbmap'] = thumb_obj.className.replace("ad_border_solid_black", "ad_border_solid_grey");
    }

    if (thumb.id == thumb_obj.id) {
      thumb_obj.className = "ad_thumb ad_border_solid_black";
    } else {
      thumb_obj.className = styles_name['thumbmap'];
    }
  } 
}

function getElementsByClassName(oElm, strTagName, strClassName) {
  var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
  var arrReturnElements = new Array();
  strClassName = strClassName.replace(/\-/g, "\\-");
  var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
  var oElement;
  for(var i=0; i<arrElements.length; i++){
    oElement = arrElements[i];      
    if(oRegExp.test(oElement.className)){
      arrReturnElements[arrReturnElements.length] = oElement;
    }   
  }
  return (arrReturnElements)
}

function show_hidden_elements() {
  var elements = getElementsByClassName(document, "*", 'hide');
  for (var i = 0; i < elements.length; i++) {
    elements[i].className = elements[i].className.replace(/hide/, '');
  }
}


function show_explanation(action) {
    actions = new Array();
    actions['bounce'] = '';
    actions['edit'] = '';
    actions['delete'] = '';
    actions['gallery'] = '';
    actions['autobounce'] = '';
    actions['autobgallery'] = '';
    for (hide_action in actions) {
        elem = document.getElementById(hide_action+"_explanation");
        if (elem) elem.style.display = "none";	
    }
    elem = document.getElementById(action+"_explanation");
    if (elem) elem.style.display = "block";	
    
    elem = document.getElementById("edit_pw");
}

function next_image() {
  if(counter >= images.length)
    counter = 0;

  /* Preload next image */
  var thumb = document.getElementById('thumb' + counter);
  var image = new Image;
  image.src = image_url + images[counter];

  showLargeImage(image_url + images[counter]);      
  thumbnailBorder(thumb, images.length);

  counter++;
}




function handleError(msg, url, line_no){
	//var img = new Image;
	//img.src="http://www.subito.it/img/blank.gif?err="+escape("ERR_"+msg+"-URL_"+url+"-LINE_"+line_no);
	//img.src="http://logc156.xiti.com/hit.xiti?s=355968&s2=49&p=javascripterror::"+encodeURIComponent(msg)+"&di=&";
	return true;
}

window.onerror=handleError;

function show_mail_form() {
  var_mail_form = document.getElementById("Mailto");
  var_link_table = document.getElementById("buttonsSection");
  var_send_a_tip = document.getElementById("send_a_tip");
  var_adsense = document.getElementById("ad_adsense_container");
  var_user_name = getCookie('ar_name');
  var_user_email = getCookie('ar_email');
  if (var_user_name && var_user_email && document.mail_form) {
    var_user_name = var_user_name.replace(/\+/ig," ");
    document.mail_form.name.value = var_user_name;
    document.mail_form.email.value = var_user_email;
  }
  if (var_adsense && var_adsense.parentNode.className != "adsense_adpage_below") 
    var_adsense = "";
  if (var_mail_form && var_link_table) {
      var_mail_form.style.display = 'block';
      var_link_table.style.display = 'none';
      if (var_send_a_tip) var_send_a_tip.style.display='none';
      if (var_adsense) var_adsense.style.display='none';
      //scrollToObject(var_mail_form);
  }
  return false;
}
function show_abuse_form() {
  var_abuse_form = document.getElementById("Reportabuse");
  var_link_table = document.getElementById("buttonsSection");
  var_send_a_tip = document.getElementById("send_a_tip");
  var_adsense = document.getElementById("ad_adsense_container");
  var_user_name = getCookie('ar_name');
  var_user_email = getCookie('ar_email');
  /*
  if (var_user_name && var_user_email && document.mail_form) {
    var_user_name = var_user_name.replace(/\+/ig," ");
    document.abuse_form.name.value = var_user_name;
    document.abuse_form.email.value = var_user_email;
  }
  */
  if (var_adsense && var_adsense.parentNode.className != "adsense_adpage_below") 
    var_adsense = "";
  if (var_abuse_form && var_link_table) {
      var_abuse_form.style.display = 'block';
      var_link_table.style.display = 'none';
      if (var_send_a_tip) var_send_a_tip.style.display='none';
      if (var_adsense) var_adsense.style.display='none';
      //scrollToObject(var_abuse_form);
  }
  return false;
}
function hide_mail_form() {
  var_mail_form = document.getElementById("Mailto");
  var_link_table = document.getElementById("buttonsSection");
  var_send_a_tip = document.getElementById("send_a_tip");
  var_adsense = document.getElementById("ad_adsense_container");
  if (var_adsense && var_adsense.parentNode.className != "adsense_adpage_below") 
    var_adsense = "";
  if (var_mail_form && var_link_table) {
      var_mail_form.style.display = 'none';
      var_link_table.style.display = 'block';
      if (var_send_a_tip) var_send_a_tip.style.display='block';
      if (var_adsense) var_adsense.style.display='block';
  }
  return false;
}
function hide_abuse_form() {
  var_abuse_form = document.getElementById("Reportabuse");
  var_link_table = document.getElementById("buttonsSection");
  var_send_a_tip = document.getElementById("send_a_tip");
  var_adsense = document.getElementById("ad_adsense_container");
  if (var_adsense && var_adsense.parentNode.className != "adsense_adpage_below") 
    var_adsense = "";
  if (var_abuse_form && var_link_table) {
      var_abuse_form.style.display = 'none';
      var_link_table.style.display = 'block';
      if (var_send_a_tip) var_send_a_tip.style.display='block';
      if (var_adsense) var_adsense.style.display='block';
  }
  return false;
}
function load_js(url, cb) {
    var head= document.getElementsByTagName('head')[0];
    var script = document.createElement('script');
    script.setAttribute('src',url);
    script.setAttribute('type','text/javascript');
    var loaded = false;
    var loadFunction = function() {
        if (loaded) return;
        loaded=true;
        if (cb) cb();
    };
    script.onload = loadFunction
    script.onreadystatechange= function () { //Tricky IE
        if (script.readyState == 'loaded' || script.readyState == 'complete') {
            setTimeout(loadFunction, 1000);
        }
    };
    head.appendChild(script);
    return false;
}
function send_abuse_report(abuse_id,ad_id,host) {
    load_js(host+'/abuse/verify?id='+ad_id+'&reason='+abuse_id, function () {
        document.getElementById("abuse_form_holder").innerHTML = to_be_replaced;
    });
    return false;
}
function send_abuse_data(host){
    var abuse = document.abuseform;
    params = 'id=' + abuse.id.value + "&reason=" + abuse.reason.value + "&email=" + escape(abuse.email.value) + "&body=" + escape(abuse.body.value);
    load_js(host+'/abuse/details?'+params, function () {
        document.getElementById("abuse_form_holder").innerHTML = to_be_replaced;
    });
    return false;
}

function googleSearchKeys() {
  ref = document.referrer;
  if (ref.indexOf('?') == -1 || ref.indexOf('google') == -1 ) return "";
  qs = ref.substr(ref.indexOf('?')+1);
  qsa = qs.split('&');
  for (i=0;i<qsa.length;i++) {
    qsip = qsa[i].split('=');
    if (qsip.length == 1) continue;
    if (qsip[0] == 'q' || qsip[0] == 'p') { // q= for Google, p= for Yahoo
      words = unescape(qsip[1].replace(/\+/g,' ')).split(/\s+/);
    }
  }
  if (words)
    return words.join(" ");
  else
    return "";
}
function calculate() {
  alert(levenshtein(document.f.a.value, document.f.b.value));
  return false;
}
function levenshtein( a, b ) {
  var i;
  var j;
  var cost;
  var d = new Array();

  if ( a.length == 0 ) {
    return b.length;
  }

  if ( b.length == 0 ) {
    return a.length;
  }

  for ( i = 0; i <= a.length; i++ ) {
    d[ i ] = new Array();
    d[ i ][ 0 ] = i;
  }

  for ( j = 0; j <= b.length; j++ ) {
    d[ 0 ][ j ] = j;
  }

  for ( i = 1; i <= a.length; i++ ) {
    for ( j = 1; j <= b.length; j++ ) {
      if ( a.charAt( i - 1 ) == b.charAt( j - 1 ) ) {
        cost = 0;
      }
      else {
        cost = 1;
      }

      d[ i ][ j ] = Math.min( d[ i - 1 ][ j ] + 1, d[ i ][ j - 1 ] + 1, d[ i - 1 ][ j - 1 ] + cost );

      if(
          i > 1 && 
          j > 1 &&  
          a.charAt(i - 1) == b.charAt(j-2) && 
          a.charAt(i-2) == b.charAt(j-1)
        ){
        d[i][j] = Math.min(
            d[i][j],
            d[i - 2][j - 2] + cost
            )

      }
    }
  }

  return d[ a.length ][ b.length ];
}

function checkMispelledDomain(email) {
  if (!email) return true;
  var popular_domains = [
    "libero.it",
    "hotmail.it",
    "yahoo.it",
    "alice.it",
    "tiscali.it",
    "gmail.com",
    "hotmail.com",
    "virgilio.it",
    "live.it",
    "yahoo.com",
    "tin.it",
    "fastwebnet.it",
    "email.it",
    "inwind.it",
    "tele2.it",
    "teletu.it",
    "interfree.it",
    "msn.com",
    "katamail.com",
    "yahoo.fr",
    "tiscalinet.it",
    "poste.it",
    "vodafone.it",
    "aliceposta.it",
    "live.com",
    "jumpy.it",
    "ymail.com",
    "googlemail.com",
    "infinito.it",
    "tim.it",
    "iol.it",
    "excite.it",
    "supereva.it",
    "mail.ru",
    "fastwebmail.it",
    "hotmail.fr",
    "freemail.it",
    "cheapnet.it",
    "aol.it",
    "tecnocasa.it",
    "postemobile.it",
    "me.com",
  ];

  var position = email.indexOf("@");
  var email_error_field = document.getElementById('err_email');
  email_error_field.style.display='none';
  var email_error_msg = document.getElementById('err_msg_email');
  if (position<= 0) {
    email_error_msg.className='warning';
    email_error_msg.innerHTML="L'indirizzo email non e' corretto. Ricontrollalo.";
    email_error_field.style.display='block';
    return false;
  }
  var domain = email.substring(position+1, email.length);
  for (i in popular_domains) {
    if (popular_domains[i] == domain) return true;
  }
  if (domain == 'gmail.it') {
    email_error_msg.className='warning';
    email_error_msg.innerHTML="Avviso: forse volevi inserire '"+email.substring(0,position+1)+"gmail.com'?<br> Verifica se la tua email &egrave; corretta.";
    email_error_field.style.display='block';
    return false;
  }
  for (i in popular_domains) {
    var distance =  levenshtein(popular_domains[i], domain);
    if (distance > 0 && distance <= 2 ) {
      email_error_msg.className='warning';
      email_error_msg.innerHTML="Avviso: forse volevi inserire '"+email.substring(0,position+1)+popular_domains[i]+"'?<br> Verifica se la tua email &egrave; corretta.";
      email_error_field.style.display='block';
      return false;
    }
  }
}

/*
 * JS script include, with callback functionality
 */
function include_script(src, callback) {
  var script = document.createElement('script');
  script.type = 'text/javascript';
  script.src = src;
  if (callback) {
    script.onload = callback;
    script.onreadystatechange = function () {
      if (this.readyState == "complete" || this.readyState == "loaded") {
        this.onload();
        this.onload = this.onreadystatechange = null;
      }
    };
  }
  document.getElementsByTagName("head")[0].appendChild(script);
} 

/*
 * Onload queue helper, first one uses setTimeout to allow browser rendering
 */
  function OnloadExecute() {
    if (!window.onload_queue || window.onload_queue.length == 0)
      return;

    for (var i = 0; i < window.onload_queue.length; i++) {
      window.onload_queue[i]();
    }
  } 
function Onload(func, highprio) {
  if (typeof(func) != 'function')
    return;

  if (!window.onload_queue_set) {
    window.onload_queue_set = true;
    var oldonload = window.onload;

    window.onload = function () {
      if (oldonload)
        oldonload();

      setTimeout(OnloadExecute, 10);
    };
  }

  if (!window.onload_queue)
    window.onload_queue = [];

  if (highprio)
    window.onload_queue.unshift(func);
  else
    window.onload_queue[window.onload_queue.length] = func;
}

function popupInfo(url, width, height, scrollbars){
   w = width ? width : 600;
   h = height ? height : 400;
   x = (screen.width - w)/2; 
   y = (screen.height - h )/2;
   window.open(url, "popup", "width=" + w + ",height=" + h + ",left=" + x + ",top=" + y + ",scrollbars=" + (scrollbars ? "yes" : "no")  + ",menubar=no,status=no,location=no,resizable=no");
}

function checkTerms(action){
    var checkfield = document.actionform["terms_" +action];
    if (!checkfield.checked){
        document.getElementById("err_terms_"+action).style.display="block";
        return false;
    }else{
        checkfield.disabled=true;
        checkfield.value="";
        document.getElementById("err_terms_"+action).style.display="none";
        return true;
    }

}
//ajax function to handle dynamic town menu
function ajaxFunction() {
    var xmlHttp;
    try {
        // Firefox, Opera 8.0+, Safari
        xmlHttp=new XMLHttpRequest();
    }
    catch (e) {
        // Internet Explorer
        try {
            xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e) {
            try {
                xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch (e) {
                //alert("Your browser does not support AJAX!");
                return false;
            }
        }
    }
    return xmlHttp;
}

String.prototype.wordWrap = function(m, b, c){
    var i, j, l, s, r;
    if(m < 1)
        return this;
    for(i = -1, l = (r = this.split("\n")).length; ++i < l; r[i] += s)
        for(s = r[i], r[i] = ""; s.length > m; r[i] += s.slice(0, j) + ((s = s.slice(j)).length ? b : ""))
            j = c == 2 || (j = s.slice(0, m + 1).match(/\S*(\s)?$/))[1] ? m : j.input.length - j[0].length
            || c == 1 && m || j.input.length + (j = s.slice(m).match(/^\S*/)).input.length;
    return r.join("\n");
};

function textCounter(textfield, counterfield, maxlength) {
    if (textfield.value.length > maxlength)
        textfield.value = textfield.value.substring(0, maxlength);
    else{
        counterfield.value = maxlength - textfield.value.length;
    }
} 

function toggleVisible(id){
    try{
        elm = document.getElementById(id);
        if (elm.style.display == 'none')
            elm.style.display = 'block';
        else
            elm.style.display = 'none';
    }catch (e){}
}

/*                                                                                                                                                                                
 * AJAX                                                                                                                                                                           
 */
function ajax_request(dest, post, callback, params, evaluate, method) {
        var xmlhttp = false;

        if (method == null){
                method = "POST";
        }

        if (typeof evaluate == "undefined")
                evaluate = true;

        try {
                xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e) {
                // browser doesn't support ajax. handle however you want                                                                                                          
                // XXX ? callback(false, xmlhttp, params);                                                                                                                        
        }

        if (xmlhttp !== false) {
                if (callback) {
                        xmlhttp.onreadystatechange = function () { ajax_callback(callback, params, xmlhttp, evaluate); };
                }
                xmlhttp.open(method, dest, true);
                xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
                xmlhttp.send(post);
        }
}

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

function escape_component(str) {
        return escape(str).replace('+', '%2b');
}

String.prototype.wordWrap = function(m, b, c){
    var i, j, l, s, r;
    if(m < 1)
        return this;
    for(i = -1, l = (r = this.split("\n")).length; ++i < l; r[i] += s)
        for(s = r[i], r[i] = ""; s.length > m; r[i] += s.slice(0, j) + ((s = s.slice(j)).length ? b : ""))
            j = c == 2 || (j = s.slice(0, m + 1).match(/\S*(\s)?$/))[1] ? m : j.input.length - j[0].length
            || c == 1 && m || j.input.length + (j = s.slice(m).match(/^\S*/)).input.length;
    return r.join("\n");
};

function textCounter(textfield, counterfield, maxlength) {
    if (textfield.value.length > maxlength)
        textfield.value = textfield.value.substring(0, maxlength);
    else{
        counterfield.value = maxlength - textfield.value.length;
    }
} 

function toggleVisible(id){
    try{
        elm = document.getElementById(id);
        if (elm.style.display == 'none')
            elm.style.display = 'block';
        else
            elm.style.display = 'none';
    }catch (e){}
}

function jc_toggle_all(elem) {
    var elements = document.f.elements;
    for (var i = 0; i<elements.length;i++) {
        if (elements[i].name == 'jc' && elements[i].id != 'jc_all') {
            elements[i].checked = elem.checked;
        }
    }
}

function check_tele2(elem, warning_elem_id) {
    var warning_elem;
    if (warning_elem_id) {
        warning_elem = document.getElementById(warning_elem_id);
    } else {
        warning_elem = document.getElementById('tele2_warning');
    }
    if (/@tele2.it/.exec(elem.value)) {
        elem.value = elem.value.replace(/@tele2.it/, '@teletu.it');
        if (warning_elem)
            warning_elem.style.display='block'
    }
}

