﻿//меняет asc на desc при последующих вызовах,
//при первом вызове выставляет направление на значение directionValueParam
function SetSortFieldUrl(sortNameParam, sortValueParam, directionNameParam, directionValueParam, directions, def, loc)
{
	var currDirection = GetQueryParam(directionNameParam, null);
	var currSortField = GetQueryParam(sortNameParam, null);
	if (currSortField == "" && def)
	    currSortField = def;
	if (sortValueParam != currSortField) {
		// Изменилась сортировки
		currDirection = directionValueParam;
		
	}
	else {
/*		if (currDirection == "" && ) {
			// направления не было. Ставим то что пришло на вход
			currDirection = directionValueParam;
		}
		else {*/
	    // Иначе меняем на противоположное 
	    var opositeDirection = directionValueParam == directions.desc ? directions.asc : directions.desc;
	    currDirection = currDirection == opositeDirection ? directionValueParam : opositeDirection;
		/*}*/
	}
	// добавляем поле сортировки
	var url = SetQueryParam(sortNameParam, sortValueParam, loc,def);
	// добавляем направление
	url = SetQueryParam(directionNameParam, currDirection, url, directionValueParam);
	return url;
}

function SetSortField(sortNameParam, sortValueParam, directionNameParam, directionValueParam, directions, def, loc) {
    var url = SetSortFieldUrl(sortNameParam, sortValueParam, directionNameParam, directionValueParam, directions, def, loc);
    window.location.href = window.location.pathname + SetQueryParam("pg", null, url);
}

//control - название поля по которому нужна сортировка
function SetSortControlInField(sortNameParam, control, directionNameParam, directions, directionsToDesc) {
	var currDerection = directions.asc;
	var i = 0;
	for (i = 0; i < directionsToDesc.length; i++) {
		if (control.value == directionsToDesc[i]) {
			currDerection = directions.desc;
			break;
		}
	}
	SetSortField(sortNameParam, control.value, directionNameParam, currDerection, directions, control.getAttribute("def"));
}

function SetParamsAndRedirect(control, nameParam, url) {
    var url = SetQueryParam(nameParam, control.value, url ? url : window.location.href.toString(), control.getAttribute("def"));
	window.location.href = SetQueryParam("pg", null, url);
}

oChangeRealtyAndTransaction = function(realtyList, transactionList, queryParamRealty, queryParamTransaction, queryParamListingId, posutocnoList, posutocno) {
    window.instChangeRealtyAndTransaction = this;

    this.Change = function(o) {
        var realtyValue = realtyList.selectedIndex == 0 ? "" : realtyList.value;
        var transactionValue = transactionList.selectedIndex == 0 ? "" : transactionList.value;
        if (o.id == realtyList.id) {
            transactionList.selectedIndex = 0;
            $(transactionList.parentNode)[realtyValue=="" ? "hide" : "show"]();
            if (transactionValue == "" || transactionValue == "undefined") {
                this.ChangeTransactionOption(realtyValue);
                return;
            }
            transactionValue = "";
        }
        var url = SetQueryParam(queryParamRealty, realtyValue, null);
        url = SetQueryParam(queryParamListingId, "", url);
        window.location.href = transactionList.form.action + SetQueryParam(queryParamTransaction, transactionValue, url);
    }
    this.ChangeTransactionOption = function(realty, isFirst) {
        var Ok = false;
        $(posutocnoList).each(function(i, e) {
            Ok = e == realty;
            return !Ok;
        });
        var elm = $(transactionList).find("option[value=" + posutocno + "]");
        elm[Ok ? "show" : "hide"]();
        if (typeof elm[0].disabled != 'undefined')
            elm[0].disabled = !Ok;
        if (isFirst && Ok) {
            $(transactionList).find("option[value=" + posutocno + "]")[0].selected = true;
        }
    }
}




//Import UPLOADER
function InitMultyFileUploader(inputId, settings) {
	var uploadedFilesNumber = 0;
	$("#" + inputId).uploadify({
	    'uploader': '/img/uploadify.swf',
		'script': settings.saveAction,
		//'folder': settings.listingPath,
		'cancelImg': 'http://img.address.ua/img/cancel.png',
		'buttonImg': 'http://img.address.ua/img/import.gif',
		'fileDesc': 'XML Файли(*.xml)',
		'fileExt': '*.xml',
		'scriptData': { 'email': settings.email },
		'sizeLimit': '5242880', //bytes for each upload
		'auto': true,
		'width': 180,
		'multi': true,
		'onProgress': function() { $("#" + settings.divWaitId).show();},
		'onComplete': function(event, queueID, fileObj, response, data) {
			if (response == "error") {
				$("#" + settings.DivErrorId).show();
				return false;
			}
			else {
				uploadedFilesNumber++;
			}
		},
		'onAllComplete': function() {
			$("#" + settings.divWaitId).hide();
			alert('Загружено файлов: ' + uploadedFilesNumber);
			uploadedFilesNumber = 0;
		}
	});
}
//----------- MEDIA UPLOAD ----------------------------------

var mediaPopup, mediaVars;  
//var tinyMceEditorInst;

