$(document).ready(function() {
    // Models selector
    var modelSelector = $(".ModelSelector");
    var prevSelector = $(".ModelSelector .ModelSelectorPrev a");
    var nextSelector = $(".ModelSelector .ModelSelectorNext a");
    var listSelector = $(".ModelSelector .ModelSelectorChoose a");
    var modelRefs = $('.ModelSelectorList table a');

    if (prevSelector.attr('tooltip') != null) {
        prevSelector.tooltip({ bodyHandler: ModelSelectorToolTip, showURL: false });
    }
    if (nextSelector.attr('tooltip') != null) {
        nextSelector.tooltip({ bodyHandler: ModelSelectorToolTip, showURL: false });
    }

    listSelector.bind("click", OnListSelectorClick);
    modelRefs.bind("mouseenter", OnModelStartSelect);
    modelRefs.bind("mouseleave", OnModelStopSelect);
    $("#btnCloseModal").click(function() { $.modal.close(); });

    // Jump menu
    $("#cmbBrands").change(OnBrandSelect);
    $("#cmbModels").change(OnModelSelect);

    // Overall rating	
    $(".RatingOverall .Hidden").removeClass("Hidden");
    $('[id^=RankingOverall]').rating('disable');
    $("#lblProductRating").click(OnOverallRankingClick)
		$('[id^=RankingOverall]').click(OnOverallRankingClick);
    // View tabs
    var tabContainers = $('.ViewContainer .tabs > div');

    $('.ViewContainer .tabs ul.tabNavigation a').click(function() {
        tabContainers.hide();
        tabContainers.filter(this.hash).show();
        $('.ViewContainer .tabs ul.tabNavigation a').removeClass('selected');
        $(this).addClass('selected');
        return false;
    });

    // Zoom 
    if ($("#btnEnlarge").attr("visible") == "True") {
    	$("#btnEnlarge").css("visibility", "visible");
  	}
    $("#btnEnlarge").click(OnEnlargeClick);
    $("#btnCloseEnlarge").click(function() { $.modal.close(); });
    
    // 3D
    $("#btnView3D").click(On3DClick);
    $("#btnClose3D").click(function() { $.modal.close(); });    
    Check3D();

    // Items images
    $(".ItemStyles table[ne=]").click(OnColorClick);
    $(".ItemStyles table").click(OnColorChooseFromStyles);
    $("#btnCloseColorImage").click(function() { $.modal.close(); });

    $(".ItemStyles .text a").click(function() { $(this).parent().click(); return false; });
    // Social Services
    $("#btnCopyBlogAbout").click(function() {
        CopyToClipboard($("#txtBlogAbout").text());
        return false;
    });
    $("#btnAddToFavorites").click(function() {
        if (document.all) {
            window.external.AddFavorite
      (location.href, $(this).attr('name'))
        }
    });

    // Testemonials
    $(".Testemonials p").click(OnTestemonialsClick);
    $("#btnCloseTestemonials").click(function() { $.modal.close(); });

    // Price block
    $("#cmbChooseColor").change(OnColorChoose);
    $("#cmbChooseColor").keyup(function() { $(this).change(); });
    $("#cmbChooseColor").bind('mousewheel', function() { $(this).change(); });
    $("#cmbChooseSize").focus(OnFocusSize);
    $("#btnPreviewBlogAbout").click(OnPreviewBlogAbout);
    $("#btnCalculateShipping").click(OnCalculateShipping);
    $("#btnCloseShipping").click(function() { $.modal.close(); });
    $("#fldShippingCountry").change(OnSelectCountry);
    $("#btnAddToCart").click(OnAddToCart);
    $('#imgSizeGuide').bt('<IMG src="/general/itemdetails/images/frame_size_info.jpg" width="750" height="200" >',
		{ preShow: FixTooltipForIE7Mozilla, width: 750, height: 200, fill: 'white', cornerRadius: 20, padding: 20, strokeWidth: 1 });
		$('#imgLensGuide').bt('<IMG src="/general/itemdetails/images/lensHelp.jpg" width="403" height="130" >',
		{ preShow: FixTooltipForIE7Mozilla, width: 403, height: 130, fill: 'white', cornerRadius: 20, padding: 20, strokeWidth: 1 });
		$('#imgNewsGuide').bt('<IMG src="/general/itemdetails/images/newsHelp.jpg" width="409" height="119" >',
		{ preShow: FixTooltipForIE7Mozilla, width: 409, height: 119, fill: 'white', cornerRadius: 20, padding: 20, strokeWidth: 1 });
		
    // Details tabs
    $('.DetailsContainer .tabs ul.tabNavigation a').click(OnNavigateDetailsTabs);
		$('#btnDetailsReturns').click(OnLoadReturnPolicy);
		$('#btnDetailsShipping').click(OnLoadShippingPolicy);
		
		$('.ReviewRanks div').removeClass('Hidden') ;
		$('[id^=Review_]').rating('disable') ;
		$('.ranking-block-statistics-overall').removeClass('Hidden') ;
		$('[id=totalScore]').rating('disable') ;
		$('.ranking-block-overall-create').click(function(e){window.location.href = $(this).attr('href');});
		$("#btnSortReviewDate").click(OnSortReviewsByDate);
		$("#btnSortReviewRating").click(OnSortReviewsByRating);
		 if (navigator.appVersion.indexOf("MSIE") != -1) {
		 		// $(".DetailsContainer UL.tabNavigation LI").addClass("ie");
				// $(".DetailsContainer UL.tabNavigation LI A").corner("top round 9px").parent().corner("top round 8px");
	   }


});

