﻿/// <reference path="yui/yahoo.js" />
/// <reference path="yui/event.js" />
/// <reference path="yui/dom.js" />
/// <reference path="yui/container.js" />
/// <reference path="yui/connection.js" />

var $ = YAHOO.util.Dom.get;
var $$ = YAHOO.util.Dom.getChildren;

// Default AtHome namespaces
if (typeof AtHome == "undefined" || !AtHome) {
    var AtHome = {};
}
AtHome.Forms = AtHome.Forms || {};
AtHome.Forms.Validation = AtHome.Forms.Validation || {};
AtHome.Forms.Helpers = AtHome.Forms.Helpers || {};
AtHome.Widgets = AtHome.Widgets || {};
AtHome.States = AtHome.States || {modal:false, isAuthenticated:false};
AtHome.Data = AtHome.Data || {};

AtHome.Data.AjaxResult = function() {
    this.success = new Boolean();
    this.message = new String();
    this.errorid = new Number();
}

AtHome.Widgets.doPWRecoverModal = function () 
{    
    YAHOO.util.Connect.asyncRequest("post", "/security/RecoverPassword/", {success: function(o){
	    document.body.className += " yui-skin-sam";		
	    errorMessage = new YAHOO.widget.Panel("modal",{
		    width: "600px",  
		    close:false,
		    fixedcenter : true,  
		    modal:true, 
		    visible:false
	    });		    
	    errorMessage.setBody(o.responseText + "<br/><input id='Validation_PanelClose' type='button' value='OK' style='width:100px' />"); 
	    YAHOO.util.Event.addListener("Validation_PanelClose", "click", errorMessage.destroy, errorMessage, true);			    
	    errorMessage.render(document.body);
	  
	    errorMessage.show();	    
    }}, "email=" + $('email').value);
}