function InitListingEditMediaForm(htmlMsg, lenMsg, dvViewId) {
    mediaVars = new oMediaVars(htmlMsg, lenMsg, dvViewId);
}

function StartListingEditMediaFormPopup(popupId) {
    mediaPopup = new oMediaPopup(popupId);
}

oMediaVars = function(htmlMsg, lenMsg, dvViewId) {
    this.Msgs = { Html: htmlMsg, Length: lenMsg };
    this.RegS = '(<|&lt;|&amp;lt;)script(.*?)/script(>|&gt;|&amp;gt)';
    this.DvViewId = '#' + dvViewId;
    this.CodeId = '#Media_Code';
    this.ImgDelId = '#iDel';
}

oMediaPopup = function(popupId, dvViewId) {
    this.PopupCodeId = '#Code';
    this.Elm = '#' + popupId;
    this.ErrorHolder = '#dvErrors';
    this.Code = function(code) { return $(mediaVars.CodeId).val(code); }
    this.PopupCode = function() { return $(this.PopupCodeId).val(); }
    this.GetPopupEncodedCode = function() { return $(this.PopupCodeId).text(this.PopupCode()).html(); }

    this.Show = function() {
        $(this.PopupCodeId).val('');
        $(this.ErrorHolder).html('');
        $(this.Elm).show();
    }

    this.Hide = function() {
        $(this.Elm).hide();
    };

    this.Save = function() {
        if (this.PopupCode()) {
            var decodedCode = this.PopupCode();
            if (this.IsValid(decodedCode)) {
                var code = setTrasparency(decodedCode, false);
                this.Code(code);
                $(mediaVars.DvViewId)[0].innerHTML = code;
                this.Hide();
                $(mediaVars.ImgDelId).show();
            }
        }
        else
            this.Hide();
    };

    this.IsValid = function(decodedCode) {
        var errors = "";

        // Data validation
        if (!isValidFlashObjectCode(decodedCode))
            errors += mediaVars.Msgs.Html + "<br />";

        if (decodedCode.length > 2000) {
            errors += mediaVars.Msgs.Length + "<br />";
        }

        // show errors
        if (errors != "") {
            $(this.ErrorHolder).html(errors);
            return false;
        }
        return true;
    };

    this.Show();
}

function isValidFlashObjectCode(str) {
    var res1, res2;
    //var reg1 = new RegExp('^(<object\\s(.*))|(<embed\\s(.*))$'); // TODO: write more full (strict) expression
    //var reg2 = new RegExp(mediaVars.RegS, 'gi');
    var reg = new RegExp('^\\s*((<object[^>]*?>((<param[^>]*?>[^>]*?/param>)|(<param[^>]*?/>))+(<embed[^>]*?>[^>]*?/embed>)*(<embed[^>]*?/>)*</object>)|((<embed[^>]*?>[^>]*?/embed>)|(<embed[^>]*?/>)|(<embed[^>]*?>))|((<iframe[^>]*?>[^>]*?/iframe>)|(<iframe[^>]*?/>)|(<iframe[^>]*?>)))\\s*$', 'gi');
    res = reg.test(str);
    return res;
}

function setTrasparency(src, isEn) {
    var res;
    var regO;
    var regE;
    var regI;

    var parE = 'wmode="transparent"';    
    var parO;
    if (isEn) {
        regO = new RegExp('((&lt;object\\s+(.*)?)|(&lt;object&gt;))');
        regE = new RegExp('&lt;embed\\s+');
        parO = '&lt;name="wmode" param value="transparent"&gt;&lt;/param&gt;';
    }
    else {
        regO = new RegExp('(<object[^>]*?>)');
        regE = new RegExp('<embed\\s+');
        regI = new RegExp('<iframe\\s+');
        parO = '<param name="wmode" value="transparent"></param>';
    }

    var mO = src.match(regO);
    var mE = src.match(regE);
    var mI = src.match(regI);
    if (!(mO || mE || mI)) return src;

    res = mO ? src.replace(regO, mO[0] + parO) : src;
    //res = mI ? src.replace(regI, mI[0] + parE) : res;
    res = mE ? res.replace(regE, mE[0] + parE + ' ') : res;

    return res;
}

function deleteMedia() {
    var isDel = confirm('Вы действительно хотите удалить виртуальный тур?');
    if (isDel) {
        $(mediaVars.CodeId).val('');
        $(mediaVars.DvViewId).html('');
        $(mediaVars.ImgDelId).hide();
    }
}

//-----------END MEDIA UPLOAD ----------------------------------

//----------- IMAGE UPLOAD ----------------------------------

