﻿var BedrockCity = new Object();
BedrockCity.Utils = function() { };
BedrockCity.Utils.getQueryVar = function(key) {
    var query = window.location.search.substring(1);
    var vars = query.split("&");
    for (var i = 0; i < vars.length; i++) {
        var pair = vars[i].split("=");
        if (pair[0] == key) {
            return pair[1];
        }
    }
    return null;
}
BedrockCity.Utils.validateField = function (fieldID, valueToNotBe) {
	var field = $(fieldID);
	var isArray = false;
	if (valueToNotBe == null) {
		valueToNotBe = "";
	}
	else if (valueToNotBe.push) {
		//is an array
		isArray = true;
	}
	
	if (field) {
		if (isArray) {
			for (var i = 0; i < valueToNotBe.length; i++) {
				if (field.value == valueToNotBe[i])
					return false;
			}
		}
		else {
			if (field.value == valueToNotBe)
				return false;
		}
	}
	else {
		return false;
	}
	return true;
}

BedrockCity.Utils.validateConfirmation = function(fieldID1, fieldID2) {
	var field1 = $(fieldID1);
	var field2 = $(fieldID2);
	if (field1 == null || field2 == null)
		return false;
	if (field1.value == field2.value && field1.value != "")
		return true;
	else
		return false;
}

BedrockCity.Utils.formatPhoneNumber = function(e) {
    //OliverW: As of 05/08/2009 this script is untested
    var find = /.*?(\d{3}).*?(\d{3}).*?(\d{4}).*?/;
    var replace = /($1) $2-$3/;
    var element = Event.element(e);
    if (element) {
        var value = element.value.replace(/\D/g, '');
        value.replace(find, replace);
        element.value = value;
    }
}

BedrockCity.Utils.restrictToNumbersInput = function(e)
{
	var keyCode;
	var character;
	var regEx = /\d|-|\\|\/|\./;
	//ie uses window.event
	if (window.event)
	{
		keyCode = e.keyCode;
	}
	else
	{
		keyCode = e.which;
	}
	//ignore backspace and delete
	if (keyCode != 8 && keyCode != 0)
	{
		character = String.fromCharCode(keyCode);
		return regEx.test(character);
	}
	else
		return true;
}

BedrockCity.Utils.replaceIntegerParameter = function(parameterName, newValue, basePath) {
    if (basePath)
        var path = basePath;
    else
        var path = location.href;
    var rValue = new RegExp(parameterName + '=\\d+', 'g');
    if (rValue.test(path)) {
        path = path.replace(rValue, parameterName + "=" + newValue);
    }
    else {
        var appender = "?";
        if (path.indexOf("?") >= 0)
            appender = "&";
        path += appender + parameterName + "=" + newValue;
    }
    return path;
}

BedrockCity.Signup = function() { };
BedrockCity.Signup.currentSectionNumber = 1;
BedrockCity.Signup.sectionCount = 2;
BedrockCity.Signup.setSection = function(section, animate) {
    var currentSectionID = "part" + BedrockCity.Signup.currentSectionNumber;
    var newSectionID = "part" + section;

    for (var i = 1; i <= BedrockCity.Signup.sectionCount; i++) {
        var sectionObject = $("part" + i);
        if(sectionObject)
        {
            if (i != section && sectionObject.style.display != "none") {
                if (animate)
                    Effect.SlideUp("part" + i);
                else
                    sectionObject.style.display = "none";
            }
        }
    }
    try
    {
        if (animate)
            Effect.SlideDown(newSectionID);
        else
            $(newSectionID).style.display = "";
    }
    catch(err)
    {
        //
    }
}
BedrockCity.Signup.nextSection = function() {
    BedrockCity.Signup.currentSectionNumber++;
    BedrockCity.Signup.setSection(BedrockCity.Signup.currentSectionNumber, true);
}
BedrockCity.Signup.previousSection = function() {
    BedrockCity.Signup.currentSectionNumber--;
    BedrockCity.Signup.setSection(BedrockCity.Signup.currentSectionNumber, true);
}

BedrockCity.Signup.linkFields = new Array();
BedrockCity.Signup.syncLinkedFields = function(linkName, e) {
    Event.extend(e);
    var sourceElement = Event.element(e);
    for (var i = 0; i < BedrockCity.Signup.linkFields.length; i++) {
        var linkedFieldObject = BedrockCity.Signup.linkFields[i];
        if (linkedFieldObject.name == linkName) {
            if (linkedFieldObject.linkedField.fieldID == sourceElement.id) {
                linkedFieldObject.linkedField.isDirty = true;
            }
            linkedFieldObject.linkedField.setValue(sourceElement.value);
        }
    }
}
BedrockCity.Signup.LinkedField = function(linkName, fieldID) {
    this.linkedName = linkName;
    this.fieldID = fieldID;
    this.fieldObject = $(fieldID);
    BedrockCity.Signup.linkFields.push({ name: linkName, linkedField: this });
};
BedrockCity.Signup.LinkedField.prototype.linkedName = new String();
BedrockCity.Signup.LinkedField.prototype.fieldID = new String();
BedrockCity.Signup.LinkedField.prototype.fieldObject = null;
BedrockCity.Signup.LinkedField.prototype.isDirty = false;
BedrockCity.Signup.LinkedField.prototype.setValue = function(value, override) {
    if (this.fieldObject == null) {
        this.fieldObject = $(this.fieldID);
    }
    if (!this.isDirty || override) {
        if (this.fieldObject != null) {
            //if it's a select object
            if (this.fieldObject.options) {
                for (var i = 0; i < this.fieldObject.options.length; i++) {
                    if (this.fieldObject.options[i].text == value) {
                        this.fieldObject.options[i].selected = true;
                        break;
                    }
                }
            }
            else {
                this.fieldObject.value = value;
            }
        }
    }
}