AtHome.Widgets.doItemModal = function(url, options){    
    if(AtHome.States.modal) return;
    else// prevent them from performing another request (eg, accidently clicking an item twice before the first request comes back)
        AtHome.States.modal = true;
    
    var onGetItem = function(o) {        
        if (o.responseText !== undefined) {
            var result = YAHOO.lang.JSON.parse(o.responseText);                                    
            
            var itemModal = new YAHOO.widget.Panel("itemModal", {
                close: false,
                visible: false,
                draggable: false,
                fixedcenter: true,
                modal: true,
                width: "350px"
            });
            
            if(result.statusCode == 200){            
                // declare modal elements----------------------------------------------------------
                var modalDiv = document.createElement("div");                
                var descriptionDiv = document.createElement("div");
                var imageDiv = document.createElement("div");
                var image = document.createElement("image");
                var detailDiv = document.createElement("div");
                var spacerDiv = document.createElement("div");
                var qty = document.createElement("input");
                var addBtn = document.createElement("input");
                var updateBtn = document.createElement("input");
                var removeBtn = document.createElement("input");
                var closeBtn = document.createElement("input");
                
                // set some attributes-------------------------------------------------------------
                modalDiv.setAttribute("id", "itemModal");
                descriptionDiv.setAttribute("class", "description");                
                imageDiv.setAttribute("class", "left");
                detailDiv.setAttribute("class", "detail");
                spacerDiv.setAttribute("class", "clr");
                spacerDiv.innerHTML = "&nbsp;";
                qty.setAttribute("size", "2");
                qty.setAttribute("type", "text");                
                qty.setAttribute("maxlength", "4");
                qty.setAttribute("id", "itemModal_qty");
                
                addBtn.setAttribute("type", "button");
                addBtn.setAttribute("class", "button");
                addBtn.setAttribute("value", "Add");
                addBtn.setAttribute("id", "itemModal_addBtn");                
                
                updateBtn.setAttribute("type", "button");
                updateBtn.setAttribute("class", "button");
                updateBtn.setAttribute("value", "Update");
                updateBtn.setAttribute("id", "itemModal_updateBtn");                
                
                removeBtn.setAttribute("type", "button");
                removeBtn.setAttribute("class", "buttons");
                removeBtn.setAttribute("value", "Remove");
                removeBtn.setAttribute("id", "itemModal_removeBtn");                
                
                closeBtn.setAttribute("type", "button");
                closeBtn.setAttribute("class", "button");
                closeBtn.setAttribute("value", "Close");
                closeBtn.setAttribute("id", "itemModal_closeBtn");                

                // build the modal---------------------------------------------------------------------                
                descriptionDiv.innerHTML = result.description;
                image.setAttribute("src", result.imageUrl);                
                imageDiv.appendChild(image);
                detailDiv.innerHTML += '<p><label>Item: </label><span>' + result.itemid + '</span></p>';            
                var pricing ='<p><label>Price: </label><span>$' + (result.saleprice > 0?  "<strike>" : "") + result.price + (result.saleprice > 0?  "</strike>" : "") + '</span>';
                if(result.saleprice > 0)
                    pricing += '<span style="font-weight:bold; color:Red;"> $' + result.saleprice + '</span>';
                pricing += '</p>';
                detailDiv.innerHTML += pricing;
                
                if(AtHome.States.canShop)
                {
                    qty.setAttribute("value", result.quantity);
                    var temp = document.createElement("div");
                    temp.appendChild(qty);
                    detailDiv.innerHTML += '<p><label>Quantity: </label><span>' + temp.innerHTML + '</span></p>';
                }
                if(options && options.description){
                    modalDiv.appendChild(descriptionDiv);                
                    modalDiv.innerHTML += "<br/>";
                }
                if(options && options.image)
                    modalDiv.appendChild(imageDiv);
                if(options && options.detail){
                    modalDiv.appendChild(detailDiv);
                    modalDiv.appendChild(spacerDiv);
                    modalDiv.innerHTML += "<br/>";
                }                                
                if(options && options.add && AtHome.States.canShop){                    
                    YAHOO.util.Event.addListener(addBtn, "click", function(){AtHome.States.modal = false;}, null, false);
                    YAHOO.util.Event.addListener(addBtn, "click", function(a){                        
                        var q = $('itemModal_qty').value;
                        itemModal.destroy();                        
                        onItemAdd(result.itemid, q);
                    }, itemModal, true);                    
                    modalDiv.appendChild(addBtn);                 
                }
                if(options && options.update){                
                    YAHOO.util.Event.addListener(updateBtn, "click", function(){AtHome.States.modal = false;}, null, false);
                    YAHOO.util.Event.addListener(updateBtn, "click", function(a){                        
                        var q = $('itemModal_qty').value;
                        itemModal.destroy();                        
                        onItemUpdate(result.itemid, q);
                    }, itemModal, true);         
                    modalDiv.appendChild(updateBtn);                    
                }
                if(options && options.remove){
                    YAHOO.util.Event.addListener(removeBtn, "click", function(){AtHome.States.modal = false;}, null, false);
                    YAHOO.util.Event.addListener(removeBtn, "click", function(a){
                        itemModal.destroy();
                        onItemRemove(result.itemid);
                    }, itemModal, true);         
                    modalDiv.appendChild(removeBtn);                    
                }
                
                YAHOO.util.Event.addListener(closeBtn, "click", function(){AtHome.States.modal = false;}, null, false);
                YAHOO.util.Event.addListener(closeBtn, "click", itemModal.destroy, itemModal, true);                
                modalDiv.appendChild(closeBtn);
                
                // render the modal------------------------------------------------------------------
                itemModal.setHeader(result.name);
                itemModal.setBody(modalDiv);
                document.body.className += " yui-skin-sam";
                itemModal.render(document.body);                
                itemModal.show();                
            }
            else{
                AtHome.States.modal = false;
	            AtHome.Widgets.doModal(result.message + "<br/>", true);
	        }
        }
        else{
            AtHome.States.modal = false;
            AtHome.Widgets.doModal("A general error has occured with the response<br/>", true);
        }
    };      
      
    YAHOO.util.Connect.asyncRequest("get", url, {
        success: onGetItem,
        failure: function() {
            AtHome.States.modal = false;
            AtHome.Widgets.doModal("A general error has occured with the request <br/>", true);
        },
        cache: false
    }, null);
}