// Загружаем новую картинку
function LoadUploader(inputId, curremail, divResultId, divWaitId, settings) {
	var url = SetQueryParam(settings.queryParamId, settings.id, "");
	$("#" + inputId).uploadify(
		{
		    'uploader': '/img/uploadify.swf',
		    'script': settings.uploadUrl + url, //temprary save action
		    'folder': settings.ListingPath, //images saved to
		    'cancelImg': 'http://img.address.ua/img/cancel.png',
		    'buttonImg': 'http://img.address.ua/img/addImg.png',
		    'fileDesc': 'Файли изображений(*.jpg;*.jpeg;*.png;*.gif)',
		    'fileExt': '*.jpg;*.jpeg;*.png;*.gif',
		    'scriptData': { email: curremail },
		    'sizeLimit': '5242880', //bytes for each upload
		    'auto': true,
		    'width': 180,
		    'multi': true,
		    'onProgress': function() { $("#" + divWaitId).show(); },
		    'onComplete': function(event, queueID, fileObj, response, data) {
		        if (response == "error") {
		            $("#" + settings.DivErrorId).show();
		            return false;
		        }
		        else {
		            var deleteFunc = GetDeleteFunction(settings, response);
		            $("#" + divResultId).append(AppendImage(queueID, settings.fakeUrl, response, deleteFunc, GetSelectedImage(response)));
		        }
		    },
		    'onAllComplete': function() { $("#" + divWaitId).hide(); }

		});
}

function GetSelectedImage(image)
{
	var hidden = $('input[name="firstImageName"]');
	if (hidden[0].value == "") {
		hidden[0].value = image;
		return true;
	}
	return hidden[0].value == image;
}
// Удаляем картинку
var poolDelImgCntr = [];
var idPDelImgCntr = 0;
function DeleteImage(control, deleteUrl, diverrorId) {
    var i = idPDelImgCntr++;
    poolDelImgCntr[i] = control;
    if (confirm("Вы действительно хотите удалить изображение?"))
        if (deleteUrl.indexOf(location.href.substr(0, 9)) == 0)
        $.ajax({
            type: "POST",
            url: deleteUrl,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function() { DeleteImageBack(i, diverrorId); },
            error: function(XMLHttpRequest, textStatus, errorThrown)
            { alert(errorThrown); }
        });
        else
            loadJSFile(SetQueryParam("callBack", "DeleteImageBack(" + i + ", '" + diverrorId + "')", deleteUrl));
}
function DeleteImageBack(i, diverrorId) {
    var control = poolDelImgCntr[i];
    delete poolDelImgCntr[i];
    $(control).parent().hide();
    $("#" + diverrorId).hide();
    ChangeFirst();
    alert("Изображение удалено");
}

// загрузка существующих картинок.
function LoadImages(divResultId, settings) 
{
	var i = 0;
	if (settings.images != null) {
		settings.images.sort();
		for (i = 0; i < settings.images.length; i++) {
			var deleteFunc = GetDeleteFunction(settings, settings.images[i]);
			$("#" + divResultId).append(AppendImage(i, settings.imageUrl, settings.images[i], deleteFunc, settings.images[i] == settings.FirstImage));
		}
	}
	
}

// Добавляем картинку для отображения
function AppendImage(id, url, image, removeFunc, checked) {
	var styleImg = checked ? "cursor:pointer;width:68px;border:3px solid #d5d1c8" : "cursor:pointer;width:68px;border:3px solid #FFF";
	var result = "<span style='white-space: nowrap vertical-aling:middle;'>";
	result += "<img name=\"userimg\" onclick=\"javascript:ChangeFirstImage(this);\" id='" + id + "' src='" + url + image + "' style='" + styleImg + "' />";
	result += "&nbsp;<img src=\"http://img.address.ua/img/delete.gif\" alt=\"Удалить\" title=\"Удалить\" style=\"align:left;cursor:pointer;\" onclick=\"javascript:" + removeFunc + "\" />&nbsp;";
	result += "</span> ";
	return result;
}

// формируем функцию для удаления
function GetDeleteFunction(settings, imageName) {
	var params = SetQueryParam(settings.queryParamId, settings.id, null);
	params = SetQueryParam(settings.queryParamImage, imageName, params);
	params = SetQueryParam(settings.queryRealtyType, settings.realtyType, params)
	return "DeleteImage(this,'" + settings.deleteUrl + params +"','" + settings.DivErrorId +  "')";
}

function ChangeFirstImage(selecteImage) {
	var firstList = $('img[name="userimg"]');
	for (i = 0; i < firstList.length; i++) {
		firstList[i].style.cssText = "cursor:pointer;width:68px;border:3px solid #FFF";
	}
	selecteImage.style.cssText = "cursor:pointer;width:68px;border:3px solid #d5d1c8";
	SetInHidden(GetNameByHref(selecteImage.src));
}
function ChangeFirst() {
	var flag = false;
	var firsiIndex = -1;
	var firstList = $('img[name="userimg"]');
	for (i = 0; i < firstList.length; i++) {
		if ($(firstList[i]).parent()[0].style.display == "none") {
			firstList[i].style.cssText = "cursor:pointer;width:68px;border:3px solid #FFF";
		}
		else {
			if (firsiIndex == -1)
				firsiIndex = i;
			if (firstList[i].style.cssText.indexOf("#d5d1c8") > -1) {
				flag = true;
				SetInHidden(GetNameByHref(firstList[i].src));
			}
		}
	}

	if (!flag && firstList.length > 0 && firsiIndex > -1) {
		firstList[firsiIndex].style.cssText = "cursor:pointer;width:68px;border:3px solid #d5d1c8";
			flag = true;
			SetInHidden(GetNameByHref(firstList[firsiIndex].src));
	}
	return false;
}
function SetInHidden(imgName) {
	
	var hidden = $('input[name="firstImageName"]');
	hidden[0].value = imgName;
}

