CNST.SITE = "LIVE";


//if (CNST.ISLOGGED === 1 || CNST.INSECUREMODE === "0" || CNST.PAGEID === "login" || CNST.PAGEID ===  "forgotpassword" || CNST.PAGEID ===  "checkoutstep2"){
//	$LAB.script(CNST.SITE_PATH + "themes/scripts/ns_lgcy.js");
//}

//https://github.com/sorccu/cufon/wiki/API
    Cufon.replace('h3,.action, .figcaption a, #foot .btmLink a, .dropDown h4, a.arw, #sidebar h2, #main h2', {
        hover: true
    });
    
    Cufon.replace('.mainNav > li:not(".on") > a', {
        color: '#fff'
    });
    Cufon.replace('.mainNav > li.hover > a', {
        color: '#000'
    });
    
var searchFields = {
    "required": {
        "submitted": 1, //boolean
        "output": "json"
    },
    "defaults": {
        "hideoptions": 1, //boolean
        "product_image": 1, //boolean
        "hideform": 1
    },
    "paging": {
        "matchesperpage": "4",
        "start": 0
    },
    "sort": {
        "sort": null, //name, price, brand
        "order": "asc" //asc, desc
    },
    "fields": {
        "keyword": "",
        "product_departmentid": "",
        "product_categorylink": "",
        "product_subcategory": "",
        "product_brandname": "",
        "product_theme": "",
        "product_pricelow": "",
        "product_pricehigh": "",
        "product_pricerange": "",
        "product_specialoffer": "0",
        "product_newproduct": "0",
        "product_promotion": "0"
    }
};

var nsAjax = function(queryString, callback){
    var baseUrl = "/store/",
        action = "advsearch.asp";

    $.ajax({
        url: baseUrl + action,
        dataType: "json",
        cache: true,
        data: queryString,
        success: function(data, textStatus, jqXHR){
            callback(data);
        },
        error: function(jqXHR, textStatus, errorThrown){
            console.log("error: %s", textStatus, errorThrown);
        }
    });
}
var developmentScripts = function(){
	var objects = ["CNST","PRODUCT","PRICE"];    
    (function($){
        var css = {
            "position": "absolute",
            "backgroundColor": "yellow",
            "color": "#000",
            "padding": "10px",
            "z-index": "0"
        }, $dialogBox = $("<div></div>").css(css);
		
    $.each(objects,function(index, obj){
		if(window[obj]){
	        $.each(window[obj], function(name, value){
	            $("<div></div>").text(obj + " : " + name + " : " + value).appendTo($dialogBox);
	        });
			$("<br>").appendTo($dialogBox);
		}
	});
        $("body").prepend($dialogBox);
        $dialogBox.toggle(function(){
            $(this).css("z-index", "20000");
        }, function(){
            $(this).css("z-index", "0");
        });
    }(jQuery));
};
if(CNST.USERNAME === "dean_d1a5p9"){
//	developmentScripts();
}

Cufon.replace('.action, .figcaption a, #foot .btmLink a, .dropDown h4, a.arw', {
    hover: true
});
Cufon.replace('.mainNav > li:not(".on") > a', {
    color: '#fff'
});
Cufon.replace('.mainNav > li.hover > a', {
    color: '#000'
});
Cufon.replace('#sidebar h3', {
    color: '#000'
});
Cufon.replace('.product_relateditems h3');

/*$('ul.mainNav').dropKick({
    customNodes: [0, 1, 2, 3]
});*/

