var typeImage = "objImage";

function objGetImageInst()
{
    var inst = new Object();

    inst = objGetSessionInst();
    inst.SaveImage = function()
    {
        
    }
    
    inst.LoadImage = function(intImageId)
    {
        
    }
    
    inst.BeginGetImagesList = function(fCallback)
    {
        setStatus("Запрос списка шаблонов РК", true);
        
        var request = objGetXEPRequest();
        request.AddPart(XEPGetImagesList, {});
        
        request.Perform(function(response)
                            {
                                setStatus("Разбираем ответ сервера", true);
                                
                                if (response.Status == soapStatusError)
                                {
                                    var errorMessage = response.StatusMessage;
                                    setStatus("Ошибка! " + errorMessage + "!");
                                }
                                else
                                {
                                    var theOnlyPart = response.Parts[0];
                                    if (theOnlyPart !=null)
                                    {
                                        if (theOnlyPart.Status == soapStatusOK)
                                        {
                                            var retArr = new Object(); // STUB эта хуита для dialogSelect
                                            for (resultIndex in theOnlyPart.Results)
                                            {
                                                var resultValue = theOnlyPart.Results[resultIndex];
                                                retArr[resultValue["id"]] = resultValue["name"];
                                            }
                                            setStatus('Загружен список шаблонов (' + asSize(retArr) + ' шт.)');
                                            fCallback(retArr);
                                        }
                                        else
                                        {
                                            if (ProcessTypicalXEPErrors(theOnlyPart) == false)
                                            {
                                                setStatus("Ошибка загрузки списка шаблонов: " + theOnlyPart.StatusMessage);
                                                alert("Ошибка загрузки списка шаблонов: " + theOnlyPart.StatusMessage);
                                            }
                                        }
                                    }
                                    else
                                    {
                                        setStatus("Ошибка получения нужного парта");
                                    }
                                }
                            },
                            function(obj, msg, exc)
                            {
                                setStatus("Ошибка запроса списка шаблонов");
                            }
                        );
    }
    
    inst.BeginGetCurrentImage = function (fCallback)
    {
        var ret = this.GetCurrentImage();
        fCallback(ret);
        return ret;
    }
    
    inst.GetCurrentImage = function ()
    {
        setStatus("Считаем шаблон", true);
        var ret = this.GetSessionXMLDump2();
        ret += RegionsCode2XML();
        setStatus("Посчитали шаблон");
        return ret;
    }

    
    inst.BeginSaveImage = function (fCallback, sXML, PassByParams, bAlreadyExists, intImageId, sImageName, sType) // STUB тупорылая god-сигнатура
    {   
        if (bAlreadyExists!=true)
        {
            bAlreadyExists = false;
        }
        var request = objGetXEPRequest();
        
        var newCampaignName = getCurrentImageName();
        if (sImageName!=null)
        {
            newCampaignName = sImageName;
        }
        
        var type = "default";
        if ((sType!=null) && (sType.length > 0))
        {
            type = sType;
        }
        
        if (bAlreadyExists == false)
        {
            request.AddPart(XEPCreateImage, {
                                            "name": newCampaignName,
                                            "xml": sXML,
                                            "type": type
                                            });
        }
        else
        {
            request.AddPart(XEPUpdateImage, {
                                            "id": intImageId,
                                            "name": sImageName,
                                            "xml": sXML,
                                            "type": type
                                            });
        }

        request.Perform(function (XEPResponse)
                         {
                            // WIN callback
                            
                            if (XEPResponse.Status == soapStatusOK)
                            {
                            
                                var onlyPart = XEPResponse.Parts[0];
                                if (onlyPart.Status == soapStatusOK)
                                {
                                    var imageId = null;                                
                                    setStatusOK();
                                    if (bAlreadyExists == false) // STUB Коля, бля, дал разные имена возвращаемым значениям лол
                                    {
                                        imageId = onlyPart.Results[0]["imageId"];
                                    }
                                    else
                                    {
                                        imageId = onlyPart.Results[0]["id"];
                                    }
                                    var imageName = null;
                                    imageName = onlyPart.Results[0]["name"];
                                }
                                else
                                {
                                    if (ProcessTypicalXEPErrors(onlyPart) == false)
                                    {
                                        setStatus("Ошибка: " + onlyPart.StatusMessage);
                                    }
                                }
                            }
                            else
                            {
                                setStatus("Ошибка: " + XEPResponse.StatusMessage);
                            }
                            fCallback(imageId, imageName, PassByParams);
                         },
                         function(obj, msg)
                         {
                            // FAIL callback
                            setStatus("Ошибка запроса к серверу");
                         }
                         );
    }
    
    
    return inst;
}