function GetNameByHref(href) {
	return href.substring(href.lastIndexOf("/") + 1);	
}

//-----------END  IMAGE UPLOAD ----------------------------------
//-----------LISTING HINTS---------------------------------------
function ShowBuildingTypeHint(control, listId, prefix)
{
    var list = document.getElementById(listId);

    if (list == null || list.value == 0)
    {
		ShowHint(control, "");
		return;
	}

	var hidden = document.getElementById(prefix + list.value);

	if (hidden == null) {
		ShowHint(control, "");
		return;
    }

	ShowHint(control, hidden.value);
}

function ShowHint(control, text) {
	var api = $(control).simpletip({
		position: 'right',
		content: text,
		baseClass: 'tooltipFilter'
	}).show();
	if (api.length == undefined)
		api.update(text);
}
//-----------END HINTS---------------------------------------

function SinglBuildingClick(curr, IsBasementTdId) {
	var basement = $('#' + IsBasementTdId + ' > input')[0];
	if (curr.checked) {
		// Нужно прятать цоколь
		basement.checked = false;
		$("#" + IsBasementTdId).hide();
	}
	else
		$("#" + IsBasementTdId).show();
}

function BuildingTypeHintParentChange(ddList, hintId) {
	if (ddList.id.indexOf("BuildingTypeId") > -1) {
		if (ddList.value == 10) {
			$("#" + hintId).hide();
			return;
		}
			
	}
	if (ddList.value == 0)
		$("#" + hintId).hide();
	else
		$("#" + hintId).show();
}

function MiddlemanChange(cb, ddlId, tbId, rowId) {
	if (cb.checked) {
		$("#" + rowId).show();
		
	}
	else {
		$("#" + rowId).hide();
		var ddl = document.getElementById(ddlId);
		if (ddl != null)
			ddl.value = "0";
		var tb = document.getElementById(tbId);
		if (tb != null)
			tb.value = "";
	}
}

function ShowTopImage(url) { 
$("#topPriceUp")[0].src = url;
$("#topPriceUp").show();
}

function displayControls(show, hideCtrlIds) {
	for (var i = 0; i < hideCtrlIds.length; i++)
		if (show)
		$('#' + hideCtrlIds[i]).show();
	else
		$('#' + hideCtrlIds[i]).hide();
}

//В зависимости от выбранного значения ctrl отображает/чистит зависимые input-ы при выбранном в нем showVal-значении
function HouseLocationChange(ctrl, showVal, isOnLoad) {
	displayControls(ctrl.value == showVal, ['ConstructionComplexName', 'lblConstructionComplex']);
		if (!isOnLoad)
			CleanValues(['ConstructionComplexName', 'ConstructionComplexId']);
	}


function SetUpgradeItems(controls) {
	if (controls == null)
		return;

	var i = 0;
	for (i = 0; i < controls.length; i++) {
		UpgradeItem(controls[i]);

		if (controls[i].indexOf('.') > -1) {
			var newValue = controls[i].substring(controls[i].indexOf('.') + 1);
			UpgradeItem(newValue);
		}
	}

	if (controls.length > 0) {
		$("div[class='legend']").hide();
		$("div[name='suggestedStage']").show();
		$("div[name='suggestedStage_bottom']").show();
	}
}

function UpgradeItem(id) {
	var currName = id;
	var curr = $("[name='" + currName + "']");
	if (curr.length == 0) {
		curr = $("[id='" + currName + "']");
	}

	if (curr.length == 0) {
		currName = "RealtyEditLocation." + id;
		curr = $("[name='" + currName + "']");
	}

	if (curr.length == 0) {
		currName = "RealtyEditAddition." + id;
		curr = $("[name='" + currName + "']");
	}

	if (curr.length == 0) {
		currName = "Listing." + id;
		curr = $("[name='" + currName + "']");
	}

	if (curr.length == 0) {
		if (id.indexOf("Commission") > 0) {
			currName = id + "Str";
			curr = $("[name='" + currName + "']");
		}
		
	}

	if (curr.length > 0 || id.indexOf("UtilityLineIds") == 0) {
		$(curr).addClass("suggested");
		var spn = $("[name='" + id + "_dv" + "']");
		if (spn.length > 0) {
			$(spn).addClass("suggested");
		}

		spn = $("[name='" + currName + "_dv" + "']");
		if (spn.length > 0) {
			$(spn).addClass("suggested");
		}
		
	}
}

function SubscribeOnComment(url, lbl2ShowId, btn) {
	$.ajax({
		type: "POST",
		url: url,
		//data: dataParams,
		dataType: "json",
		success: function(result) {
			$('#' + lbl2ShowId).show();
			$(btn).hide();
		},
		error: function(error) {
			$('#' + lbl2ShowId).hide();
			alert(error);
		}
	});
}

