﻿/// <reference name="MicrosoftAjax.js" />

function find(id, tagName, o) {
    if (!o) { o = document; }
    var e = o.getElementsByTagName(tagName);
    var bestMatch = null;
    for (var i = 0; i < e.length; i++) {
        var pos = e[i].id.indexOf('_' + id);
        if (pos > -1) {
            if (e[i].id.indexOf('_' + id) == e[i].id.length - id.length - 1) { return e[i]; }
            if (e[i].id.indexOf(id) == e[i].id.length - id.length) {
                bestMatch = e[i];
            } else if (!bestMatch && e[i].id.indexOf(id) > -1) {
                bestMatch = e[i];
            }
        } else if (!bestMatch && e[i].id.indexOf(id) > -1) {
            bestMatch = e[i];
        }
    }
    
    return bestMatch;
}

function getChildNodes(el, tagName) {
    var els = new Array();
    for (var i = 0; i < el.childNodes.length; i++) {
        if (el.childNodes[i].tagName == tagName.toUpperCase()) {
            els[els.length] = el.childNodes[i];
        }
    }
    return els;
}

var _uniqueIDIndex = 0;
function getUniqueID(el) {
    if (el.id == '') { el.id = '__jsUniqueID' + _uniqueIDIndex++; }
}

function removeElement(el, timeout) {
    if (timeout) {
        getUniqueID(el);
        removeElementById(el.id, timeout);
    } else {
        el.parentNode.removeChild(el);
    }
}

function removeElementById(id, timeout) {
    if (timeout) {
        setTimeout('removeElementById("' + id + '")', timeout);
    } else {
        removeElement($get(id));
    }
}
function search() {
    var btnGO = $get('go');
    var divSearchBar = $get('divSearchBar');
    var txtSearch = find('txtSearch', 'INPUT', divSearchBar);
    var ddlCategory = find('ddlCategory', 'SELECT', divSearchBar);
    var url = '/Listing/Search.aspx?s=' + escape(txtSearch.value);
    var categoryID = ddlCategory.options[ddlCategory.selectedIndex].value;
    if (categoryID > 0) {
        url += "&cat=" + categoryID;
    }
    var rbRegion = find('rbRegion', 'INPUT', $get('searchBar'));
    url += rbRegion.checked ? "&t=region" : "&t=nz";
    document.location = url;
}

function updateCount(textBoxId, charCountId, limit, limitErrorMessage) {
    var charCount = $get(charCountId);
    var textBox = $get(textBoxId);

    var charLength = textBox.value.length;

    charCount.innerText = charLength;

    if (charLength > limit) {
        var string = textBox.value.substring(0, limit);
        textBox.value = string;
        alert(limitErrorMessage);
        charCount.innerText = string.length;
    }
}

var _isChangeRegionLoaded = false;
function showChangeRegion() {
    var divChangeRegion = find('divChangeRegion', 'DIV', $get('region').parentNode);
    divChangeRegion.style.visibility = divChangeRegion.style.visibility == 'visible' ? 'hidden' : 'visible';
    if (_isChangeRegionLoaded) {
        return false;
    } else {
        _isChangeRegionLoaded = true;
        return true;
    }
}

function GE(id) {
    return document.getElementById(id);
}

function notCert()
{
    document.write('This listing does NOT have a recognised third party, environmental or social management system or product label.');
}

var _listingCriterias = new Array();
var _listingIDs = new Array();
function loadListingRatings(id) {
    var divs = $get(id).getElementsByTagName('DIV');
    for (var i = 0; i < divs.length; i++) {
        var div = divs[i];
        if (div.className != 'criteria')
            continue;

        var divCriterias = div.getElementsByTagName('DIV');
        for (var j = 0; j < divCriterias.length; j++) {
            $addHandlers(divCriterias[j], {
                mouseover: listingCriteriaMouseover,
                mouseout: listingCriteriaMouseout
            });        
        }
    }
}

var _criteriaElOver = null;
function listingCriteriaMouseover() {
    _criteriaElOver = this;
    var listingID = this.parentNode.getElementsByTagName('INPUT')[0].value;
    for (var i = 0; i < _listingCriterias.length; i++) {
        if (_listingCriterias[i].ListingID == listingID) {
            showCriteria(this, _listingCriterias[i]);
            return;
        }
    }

    showCriteriaLoading(this);
    if (!Array.contains(_listingIDs, listingID)) {
        ListingService.GetListingCriteria(listingID, getListingCriteria_Success, getListingCriteria_Failed, null);
        Array.add(_listingIDs, listingID);
    }
}

function listingCriteriaMouseout() {
    _criteriaElOver = null;
    $get('criteriaInfo').style.visibility = 'hidden';
}

function getListingCriteria_Success(result, args) {
    _listingCriterias[_listingCriterias.length] = result;
    if (_criteriaElOver) {
        var listingID = _criteriaElOver.parentNode.getElementsByTagName('INPUT')[0].value;
        if (listingID == result.ListingID)
            showCriteria(_criteriaElOver, result);
    }
}