function Check3D() {
	var mid = $("#btnView3D").attr("mid");
	$.get(uncache("/general/itemdetails/ItemDetailsCommands.asp"),{cmd:"prodId",mid:mid}, function(data) {
		try {
			var pid = parseInt(data);
			if (pid > 0) {
				$("#btnView3D").css("display","inline");
				$("#view3D").attr("pid", pid);
			}
		}
		catch (e) {
		}
	});
}

function OnFocusSize() {
	if ($(this).find("option[value^=]").length == 0) {
		alert("Please select your color before choosing size");
	}
}

function OnDrawRoundedCorners(context, width, height, elementInfo)
{
	var options = {x:0, height: height, width: width,radius:14, border: 0 };
	// Draw the red border rectangle
	context.fillStyle = "#FF0000";
	$.canvasPaint.roundedRect(context,options);
	// Draw the gradient filled inner rectangle
	var backgroundGradient = context.createLinearGradient(0, 0,	0, height - 10);
	backgroundGradient.addColorStop(0 ,'#AAAAFF');
	backgroundGradient.addColorStop(1, '#AAFFAA');
	options.border = 5;
	context.fillStyle = backgroundGradient;
	$.canvasPaint.roundedRect(context,options);
}

function OnSortReviewsByRating() {
	var sort = $(this).attr('sort');
	
	$("#tblReviews").load(uncache("/general/itemdetails/itemdetailscommands.asp?cmd=sortReviewsByRating&objectId=" + $(this).attr('objectId') + "&sd=" + sort + "&sf=" + $(this).attr('formId')),
		function(){
			$('.ReviewRanks div').removeClass('Hidden') ;
			$('[id^=Review_]').rating();
			$('[id^=Review_]').rating('disable') ;
		});
	$(this).attr('sort', (sort == '0') ? '1' : '0');
	
}

function OnSortReviewsByDate() {
	var sort = $(this).attr('sort');
	
	$("#tblReviews").load(uncache("/general/itemdetails/itemdetailscommands.asp?cmd=sortReviewsByDate&objectId=" + $(this).attr('objectId') + "&sd=" + sort + "&sf=" + $(this).attr('formId')),
		function(){
			$('.ReviewRanks div').removeClass('Hidden') ;
			$('[id^=Review_]').rating();
			$('[id^=Review_]').rating('disable') ;
		});
	$(this).attr('sort', (sort == '0') ? '1' : '0');
	
}

function OnOverallRankingClick() {
	NavigateDetailsTabs($("#btnDetailsReviews")[0]);
	$("#detailsReviews").focus();
}

function OnLoadShippingPolicy() {
	if ($("#detailsShipping").text().length == 0) {
		$("#detailsShipping").load("/general/itemdetails/itemdetailscommands.asp?cmd=getShippingPolicy");
	}

}

function OnLoadReturnPolicy() {
	if ($("#detailsReturns").text().length == 0) {
		$("#detailsReturns").load("/general/itemdetails/itemdetailscommands.asp?cmd=getReturnPolicy");
	}

}

function OnNavigateDetailsTabs() {
		NavigateDetailsTabs(this);
}		

