/**
This is JS file common to all pages.
*/
var eventsController = new EventsController();
eventsController.registerOnLoadEvent(initSearchFrom);
eventsController.registerOnLoadEvent(uploadModels);
eventsController.registerOnLoadEvent(initQuickSearchFrom);
eventsController.registerOnLoadEvent(reloadCacherImages);
eventsController.registerOnLoadEvent(makeHoveredCars);
eventsController.registerOnLoadEvent(focusLogin);
//eventsController.registerOnLoadEvent(initPopupImages);
eventsController.registerOnLoadEvent(prepareCarEditForm);
EventsController.addEventListener(document, 'click', closedExpandedListImage);

/* img cacher options */
var imgcacherreloads = 10;
var imgcacherimages = new Array();
var imgcacherurl = 'http://imgcacher.dgstore.dynamicg.pl';
var lastPopupImage = null;
var imagesGalery = null;
var imgGalViewAdptr = null;
var imgGalViewAdptr2 = null;
var elImg = null;
//var popupImageGallery = new Array();
var blnConfirmActive = false;

/* quick search */
var qs_text = "";
/* search remember values */
var search_rv = new Array();

function prepareCarEditForm()
{
    form = document.getElementById("carEditForm");
    if(form && typeof(form) != "undefined"){
        EventsController.addEventListener(form, 'keypress', noSubmitOnEnter);
    }
}

function noSubmitOnEnter(e)
{
    var targ = EventsController.getTarg(e);
    if(e.keyCode == 13 && targ.nodeName != "TEXTAREA"){
        if(e.preventDefault){
            e.preventDefault();
        } else {
            e.returnValue = false;
        }
    }        
}

function focusLogin()
{
    var lfInput = document.getElementById('loginFormLogin');
    if(lfInput && typeof(lfInput) != 'undefined'){
        lfInput.focus();
    }
}

function initPopupImages()
{
    var anchors = document.getElementsByTagName('A');
    for (var i = 0; i < anchors.length; i++){
        if(anchors[i].className == "carImagePopup"){
            EventsController.addEventListener(anchors[i], 'click', openPopupImage);
        }
    }
}

function openFullScrImage(e)
{
    var link = EventsController.getTarg(e);
    window.open(link.parentNode.href);
    if(e.preventDefault){
        e.preventDefault();
    } else {
        e.returnValue = false;
    }
}

function loadImagesToGalery()
{
    var images = document.getElementsByTagName('IMG');    
    for (var i = 0; i < images.length; i++){
        if(images[i].className.indexOf("galery") > -1){
            var src = null;
            if(images[i].src.indexOf('/400/300/') != -1){
                src = images[i].src.replace('/400/300/', '/640/480/').replace('/cars', '/jdd');;
            } else if (images[i].src.indexOf('/140/105/') != -1){
                src = images[i].src.replace('/140/105/', '/640/480/').replace('/cars', '/jdd');;
            }
            if(src != null){
                imagesGalery.addImage(src);
            }
        }
    }
}