AtHome.Widgets.doModal = function(url, isText, hideOk){
    if(AtHome.States.modal) return;
    else// prevent them from performing another request (eg, accidently clicking an item twice before the first request comes back)
        AtHome.States.modal = true;
    
    if (!isText) {
        YAHOO.util.Connect.asyncRequest("GET", url, { success: function(o) {
                document.body.className += " yui-skin-sam";
                errorMessage = new YAHOO.widget.Panel("modal", {
                    width: "600px",
                    close: false,
                    fixedcenter: true,
                    modal: true,
                    visible: false
                });
                errorMessage.setBody(o.responseText + "<br/><input id='Validation_PanelClose' type='button' value='OK' style='width:100px' />");
                YAHOO.util.Event.addListener("Validation_PanelClose", "click", function(){AtHome.States.modal = false}, null, false);
                YAHOO.util.Event.addListener("Validation_PanelClose", "click", errorMessage.destroy, errorMessage, true);                
                errorMessage.render(document.body);
                errorMessage.show();                
            }
        });
    }
    else {        
        document.body.className += " yui-skin-sam";
        msg = new YAHOO.widget.Panel("modal", {
            width: "400px",
            close: false,
            fixedcenter: true,
            modal: true,
            visible: false
        }); 
        msg.setBody(url + (hideOk ? "":"<br/><br/><input id='Validation_PanelClose' type='button' value='OK' style='width:100px' />"));
        YAHOO.util.Event.addListener("Validation_PanelClose", "click", function(){AtHome.States.modal = false}, null, false);
        YAHOO.util.Event.addListener("Validation_PanelClose", "click", msg.destroy, msg, true);
        msg.render(document.body);
        msg.show();
    }
    if(ISIE6)
    {
        FixButtonStyles($("Validation_PanelClose"));
    }
    return msg;
}

function invite(el, id)
{
	AtHome.Widgets.doModal("/homeshow/invite/" + id);
	if (el)
		el.innerHTML = NowToShortDate();
}



function NowToShortDate()
{
	var d = new Date();
	return (d.getMonth() + 1) + '/' + d.getDate() + '/' + d.getFullYear();
}


function FixTabs(){
    var tabs = $('tabs');
    var ul = tabs.childNodes[1];
    var list = YAHOO.util.Dom.getChildrenBy(ul, function(e) {
		return (e.tagName == "LI");
    });
	width = (tabs.offsetWidth / list.length) - 2;
	for (i=0; i < list.length; i++)
	{
		YAHOO.util.Dom.setStyle(list[i], 'width', width + 'px');
	}	
}
function FixColumns(){
    var yuimain = $('yui-main');
    var sideBar = $('sidebar');
    var navLeft = $('nav-left');
    if (sideBar && navLeft && yuimain) {
		if (sideBar.offsetHeight < yuimain.offsetHeight || sideBar.offsetHeight < navLeft.offsetHeight) {
			YAHOO.util.Dom.setStyle(sideBar, 'height', ((yuimain.offsetHeight > navLeft.offsetHeight) ? yuimain.offsetHeight : navLeft.offsetHeight) + 'px');
        }
		if (navLeft.offsetHeight < yuimain.offsetHeight || navLeft.offsetHeight < sideBar.offsetHeight) {
			YAHOO.util.Dom.setStyle(navLeft, 'height', ((yuimain.offsetHeight > sideBar.offsetHeight) ? yuimain.offsetHeight : sideBar.offsetHeight) + 'px');
        }
    }
    else if (sideBar && yuimain && sideBar.offsetHeight < yuimain.offsetHeight) {
			YAHOO.util.Dom.setStyle(sideBar, 'height', yuimain.offsetHeight + 'px');
    }
}

function FixButtonStyles(button)    
{   // this is a hack for styling buttons in IE6        
    var fix = function(b){        
        b.style.backgroundColor = "#af222f";
        b.style.border = "1px solid #af222f";
        b.style.fontWeight = "bold";
        b.style.padding = "2px";
        b.style.textTransform = "uppercase";
        b.style.color = "#FFFFFF";
        b.style.float = "none";
        b.style.clear = "none";
        
        b.onmouseover = function(){        
            this.style.backgroundColor = "#7b1316";
            this.style.border = "solid 1px #7b1316";	                    
        }
        b.onmouseout = function(){
            this.style.backgroundColor = "#af222f";
            this.style.border = "1px solid #af222f";
        }
    };
    if(button)
    {
        fix(button);
    }
    else
    {
        var inputs = document.getElementsByTagName("input");
        for(var x = 0; x < inputs.length; x++)
        {        
            if(inputs[x].getAttribute("type") == "button" || inputs[x].getAttribute("type") == "submit")            
               fix(inputs[x]);            
        }
        var buttons = document.getElementsByTagName("button");
        for(x = 0; x < buttons.length; x++)
            fix(buttons[x]);
    }
}