var breadcrumbsObj = {
    home: {
        link: "http://citygrounds.com",
        name: "Home"
    },
    store: {
        link: "http://store.citygrounds.com",
        name: "Store"
    },
	group : {
		link : function(){
				return (breadcrumbs.group) ? breadcrumbs.group.link : null;
		},
		name : function(){
				return (breadcrumbs.group) ? breadcrumbs.group.text : null;
		}
	},
    department : {
		link : function(){
				return (breadcrumbs.department) ? breadcrumbs.department.link : null;
		},
		name : function(){
				return (breadcrumbs.department) ? breadcrumbs.department.text : null;
		}
    },
    category : {
		link : function(){
				return (breadcrumbs.category) ? breadcrumbs.category.link : null;
		},
		name : function(){
				return (breadcrumbs.category) ? breadcrumbs.category.text : null;
		}
    },
	current : {
		link : function(){
				return (breadcrumbs.category) ? breadcrumbs.category.link : null;
		},
		name : function(){
				return (breadcrumbs.category) ? breadcrumbs.category.text : null;
		}
	}
}

var breadcrumbsInit = function(){
	$("[data-breadcrumb]").each(function(){
		var $this = $(this),
			bcName = $this.attr("data-breadcrumb"),
			last = $this.hasClass("last");
		$this.text(breadcrumbsObj[bcName].name);
		if($this.attr("href") !== undefined){
			$this.attr("href", breadcrumbsObj[bcName].link);
		}
	});
}
breadcrumbsInit();



var renderItems = function(items, $destination){
    var nsConfig = {};
    nsConfig.disablecategorydiscountdisplay = true;
    //iterate through each item's data
    $.each(items, function(index, item){

        //attach pricing data object
        item.pricing = {};
        //copy data for debugging
        //item.data = item;
        if( item.product_matrixid >= 0 || item.product_price !== item.product_priceweb ) {
            if ( nsConfig.disablecategorydiscountdisplay === true ) {
                item.pricing.standard = true;
            } else {
                if ( parseInt(item.product_priceweb, 10) < parseInt(item.product_price, 10) ) { 
                    item.pricing.sale = true;
                    item.pricing.regular = formatPrice(item.product_price);
                    item.pricing.saleprice = formatPrice(item.product_priceweb);
                } else {
                    item.pricing.standard = true;
                    item.pricing.price = formatPrice(item.product_price);
                }
            } 
        } else {
            if ( parseInt( item.classpricehigh, 10 ) > 0 ) {
                if (item.classpricelow !== item.classpricehigh) {
                    item.pricing.range = true;
                    item.pricing.low = formatPrice(item.classpricelow);
                    item.pricing.high = formatPrice(item.classpricehigh);

                } else {
                    item.pricing.standard = true;
                    item.pricing.price = formatPrice(item.classpricelow);
                }
            } else {
                item.pricing.standard = true;
                item.pricing.price = formatPrice(item.product_price);
            }
        }
        $("#product-listing-tmpl").tmpl(item).appendTo($destination);
        return $destination;
    });
    
    
    
};

function NsQueryBuilder(configObj) {
    "use strict";
    this.required = {
        "submitted" : "1",
        "output" : "json"
    };
    this.queryObj = {};
    this.productCodes = "";
    this.alias = {
        deptid: "product_departmentid",
        catid: "product_categorylink",
        subcatid: "product_subcategory",
        brand: "product_brandname",
        theme: "product_theme",
        pricelow: "product_pricelow",
        pricehigh: "product_pricehigh",
        pricerange: "product_pricerange",
        specialoffer: "product_specialoffer",
        newproduct: "product_newproduct",
        promotion: "product_promotion"
    };
}
NsQueryBuilder.prototype = {
    addParam: function(dataObj) {
        "use strict";
        jQuery.extend(this.queryObj, dataObj);
    },
    addProductCode: function(data) {
        "use strict";
        if (jQuery.isArray(data)) {
            for (var i = 0, len = data.length; i < len; i = i + 1) {
                this.productCodes = this.productCodes + "&product_code[]=" + data[i];
            }
        } else {
            this.productCodes = this.productCodes + "&product_code[]=" + data;
        }
    },
    clear : function(){
        this.queryObj = {};
        this.productCodes = "";
    },
    getQuery: function() {
        "use strict";
        var queryMap = {},
            app = this,
            query;

        //replaceAlias
        jQuery.each(this.queryObj, function(field, value) {
            (app.alias[field]) ? queryMap[app.alias[field]] = value : queryMap[field] = value;
        });
        
        //merge query with required params
        jQuery.extend(queryMap, app.required);
        
        //convert to string
        query = jQuery.param(queryMap) + app.productCodes;
        return query;
    }
};




