window.onerror = errorHandler;

function errorHandler(message, url, line) 
{
    var xhr;
    if (window.ActiveXObject)
    { xhr = new ActiveXObject("Microsoft.XMLHTTP"); }
    else if (window.XMLHttpRequest) { xhr = new XMLHttpRequest(); }
    var regExRoot = /(http\:\/\/[^\/]+\/[^\/]+)/gi;
    var ar = regExRoot.exec(window.location);

    if (ar[1]) {
        xhr.open("get", ar[1] + "/LogClientError.aspx?error=" + encodeURIComponent(message) + "&url=" + encodeURIComponent(url) + "&line=" + encodeURIComponent(line), true);
        xhr.send();
    }
    
}

////////////////////////////////
//Paging Methods
////////////////////////////////
var RELEASE_LIST_MODE = 0;
var RELEASE_VIEW_MODE = 1;
var ARTIST_VIEW_MODE = 2;
var LABEL_VIEW_MODE = 3;
var RELEASE_LIST2_MODE = 4;
var SEARCH_MODE = 5;

var pageMode = RELEASE_LIST_MODE;
var viewMode = 'release';
var currentGenreId = '-1';
var currentSubGenreId = '-1';
var currentSubGenreText = 'all';

var currentPage = 1;
var numOfPages = 1;
var genreId = -1;
var addressStem = '';
var ticks = -1;
var contextId = -1;
var newwindow = '';
var EMPTY_CART = 'EmptyCart.aspx';
var PAYMENT_METHOD = 'PaymentPoint.aspx?method=cc';
var LOGIN_REQUIRED = 'LoginRequired.aspx';
var __userState = 'false';
var targetWindow;
var __defaultQ = 1;
var lastNumber;

function rt(buttonId, messageControl) 
{
    var button = document.getElementById(buttonId);

    if (button) {
        button.className = 'hideItem';
    }

    if (document.getElementById('submitMessage')) {
        document.getElementById('submitMessage').className = 'showItem';
    }

    var messageCtl = document.getElementById(messageControl);
    if (messageCtl) {
        if (messageCtl.childNodes[0]) {
            messageCtl.childNodes[0].nodeValue = '';
        }
        
        if (messageCtl.value) {
            messageCtl.value = '';
        }
        
        if (messageCtl.innerHTML) {
            messageCtl.innerHTML = '';
        }
    }
}

function toggleLoader(on) {
    //if (on) {document.getElementById('loader').className = 'viewLoader';}
    //else {document.getElementById('loader').className = 'hideLoader';}
}

function popitup(url) {
    if (!newwindow.closed && newwindow.location) { newwindow.location.href = url; }
    else { newwindow = window.open(url, 'name', 'height=400,width=400'); if (!newwindow.opener) newwindow.opener = self; }
    if (window.focus) { newwindow.focus() }
    return false;
}

function d(clientId, id){$get(clientId).value = id;__doPostBack(clientId,'');$get(clientId).value = '';}

function openTarget(url){openTarget(url, 'targetWindow');}

function openTarget(url, windowName)
{
    targetWindow = window.open(url, windowName,'location=no,status=no,resizable=no,scrollbars=0,width=50,height=50,toolbar=0');
    if (targetWindow) {
        targetWindow.moveTo(0, 0);
        setTimeout('closePopup();', 1000);
 
    }
    else {
        alert('Please enable popups'); 
    }
}

function openZipTarget(url, windowName) {
    targetWindow = window.open(url, windowName, 'location=center,status=no,resizable=no,scrollbars=0,width=440,height=440,toolbar=0');
    if (!targetWindow) {
        alert('Please enable popups');
    }
}

// Close Window
function closePopup()
{
    if (targetWindow)
        targetWindow.close();
}

// Purchase code
function MakePurchase(context) {
    var pp = '_pm.aspx/AddToCart';
    toggleLoader(true);
    DoAjax(pp, ["context", context, "quantityValue", __defaultQ], _pcd, _pee);
}