function openPopupImage(e)
{
    if(imagesGalery == null){
        imagesGalery = new ImagesGalery();
        loadImagesToGalery();
    }
     if(lastPopupImage != null && lastPopupImage.parentNode){
         lastPopupImage.parentNode.removeChild(lastPopupImage);
         lastPopupImage = null;
         imgGalViewAdptr = null;
         imgGalViewAdptr2 = null;
     }

     var orgImg = EventsController.getTarg(e);
     var div = document.createElement('DIV');
     div.className = "imagePopup";

     button = document.createElement('button');
     button.innerHTML = "close";
     div.appendChild(button);     
     EventsController.addEventListener(button, 'click', closePopupImage);
     
     img = document.createElement('IMG');
     if(orgImg.src.indexOf('/400/300/') != -1){
         img.src = orgImg.src.replace('/400/300/', '/640/480/').replace('/cars', '/jdd');
     } else if (orgImg.src.indexOf('/140/105/') != -1){
         img.src = orgImg.src.replace('/140/105/', '/640/480/').replace('/cars', '/jdd');
     }
     var src = img.src;
     i = 0;
     
     imagesGalery.setCurrentBySrc(src);
     
     var link = document.createElement('A');
     link.href = src.replace('/640/480/', '/0/0/');
     link.href = link.href.replace('/cars/', '/cars2/');
     link.title = orgImg.parentNode.title;
     
     EventsController.addEventListener(link, 'click', openFullScrImage);
     
     //link.innerHTML = orgImg.parentNode.title;    
     
     var ico = document.createElement('img');
     ico.src = "/images/default/gfx/link-to-fullsize.gif";
     
     link.appendChild(ico);
     
     div.appendChild(link);     
          
     navDiv = document.createElement('div');
     prevLink = document.createElement('a');
     //prevLink.innerHTML = "&lt;&lt;";
     prevLink.className = "prevArrow";
     prevLink.innerHTML = "&nbsp;&nbsp;&nbsp;&nbsp;";
     prevLink.href="#";
     navDiv.appendChild(prevLink);
     nextLink = document.createElement('a');
     //nextLink.innerHTML = "&gt;&gt;";
     nextLink.href="#";
     nextLink.innerHTML = "&nbsp;&nbsp;&nbsp;&nbsp;";
     nextLink.className = "nextArrow";
     navDiv.appendChild(nextLink);
     navDiv.className = "top";
     
     div.appendChild(navDiv);
     
     if(imgGalViewAdptr2 == null){
        imgGalViewAdptr2 = new ImagesGaleryViewAdapter(imagesGalery, img, prevLink, nextLink, link);
     }     
          
          
     div.appendChild(img);               
     document.getElementById("carImages").appendChild(div);
              
     
     button2 = document.createElement('button');
     button2.innerHTML = "close";
     button2.className = "right";
     div.appendChild(button2);
     EventsController.addEventListener(button2, 'click', closePopupImage);
     
     navDiv = document.createElement('div');
     prevLink = document.createElement('a');
     //prevLink.innerHTML = "&lt;&lt;";
     prevLink.className = "prevArrow";
     prevLink.innerHTML = "&nbsp;&nbsp;&nbsp;&nbsp;";
     prevLink.href="#";
     navDiv.appendChild(prevLink);
     nextLink = document.createElement('a');
     //nextLink.innerHTML = "&gt;&gt;";
     nextLink.href="#";
     nextLink.innerHTML = "&nbsp;&nbsp;&nbsp;&nbsp;";
     nextLink.className = "nextArrow";
     navDiv.appendChild(nextLink);
     navDiv.className = "bottom";
     
     div.appendChild(navDiv);
     
     if(imgGalViewAdptr == null){
        imgGalViewAdptr = new ImagesGaleryViewAdapter(imagesGalery, img, prevLink, nextLink, link);
     }
     
     lastPopupImage = div;
          
     //reloadCacherImage(img, 10);
     
     if(e.preventDefault){
        e.preventDefault();
     } else {
        e.returnValue = false;
     }
}

function closePopupImage(e){
    lastPopupImage.parentNode.removeChild(lastPopupImage);
    lastPopupImage = null
    imgGalViewAdptr = null;
    imgGalViewAdptr2 = null;
    if(e.preventDefault){
        e.preventDefault();
     } else {
        e.returnValue = false;
     }
}

function isSubnode(node, subnode)
{
    while(subnode){
        if(node == subnode){
            return true;
        }
        if(subnode.parentNode){
            subnode = subnode.parentNode;
        } else {
            break;
        }
    }
    return false;
}

function clearFormIfMakeChanged(e)
{
    var targ = EventsController.getTarg(e);
    var form = document.getElementById('searchForm');
    var makeChanged = false;
    if(typeof(form) != 'undefined' && form != null){
        var selects = document.getElementsByTagName('SELECT');
        for(i = 0; i < selects.length; i++){
            if(selects[i].name == "maker_id"){
                if(selects[i] == targ){
                    makeChanged = true;
                    break;
                }
            }
        }
        if(makeChanged){
             for(i = 0; i < selects.length; i++){
                if(selects[i].name != "maker_id"){
                    selects[i].value = "";
                }
            }
        }
    }
}