function NavigateDetailsTabs(link) {
	tabContainers = $('.DetailsContainer .tabs > div');
	tabContainers.hide();
	tabContainers.filter(link.hash).show();
	$('.DetailsContainer .tabs ul.tabNavigation li').removeClass('selected');
	$('.DetailsContainer .tabs ul.tabNavigation a').removeClass('selected');
	$(link).addClass('selected');	
	$(link).parent().addClass('selected');	
}
	
function FixTooltipForIE7Mozilla(box) {
	if (IEVersion() <= 7 || window.netscape){
		$("canvas").css("margin-left", "-"  + (box.offsetWidth / 2) + "px");
	}
}

function CheckLivePersonStatus() {
	$.get(uncache("/general/itemdetails/ItemDetailsCommands.asp"),{cmd:"checkChat"}, function(data) {
	 	if (data == "on"){
	 		$("#imgLivePersonChat").attr('src',$("#imgLivePersonChat").attr('onsrc'));
	 	}
	});
	$.get(uncache("/general/itemdetails/ItemDetailsCommands.asp"),{cmd:"checkVoice"}, function(data) {
	 	if (data == "on"){
	 		$("#imgLivePersonVoice").attr('src',$("#imgLivePersonVoice").attr('onsrc'));
	 	}
	});

}

function OnAddToCart() {
	if (ValidateAddToCart()){
		if ($("#cmbChooseRxLens").length > 0) {
			$("#fldAddRxLens").val($("#cmbChooseRxLens").val());
		}
		else {
			$("#fldAddRxLens").val($("#chkTakeRxLens:checked").length);
		}
		$("#fldProductId").val($("#cmbChooseSize").val());
		$("#frmShoppingCart").submit();
	}
}

function OnSelectCountry() {
	$("#fldShippingState").attr("disabled", true);
	var locationId = $(this).val();
	var locationName = $(this).find("option:selected").text();
	$.ajax({
		type: "POST",
		url: uncache("/general/itemdetails/ItemDetailsCommands.asp"),
		data: {cmd:"getStates", data:locationName},
		dataType: "html",
		success: 
		function(data, code) {
			$("#fldShippingState").attr("disabled", false);
			if (code == "success") {
				$("#cntShippingState").html(data);
				$("#fldShippingState").change(
					function() {
						FillShippingTable($(this).val());
					});
				// fill shipping table immediately if no states
				if ($("#fldShippingState option").length <= 2) {
					FillShippingTable(locationId);
				}
				else {
					// fill shipping table even if state not selected ("No items found" will be displayed)
					FillShippingTable($("#fldShippingState").val());
				}
			}
			else {
				ProcessError(code)
			}
		},
		error: function (XMLHttpRequest, textStatus, errorThrown) {
		 $("#fldShippingState").attr("disabled", false);	
		 ProcessError(XMLHttpRequest, textStatus, errorThrown);
		}});		
		return false;
}


function FillShippingTable(locationId) {
	$.ajax({
		type: "POST",
		url: uncache("/general/itemdetails/ItemDetailsCommands.asp"),
		data: {cmd:"fillShipping", data:locationId},
		dataType: "html",
		success: 
		function(data, code) {
			if (code == "success") {
				$("#cntShippingTable").html(data);
			}
			else {
				ProcessError(code)
			}
		},
		error: ProcessError
		});		
		return false;	
}


function OnCalculateShipping() {
	$('#pnlShippingCalculator').modal({
	persist: true,
	overlay:70,
	overlayClose:true,
	overlayCss: {backgroundColor:"#fff"},
	opacity:80}); 
}

function OnTestemonialsClick() {
		$(".TestemonialsPopup").modal({
			minHeight:300,
			minWidth: 400,
			overlayClose:true,
			overlayCss: {backgroundColor:"#fff"},
			opacity:80}
		);
}

function OnPreviewBlogAbout() {
	var closeHtml = (navigator.userAgent.indexOf("Opera") == -1)? $("#cntCloseBlogAbout").html() : "";
	$.modal($("#txtBlogAbout").text(),{
			minHeight:300,
			minWidth: 200,			
			closeHTML:closeHtml,
			overlayClose:true,
			overlayCss: {backgroundColor:"#fff"},
			opacity:80});
	return false;
}


function OnModelSelect() {
		if ( $(this).val().length > 0) {
			window.location.href = "/General/ItemDetails/ItemDetailsCommands.asp?cmd=navModel&id=" + $(this).val()
		}
}