BedrockCity.Signup.validateEmail = function(e, outputID, originalEmail) {
    var email = "";
    if (e.length) {
        //it's a string
        email = e;
    }
    else if (e != null && e != undefined && e != "") {
        //it's an event
        try {
            var src = Event.element(e);
            email = src.value;
        }
        catch (er) {
            if (window.event)
                email = window.event.srcElement.value;
            else
                return;
        }
    }
    else {
        return false;
    }
    var element = $(outputID);
    if (email != "" && email != originalEmail) {
        if (element)
            element.innerHTML = '<img src="images/loading.gif" />';
        //first check the syntax
        var regex = new RegExp("^(([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5}){1,25})+([;.](([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\.([a-zA-Z]{2,5}){1,25})+)*$");
        var isEmail = regex.test(email);
        if (isEmail) {
            var url = "ajax/is-email-available.aspx?email=" + encodeURIComponent(email);
            var request = new Ajax.Request(url, new BedrockCity.Signup.EmailValidation());
        }
        else {
            var url = "ajax/is-email-available.aspx?message=" + encodeURIComponent('"' + email + '" is not a valid email address.');
            var request = new Ajax.Request(url, new BedrockCity.Signup.EmailValidation());
            return false;
        }
    }
    else {
        if (element)
            element.innerHTML = "";
        return false;
    }
    return true;
}
BedrockCity.Signup.validateUsername = function(e, outputID) {
    var username = "";
    if (e.length) {
        //it's a string
        username = e;
    }
    else {
        //it's an event
        try {
            var src = Event.element(e);
            username = src.value;
        }
        catch (er) {
            if (window.event)
                username = window.event.srcElement.value;
            else
                return;
        }
    }
    var element = $(outputID);
    
    if (username != "") {
        if (element)
            element.innerHTML = '<img src="images/loading.gif" />';
        var url = "ajax/is-username-available.aspx?username=" + encodeURIComponent(username);
        var validationResponse = new BedrockCity.Signup.UsernameValidation();
        var request = new Ajax.Request(url, validationResponse);
    }
    else {
        if(element)
            element.innerHTML = "";
    }
}

BedrockCity.Signup.isEmailValid = null;
BedrockCity.Signup.isUsernameValid = null;

BedrockCity.Signup.UsernameValidation = function() { };
BedrockCity.Signup.UsernameValidation.prototype.method = "get";
BedrockCity.Signup.UsernameValidation.prototype.onSuccess = function(response) {
    var element = $("username_validation");
    element.innerHTML = response.responseText;
    if (response.reponseText.indexOf("<fail") > -1)
        BedrockCity.Signup.isUsernameValid = false;
    else if (response.responseText.indexOf("<okay") > -1)
        BedrockCity.Signup.isUsernameValid = true;
}
BedrockCity.Signup.EmailValidation = function() { };
BedrockCity.Signup.EmailValidation.prototype.method = "get";
BedrockCity.Signup.EmailValidation.prototype.onSuccess = function(response) {
    var element = $("email_validation");
    element.innerHTML = response.responseText;
    if (response.reponseText.indexOf("<fail") > -1)
        BedrockCity.Signup.isEmailValid = false;
    else if (response.responseText.indexOf("<okay") > -1)
        BedrockCity.Signup.isEmailValid = true;
}

BedrockCity.appendFailureMessage = function(message, containerID) {
    var container = $(containerID);
    if (container) {
        var messageContainer = document.createElement("div");
        messageContainer.setAttribute("class", "fail");
        var image = document.createElement("img");
        image.setAttribute("alt", "Failure");
        image.setAttribute("src", "images/checkmark2.png");
        var text = document.createElement("span");
        var innerText = document.createTextNode(message);
        text.appendChild(innerText);

        messageContainer.appendChild(image);
        messageContainer.appendChild(text);
        container.appendChild(messageContainer);
        return messageContainer;
    }
}