function uploadModels(e)
{
    if(e != null){
        var select = EventsController.getTarg(e);
        var remLastChild = 1;
        var allModels = 0;
    } else {
        var select = document.getElementById('maker_id');        
        var remLastChild = 0;
        var allModels = 1;
    }      
    var maker_id;    
    if(typeof(select) == 'undefined' || !select || 
            select.nodeName != "SELECT" || select.name != "maker_id")
    {
        var model = document.getElementById('model_id');
        if(!model) {
            return;
        }
        maker_id = -1;
    } else {
        maker_id = select.value;
    }
    var maker = document.getElementById('maker_id');
    if((!select || !select.nodeName ||  select.nodeName != 'SELECT') && maker && maker.value > 0) {
        return;
    }        
    if(xmlHttp == null){
        select.form.submit();
    }                   
    xmlHttp.onreadystatechange=function()
    {
        if(xmlHttp.readyState==4){
            modelsArray = JSON.parse(xmlHttp.responseText);
            modelsSelect = document.getElementById('model_id');
            if(typeof(modelsSelect) != 'undefined' && modelsSelect){
                // remove old options
                while(modelsSelect.childNodes.length > 1 + remLastChild){
                    modelsSelect.removeChild(modelsSelect.lastChild);
                }
                // add new options
                var optionElement = null;
                for(var i = 0; i < modelsArray.length; i++){
                    optionElement = document.createElement('OPTION');
                    optionElement.value = modelsArray[i].model_id;
                    optionElement.innerHTML = modelsArray[i].name;
                    modelsSelect.appendChild(optionElement);
                }
            }
        }
    }
    xmlHttp.open("GET","/ajax/models/" + maker_id
            + "/?allModels=" + allModels,true);
    xmlHttp.send(null);    
}

function uploadSubmodels(e)
{
    if(e != null){
        var select = EventsController.getTarg(e);
        var remLastChild = 1;
        var allSubmodels = 0;
    } else {
        var select = document.getElementById('model_id');        
        var remLastChild = 0;
        var allSubodels = 1;
    }
    if(typeof(select) == 'undefined' || !select || 
            select.nodeName != "SELECT" || select.name != "model_id")
    {
        return false;
    }
    if(xmlHttp == null){
        select.form.submit();
    }
    xmlHttp.onreadystatechange=function()
    {
        if(xmlHttp.readyState==4){
            submodelsArray = JSON.parse(xmlHttp.responseText);
            submodelsSelect = document.getElementById('submodel_id');
            if(typeof(submodelsSelect) != 'undefined' && submodelsSelect){
                // remove old options
                while(submodelsSelect.childNodes.length > 1 + remLastChild){
                    submodelsSelect.removeChild(submodelsSelect.lastChild);
                }
                // add new options
                var optionElement = null;
                optionElement = document.createElement('OPTION');
                optionElement.value = "";
                optionElement.innerHTML = "";
                submodelsSelect.appendChild(optionElement);
                for(var i = 0; i < submodelsArray.length; i++){
                    optionElement = document.createElement('OPTION');
                    optionElement.value = submodelsArray[i].submodel_id;
                    optionElement.innerHTML = submodelsArray[i].name;
                    submodelsSelect.appendChild(optionElement);
                }
            }
        }
    }
    xmlHttp.open("GET","/ajax/submodels/" + select.value 
            + "/?allSubodels=" + allSubodels,true);
    xmlHttp.send(null);
}