function _pcd(result) {

    if (result.d) {
        
        if (result.d.HasError) {
            alert(result.d.Message);
        }
        else {
            var _cc = result.d.CartCost;
            var cc = document.getElementById('CartCost');

            if (cc && _cc) {
                cc.innerText = 'AUD $' + _cc;
                cc.innerHTML = 'AUD $' + _cc;
            }

            var _cic = result.d.CartItemCount;
            var cic = document.getElementById('CartItemCount');

            if (cic && _cic) {
                cic.innerText = _cic;
                cic.innerHTML = _cic;

                createLinks(_cic);
            }
            $('#notify').jGrowl(result.d.Message);
        }
        toggleLoader(false);
    }
}

function createLinks(count) {
    var pl = document.getElementById('UCCPWV_btnCheckout');
    if (pl) {
        if (__userState == 'true') {
            pl.href = count == '0' ? EMPTY_CART : PAYMENT_METHOD;

            if (count != '0') {
                if(pl.className)
                    pl.className = '';
            }
        }
        else {
            pl.href = LOGIN_REQUIRED;
        }
    }
}

function _pee(result) {
    if (result) {
        alert('unable to add item at this time');
    }
    toggleLoader(false);
}

function DoAjax(t, pa, as, af) {
    var pl = '';
    if (pa && pa.length > 0) {
        for (var i = 0; i < pa.length; i += 2) {
            if (pl.length > 0) { pl += ','; }
            pl += '"' + pa[i] + '":"' + pa[i + 1] + '"';
        }
    }
    pl = '{' + pl + '}';
    $.ajax({type: "POST", url: t, contentType: "application/json; charset=utf-8", data: pl, dataType: "json", success: as, error: af});
}

function DoAjaxWCF(t, pa, as, af) {
    var pl = "p=" + json2string(pa);
    $.ajax({ type: "POST", url: t, contentType: "application/json; charset=utf-8", data: pl, dataType: "json", success: as, error: af });
}

function json2string(strObject) {
    var c, i, l, s = '', v, p;

    switch (typeof strObject) {
        case 'object':
            if (strObject) {
                if (strObject.length && typeof strObject.length == 'number') {
                    for (i = 0; i < strObject.length; ++i) {
                        v = json2string(strObject[i]);
                        if (s) {
                            s += ',';
                        }
                        s += v;
                    }
                    return '[' + s + ']';
                } else if (typeof strObject.toString != 'undefined') {
                    for (i in strObject) {
                        v = strObject[i];
                        if (typeof v != 'undefined' && typeof v != 'function') {
                            v = json2string(v);
                            if (s) {
                                s += ',';
                            }
                            s += json2string(i) + ':' + v;
                        }
                    }
                    return '{' + s + '}';
                }
            }
            return 'null';
        case 'number':
            return isFinite(strObject) ? String(strObject) : 'null';
        case 'string':
            l = strObject.length;
            s = '"';
            for (i = 0; i < l; i += 1) {
                c = strObject.charAt(i);
                if (c >= ' ') {
                    if (c == '\\' || c == '"') {
                        s += '\\';
                    }
                    s += c;
                } else {
                    switch (c) {
                        case '\b':
                            s += '\\b';
                            break;
                        case '\f':
                            s += '\\f';
                            break;
                        case '\n':
                            s += '\\n';
                            break;
                        case '\r':
                            s += '\\r';
                            break;
                        case '\t':
                            s += '\\t';
                            break;
                        default:
                            c = c.charCodeAt();
                            s += '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16);
                    }
                }
            }
            return s + '"';
        case 'boolean':
            return String(strObject);
        default:
            return 'null';
    }
}

function validateLogin() {
    var success = true;

    return success;
}