function BeginLoadingImage(selectedImageId, selectedImageName)
{
    if (selectedImageId == null)
    {
        //setStatus ('Шаблон не выбран, загрузка отменена');
    }
    else
    {
        setStatus('Шаблон выбран, начинаем грузить "' + selectedImageName + '"', true);
        
        
        var request = objGetXEPRequest();
        request.AddPart(XEPGetImage, {"image_id": selectedImageId});
        request.Perform(function(response)
                                {
                                    // WIN callback
                                    setStatus("Информация об шаблоне загружена, парсим", true);
                                    
                                    if (response.Status == soapStatusError)
                                    {
                                        setStatus("Ошибка: " + response.StatusMessage);
                                        return;
                                    }
                                    else
                                    {
                                        var theOnlyPart = response.Parts[0];
                                        if (theOnlyPart != null)
                                        {
                                            if (theOnlyPart.Status == soapStatusOK)
                                            {
                                                var theOnlyResult = theOnlyPart.Results[0];
                                                if (theOnlyResult != null)
                                                {
                                                    var imageXML = theOnlyResult["xml"];
                                                    setStatus("Получили XML длиной в " + imageXML.length + " символов");
                                                    
                                                    var startMethod = new Date();
                                                    var xmldoc = GetJQXMLDoc(imageXML);
                                                    
                                                    
                                                    //imageXML = '<?xml version="1.0" encoding="UTF-8"?>' + '<root>' + imageXML + '</root>';
                                                    //alert(imageXML);
                                                    //var xmldoc = new XMLDocument();
                                                    //alert('first');
                                                    //xmldoc.LoadXml(imageXML);
                                                    //alert('done');
                                                    
                                                    
                                                    
                                                    setStatus("Получили xmldoc");
                                                    
                                                    for (x in objGetPanel(1).Tabs)
                                                    {
                                                        objGetPanel(1).Tabs[x].Controls[0].Clear();
                                                    }
                                                    //openBenchmark("Загрузка шаблона (BeginLoadingImage)");
                                                    // STUB эти два блока парсинга xml-ля шаблона скопипасщены с незначительными изменениями из LoadSession (session.js)
                                                    //openBenchmark("Загрузка шаблона - элементы ad");
                                                    $('ad', xmldoc).each(function(index)
                                                                               {
                                                                                    var ad = getAdControlInst();
                                                                                    ad.LoadXML(this);
                                                                                    var destinationAds = null;
                                                                                    
                                                                                    var existingAdses = getObjectsByType(typeAds);
                                                                                    
                                                                                    for (exAdsIndex in existingAdses)
                                                                                    {
                                                                                        var currentExistingAds = existingAdses[exAdsIndex];
                                                                                        if (ad._loadingTimeGroupId == currentExistingAds._loadingTimeGroupId)
                                                                                        {
                                                                                            destinationAds = currentExistingAds;
                                                                                            if (fDebug == true)
                                                                                            {
                                                                                                if (currentExistingAds == null)
                                                                                                {
                                                                                                    setStatus("Ошибка хлатирования(tm) айдишника Адса объявы");
                                                                                                    continue;
                                                                                                }
                                                                                            }
                                                                                            break;
                                                                                        }
                                                                                    }
                                                                                    
                                                                                    if (destinationAds == null)
                                                                                    {
                                                                                        var destinationAds = getAdTransparentInst();
                                                                                        destinationAds._loadingTimeGroupId = ad._loadingTimeGroupId;
                                                                                    }
                                                                                    
                                                                                    destinationAds.AddAd(ad, ad.AS == asElama);
                                                                                    
                                                                                    var campaignTabIndex = null;
                                                                                    switch (ad.AS)
                                                                                    {
                                                                                        case asElama:
                                                                                            campaignTabIndex = 0;
                                                                                            break;
                                                                                        case asYandex:
                                                                                            campaignTabIndex = 1;
                                                                                            break;
                                                                                        case asBegun:
                                                                                            campaignTabIndex = 2;
                                                                                            break;
                                                                                        case asGoogle:
                                                                                            campaignTabIndex = 3;
                                                                                            break;
                                                                                        default:
                                                                                            campaignTabIndex = 0;
                                                                                            break;
                                                                                    }
                                                                                    
                                                                                    var a = objGetPanel(1);
                                                                                    var b = a.Tabs[campaignTabIndex];
                                                                                    var c = b.Controls[0];
                                                                                    var cTab = c;
                                                                                    cTab.AddAd(ad, false);
                                                                               });
                                                    var campaignControls = getObjectsByType(typeCampaignControl);
                                                    for (x in campaignControls)
                                                    {
                                                        var ctrlCampaign = campaignControls[x];
                                                        ctrlCampaign.RebuildAdsVisibleStatsNStuff();
                                                    }
                                                    //closeBenchmark("Загрузка шаблона - элементы ad");
                                                    setStatus("Распарсили объявы");
                                                    //openBenchmark("Загрузка шаблона - элементы wT");
                                                    var wTPanel = objGetPanel(0);
                                                    $('wT', xmldoc).each(function(index)
                                                                               {
                                                                                    var wTab = getWordstatTabsControlInst();
                                                                                    // STUB õóéíþ â ñëåäóþùåé ñòðîêå èçìåíèòü, ïîìåíÿòü ëîãèêó è âîîáùå. çàåáà.
                                                                                    wTab = wTPanel.addWordstatTab('Загрузка...'); // STUB èçìåíèòü àäðåñàöèþ, íå íàïðÿìóþ ÷åðåç Panels
                                                                                    wTab.LoadXML(this);
                                                                               });
                                                    //closeBenchmark("Загрузка шаблона - элементы wT");
                                                    setStatus("Распарсили вордстат-табы");
                                                    //openBenchmark("Загрузка шаблона - элементы turing");
                                                    $('turing', xmldoc).each(function(index)
                                                                               {
                                                                                __regionsCode = $(this).text();
                                                                                if (RegionsTree.length < 1)
                                                                                {
                                                                                    beginLoadRegions(resumeImageRegionsLoad);
                                                                                }
                                                                                else
                                                                                {
                                                                                    SetRegionsDialogLinkAnchor(RegionsCode2String(__regionsCode));
                                                                                }
                                                                               });
                                                    //closeBenchmark("Загрузка шаблона - элементы turing");
                                                    //closeBenchmark("Загрузка шаблона (BeginLoadingImage)");
                                                    //drawBenchmarks();
                                                    setStatus("Шаблон формально загружен");
                                                    alert("Шаблон загружен");
    
                                                    flagCampaignHasBeenLoaded = true;
    
                                                    setCurrentImageCreds(selectedImageName, selectedImageId);
                                                    
                                                }
                                                else
                                                {
                                                    setStatus('Ошибка загрузки шаблона (на этапе парсинга данных, возвращенных сервером - - нулевой резалт)');
                                                    alert('Ошибка загрузки шаблона (на этапе парсинга данных, возвращенных сервером - - нулевой резалт)');
                                                }
                                            }
                                            else
                                            {
                                                if (ProcessTypicalXEPErrors(theOnlyPart) == false)
                                                {
                                                    alert("Ошибка загрузки шаблона: " + theOnlyPart.StatusMessage);
                                                }
                                            }
                                        }
                                        else
                                        {
                                            setStatus('Ошибка загрузки шаблона (на этапе парсинга данных, возвращенных сервером - нулевой парт)');
                                            alert('Ошибка загрузки шаблона (на этапе парсинга данных, возвращенных сервером - нулевой парт)');
                                        }
                                    }
                                },
                         function(obj, msg)
                                {
                                    // FAIL callback
                                    alert("Ошибка загрузки шаблона (id==" + selectedImageId + ". Обязательно пожалуйтесь администратору!");
                                }
                        );
    }
}
var UncheckRegionsNextTimeShowRegionsDialog = new Object();
function resumeImageRegionsLoad()
{
    //SetRegionsDialogLinkAnchor(RegionsCode2String(__regionsCode))
    UncheckRegionsNextTimeShowRegionsDialog = new Object();
    if (asSize(__regionsCode) < 1)
        return "Все";
    var arrRegions = __regionsCode.split(",");
    for (x in arrRegions)
    {
        var sRegionId = arrRegions[x]; // Может быть с предшествующим минусом
        if (sRegionId[0] == "-")
        {
            sRegionId = sRegionId.replace("-", "");
            UncheckRegionsNextTimeShowRegionsDialog[sRegionId] = RegionsTree[sRegionId];
        }
        else
        {
            CheckedRegions[sRegionId] = RegionsTree[sRegionId];
            //CheckRegionById(sRegionId, false);
        }
    }
    SetRegionsDialogLinkAnchor(RegionsCode2String(__regionsCode));
}
function SaveImageRunCampaignTemporaryCallback(imageId, imageName, PassByParams)
{
    if (imageId != null)
    {
        SetNeed2BeSaved(false);
        var whdl = PassByParams[0];
        if (whdl != null)
        {
            whdl.location.href ='http://my.elama.ru/creator/?id=' + imageId;
            //whdl.location.href = 'http://office.trinet.ru:2139/my/creator/?id=' + imageId;
        }
        else
        {
            //STUB
        }
    }
}
function SaveImageRunCampaignTemporaryCallback2(imageId, imageName)
{
    if (imageId != null)
    {
        SetNeed2BeSaved(false);
        dialogFrame('http://my.elama.ru/creator/?id=' + imageId + '&xui=1');
    }
}
function SaveImageDefaultCallback(imageId, imageName)
{
    if (imageId == null)
    {
        setStatus('Ошибка сохранения шаблона');
        alert('Ошибка сохранения шаблона!');
    }
    else
    {
        setStatus('Шаблон успешно сохранен!');
        alert('Шаблон успешно сохранен!');
        SetNeed2BeSaved(false);
        flagCampaignHasBeenLoaded = true;
        setCurrentImageCreds(imageName, imageId);
    }
}