function initSearchFrom()
{
    var form = document.getElementById('searchForm');
    if(typeof(form) != 'undefined' && form != null){
        if(form.className == "advanced"){
            form.style.display = "none";
            a = document.createElement('A');
            a.href="#";
            a.id="tsfv";
            a.innerHTML = "Modify Your Search";
            EventsController.addEventListener(a, 'click', toogleSearchFormVisibility);
            div = document.getElementById('tlph');
            if(div && typeof(div) != 'undefined'){
                div.appendChild(a);
            }
        }
        
        var i;
        var selects = document.getElementsByTagName('SELECT');
        for(i = 0; i < selects.length; i++){
            if(isSubnode(form, selects[i])){
                if(selects[i].name != "maker_id"){
                    EventsController.addEventListener(selects[i], 'change', submitSearchForm);        
                } else {
                    EventsController.addEventListener(selects[i], 'change', uploadModels);
                }
            }
        }
        var inputs = document.getElementsByTagName('INPUT');
        for(i = 0; i < inputs.length; i++){
            if(isSubnode(form, inputs[i])){
                if(inputs[i].type == "text" && inputs[i].className == "gray"){
                    search_rv[inputs[i].name] = inputs[i].value;
                    EventsController.addEventListener(inputs[i], 'focus', clearInputField);
                }
            }
        }

        
        
        /*for(var i = 0; i < form.childNodes.length; i++){
            if(form.childNodes[i].nodeName == 'SELECT'){
                EventsController.addEventListener(form.childNodes[i], 'change', submitSearchForm);
            } 
            if(form.childNodes[i].nodeName == 'button'){
                EventsController.addEventListener(form.childNodes[i], 'click', changeSearchFormAction);
            }
            if(form.childNodes[i].nodeName == 'INPUT' && form.childNodes[i].className == "gray"){
              search_rv[form.childNodes[i].name] = form.childNodes[i].value;
              EventsController.addEventListener(form.childNodes[i], 'focus', clearInputField);
            }
        }*/
    }
    var searchKwdId = document.getElementById('searchKwdId');
    var quickSearch = document.getElementById('quickSearch'); 
    if(searchKwdId && typeof(searchKwdId) != 'undefined'){
        if(quickSearch && typeof(quickSearch) != 'undefined' && searchKwdId.value == ""){
            searchKwdId.className = "gray";
            searchKwdId.value = quickSearch.value;
            
        }
        EventsController.addEventListener(searchKwdId, 'focus', clearSearchKwdId);
        EventsController.addEventListener(form, 'submit', checkSearchForm);
    }
}

function toogleSearchFormVisibility(e)
{
   var form = document.getElementById('searchForm');
   if(typeof(form) != 'undefined' && form != null){
        if(form.style.display == "none"){
            form.style.display = "block";
        } else {
            form.style.display = "none";
        }
        
   }
   if(e.preventDefault){
       e.preventDefault();
   } else {
       e.returnValue = false;
   }
}

function submitCarEditForm(select)
{
    var form = select.form;
    var input = document.createElement('INPUT');
    input.type = "hidden";
    input.name = "editSubmit2";
    input.value = 1;
    form.appendChild(input);
    form.submit();
}

function initQuickSearchFrom()
{
    var input = document.getElementById('quickSearch'); 
    if(input && typeof(input) != 'undefined'){
        qs_text = input.value;
        EventsController.addEventListener(input, 'focus', clearQuickSearch);
    }
    EventsController.addEventListener(input.form, 'submit', checkQuickSearch);
}

function checkSearchForm(e)
{ 
    var input = document.getElementById('searchKwdId'); 
    if(input && typeof(input) != 'undefined'){
        if(input.value == qs_text){
            input.value = "";
        }
    }
    var form = document.getElementById('searchForm');
    if(typeof(form) != 'undefined' && form != null){
        var inputs = document.getElementsByTagName('INPUT');
        for(i = 0; i < inputs.length; i++){
            if(inputs[i].className == "gray"){
               if(search_rv[inputs[i].name] == inputs[i].value){
                  inputs[i].value = "";
              } 
            }
        }
        /*for(var i = 0; i < form.childNodes.length; i++){
            if(form.childNodes[i].nodeName == 'INPUT' && form.childNodes[i].className == "gray"){
              if(search_rv[form.childNodes[i].name] == form.childNodes[i].value){
                  form.childNodes[i].value = "";
              }
            }
        }*/
    }
    /*e.preventDefault();
    alert('Please enter correct data');*/
}

function checkQuickSearch(e)
{ 
    var input = document.getElementById('quickSearch'); 
    if(input && typeof(input) != 'undefined'){
        if(input.value == qs_text){
            input.value = "";
        }
    }
    /*e.preventDefault();
    alert('Please enter correct data');*/
}