function testPaymentClick(o) {
    var ptype;
    if (location.hash && location.hash.length > 1/* && location.hash.substr(1) == "Premium"*/) {
        ptype = location.hash.substr(1);
        var pos = ptype.indexOf(",");
        if (pos > 0)
            ptype = ptype.substr(0, pos);
    }
    PaymentClick(o, ptype /*location.hash.substr(1)*//*, function() { location.hash = ""; }*/);
}


function InitTinyMCELoad(f) {
    if (typeof tinyMCE == 'undefined' || !tinyMCE.onAddEditor || !tinyMCE.onAddEditor.listeners || tinyMCE.onAddEditor.listeners.length == 0) {
        loadJSFile("/js/lib/tiny_mce/tiny_mce.js");
        ExecFuncByCond(function() { return typeof tinyMCE != 'undefined' && tinyMCE.onAddEditor && tinyMCE.onAddEditor.listeners && tinyMCE.onAddEditor.listeners.length > 0; }, f);
    } else
        f();
}
function InitTinyMCE(cls) {
    if (typeof tinyMCE == 'undefined' || !tinyMCE.onAddEditor || !tinyMCE.onAddEditor.listeners || tinyMCE.onAddEditor.listeners.length == 0) {
        loadJSFile("/js/lib/tiny_mce/tiny_mce.js");
        ExecFuncByCond(function() { return typeof tinyMCE != 'undefined' && tinyMCE.onAddEditor && tinyMCE.onAddEditor.listeners && tinyMCE.onAddEditor.listeners.length > 0; }, function() { _InitTinyMCE(cls); });
    } else
        _InitTinyMCE(cls);
}
function _InitTinyMCE(cls) {
    tinyMCE.init({
        mode: "textareas",
        language: "ru",
        theme: "advanced",
        editor_selector: cls?cls:"mceAddInfo",
        theme_advanced_toolbar_align: "left",
        theme_advanced_toolbar_location: "top",
        theme_advanced_blockformats: "h1,h2,h3,p",
        plugins: "paste",
        invalid_elements:"a",
        forced_root_block: false,
        force_br_newlines: true,
        force_p_newlines: false,
        theme_advanced_buttons1: "bold,italic,underline|,justifyleft,justifycenter,justifyright,justifyfull,|cut,copy,paste,|,bullist,numlist,|",
        theme_advanced_buttons2: "",
        theme_advanced_buttons3: "",
        theme_advanced_path: false,
        theme_advanced_resizing: true,
        theme_advanced_resize_horizontal: true,
        content_css: "/css/tinyMCE.css?v=1",
        cleanup: false
    });
    return tinyMCE;
}

function InitTinyMCEWithCounter(cls, idCounter, maxLen) {
    if (typeof tinyMCE == 'undefined') {
        loadJSFile("/js/lib/tiny_mce/tiny_mce.js");
        ExecFuncByCond(function() { return typeof tinyMCE != 'undefined' && tinyMCE.onAddEditor && tinyMCE.onAddEditor.listeners && tinyMCE.onAddEditor.listeners.length>0 ; }, function() { _InitTinyMCEWithCounter(cls, idCounter, maxLen); });
    } else
        _InitTinyMCEWithCounter(cls, idCounter, maxLen);
}
function _InitTinyMCEWithCounter(cls, idCounter, maxLen) {
    $("#" + idCounter).html("Осталось: " + (maxLen) + " символов");
    tinyMCE.init({
        mode: "textareas",
        language: "ru",
        theme: "advanced",
        editor_selector: (cls ? cls : "mceAddInfo"),
        theme_advanced_toolbar_align: "left",
        theme_advanced_toolbar_location: "top",
        theme_advanced_blockformats: "h1,h2,h3,p",
        plugins: "paste",
        forced_root_block: false,
        force_br_newlines: true,
        force_p_newlines: false,
        theme_advanced_path: false,
        theme_advanced_resizing: true,
        theme_advanced_resize_horizontal: true,
        inline_styles: true,
        convert_fonts_to_spans: false,
        paste_auto_cleanup_on_paste: true,
        paste_convert_headers_to_strong: false,
        paste_remove_spans: true,
        paste_remove_styles: true,
         remove_script_host: false,
        cleanup: false,
        theme_advanced_buttons1: "bold,italic,underline|,justifyleft,justifycenter,justifyright,justifyfull,|cut,copy,paste,|,bullist,numlist,|",
        theme_advanced_buttons2: "",
        theme_advanced_buttons3: "",
        content_css: "/css/tinyMCE.css?v=1",
        
        setup: function(ed) {
            ed.onKeyDown.add(function(ed, e) {
                var currLen = GetTinyMCEContentLen(tinyMCE.activeEditor.getContent());
                var qty = maxLen - currLen;
                if (qty < 0) {
                    if (qty <= 0 && e.keyCode != 8) {
                        $("#" + idCounter).html("<b style='color:red'>Осталось: 0 символов</b>");
                        return tinymce.dom.Event.cancel(e);
                    }
                }
                var count = "Осталось: " + (maxLen - currLen) + " символов";
                $("#" + idCounter).html(count);
            });
        }
    });
    return tinyMCE;
}