/////////////////////////////////////
// Carousel initialisation
/////////////////////////////////////
function mycarousel_initCallback(carousel) {
    // Disable autoscrolling if the user clicks the prev or next button.
    carousel.buttonNext.bind('click', function() {
        carousel.startAuto(0);
    });

    carousel.buttonPrev.bind('click', function() {
        carousel.startAuto(0);
    });

    // Pause autoscrolling if the user moves with the cursor over the clip.
    carousel.clip.hover(function() {
        carousel.stopAuto();
    }, function() {
        carousel.startAuto();
    });
};

function setContext(pm, cid) {
    pageMode = pm;
    contextId = cid;
}

function changeGenre() {
    currentGenreId = $(this).attr("selectedIndex");
    firstPage();
}

function changeSubGenre(sgid, titleText) {
    currentSubGenreId = sgid;
    currentSubGenreText = titleText;

    firstPage();

    var titleElement = document.getElementById('ctl00_pc_UCReleaseListController_UCRLWV_hlNavigate');

    if (titleElement) {
        titleElement.innerText = currentSubGenreText;
        titleElement.innerHTML = currentSubGenreText;
    }
}

function resetList(vm) {
    currentPage = 1;
    viewMode = vm

    if (viewMode == 'release') {
        $("#vmTrack").removeClass("selected");
        $("#vmRelease").addClass("selected");
    }
    else if (viewMode == 'track') {
        $("#vmRelease").removeClass("selected");
        $("#vmTrack").addClass("selected");
    }
    $("#PB2").text('1');
    firstPage();
    return false;
}

function nextPage() {
    if (currentPage < numOfPages) {
        currentPage++;
        changePage();
    }
}

function previousPage() {
    if (currentPage > 1) {
        currentPage--;
        changePage();
    }
}

function firstPage() {
    currentPage = 1;
    changePage();
}

function lastPage() {
    currentPage = numOfPages;
    changePage();
}

function updateCurrentPage() {
    var element = document.getElementById('PB2');
    if (element) { element.innerHTML = currentPage; }
}

function changePage() {
    updateCurrentPage();
    if (viewMode == 'release')
        ReleaseList(["pageNumber", currentPage, "pageMode", pageMode, "contextId", contextId, "genreId", currentGenreId, "subGenreId", currentSubGenreId], rch, reh)
    else if (viewMode == 'orderitementity')
        DownloadList(["pageNumber", currentPage, "pageMode", pageMode], dlch, dleh)
}

// Release List methods
function ReleaseList(pa, as, af) {
    var pp = '_pm.aspx/GetReleases';
    toggleLoader(true);
    DoAjax(pp, pa, as, af);
}

function rch(result) {
    toggleLoader(false);

    if (result.d) {
        // Set the total page count here
        numOfPages = result.d.PageCount;
        $("#PB3").text(result.d.PageCount);
        
        if (result.d.Content) {
            document.getElementById('_relList').innerHTML = result.d.Content;
        }
    }
}

function reh(result) {
    toggleLoader(false);
    if (result) {
        alert('Ooops unable to load the release list at this time');
    }
}

// Download List methods
function DownloadList(pa, as, af) {
    var pp = '_pm.aspx/GetDownloads';
    toggleLoader(true);
    DoAjax(pp, pa, as, af);
}

function dlch(result) {
    toggleLoader(false);

    if (result.d) {
        numOfPages = result.d.PageCount;
        $("#PB3").text(result.d.PageCount);
        if (result.d.Content) {
            document.getElementById('_relList').innerHTML = result.d.Content;
        }
    }
}

function dleh(result) {
    toggleLoader(false);
    if (result) {
        alert('Ooops unable to load the pending download list at this time');
    }
}

var isIE = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;

function ControlVersion() {
    var version;
    var axo;
    var e;

    try {
        axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
        version = axo.GetVariable("$version");
    } catch (e) {
    }

    if (!version) {
        try {
            axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
            version = "WIN 6,0,21,0";
            axo.AllowScriptAccess = "always";
            version = axo.GetVariable("$version");
        } catch (e) {
        }
    }

    if (!version) {
        try {
            axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
            version = axo.GetVariable("$version");
        } catch (e) {
        }
    }

    if (!version) {
        try {
            axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
            version = "WIN 3,0,18,0";
        } catch (e) {
        }
    }

    if (!version) {
        try {
            axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
            version = "WIN 2,0,0,11";
        } catch (e) {
            version = -1;
        }
    }

    return version;
}