var relatedItems = function(){
	$("[data-relateditems]").each(function(){
	    var $this = $(this),
			$children = $this.children(),
			query,
			items,
			$heading = $("<h3></h3>").html("You Might Also Like&hellip;"),
			$ul = $("<ul></ul>").attr({
		        "id": "relateditems_listing",
		        "class": "product-grid"
	       }), 
	       products,
	       product_codes = "",
	       buildQuery = new NsQueryBuilder();

	    if (!PRODUCT.relateditems) {
	        buildQuery.addParam({"deptid":PRODUCT.DEPT_ID,"matchesperpage":"4"});
	        query = buildQuery.getQuery();
	        
	        nsAjax(query, function(data){
	            // $("#product-listing-tmpl").tmpl(data.searchresults.items).appendTo($ul);
	            items = data.searchresults.items;
	            
	            tmplRenderProducts(items, $ul);
                $ul.appendTo($this);
	        });
	        Cufon.replace($heading);
	        $this.append($heading);
	    } else {
	        // console.log("Got Items");
            buildQuery.clear();
            
	        $.each(PRODUCT.relateditems, function(index, productcode){
                buildQuery.addProductCode(productcode);
	        });

            nsAjax(buildQuery.getQuery(), function(data){
                tmplRenderProducts(data.searchresults.items, $ul);
                
                // $("#product-listing-tmpl").tmpl(items).appendTo($ul);
                $ul.appendTo($this);
            });
	        Cufon.replace($heading);
	    }
	});
};
var loadAddThis = function(){
	//http://joecurlee.com/2010/01/21/how-to-use-addthis-with-ajax-and-overflowauto/
	//http://www.addthis.com/help/client-api
		var script = 'http://s7.addthis.com/js/250/addthis_widget.js#pubid=ra-4d7a86e54d7aeed9';
		if (window.addthis) {
			window.addthis = null;
		}
		$.getScript( script, function(){
			addthis.counter("#addthis_counter");
		});
};

//Facebook Comments
//207333109809
//http://developers.facebook.com/docs/reference/plugins/comments/


var getFacebookComments = function() {
    $("[data-facebook-comments]").each(function() {
        var $this = $(this),
            facebookId ="207333109809",
            width = ( function() {
                var wrapWidth = $this.width();
    
                // return Math.round((wrapWidth / 3) * 2);
                return wrapWidth;
            }()), 
            $fbRoot = $("#fb-root"), 
            $fjs = $("#facebook-jssdk"), settings = {
                "data-href" : ( function() {
                    return document.URL;
                }()),
                "data-num-posts" : "2",
                "data-width" : width
            }, 
            $fbComments = $("<div class='fb-comments'></div>").attr(settings),
            $meta = $("<meta />").attr({
                "property":"fb:admins",
                "content" : "{" + facebookId + "}"
            }),
        $productPhoto = $("#productphoto"),
        $head = $("head"),
        ogMetaObj = [
            // {"property" : "og:type","content":"product"},
            // {"property" : "og:url", "content": document.URL },
            // {"property" : "og:image", "content":CNST.UNSECURE_URL + $productPhoto.attr("src")}, 
            // {"property" : "og:site_name","content" : CNST.STORENAME },
            {"property" : "fb:admins", "content" : "{" + facebookId + "}"}
        ];
        
        $.each(ogMetaObj, function(index, metaObj){
           $("<meta />").attr(metaObj).appendTo($head); 
        });
    
        // $("head").append($meta).append($photoLink);
        $this.addClass("fb-comments-wrap");

        if($fbRoot.length < 0) {
            $("body").append("<div id='fb-root'></div>");
        }

        $this.append($fbComments); ( function(d, s, id) {
            var js, fjs = d.getElementsByTagName(s)[0];
            if(d.getElementById(id)) {
                return;
            }
            js = d.createElement(s);
            js.id = id;
            js.src = "//connect.facebook.net/en_US/all.js#xfbml=1";
            fjs.parentNode.insertBefore(js, fjs);
        }(document, 'script', 'facebook-jssdk'));

    });
};
getFacebookComments();