function GetTinyMCEContentLen(text)
{
    text = text.replace(/(<([^>]+)>)/ig, "");
    text = text.replace(/&nbsp;/g, "").trim();
    return text.length;
}

// Google
var googleMap;
var googleGeocoder;
var marker;
var poly;

var defaultLatitude =  50.4517389;
var defaultLongitude =  30.5265069;
function GoogleInit(mapDivId) {
    var coord = GetCurrentCoordinates(undefined, undefined);
    var lat = new google.maps.LatLng(coord.Latitude, coord.Longitude);
    var options =
    {
        zoom: 14,
        center: lat,
        mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.DROPDOWN_MENU },
        mapTypeId: google.maps.MapTypeId.ROADMAP
    }
    googleMap = new google.maps.Map($("#" + mapDivId)[0], options);
    googleGeocoder = new google.maps.Geocoder();

    
    
    var polyOptions = {
        strokeColor: '#000000',
        strokeOpacity: 1.0,
        strokeWeight: 3        
    }
    
     

    google.maps.event.addListener(googleMap, 'click', function(event) {
            GoogleSetMarker(GetCurrentCoordinates(event.latLng.lat(), event.latLng.lng()));
        }
    );
    poly = new google.maps.Polyline(polyOptions);
    poly.setMap(googleMap);
    GoogleSetMarker(coord);
}

function SetMarker() {
    if (googleGeocoder== null || googleGeocoder == undefined)
    {
        return;
    }
    var address = "Украина";
    address = Join(address, GetTextFromList("select[id*='RegionId'] option:selected"));
    address = Join(address, GetTextFromList("select[id*='.DistrictId'] option:selected"));
    address = Join(address, GetTextFromList("select[id*='SubDistrictId'] option:selected"))
    var street = $("input[id*='StreetName']").val();
    if (street == "")
    {
        return;
    }
    address = Join(address, street);
    var buildingNumber = GetTextFromList("select[id*='BuildingNumberId'] option:selected");
    if (buildingNumber == "")
    {
        buildingNumber = $("input[id*='BuildingNumber']").val();
    }
    address = Join(address, buildingNumber);
    googleGeocoder.geocode({ 'address': address, 'language': 'ru' },
        function (results, status) {
            if (status == google.maps.GeocoderStatus.OK) 
            {
                result = $.map(results, function (item) 
                {
                       GoogleSetMarker(GetCurrentCoordinates(item.geometry.location.lat(), item.geometry.location.lng()))
                });
            }
            else
            {
                GoogleSetMarker(GetCurrentCoordinates(defaultLatitude, defaultLongitude))
            }
    });
    
}

function GoogleSetMarker(item) {
    if (marker != null) {
        marker.setMap(null);
    }
    
    if ((item.Latitude == defaultLatitude) && (item.Longitude == defaultLongitude)) {
        googleMap.setCenter(new google.maps.LatLng(defaultLatitude, defaultLongitude));
        return;
    }


    var image = new google.maps.MarkerImage('/img/key.png',
	        new google.maps.Size(129, 42),
	        new google.maps.Point(0, 0),
	        new google.maps.Point(18, 42)
    );
    
    var pos = new google.maps.LatLng(item.Latitude, item.Longitude);
    marker = new google.maps.Marker({
        position: pos,
        title: "",
        icon:image
    });
    marker.setMap(googleMap); 
    googleMap.setCenter(pos);
}

function GoogleAddMarker(data, controlId) {
    var latlng = new google.maps.LatLng(data.latitude, data.longitude);

    var path = poly.getPath();
    path.push(latlng);

    var marker = new google.maps.Marker({
        position: latlng,
        title: data.label
    });
    marker.setMap(googleMap);
    marker.setPosition(latlng);
    markers.push({ "id": controlId, "marker": marker });
}

function GetCurrentCoordinates(latitude, longitude) {
    var result = new Object;
    var id = (typeof GoogleCoordObj == 'undefined' ? 'Listing' : GoogleCoordObj);
    var Latitude = $("#" + id + "_Latitude").val();
    var Longitude = $("#" + id + "_Longitude").val();

    if (latitude != undefined && longitude != undefined) {
        result.Latitude = latitude;
        result.Longitude = longitude;
        return result;
    }
    if ((Latitude == "" || Latitude == undefined) ||(Longitude == "" || Longitude == undefined))
    {
        result.Latitude = defaultLatitude;
        result.Longitude = defaultLongitude;
    }
    else {
        result.Latitude = Latitude.replace(",", ".");
        result.Longitude = Longitude.replace(",", ".");
    }
    return result;
}

function GetTextFromList(selector)
{
    var text = $(selector).text();
    var value = $(selector).val();
    if ((value == 0) || (value == undefined))
    {
        return "";
    }
    return text;
}

function Join(string1, string2)
{
    if (string2 == "")
    {
        return string1;
    }
    
    if (string1 == "")
    {
        return string2;
    }
    
    return string1 + ", " + string2;
    
}