function OnBrandSelect() {
		if ( $(this).val().length > 0) {
			window.location.href = "/General/ItemDetails/ItemDetailsCommands.asp?cmd=navBrand&code=" + $(this).val()
		}
}

function OnColorChoose() {
	SelectColor($(this).attr("selectedIndex"));

}

function GetSize(size){
	return (size == '') ? "N/A" : size;
}

function OnColorChooseFromStyles() {
		var itemIndex = parseInt($(this).attr("c"),10) + 1;
		$("#cmbChooseColor").attr("selectedIndex", itemIndex);
		SelectColor(itemIndex);
}

function OnColorClick() {
		var url = $(this).find('.image img').attr('big'); 
		var title = $(this).find(".text").text();
		$("#istColorImage").css('visibility','hidden');
		$("#istColorImage").modal({
			minHeight:400,
			minWidth: 600,
			overlayClose:true,
			overlayCss: {backgroundColor:"#fff"},
			opacity:80,
			onClose:function() {
				$.modal.close();
				$("#istColorImage > img").css('display','none'); 
				$("#istColorImage .ColorImageTitle").css('display','none'); 
			},
			onShow:function() {
				$("#istColorImage .ColorImageTitle .caption").text(title);
				
				var img = $("#istColorImage > img"); 
				$(img).load(function () { 
						$("#istColorImage > img").css('display','block'); 
						$("#istColorImage").width($("#istColorImage > img").width());
						$("#istColorImage .ColorImageTitle").css('display','block'); 
						$("#istColorImage").css('visibility','visible');
				});
				img.attr('src',url);
			}
		});

}

function SelectColor(itemIndex) {
	var prevSelect = $(".ItemStyles TABLE.selected");
	prevSelect.removeClass("selected")
	var colorCombo = $("#cmbChooseColor");
	var sizeCombo = $("#cmbChooseSize");
	
	$("#cmbChooseSize option:gt(0)").remove();
	var selectedOption = colorCombo.find(":selected");
	var title = selectedOption.text();
	colorCombo.attr("title", title);
	if (colorCombo.val() != null &&  colorCombo.val().length > 0) {
		var selected = $(".ItemStyles TABLE")[parseInt(colorCombo.val())]
		$(selected).addClass("selected");
	  // filter size
	  
		var pid = selectedOption.attr('pid');
		var colorElement =  jQuery.map(modelProducts,function(n,i){return (n.Id == pid) ? n : null})[0];
		var sizes = jQuery.map(modelProducts,function(n,i){
			
			var currName = "".concat(n.ColorName,"|",n.ColorCode,"|",n.LensName,"|",n.LensCode) ;
			var fullName = "".concat(colorElement.ColorName, "|", colorElement.ColorCode, "|", colorElement.LensName, "|", colorElement.LensCode) ;
			return (fullName == currName) ? n : null;
		});
		var output = []; 

		for (var i = 0; i < sizes.length; i ++) {
			output.push("".concat("<option value='", sizes[i].Id, "'>", GetSize(sizes[i].Eye), " - ", GetSize(sizes[i].Nose), " - " , GetSize(sizes[i].TempleSize), "</option>"));
		}
		sizeCombo.html("".concat(sizeCombo.html(), output.join(''))); 
		// select first item if only one exists
		if (sizeCombo.find("option").length == 2) {
			sizeCombo.attr("selectedIndex",1);
		}
		$('#txtOurPrice').text(colorElement.SalePrice);
		$('#txtYouSave').text(colorElement.YouSave);
		$('#txtMSRP').text(colorElement.MSRP);
	}
}


function On3DClick() {
		var view3D = $("#view3D"); 
		view3D.modal({
			minHeight:335,
			minWidth: 600,
			overlayClose:true,
			overlayCss: {backgroundColor:"#fff"},
			opacity:80,
			onClose:function(){$("#view3DFrame").remove();$.modal.close();$('#btnViewNormal').click();},
			onShow:function() {
				var iframe = $('<iframe id="view3DFrame" src=""  marginheight="0" marginwidth="0" frameborder="0" width="600" height="335" scrolling="no"></iframe>')
				view3D.append(iframe);
				view3D.width(iframe.width());
				$(iframe).attr("src", view3D.attr("hsrc") + view3D.attr("pid") + "&rnd=" + Math.random());
			}
				
		});
}