function GetSwfVer() {
    var flashVer = -1;

    if (navigator.plugins != null && navigator.plugins.length > 0) {
        if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
            var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
            var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
            var descArray = flashDescription.split(" ");
            var tempArrayMajor = descArray[2].split(".");
            var versionMajor = tempArrayMajor[0];
            var versionMinor = tempArrayMajor[1];
            var versionRevision = descArray[3];
            if (versionRevision == "") {
                versionRevision = descArray[4];
            }
            if (versionRevision[0] == "d") {
                versionRevision = versionRevision.substring(1);
            } else if (versionRevision[0] == "r") {
                versionRevision = versionRevision.substring(1);
                if (versionRevision.indexOf("d") > 0) {
                    versionRevision = versionRevision.substring(0, versionRevision.indexOf("d"));
                }
            }
            var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
        }
    }
    // MSN/WebTV 2.6 supports Flash 4
    else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
    // WebTV 2.5 supports Flash 3
    else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
    // older WebTV supports Flash 2
    else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
    else if (isIE && isWin && !isOpera) {
        flashVer = ControlVersion();
    }
    return flashVer;
}

// When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision) {
    versionStr = GetSwfVer();
    if (versionStr == -1) {
        return false;
    } else if (versionStr != 0) {
        if (isIE && isWin && !isOpera) {
            // Given "WIN 2,0,0,11"
            tempArray = versionStr.split(" "); 	// ["WIN", "2,0,0,11"]
            tempString = tempArray[1]; 		// "2,0,0,11"
            versionArray = tempString.split(","); // ['2', '0', '0', '11']
        } else {
            versionArray = versionStr.split(".");
        }
        var versionMajor = versionArray[0];
        var versionMinor = versionArray[1];
        var versionRevision = versionArray[2];

        // is the major.revision >= requested major.revision AND the minor version >= requested minor
        if (versionMajor > parseFloat(reqMajorVer)) {
            return true;
        } else if (versionMajor == parseFloat(reqMajorVer)) {
            if (versionMinor > parseFloat(reqMinorVer))
                return true;
            else if (versionMinor == parseFloat(reqMinorVer)) {
                if (versionRevision >= parseFloat(reqRevision))
                    return true;
            }
        }
        return false;
    }
}

function AC_AddExtension(src, ext) {
    if (src.indexOf('?') != -1)
        return src.replace(/\?/, ext + '?');
    else
        return src + ext;
}

function AC_Generateobj(objAttrs, params, embedAttrs) {
    var str = '';
    if (isIE && isWin && !isOpera) {
        str += '<object ';
        for (var i in objAttrs) {
            str += i + '="' + objAttrs[i] + '" ';
        }
        str += '>';
        for (var i in params) {
            str += '<param name="' + i + '" value="' + params[i] + '" /> ';
        }
        str += '</object>';
    }
    else {
        str += '<embed ';
        for (var i in embedAttrs) {
            str += i + '="' + embedAttrs[i] + '" ';
        }
        str += '> </embed>';
    }

    document.write(str);
}

function AC_FL_RunContent() {
    var ret =
    AC_GetArgs
    (arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
     , "application/x-shockwave-flash"
    );
    AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}

function AC_SW_RunContent() {
    var ret =
    AC_GetArgs
    (arguments, ".dcr", "src", "clsid:166B1BCA-3F9C-11CF-8075-444553540000"
     , null
    );
    AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}