function ShowGoogleMap()
{
    $('#map_canvas').show(); 
    $('#tblMap').show(); 
    GoogleInit('map_canvas');
    if (marker != null) {
        if (marker.position.lat() == defaultLatitude && marker.position.lng() == defaultLongitude)
        {
            SetMarker();
        }
    }
    else
    { 
            SetMarker();
    }
}

function CloseAndHideGoogleMap()
{
    $('#map_canvas').hide(); 
    $('#tblMap').hide(); 
    if (marker != null) 
    {
        if ((marker.position.lat() != defaultLatitude) && (marker.position.lng() != defaultLongitude)) 
        {
            var id = (typeof GoogleCoordObj == 'undefined' ? 'Listing' : GoogleCoordObj);
            $("#" + id + "_Latitude").val(marker.position.lat());
            $("#" + id + "_Longitude").val(marker.position.lng());

            $("#" + id + "_Latitude").val($("#" + id + "_Latitude").val().replace(".", ","));
            $("#" + id + "_Longitude").val($("#" + id + "_Longitude").val().replace(".", ","));
        }
    }
}

function AutocompleteWithGoogle(contolId) {
    $("#" + contolId).AutocompleteUI({
        source: GoogleFindAddresses

    });
}

function GoogleFindAddresses(request, response) {
    var regionName = $("span.selectedRegion").html();
    if (regionName == undefined) {
        regionName = "";
    }
    googleGeocoder.geocode({ 'address': "Украина " + regionName + " " + request.term, 'language': 'ru' }, function(results, status) {
        response($.map(results, function(item) {
        return FormatGoogleAddress(item.address_components, regionName);
        }));
    });
}

function FormatGoogleAddress(item, region) {
    // Формат: Улица, номер дома, регион
    var result = undefined;
    var curr = SearchGoogleItem(item, "route");
    if (curr != undefined) {
        result = AddGoogleItem(result, curr.long_name);
    }
    curr = SearchGoogleItem(item, "street_number");
    if (curr != undefined) {
        result = AddGoogleItem(result, curr.long_name);
    }
    
    curr = SearchGoogleItem(item, "locality");
    if (curr != undefined) {
        if (curr.long_name != region && curr.long_name != "город " + region) {
            result = AddGoogleItem(result, curr.long_name);
        }
    }
    curr = SearchGoogleItem(item, "administrative_area_level_2");
    if (curr != undefined) {
        if (curr.long_name != region && curr.long_name != "город " + region) {
            result = AddGoogleItem(result, curr.long_name);
        }

    }
    return result;
}

function SearchGoogleItem(response, type) {
    for (var i = 0; i < response.length; i++) {
        for (var j = 0; j < response[i].types.length; j++) {
            if (response[i].types[j] == type) {
                return response[i];
            }
        }
    }
    return undefined;
}

function AddGoogleItem(currStr, value) {
    if (value == "" || value == undefined) {
        return currStr;
    }
    if (currStr == undefined || currStr == "") {
        currStr = value;
    }
    else {
        currStr += ", " + value;
    }
    return currStr;
}

/* "Source type" filter of MyListing */
var SourceType = { Realtor: "101" };
function onSourceTypeChanged() {
	var selSourceType = $("#SourceType").val();
	if (selSourceType == SourceType.Realtor) {
		$("#EmployeeId").removeAttr("disabled");
	}
	else {
		$("#EmployeeId").attr("disabled", "disabled");
		$("#EmployeeId").val("0");
	}
}

/* "Show\Don't show" action of MyListing */
var ShowImages = { ShowOn: "http://img.address.ua/img/show_on.png", ShowOf: "http://img.address.ua/img/show_off.png" };
function setShowRealtorListing(listingId) {
	var objImg = $("#img" + listingId);
	var isShow = (objImg.attr("src") != ShowImages.ShowOn);
	CallWebService(
		'/WebServices/WSListing.asmx/ListingsSetShowInAgencyProfile',
		'{ "listingIds": [' + listingId + '], "isShow": ' + isShow + ' }',
		function() {
			if (isShow) {
				alert("Объявление будет показываться в списке");
				objImg.attr("src", ShowImages.ShowOn);
			}
			else {
				alert("Объявление не будет показываться в списке");
				objImg.attr("src", ShowImages.ShowOf);
			}
		},
		true);
	return false;
}

function ListingCreditTip(o, tooltip) {
    if (o.hastip) {
        if (o.tip != tooltip)
            $(o).simpletip().update(tooltip);
    }
    else {
        ShowToolTip($(o), tooltip, 'tooltipfilter');
        var e = $(o.parentNode).find('div[class="tooltipfilter fixed"]');
        e.remove();
        $("body").append(e);
        o.hastip = true;
        $(o).simpletip().show();
    }
}

function ListingToBeBanned(listingId) {
    if (confirm('Вы действительно хотите сделать копию данного объявления с текущими(в БД) параметрами?')) {
        $.ajax({
            url: "/realtylisting/lisitgtobebanned/",
            type: "POST",
            data: { ListingId: listingId },
            dataType: "json",
            success: function(result) {
                alert("Копия сохранена")
            },
            error: function(error) { alert(error); }
        })
    }
}