//Validation
BedrockCity.Validation = function (){};
BedrockCity.Validation.validateEmailIsInUse = function(e, outputID, existsMessage, unusedMessage) {
    var email = "";
    if (e.length) {
        //it's a string
        email = e;
    }
    else if (e != null && e != undefined && e != "") {
        //it's an event
        var src = Event.element(e);
        email = src.value;
    }
    else {
        return false;
    }
    var element = $(outputID);
    if (email != "") {
        if (element)
            element.innerHTML = '<img src="images/loading.gif" />';
        //first check the syntax
        var regex = new RegExp("^(([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5}){1,25})+([;.](([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\.([a-zA-Z]{2,5}){1,25})+)*$");
        var isEmail = regex.test(email);
        if (isEmail) {
            var url = "ajax/is-email-available.aspx?invert=true&fail_message=" + encodeURIComponent(unusedMessage) + "&okay_message=" + encodeURIComponent(existsMessage) + "&email=" + encodeURIComponent(email);
            var request = new Ajax.Request(url, new BedrockCity.Signup.EmailValidation());
        }
        else {
            var url = "ajax/is-email-available.aspx?message=" + encodeURIComponent('"' + email + '" is not a valid email address.');
            var request = new Ajax.Request(url, new BedrockCity.Signup.EmailValidation());
            return false;
        }
    }
    else {
        if (element)
            element.innerHTML = "";
        return false;
    }
    return true;
}


//ThumbnailViewer
BedrockCity.ThumbnailViewer = function(imageUrl, idOfToggler, idOfDisplayer, idOfDisplayerImage) {
    this.imageUrl = imageUrl;
    this.idOfToggler = idOfToggler;
    this.idOfDisplayer = idOfDisplayer;
    this.idOfDisplayerImage = idOfDisplayerImage;
    
    var toggler = $(this.idOfToggler);
    if (toggler)
    {
        toggler.style.cursor = "pointer";
        toggler.thumbnailViewer = this;
    }
}
BedrockCity.ThumbnailViewer.prototype.showText = "View thumbnail:";
BedrockCity.ThumbnailViewer.prototype.hideText = "Hide thumbnail:";
BedrockCity.ThumbnailViewer.prototype.imageUrl = "";
BedrockCity.ThumbnailViewer.prototype.idOfToggler = "";
BedrockCity.ThumbnailViewer.prototype.idOfDisplayer = "";
BedrockCity.ThumbnailViewer.prototype.idOfDisplayerImage = "";
BedrockCity.ThumbnailViewer.prototype.currentlyVisible = false;
BedrockCity.ThumbnailViewer.toggle = function(e){
    Event.extend(e);
    var target = Event.element(e);
    if (target)
    {
        var viewer = target.thumbnailViewer;
        Effect.toggle(viewer.idOfDisplayer, 'slide', {duration: 1.5});
        if (!viewer.currentlyVisible)
        {
            $(viewer.idOfToggler).innerHTML = viewer.showText;
            //$(viewer.idOfDisplayerImage).src = viewer.imageUrl;
        }
        else
        {
            $(viewer.idOfToggler).innerHTML = viewer.hideText;
        }
    }
}

//Shipping methods stuff
BedrockCity.Shipping = function(){};
BedrockCity.Shipping.calculateShipping = function(shippingMethodId, weight, subtotal, calculator) {
    if (calculator == null)
        calculator = new BedrockCity.Shipping.Calculator()
    var url = "ajax/get-shipping-weights.ashx?m=" + encodeURIComponent(shippingMethodId) + "&w=" + encodeURIComponent(weight) + "&st=" + encodeURIComponent(subtotal);
    var request = new Ajax.Request(url, calculator);
}
BedrockCity.Shipping.Calculator = function() { };
//these static values are used by the response object from ajax since it loses scope.
BedrockCity.Shipping.Calculator.shippingMethodId = "";
BedrockCity.Shipping.Calculator.merchTotalId = "";
BedrockCity.Shipping.Calculator.shippingTotalId = "";
BedrockCity.Shipping.Calculator.taxTotalId = "";
BedrockCity.Shipping.Calculator.grandTotalId = "";

BedrockCity.Shipping.Calculator.prototype.method = "get";
BedrockCity.Shipping.Calculator.prototype.onSuccess = function(response) {
    var merchTotal = $(BedrockCity.Shipping.Calculator.merchTotalId);
    var shippingTotal = $(BedrockCity.Shipping.Calculator.shippingTotalId);
    var taxTotal = $(BedrockCity.Shipping.Calculator.taxTotalId);
    var grandTotal = $(BedrockCity.Shipping.Calculator.grandTotalId);
    if (merchTotal && shippingTotal && taxTotal && grandTotal) {
        var merch = new Number(merchTotal.innerHTML);
        var shipping = new Number(response.responseText);
        var tax = new Number(taxTotal.innerHTML);
        var grand = merch + shipping + tax;
        shippingTotal.innerHTML = shipping.toFixed(2);
        grandTotal.innerHTML = grand.toFixed(2);
    }
}

BedrockCity.Shipping.Calculator.prototype.onFailure = function() {
    
}