function AC_GetArgs(args, ext, srcParamName, classid, mimeType) {
    var ret = new Object();
    ret.embedAttrs = new Object();
    ret.params = new Object();
    ret.objAttrs = new Object();
    for (var i = 0; i < args.length; i = i + 2) {
        var currArg = args[i].toLowerCase();

        switch (currArg) {
            case "classid":
                break;
            case "pluginspage":
                ret.embedAttrs[args[i]] = args[i + 1];
                break;
            case "src":
            case "movie":
                args[i + 1] = AC_AddExtension(args[i + 1], ext);
                ret.embedAttrs["src"] = args[i + 1];
                ret.params[srcParamName] = args[i + 1];
                break;
            case "onafterupdate":
            case "onbeforeupdate":
            case "onblur":
            case "oncellchange":
            case "onclick":
            case "ondblClick":
            case "ondrag":
            case "ondragend":
            case "ondragenter":
            case "ondragleave":
            case "ondragover":
            case "ondrop":
            case "onfinish":
            case "onfocus":
            case "onhelp":
            case "onmousedown":
            case "onmouseup":
            case "onmouseover":
            case "onmousemove":
            case "onmouseout":
            case "onkeypress":
            case "onkeydown":
            case "onkeyup":
            case "onload":
            case "onlosecapture":
            case "onpropertychange":
            case "onreadystatechange":
            case "onrowsdelete":
            case "onrowenter":
            case "onrowexit":
            case "onrowsinserted":
            case "onstart":
            case "onscroll":
            case "onbeforeeditfocus":
            case "onactivate":
            case "onbeforedeactivate":
            case "ondeactivate":
            case "type":
            case "codebase":
            case "id":
                ret.objAttrs[args[i]] = args[i + 1];
                break;
            case "width":
            case "height":
            case "align":
            case "vspace":
            case "hspace":
            case "class":
            case "title":
            case "accesskey":
            case "name":
            case "tabindex":
                ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i + 1];
                break;
            default:
                ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i + 1];
        }
    }
    ret.objAttrs["classid"] = classid;
    if (mimeType) ret.embedAttrs["type"] = mimeType;
    return ret;
}

function allowOnlyNumeric(obj) {
    if (window.event) {
        var key = window.event.keyCode;

        if (key > 47 && key < 58) // 09.,-
        {
            lastNumber = key;
            return;
        }
        else {
            // If it was not, then dispose the key and continue with entry
            window.event.returnValue = null;
        }
    }
}

function validateNumeric(node) {
    var isValid = node && node.value.length > 0;

    // Do a regexp on the string
    if (isValid) {
        node.className = 'fieldqty'
    }
    else {
        node.className = 'fieldqty2'
        $('#notify').jGrowl('Please enter a valid quantity');
        node.focus();
    }

    return isValid;
}

function doUpdate() {

    var updateKey = '';

    $("input[name='qty']").each(function(i) {
        
        var oid = $(this).attr("oid");

        if (oid && oid.length > 0) {
            if (updateKey.length > 0) { updateKey += ';'; }
            updateKey += (oid + '|' + $(this).val());

        }
    });

    if (updateKey.length > 0) {
        UpdateOrderItem(updateKey);
    }

    return false;
}

// Purchase code
function UpdateOrderItem(context) 
{
    var pp = '_pm.aspx/UpdateCartItem';
    
    toggleLoader(true);
    DoAjax(pp, ["context", context], _uoi, _uoe);
}

function _uoi(result) {
    window.location.reload();
}

function _uoe(result) 
{
    if (result) 
    {
        alert('unable to update cart item at this time');
    }
}

function st(target) {
    $(document).ready(function() {
        $('html, body').animate({ scrollTop: $(target).offset().top + 400}, 1000);
    });
}

function buyExtra(etdid) {
    var q = $('#qty' + etdid).attr("value");
    var context = $('tr[ticketid=' + etdid + ']').attr("context");
    var pp = '_pm.aspx/AddToCart';
    toggleLoader(true);
    DoAjax(pp, ["context", context, "quantityValue", q], _pcd, _pee);
}