function getListingCriteria_Failed() { }

function whatDoTheIconsMean(criteria, div) {
    var criteriaInfo = $get('criteriaInfo');
    showCriteriaLoading(div);
    var text;
    switch (criteria) {
        case 'cyclic': text = '<b>Cyclic</b>Comes from renewable materials, creates no waste, is compostable, repairable, reusable, or recyclable.'; break;
        case 'solar': text = '<b>Solar</b>Has low embodied energy as it is made from, or runs on renewable energy e.g. solar, hydro, wind.<br />(Currently in New Zealand 65% of our energy comes form renewable sources).'; break;
        case 'efficient': text = '<b>Efficient</b>Uses less resources; either through locally sourcing of materials, in its design and manufacture, packaging or distribution, includes kiwi made, long life products, & website sales.'; break;
        case 'safe': text = '<b>Safe</b>Safe to use and dispose of. Does not contain or generate hazardous materials or by-products for humans or nature, or enhances biodiversity.'; break;
        case 'social': text = '<b>Social</b>Cares for people & the environment. Made locally, or with fair trade practices with staff and community wellbeing in mind, and/or encourages sustainability behaviours.'; break;
        default: text = '<b>Certified</b>The listing has a recognised third party, environmental or social management system or product label.'; break;
    }
    criteriaInfo.innerHTML = text;
    criteriaInfo.style.backgroundImage = 'none';
}

function showCriteriaLoading(div) {
    var criteriaInfo = $get('criteriaInfo');
    criteriaInfo.innerHTML = '';
    positionCriteriaInfo(div, criteriaInfo);
    criteriaInfo.style.backgroundImage = '';
}

function showCriteria(div, listingCriteria) {
    var criteriaInfo = $get('criteriaInfo');

    var html;
    var className = div.className;
    var format = '<b>{0}: {1}%</b>{2}';
    var noDescText = 'No description has been provided for this criteria';
    if (className.startsWith('cyclic')) {
        html = String.format(format,
            'Cyclic',
            listingCriteria.CriteriaCyclic,
            listingCriteria.CriteriaCyclicDescription.trim() == '' ? noDescText : listingCriteria.CriteriaCyclicDescription);
    } else if (className.startsWith('renewable')) {
        html = String.format(format,
            'Solar',
            listingCriteria.CriteriaRenewableEnergy,
            listingCriteria.CriteriaRenewableEnergyDescription.trim() == '' ? noDescText : listingCriteria.CriteriaRenewableEnergyDescription);    
    } else if (className.startsWith('efficient')) {
        html = String.format(format,
            'Efficient',
            listingCriteria.CriteriaEfficient,
            listingCriteria.CriteriaEfficientDescription.trim() == '' ? noDescText : listingCriteria.CriteriaEfficientDescription);        
    } else if (className.startsWith('social')) {
        html = String.format(format,
            'Social',
            listingCriteria.CriteriaSocial,
            listingCriteria.CriteriaSocialDescription.trim() == '' ? noDescText : listingCriteria.CriteriaSocialDescription);    
    } else if (className.startsWith('safe')) {
        html = String.format(format,
            'Safe',
            listingCriteria.CriteriaSafeAndHealthy,
            listingCriteria.CriteriaSafeAndHealthyDescription.trim() == '' ? noDescText : listingCriteria.CriteriaSafeAndHealthyDescription);
    } else if (className.startsWith('certified')) {
        var images = '';
        for (var i = 0; i < listingCriteria.CertificationImages.length; i++) {
            images += '<p style="text-align: center;">' + listingCriteria.CertificationImages[i] + '</p>';
        }
        
        if (listingCriteria.CertificationImages.length > 1)
            html = '<b style="font-size:12px">Certification</b>This listing has the following third party certifications:' + images;
        if (listingCriteria.CertificationImages.length > 0)
            html = '<b style="font-size:12px">Certification</b>This listing has the following third party certification:' + images;
        else
            html = '<b style="font-size:12px">Certification</b>This listing does not have any of our recognised 3rd party certifications.';
    }

    criteriaInfo.innerHTML = html;
    positionCriteriaInfo(div, criteriaInfo);
}

function positionCriteriaInfo(div, criteriaInfo) {
    var divBounds = Sys.UI.DomElement.getBounds(div);
    var criteriaInfoBounds = Sys.UI.DomElement.getBounds(criteriaInfo);
    criteriaInfo.style.left = divBounds.x + 'px';
    criteriaInfo.style.top = (divBounds.y - criteriaInfoBounds.height) + 'px';
    criteriaInfo.style.backgroundImage = 'none';
    criteriaInfo.style.visibility = 'visible';
}

if (typeof (Sys) !== 'undefined') {
    Sys.Application.notifyScriptLoaded();
}