var Yue = {};

Yue.util = {};

Yue.util.setHomepage = function(obj, vrl) {
	try {
		obj.style.behavior = 'url(#default#homepage)';
		obj.setHomePage(vrl);
	} catch (e) {
		if (window.netscape) {
			try {
				netscape.security.PrivilegeManager
						.enablePrivilege("UniversalXPConnect");
			} catch (e) {
				alert("此操作被浏览器拒绝！\n请在浏览器地址栏输入“about:config”并回车\n然后将 [signed.applets.codebase_principal_support]的值设置为'true',双击即可。");
			}
			var prefs = Components.classes['@mozilla.org/preferences-service;1']
					.getService(Components.interfaces.nsIPrefBranch);
			prefs.setCharPref('browser.startup.homepage', vrl);
		}
	}
}

Yue.util.addFavorite = function(sURL, sTitle) {
	try {
		window.external.addFavorite(sURL, sTitle);
	} catch (e) {
		try {
			window.sidebar.addPanel(sTitle, sURL, "");
		} catch (e) {
			alert("加入收藏失败，请使用Ctrl+D进行添加");
		}
	}
}

;(function($) {
	$.extend($.fn, {
		dateSelectBoxes : function(settings) {
			var config = {
				date: "1990/1/1",
				startYear : 1900,
				endYear : 2010,
				yearSelectName : "year",
				monthSelectName: "month",
				daySelectName: "day",
				yearSelectClass: "",
				monthSelectClass: "",
				daySelectClass: ""
			};
			
			if (settings) {
				$.extend(config, settings);
			}
			
			var defaultDate = new Date(config.date);
			var defaultYear = defaultDate.getFullYear();
			var defaultMonth = defaultDate.getMonth() + 1;
			var defaultDay = defaultDate.getDate();
			
			if (isNaN(defaultDate)) {
				throw new Error("date config error.");
			}
			
			var yearNode = $('<select class="'+ config.yearSelectClass + '" />').attr({name:config.yearSelectName});
			
			for (var year = config.startYear; year <= config.endYear; year++) {
				var optionNode = $("<option />").val(year).text(year);
				if (year == defaultYear) {
					optionNode.attr("selected", "selected");
				}
				yearNode.append(optionNode);
			}
			
			var monthNode = $('<select class="'+ config.monthSelectClass + '" />').attr({name:config.monthSelectName});
			for (var month = 1; month<=12; month++) {
				var optionNode = $("<option />").val(month).text(month);
				if (month == defaultMonth) {
					optionNode.attr("selected", "selected");
				}
				monthNode.append(optionNode);
			}
			
			var dayNode = $('<select class="'+ config.daySelectClass + '" />').attr({name:config.daySelectName});
			
			updateDayNode(yearNode, monthNode, dayNode, defaultDay);
			
			this.append(yearNode).append(monthNode).append(dayNode);
			
			yearNode.change(function() {
				updateDayNode(yearNode, monthNode, dayNode);
			});
			
			monthNode.change(function(){
				updateDayNode(yearNode, monthNode, dayNode);
			});
			
			return this;
			
			function isLeapYear(year) {
			    return ( year == "" || ( ( year % 4 == 0 ) && ( year % 100 != 0 ) ) || ( year % 400 == 0) );
		    }
			
		    function updateDayNode(yearNode, monthNode, dayNode, selectedDay) {
		    	
				var selectedYear = parseInt(yearNode.val());
				var selectedMonth = parseInt(monthNode.val());
				
				if (!selectedDay) {
					var selectedDay = parseInt(dayNode.val());
				}
				
				var endDay = 0;
				switch (selectedMonth) {
				case 1:
				case 3:
				case 5:
				case 7:
				case 8:
				case 10:
				case 12:
					endDay = 31;
					break;
				case 4:
				case 6:
				case 9:
				case 11:
					endDay = 30;
					break;
				case 2:
					if (isLeapYear(selectedYear)) {
						endDay = 29 ;
					}
					else {
						endDay = 28 ;
					}
					break;
				}
				dayNode.empty();
				for (var day=1; day<=endDay; day++) {
					var optionNode = $("<option />").val(day).text(day);
					if (day == selectedDay) {
						optionNode.attr("selected", "selected");
					}
					dayNode.append(optionNode);
				}
		    }
			
		}
	});
	
})(jQuery);