var pagination = function(){
    var $paginationTable = $("table.pagination"), $links, $top, $bottom, btnNext = $("<span class='icon icon-next'>&gt;&gt;</span>"), btnPrevious = $("<span class='icon icon-prev'>&lt;&lt;</span>"), $bottom = $(".page-nav.bottom"), $ul = $("<ul class='pagination'></ul>");
    if ($paginationTable.length) {
        $links = $paginationTable.find("a");
        $ul.append("<li class='label'><span>Page:&nbsp;</span></li>");
        $links.each(function(index, value){
            var $this = $(this), $li = $("<li></li>");
            if ($this.attr("id") === "btn-next") {
                $this.empty().html(btnNext);
            }
            if ($this.attr("id") === "btn-previous") {
                $this.empty().html(btnPrevious);
            }
            $li.append($this).appendTo($ul);
        });
        $bottom.append($ul.clone());
        $ul.insertBefore($paginationTable);
        
        $paginationTable.remove();
    }
};
pagination();
var product_page = {
	detailsToList : function(){
	        var $pricingDetails,
				$html = $("html");
			if($html.hasClass("ie7") || $html.hasClass("ie8")){
				
				
				} else {
				$pricingDetails = $("#product_description p");
		        $pricingDetails.each(function(){
		            var $this = $(this), 
						thisText = $("#product_description p").text(), $ul, 
						textArray = thisText.split(/\n/,200);
		            if (textArray.length) {
		                $ul = $("<ul class='simpleList'></ul>");
		                $.each(textArray, function(index, value){
		                    var thisText = $.trim(textArray[index]).replace(/^- /, ""), $li;
		                    if (thisText !== "") { //filter out empty lines
		                        $li = $("<li></li>").html(thisText);
		                        $li.appendTo($ul);
		                    }
		                });
		                $ul.insertBefore($this);
		                $this.remove();
		            }
		        });
			}
	},
	layout : function (){
	    var $matrixoptions = $("#matrixitemoptions");
//		$("input#quantity");
	    $matrixoptions.children("p").remove();
	    $("a.brand-name").attr("href", function(){
	        var href = encodeURI($(this).attr("href"));
	        href = href.replace(/-/, "%97");
	        return href;
	    });
	    $("#productphoto").attr({
	        "align": ""
	    });
	},
	cufonThis : function(){
		Cufon.replace("#productbody .add-to-basket, .product_relateditems h3");
	},
	onAjaxComplete : function(){
		$("#productbody").ajaxComplete(function (event, xhr, settings) {
			var url = settings.url;
			if(url.search('get_product_data') !== -1){ //if ajaxCall sensed is product page refresh 
				product_page.layout();
				breadcrumbsInit();
				product_page.detailsToList();
				relatedItems();
				loadAddThis();
				product_page.cufonThis();
				getFacebookComments();
			}
		});
	},
	init : function(){
		product_page.layout();
		breadcrumbsInit();
		product_page.detailsToList();
		relatedItems();
		loadAddThis();
		// product_page.onAjaxComplete();
	}
};

if (CNST.PAGEID === "product") {
    product_page.init();
}

var searchResult = function(){
    var $searchResult = $("p#searchresult").remove(), totalCount, displayCount, newText;
    if ($searchResult.length) {
        totalCount = $searchResult.find(".total-count").text();
        displayCount = $searchResult.find('.display-count').text();
        newText = displayCount + " of " + totalCount;
        $(".page-nav .result").text(newText);
    }
};
searchResult();

$("[data-banner]").each(function(){
    var $this = $(this), data = $this.data("banner"), active = $this.data("switch"), array = data.split("-"), folder = array[0], url, fileName = array[1];
    if (active || !active) {
        url = "/banners/" + folder + "/" + fileName + '.html';
        $this.load(url);
    }
});