oListingConn = function(url, capt) {
    this.GetImageCaptcha = oCommentsItem.prototype.GetImageCaptcha;
    this.Data = { Captch: capt };
    instListingConn = this;
    this.Show = function(id) {
        o = this;
        if (o.Contacts)
            $("#" + id).html(o.Contacts);
        else {
            this.Data.Captch["ImageNumber"] = $('input[name="Captch.ImageNumber"]').val();
            instListingConn.Data.Captch.ScriptObj = "instListingConn";
            instListingConn.Data.Captch.ImageCapture = "";
            this.CaptchElm = "#"+id+" br.clear";
            $.ajax({
                type: 'POST',
                url: url,
                data: this.Data.Captch,
                dataType: 'html',
                success: function(data) {
                    if (data || data > "") {
                        o.Contacts = data;
                        $("#" + id).html(data);
                    }
                    else {
                        instListingConn.CaptchUrl = '/comment/captureimageinit/';
                        instListingConn.GetImageCaptcha();
                    }
                }
            })
        }
    }
}

oListingTrends = function(id, what) {
    instListingTrends = this;
    this.Loaded = { trend: what.trend ? null : true, similar: what.similar ? null : true };
    this.OK = { trend: false, similar: false };
    ExecFuncByCond(function() { return instListingTrends.Loaded.trend && instListingTrends.Loaded.similar; },
        function() {
            if (instListingTrends.OK.trend || instListingTrends.OK.similar) {
                if (!$.jqplot) {
                    jQuery.getScript("/js/lib/jquery/jqplot/jquery.jqplot.min.js", function() {
                        jQuery.getScript("/js/lib/jquery/jqplot/plugins/jqplot.highlighter.min.js");
                        jQuery.getScript("/js/lib/jquery/jqplot/plugins/jqplot.cursor.min.js");
                        jQuery.getScript("/js/lib/jquery/jqplot/plugins/jqplot.dateAxisRenderer.min.js");
                    });
                    loadCssFile("/js/lib/jquery/jqplot/jquery.jqplot.min.css");
                }
                ExecFuncByCond(function() { return $.jqplot && $.jqplot.Highlighter && $.jqplot.Cursor && $.jqplot.DateAxisRenderer; }, function() { instListingTrends.Show(); });
            }
        });
    if (what.trend)
        $.ajax({
            type: 'POST',
            url: "/realtylisting/gettrends/",
            data: { listingId: id },
            dataType: 'json',
            success: function(data) {
                instListingTrends.Loaded.trend = instListingTrends.DataPrepear(data);
                instListingTrends.OK.trend = instListingTrends.Loaded.trend.series.length > 0;
            }
        });
    if (what.similar)
        $.ajax({
            type: 'POST',
            url: "/realtylisting/getsimilartrends/",
            data: { listingId: id },
            dataType: 'json',
            success: function(data) {
                instListingTrends.Loaded.similar = instListingTrends.DataPrepear(data);
                instListingTrends.OK.similar = instListingTrends.Loaded.similar.series.length > 0;
            }
        });
    this.Show = function() {
        if (this.OK.trend || this.OK.similar) {
            if (this.OK.trend)
                this.Plot("trend1", "Тенденции изменения цен", instListingTrends.Loaded.trend);
            if (this.OK.similar)
                this.Plot("trend2", "Цена на похожие объекты", instListingTrends.Loaded.similar);
        } else {
            $("#trListingTrands1").remove();
            $("#trListingTrands2").remove();
        }
    }

    this.DataPrepear = function(data) {
        var result = [];
        var series = [];
        var index = {};
        var sers = ",";
        for (var i = data.length - 1; i > -1; i--) {
            if (sers.indexOf(data[i].PriceType) == -1) {
                series.push({ label: data[i].PriceType });
                sers += data[i].PriceType + ",";
                result.push([]);
                index[data[i].PriceType] = series.length - 1;
            }
            result[index[data[i].PriceType]].push([eval("new " + data[i].Date.substr(1, data[i].Date.length - 2)).toDateString(), data[i].Price])
        }
        return { data: result, series: series };
    }

    this.Plot = function(cntr, title, result) {
        $("#" + cntr).show();
        $.jqplot(cntr, result.data, {
            title: title,
            series: result.series,
            legend: {
                show: true,
                location: 'ne',
                xoffset: 12,
                yoffset: 12
            },
            axes: {

                xaxis: {
                    renderer: $.jqplot.DateAxisRenderer,
                    tickOptions: {
                        formatString: '%d.%m'
                    }
                },
                yaxis: {
                    tickOptions: {
                        formatString: '$%.2f'
                    }
                }
            },
            highlighter: {
                show: true,
                sizeAdjust: 7.5
            },
            cursor: {
                show: false
            }
        });
    }
}


function GetContacts(insertHolderTagId) {
    try {
        _gaq.push(['_trackEvent', ' contactdetails', ' show']);
    }
    catch (e) { }
    instListingConn.Show(insertHolderTagId);
}