function clearQuickSearch()
{
    var input = document.getElementById('quickSearch'); 
    if(input && typeof(input) != 'undefined'){
        input.value = "";
        input.className = "black";
    }
}

function clearInputField(e)
{
    var input = EventsController.getTarg(e);
    if(input && typeof(input) != 'undefined'){
        input.value = "";
        input.className = "black";
    }
}

function clearSearchKwdId()
{
    var input = document.getElementById('searchKwdId'); 
    if(input && typeof(input) != 'undefined'){
        input.value = "";
        input.className = "black";
    }
}

function submitSearchForm(e){
    var form = document.getElementById('searchForm');
    if(form && typeof(form) != 'undefined'){
        checkSearchForm();
        if(e){
            clearFormIfMakeChanged(e);
        }
        form.submit();
    }
}

function expandListImage(e)
{
    closedExpandedListImage();
    var img = EventsController.getTarg(e);
    var exImg = document.createElement('IMG');
    exImg.src = img.src.replace('/60/45/', '/180/135/');
    exImg.className = "expandedImage";
    img.parentNode.appendChild(exImg);
    EventsController.addEventListener(img, 'mouseout', closedExpandedListImage);
    //EventsController.addEventListener(exImg, 'mouseout', closedExpandedListImage);
    elImg = exImg;
    //imgcacherreloads = 3;
    //imgcacherimages = new Array();
    reloadCacherImage(elImg, 10);

}

function closedExpandedListImage()
{
    if(elImg != null){
        elImg.parentNode.removeChild(elImg);
        elImg = null;
        reloadCacherImage.img = null;
        reloadCacherImage.reload = false;
    }
}

function reloadCacherImage(img, reloads)
{
    if(reloadCacherImage.img == null || 
            typeof(reloadCacherImage.img) == 'undefined' || 
            !reloadCacherImage.img){
        reloadCacherImage.img = img;
    }
    if(reloadCacherImage.reloads == null || 
            typeof(reloadCacherImage.reload) == 'undefined' || 
            !reloadCacherImage.reload){
        reloadCacherImage.reloads = reloads;
    }
    if(reloadCacherImage.reloads < 1 || !reloadCacherImage.img){
        reloadCacherImage.reloads = null;
        reloadCacherImage.img = null;        
        return;
    }
    if(reloadCacherImage.img != null && reloadCacherImage.img.height < 5 || reloadCacherImage.img.height == 50){
        tester = reloadCacherImage.img.src;
        reloadCacherImage.img.src = '/images/default/gfx/blackdot.gif';
        reloadCacherImage.img.src = tester;                 
    }
    if(reloadCacherImage.img != null && reloadCacherImage.img.height > 5  && reloadCacherImage.img.height != 50){
        imgcacherimg = true;
    } else {
        imgcacherimg = false;
    }
    if(imgcacherimg || reloadCacherImage.reloads <= 1 || reloadCacherImage.img == null){
        reloadCacherImage.reloads = null;
        reloadCacherImage.img = null;        
        return;    
    }
    reloadCacherImage.reloads--;
    setTimeout(reloadCacherImage, 500);    
}

function reloadCacherImages()
{   
    if(imgcacherreloads < 1){
        return;
    }
    var images = document.getElementsByTagName('img');
    var tester;
    for (i = 0; i < images.length; i++){
        if(images[i].className.indexOf('expandable') > -1){
            EventsController.addEventListener(images[i], 'mouseover', expandListImage);
        }
        if(images[i].src.substr(0, imgcacherurl.length) == imgcacherurl && 
            (typeof(imgcacherimages[i]) == 'undefined' || !imgcacherimages[i]))
        {             
             if(images[i].height < 31 || images[i].height == 30){
                 tester = images[i].src;
                 images[i].src = '/images/default/gfx/blackdot.gif';
                 images[i].src = tester;                                 
             }
             if(images[i].height > 31  && images[i].height != 30){
                imgcacherimages[i] = true;
             } else {
                if(imgcacherimages[i] != true){
                    imgcacherimages[i] = false;
                }
             }                          
        }
    }
    var allimages = true;
    for (i = 0; i < images.length; i++){
        if(imgcacherimages[i] == false){
            allimages = false;
            break;
        }
    }
        
    imgcacherreloads--;
    if(allimages || imgcacherreloads <= 1){
        return;    
    }
    setTimeout(reloadCacherImages, 1000);    
}