var customHeader = function(){
    var customheader = $("#frmSearchResults input[name=pagetitle]").val();
    $("#panel_nav_heading").text(customheader);
};
customHeader();

var userLogin = {
    domain: "citygrounds.com",
    prefix: "CGLogin_",
    logIn: function(){
        if (!userLogin.checkLogin()) {
            document.cookie = userLogin.prefix + CNST.USERNAME + "=loggedIn" + ";path=/;domain=" + userLogin.domain;
        }
    },
    expireDate: function(){
        var date = new Date(), expireDate;
        date.setTime(date.getTime() + (-1 * 24 * 60 * 60 * 1000));
        expireDate = date.toGMTString();
        return expireDate;
    },
    logOut: function(cookieName){
        document.cookie = cookieName + '=loggedOut;expires=' + userLogin.expireDate() + ";path=/;domain=" + userLogin.domain;
    },
    checkLogin: function(){
        var loginCookie = userLogin.prefix + CNST.USERNAME, cookieArray = document.cookie.split(';'), i, cookie, exists = false;
        for (i = 0; i < cookieArray.length; i = i + 1) {
            cookie = $.trim(cookieArray[i]);
            //check if already logged in
            if (cookie.indexOf(loginCookie) === 0) {
                exists = true;
            }
        }
        return exists;
    },
    clearCookie: function(){
        var cookieArray = document.cookie.split(';'), i, cookie, cookieName;
        for (i = 0; i < cookieArray.length; i = i + 1) {
            cookie = $.trim(cookieArray[i]);
            //check if already logged in
            if (cookie.search(userLogin.prefix) !== -1) {
                cookieName = cookie.split("=");
                userLogin.logOut(cookieName[0]);
            }
        }
    },
    storeInit: function(){
        if (CNST.LOGGEDIN === "1") {
            userLogin.logIn();
        }
        else {
            userLogin.clearCookie();
        }
    }
};
userLogin.storeInit();

//converts raw text into a lowercase dash delimited string
var createFileName = {
    ws: (function(){
        return new RegExp("[ ]", "gi")
    }()),
    to: function(rawName){
        var trimmed = $.trim(rawName), fileName = trimmed.replace(createFileName.ws, "-").toLowerCase();
        return fileName;
    }
};
var getImage = function(attrObj){
    var $img = $("<img />").attr({
        src: attrObj.src,
        alt: attrObj.alt
    }).error().remove();
};
//returns array of objects with brand info
var brands = function(options){
    var brandObj = {}, $brandSelect = $("select#field_product_brand"), $options = $brandSelect.find("option").clone();
    $options.each(function(){
        var $this = $(this), obj = {}, val = $this.val();
        if (val !== "") {
            obj.text = $.trim($this.text());
            obj.first = obj.text.substr(0, 1);
            obj.val = val;
            obj.url = function(){
                var url = "/store/search/brand/" + encodeURI(obj.text) + "/";
                url = url.replace(/-/, "%97");
                return url;
            };
            obj.fileName = createFileName.to(obj.text);
            obj.$ = $this;
            if (!brandObj[obj.first]) {
                brandObj[obj.first] = [];
                brandObj[obj.first].push(obj);
            }
            else {
                brandObj[obj.first].push(obj);
            }
        }
    });
    return brandObj;
};

var brandPage = function(){
    var brandObj = brands(), $brandsWrap = $("<div class='brands-listing'></div>");
    $.each(brandObj, function(index, brands){
        var $dl = $("<dl></dl>").attr("id", "brandIndex-" + index), $dt = $("<dt></dt>").text(index);
        $dl.append($dt);
        $.each(brands, function(index, brand){
            var $dd = $("<dd></dd>"), $a = $("<a></a>").attr({
                "href": brand.url,
                "title": brand.text + " at CityGrounds.com"
            }).text(brand.text).appendTo($dd);
            $dd.appendTo($dl);
        });
        $dl.appendTo($brandsWrap);
    });
    return $brandsWrap
};