AtHome.Forms.Helpers.FixPhone = function (t) {
	if (!t) return "";
	var nums = /[^\d]/g; /* anything that's not 0-9 */
	var val = t.replace(nums, ""); /* replace with null string */
	if (val.length == 10 || (val.length == 11 && val.substr(0, 1) == "1")) {
		if (val.length == 11) val = val.substr(1, 10);
		return val.substr(0, 3) + "-" + val.substr(3, 3) + "-" + val.substr(6, 4);
	}	
	return t;
}
function ToggleCheckBox(id){
    $(id).checked = $(id).checked ? false : true;
}
function ToggleCheckBoxAll(form, check)
{
    for(var x = 0 ; x < form.elements.length; x++)
        if(form.elements[x].nodeName == "INPUT" && form.elements[x].getAttribute("type") == "checkbox")   
            form.elements[x].checked = check;
}
String.prototype.format = String.prototype.format || function(){
	var param = arguments.length === 1 && typeof(arguments[0]) == "object" ? arguments[0] : arguments;
	var i = 0, result = "";
	for(var s; (s = this.indexOf("{", i)) !== -1;){
		result += this.slice(i, s);
		if(this[s+1] === "{"){
			i = s + 2;
			result += "{";
			continue;
		}
		var i = this.indexOf("}", s + 1);
		if(i === -1)
			throw "incorrect format: {0}".format(this);
		result += param[this.slice(s + 1, i)];
	}
	return result + this.slice(i);
}
String.format = String.format || function(str){
	return String.prototype.format.apply(str, Array.prototype.slice.call(arguments, 1));
}

function SetCookie (name,value,expires,path,domain,secure, noescape) {
	if ((noescape == null) || (noescape == false))
		value = escape(value)
    document.cookie = name + "=" + value +
        ((expires) ? "; expires=" + expires.toUTCString() : "") +
        ((path) ? "; path=" + path : "; path=/") +
        ((domain) ? "; domain=" + domain : "") +
        ((secure) ? "; secure" : "");
}



function GotoMap(showAddrId, userAddrId, showId){
    SetCookie('Map_ShowAddrId', showAddrId);
    SetCookie('Map_ShowId', showId);
    
    if(userAddrId)
        SetCookie('Map_UserAddrId', userAddrId);
    else
        SetCookie('Map_UserAddrId', "");

    window.location.href = '/user/map/';
}

function RecoverPassword(email){    
    if(email.length == 0 || !email.match((/\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/)))
        AtHome.Widgets.doModal("Please enter your email address and then click Recover<br/>", true);    
    else
        AtHome.Widgets.doPWRecoverModal();
}

function URLEncode(plaintext)
{
	// The Javascript escape and unescape functions do not correspond
	// with what browsers actually do...
	var SAFECHARS = "0123456789" +					// Numeric
					"ABCDEFGHIJKLMNOPQRSTUVWXYZ" +	// Alphabetic
					"abcdefghijklmnopqrstuvwxyz" +
					"-_.!~*'()";					// RFC2396 Mark characters
	var HEX = "0123456789ABCDEF";
	
	var encoded = "";
	for (var i = 0; i < plaintext.length; i++ ) {
		var ch = plaintext.charAt(i);
	    if (ch == " ") {
		    encoded += "+";				// x-www-urlencoded, rather than %20
		} else if (SAFECHARS.indexOf(ch) != -1) {
		    encoded += ch;
		} else {
		    var charCode = ch.charCodeAt(0);
			if (charCode > 255) {
			    alert( "Unicode Character '" 
                        + ch 
                        + "' cannot be encoded using standard URL encoding.\n" +
				          "(URL encoding only supports 8-bit characters.)\n" +
						  "A space (+) will be substituted." );
				encoded += "+";
			} else {
				encoded += "%";
				encoded += HEX.charAt((charCode >> 4) & 0xF);
				encoded += HEX.charAt(charCode & 0xF);
			}
		}
	} // for
	
	return encoded;
};
function URLDecode(encoded)
{
   // Replace + with ' '
   // Replace %xx with equivalent character
   // Put [ERROR] in output if %xx is invalid.
   var HEXCHARS = "0123456789ABCDEFabcdef"; 
   
   var plaintext = "";
   var i = 0;
   while (i < encoded.length) {
       var ch = encoded.charAt(i);
	   if (ch == "+") {
	       plaintext += " ";
		   i++;
	   } else if (ch == "%") {
			if (i < (encoded.length-2) 
					&& HEXCHARS.indexOf(encoded.charAt(i+1)) != -1 
					&& HEXCHARS.indexOf(encoded.charAt(i+2)) != -1 ) {
				plaintext += unescape( encoded.substr(i,3) );
				i += 3;
			} else {
				alert( 'Bad escape combination near ...' + encoded.substr(i) );
				plaintext += "%[ERROR]";
				i++;
			}
		} else {
		   plaintext += ch;
		   i++;
		}
	} // while
   
   return plaintext;
};