function makeHoveredCars()
{
    var divs = document.getElementsByTagName('div');
    var i, div, j;
    for(i =0; i< divs.length; i++){
        div = divs[i];
        if(div.className == 'car'){
            div.style.cursor = "pointer";            
            recursiveAddHighliteOn(div);            
            EventsController.addEventListener(div, 'mouseout', highliteOff);
            EventsController.addEventListener(div, 'click', carGo);
        }

    }
}
function recursiveAddHighliteOn(node)
{
    var i;
    EventsController.addEventListener(node, 'mouseover', highliteOn);
    if(node.childNodes.length > 0){
        for(i = 0; i < node.childNodes.length; i++){
            recursiveAddHighliteOn(node.childNodes[i]);
        }
    }
    return ;
}


function highliteOn(e)
{
    var divs = document.getElementsByTagName('div');
    var i, div;
    for(i =0; i< divs.length; i++){
        div = divs[i];
        if(div.className == 'car highlite'){
            div.className = div.className.replace(' highlite', '');
        }
    }
    var targ = EventsController.getTarg(e);
    while((targ.nodeName != 'DIV' || targ.className.substr(0,3) != 'car') && targ.parentNode){
        targ = targ.parentNode;
    }
    if(targ.nodeName == 'DIV' && targ.className.substr(0,3) == 'car'){
        if(targ.className.indexOf(' highlite') == -1){
            targ.className = targ.className + ' highlite';
        }
    }
}

function highliteOff(e)
{
    var targ = EventsController.getTarg(e);
    if(targ.nodeName == 'DIV' && targ.className.substr(0,3) == 'car')
    {
        targ.className = targ.className.replace(' highlite', '');
    }
}

function carGo(e)
{
    var targ = EventsController.getTarg(e);
    var j;
    for(j =0 ; j< targ.childNodes.length; j++){
        if(targ.childNodes[j].nodeName == 'A'){
            window.location.href = targ.childNodes[j].href;
        }
    }
}

function divConfirm(domSrc, intWidth, intHeight, strLabel, strMessage, arrBtnLabels, arrBtnActions) {
    if(blnConfirmActive) return(false);
    blnConfirmActive = true;
    var div = document.createElement('DIV');
    div.id = 'divConfirm';
    var h5 = document.createElement('h5');
    h5.innerHTML = strLabel;
    div.appendChild(h5);
    var p = document.createElement('P');
    p.innerHTML = strMessage;
    div.appendChild(p);
    var button = null;
    for (var i=0; i<arrBtnLabels.length; i++) {
        button = document.createElement('INPUT');
        button.type = "button";
        button.value = arrBtnLabels[i];                        
        button.actionStr = arrBtnActions[i];
        EventsController.addEventListener(button, 'click', function(e){
                blnConfirmActive = false;        
                div.parentNode.removeChild(div);    
                var targ = EventsController.getTarg(e);
                eval(targ.actionStr);
            });
        div.appendChild(button);
    }
    domSrc.parentNode.appendChild(div);
}

function toggleRSDiv()
{
    // init
    if ( typeof toggleRSDiv.visibility == 'undefined' ) {
        toggleRSDiv.visibility = 0;
    } 
    if(toggleRSDiv.visibility == 0){
        //show
        document.getElementById('recentSearchesPopup').style.display="block";
        toggleRSDiv.visibility = 1;
    } else {
        //hide
        document.getElementById('recentSearchesPopup').style.display="none";
        toggleRSDiv.visibility = 0;
    }
}

function deleteAccount()
{
    var form = document.getElementById('editAccountForm');
    var input = document.createElement('input');
    input.type = "hidden";
    input.value = "delete";
    input.name = "deleteAccountJS";
    form.appendChild(input);
    form.action = "/auth/delete/";
    form.submit();
}