function SaveImageAsDefaultCallback(imageId, imageName)
{
    if (imageId == null)
    {
        setStatus('Ошибка сохранения шаблона');
        alert('Ошибка сохранения шаблона!');
    }
    else
    {
        setStatus('Шаблон успешно сохранен!');
        alert('Шаблон успешно сохранен!');
        SetNeed2BeSaved(false);
        flagCampaignHasBeenLoaded = true;
        setCurrentImageCreds(imageName, imageId);
    }
}

function dialogNewCampaignName(arrElements, fCallback)
{
    var sNewCampaignName = getCurrentImageName();
    // STUB диалог копипаста из selectDialog
    
        var html = "<div class=\"image-select\"><ul></ul>Имя кампании: <input class=\"dialogNewCampaignNameInput\" style=\"width:474px;\" type=\"text\" value=\"" + sNewCampaignName + "\" /></div>";
    
    var jqDialog = $(html);
    var jqDialogSelectElement = $('ul', jqDialog);
    var ItemsCount = asSize(arrElements);
    if (ItemsCount > 0)
    {
        for (x in arrElements)
        {
            var elementText = arrElements[x];
            var elementId = x;
            var htmlElement = '<li><label for="im' + elementId + '"><input type="radio" value="' + elementId + '" name="imageSelect" id="im' + elementId + '" />' + elementText + '</label></li>';
            var jqElement = $(htmlElement);
            jqElement.appendTo(jqDialogSelectElement);
        }
    }
    else
    {
        var htmlElement = '<span style="text-align: center"><br/>В настоящий момент список шаблонов рекламных кампаний пуст. Как только Вы сохраните первый шаблон, он окажется доступным для загрузки с помощью этого окошка.</span>';
        var jqElement = $(htmlElement);
        jqElement.appendTo(jqDialogSelectElement);
    }
    
    jqDialog.appendTo('body');
	$('li',jqDialog).each(function(i){
		if(i%2){
			$(this).addClass('even');
		}
		$(this).hover(function(){
			$(this).addClass('hover');
		},function(){
			$(this).removeClass('hover');
		})
	})
	$(':radio',jqDialog).each(function(){
		$(this).click(function(){
			if($(this).attr('checked') == true) {
				$(':radio',jqDialog).not(this).parents('li').removeClass('selected');
				$(this).parents('li').eq(0).addClass('selected');
                                $('.dialogNewCampaignNameInput', jqDialog).attr('value', $(this).parent('label').text());
			}
		})
	})
    jqDialog.dialog({
                        title: 'Сохранение рекламной кампании',
                        modal:true,
                        resizable:true,
						width:620,
						height:470,
                        close: function (event, ui)
                        {
                            fCallback(null);
                        },
                        buttons:
                        {
                            "Да": function(event, ui)
                            {
                                var sNewCampaignName = $('.dialogNewCampaignNameInput', jqDialog).attr('value');
                                if (sNewCampaignName.length <1)
                                {
                                    alert('Необходимо указать имя кампании');
                                    return;
                                }
                                var bNameExists = false;
                                var intExistingCampaignId = null;
                                $('input:radio', jqDialog).each (function (index, el)
                                                                            {
                                                                                el = $(el);
                                                                                if (el.parent('label').text() == sNewCampaignName)
                                                                                {
                                                                                    bNameExists = true;
                                                                                    intExistingCampaignId = el.attr('value');
                                                                                    // STUB сделать брейк each
                                                                                    return;
                                                                                }
                                                                            } );
                                
                                if (bNameExists == true)
                                {
                                    // Спрашиваем
                                    if (confirm('Вы уверены, что хотите записать новый шаблон кампании поверх старого?') == true)
                                    {
                                        fCallback(sNewCampaignName, true, intExistingCampaignId); // STUB Переделать иф
                                    }
                                    else
                                    {
                                        return; // Не закрываем диалог
                                    }
                                }
                                else
                                {
                                    // Сохраняем
                                    fCallback(sNewCampaignName); // STUB Переделать иф
                                }
                                jqDialog.dialog("close");
                                jqDialog.remove();
                                return;
                            },
                            "Нет": function (event, ui)
                            {
                                jqDialog.dialog("close");
                                jqDialog.remove();
                            }
                        }
                        
                    });
}
function SaveImageAsRoutine(newCampaignName, bAlreadyExists, intExistingImageId) // STUB не менее тупорылая сигнатура метода
{
    if (newCampaignName!=null)
    {
        var image = objGetImageInst();
        image.BeginGetCurrentImage(function(sXml)
                                {
                                    image.BeginSaveImage(SaveImageAsDefaultCallback, sXml, null, bAlreadyExists, intExistingImageId, newCampaignName);
                                }
                                );
    }
}

function SaveImageRoutine(Callback, PassByParams)
{
    var image = objGetImageInst();
    image.BeginGetCurrentImage(function(sXml)
                            {
                                image.BeginSaveImage(Callback, sXml, PassByParams, flagCampaignHasBeenLoaded, getCurrentImageId(), getCurrentImageName());
                            }
                            );
}

function beginDeleteImage(intImageIs, fOK, fFAIL)
{
    var xep = objGetXEPRequest();
    var requestPart = objGetXEPRequestPart(XEPDeleteImage);
    requestPart.AddParam("id", intImageIs);
    xep.AddPart(requestPart);
    xep.Perform (fOK, fFAIL);
}