function OnEnlargeClick() {
		$("#viewEnlarge").modal({
			minHeight:400,
			minWidth: 600,
			overlayClose:true,
			overlayCss: {backgroundColor:"#fff"},
			opacity:80,
			onClose:function(){$.modal.close();$('#btnViewNormal').click();},
			onShow:function() {$("#viewEnlarge").width($("#viewEnlarge > img").width());}
				
		});
}

function OnModelStopSelect(e){
	$(".infiniteCarousel ul li div.selected").removeClass("selected");
	 $(this).stopTime("scrollto"); 
}

function OnModelStartSelect() {
	$(".infiniteCarousel ul li div.caption[cnt=" + $(this).attr('cnt') + "]").addClass("selected"); 
	$(this).oneTime("500ms", "scrollto", function () {
		var itemIndex = parseInt($(this).attr('cnt'));
		$('.infiniteCarousel')[0].GotoItem(itemIndex);
	});
}

function OnListSelectorClick() {
		var modelSelector = $(".ModelSelector");
		$(".ModelSelectorList").modal(
			{
			 overlayCss: {backgroundColor:"#fff"}, 
			 overlayClose:true,
			 opacity:80,
			 position:[modelSelector.position().top + modelSelector.outerHeight() + 10,modelSelector.position().left - 1]
			});
			$('.infiniteCarousel').infiniteCarousel();
			$(window).resize(OnWindowResize);
}

function OnWindowResize() {
	var modelSelector = $(".ModelSelector");
	$('.simplemodal-container').css('left',modelSelector.position().left - 1);
	$('.simplemodal-container').css('top',modelSelector.position().top + modelSelector.outerHeight() + 10);
	$(window).unload(OnWindowResize);
}

function ModelSelectorToolTip() {
     return $("<div class='ModelSelectorPopup'><img src='" + $(this).attr('src') + "'/><div>" + $(this).attr('tooltip') + "</div></div>");
}

function CopyToClipboard(s)
{
	if( window.clipboardData && clipboardData.setData )
	{
		clipboardData.setData("Text", s);
	}
	else if(navigator.userAgent.indexOf("Opera") != -1) {
 			alert('Not supported in this browser!');
 	} 
 	else if (window.netscape) {
	 try {
	 	netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
	 } 
	 catch (e) {
	 	alert("You need set 'signed.applets.codebase_principal_support=true' at about:config'");
	 return false;
 	}
	 var clip =  Components.classes['@mozilla.org/widget/clipboard;1'].createInstance (Components.interfaces.nsIClipboard);
	 if (!clip) return;
	 var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance (Components.interfaces.nsITransferable);
	 if (!trans) return;
	 trans.addDataFlavor('text/unicode');
	 var str = new Object();
	 var len = new Object();
	 var str = Components.classes["@mozilla.org/supports-string;1"].createInstance (Components.interfaces.nsISupportsString);
	 var copytext = s;
	 str.data = copytext;
	 trans.setTransferData("text/unicode",str,copytext.length*2);
	 var clipid = Components.interfaces.nsIClipboard;
	 if (!clip) return false;
	 clip.setData(trans,null,clipid.kGlobalClipboard);
 	
 }
 else {
 	alert('Not supported in this browser!');
 }
}

function uncache(address) {
	return address + ((address.indexOf("?") >= 0) ? "&" : "?") + "rand=" + Math.floor(Math.random()*11)
}

function ProcessError(code) {
	alert("Server error.Please try again later. The error code is '" + code + "'.");
}

function ProcessError(XMLHttpRequest, textStatus, errorThrown) {
	alert("Server error.Please try again later. Error message:\n" + XMLHttpRequest.responseText);
}

function ValidateAddToCart(){
	var valid = true;
	if ($("#cmbChooseColor").val() == "") {
		alert("Please select your color/lens.");
		$("#cmbChooseColor").focus();
		valid = false;
	}
	else if ($("#cmbChooseSize").val() == "") {
		alert("Please select your frame size.");
		$("#cmbChooseSize").focus();
		valid = false;
	}
	else if ($("#cmbChooseRxLens").length > 0 &&  $("#cmbChooseRxLens").val() == "") {
		alert("Please select your RxLens option.");
		$("#cmbChooseRxLens").focus();
		valid = false;
	}
	return valid;
}

function IEVersion() {  
	  var version = 999; // we assume a sane browser   
	  if (navigator.appVersion.indexOf("MSIE") != -1)      // bah, IE again, lets downgrade version number  
		{	    
	    version = parseFloat(navigator.appVersion.split("MSIE")[1]);   
	  }
	  return version;  
}