$("[data-page]").each(function(){
    var $this = $(this), type = $this.data("page");
    switch (type) {
        case 'brands':
            $this.html(brandPage());
            break;
        default:
            break;
    }
});

$("[data-search]").each(function(){
    var $this = $(this), 
        template = $this.data("tmpl"), 
        searchName = $this.data("search"), 
        searchArray = settings.search[searchName], 
        length = searchArray.length, 
        queryObj = {}, 
        searchIndex = 0, onComplete = function(){
            var $ul = $("<ul id='product_listing'></ul>").addClass("product-grid");
            $("#product-listing-tmpl").tmpl(productList).appendTo($ul);
            $ul.appendTo($this);
    }, loadProdList = function(searchData){
        $.each(searchData.searchresults.items, function(){
            productList.push(this);
        });
        searchIndex = searchIndex + 1;
        if (searchIndex < length) {
            submitQuery(searchArray[searchIndex])
        }
        else {
            onComplete();
        }
    }, submitQuery = function(requestObj){
        nsAjax(requestObj, loadProdList);
    };
    submitQuery(searchArray[0]);
});





(function($){
    var l = document.getElementsByTagName('label')[0];
    var f = document.getElementById('keywordsearchfield');
    
    f.onfocus = oFoc;
    f.onblur = oBlur;
    l.onclick = oFoc;
    
    function oFoc(){
        f.focus();
        l.style.display = 'none';
    }
    
    function oBlur(){
        if (f.value == '') {
            l.style.display = 'block';
        }
        else {
            l.style.display = 'none';
        }
    }
}(jQuery));



$(document).ready(function(){
    
    

       
       
       
    //Scroller for brands on department pages.
    $("[data-g4n-scroller]").each(function() {
        var $scrollerWrap = $(this),
            $itemList = $scrollerWrap.find("ul"),
            $innerWrap = $("<div class='scroll-wrap'></div>"),
            $images = $itemList.find("img"),
            $prev = $("<div class='scroll-ctrl scroll-prev'><span>prev</span></div>"),
            $next = $("<div class='scroll-ctrl scroll-next'><span>next</span></div>"),
            execute = function(){
                $scrollerWrap.removeClass("hide").addClass("g4n-scroller");
                $itemList.wrap($innerWrap);
                $itemList.find("img").vAlign();
                $scrollerWrap.append($prev).append($next);
  
                 $scrollerWrap.find(".scroll-wrap").jCarouselLite({
                     btnNext : ".scroll-next",
                     btnPrev : ".scroll-prev",
                     visible : 6,
                     speed : 400,
                     scroll : 2
                 });
            };

        $scrollerWrap.waitForImages(function(){
            execute();
        });
            
    });//each
       

   //re-markup category link table for department pages

       var $catTable = $("table.cattablebody").detach(),//remove native category link table from DOM
            $imageWrap = $catTable.find("tr.cattablerowimage td a"),//pull images
            $images = $imageWrap.find("img"),
            $link = $catTable.find("tr.cattablerowtext td a"),//link to category
            $categoryList = $("<ul></ul>").attr({   //list to insert elements
                "id" : "category_listing",
                "class" : "grid"
            });
        $catTable.waitForImages(function(){
            $imageWrap.each(function (index,contents) {//iterate over images to and join with 
                var $li = $("<li class='item'></li>"),
                    $inner = $("<div class='inner'></div>"),
                    $header = $("<h3 class='heading'></h3>").html($link.eq(index));
                $(contents).addClass("thumb-wrap");        
                $inner.append(contents).append($header).appendTo($li);
                
                $li.appendTo($categoryList);
            });
            $categoryList.find(":nth-child(3n+2)").addClass("center-item");// class to add margin to "center" item in grid.

            $("[data-categories]").html($categoryList).show();
            Cufon.replace("#category_listing h3");
            $images.vAlign();
        });




});

