


/** hash.jsp **/



$.Hash = function(){ this.init(); };

$.Hash.prototype = { 
	init:function(){
		this.items = {};
		this.keys = [];
	},
	add: function(key,value){
		this.items[key] = value;
		if(!this.hasKey(key)){	
			this.keys.push(key);
		}
	},
	get:function(key){
		return (this.hasKey(key)) ? this.items[key] : null;
	},
	remove: function(key){
		if(this.hasKey(key)){
			delete this.items[key];
			this.keys.splice($.inArray(key, this.keys), 1);
		}
	},
	hasKey: function(key){
		return $.inArray(key, this.keys) > -1;
	},
	hasValue: function hasValue(value){
		for (var item in this.items){
			if(this.items[item] == value) return true;
		}
		return false;
	},
	clear: function(){
		this.items = {};
		this.keys = [];
		this.length = 0;
	},
	join:function(delimiter){
		return this.toArray().join(delimiter);
	},
	each: function(fn) {
		for (var i = 0; i < this.keys.length; i++){
			fn(this.keys[i], this.items[this.keys[i]]);
		}
	},
	toArray: function(){
		var arr = [];
		for(var i = 0; i < this.keys.length;){
			arr.push(this.items[this.keys[i++]]);
		}
		return arr;
	},
	length: function(){
		return this.keys.length;
	},
	toJSON: function(){
		var arr = this.toArray();
		if(arr.length < 1){ return null; }
		return $.JSON.encode(arr);
	}
};

// reverse Hash which returns its keys for toArray();
$.rHash = function(){ this.init(); };
$.extend($.rHash.prototype, $.Hash.prototype);
$.rHash.prototype.toArray = function(){ return this.keys; };

// Single Value Hash
// Sounds stupid well it is.  This way there $.search can use the same functions for all filter groups
$.sHash = function(){ this.init(); };
$.extend($.sHash.prototype, $.Hash.prototype);
$.sHash.prototype.add = function(key,value){
	this.clear();
	this.items[key] = value;
	if(!this.hasKey(key)){	
		this.length++;
		this.keys.push(key);
	}
}
/** date.format.jsp **/



/*
 * Date Format 1.2.3
 * (c) 2007-2009 Steven Levithan <stevenlevithan.com>
 * MIT license
 *
 * Includes enhancements by Scott Trenda <scott.trenda.net>
 * and Kris Kowal <cixar.com/~kris.kowal/>
 *
 * Accepts a date, a mask, or a date and a mask.
 * Returns a formatted version of the given date.
 * The date defaults to the current date/time.
 * The mask defaults to dateFormat.masks.default.
 */

var dateFormat = function () {
	var	token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g,
		timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,
		timezoneClip = /[^-+\dA-Z]/g,
		pad = function (val, len) {
			val = String(val);
			len = len || 2;
			while (val.length < len) val = "0" + val;
			return val;
		};

	// Regexes and supporting functions are cached through closure
	return function (date, mask, utc) {
		var dF = dateFormat;

		// You can't provide utc if you skip other args (use the "UTC:" mask prefix)
		if (arguments.length == 1 && Object.prototype.toString.call(date) == "[object String]" && !/\d/.test(date)) {
			mask = date;
			date = undefined;
		}

		// Passing date through Date applies Date.parse, if necessary
		date = date ? new Date(date) : new Date;
		if (isNaN(date)) throw SyntaxError("invalid date");

		mask = String(dF.masks[mask] || mask || dF.masks["default"]);

		// Allow setting the utc argument via the mask
		if (mask.slice(0, 4) == "UTC:") {
			mask = mask.slice(4);
			utc = true;
		}

		var	_ = utc ? "getUTC" : "get",
			d = date[_ + "Date"](),
			D = date[_ + "Day"](),
			m = date[_ + "Month"](),
			y = date[_ + "FullYear"](),
			H = date[_ + "Hours"](),
			M = date[_ + "Minutes"](),
			s = date[_ + "Seconds"](),
			L = date[_ + "Milliseconds"](),
			o = utc ? 0 : date.getTimezoneOffset(),
			flags = {
				d:    d,
				dd:   pad(d),
				ddd:  dF.i18n.dayNames[D],
				dddd: dF.i18n.dayNames[D + 7],
				m:    m + 1,
				mm:   pad(m + 1),
				mmm:  dF.i18n.monthNames[m],
				mmmm: dF.i18n.monthNames[m + 12],
				yy:   String(y).slice(2),
				yyyy: y,
				h:    H % 12 || 12,
				hh:   pad(H % 12 || 12),
				H:    H,
				HH:   pad(H),
				M:    M,
				MM:   pad(M),
				s:    s,
				ss:   pad(s),
				l:    pad(L, 3),
				L:    pad(L > 99 ? Math.round(L / 10) : L),
				t:    H < 12 ? "a"  : "p",
				tt:   H < 12 ? "am" : "pm",
				T:    H < 12 ? "A"  : "P",
				TT:   H < 12 ? "AM" : "PM",
				Z:    utc ? "UTC" : (String(date).match(timezone) || [""]).pop().replace(timezoneClip, ""),
				o:    (o > 0 ? "-" : "+") + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4),
				S:    ["th", "st", "nd", "rd"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10]
			};

		return mask.replace(token, function ($0) {
			return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1);
		});
	};
}();

// Some common format strings
dateFormat.masks = {
	"default":      "ddd mmm dd yyyy HH:MM:ss",
	shortDate:      "m/d/yy",
	mediumDate:     "mmm d, yyyy",
	longDate:       "mmmm d, yyyy",
	fullDate:       "dddd, mmmm d, yyyy",
	shortTime:      "h:MM TT",
	mediumTime:     "h:MM:ss TT",
	longTime:       "h:MM:ss TT Z",
	isoDate:        "yyyy-mm-dd",
	isoTime:        "HH:MM:ss",
	isoDateTime:    "yyyy-mm-dd'T'HH:MM:ss",
	isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'"
};

// Internationalization strings
dateFormat.i18n = {
	dayNames: [
		"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat",
		"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
	],
	monthNames: [
		"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
		"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
	]
};

// For convenience...
Date.prototype.format = function (mask, utc) {
	return dateFormat(this, mask, utc);
};


/** global.jsp **/



//Hide facebook panel until page loaded to hide white background.
$('.facebook-panel').hide();

function isDesktop() {
	return /^http?:\/\/d(ev)?[\._]/.test(location.href);
}

$(document).ready(function(){
	
	//Show facebook panel after page load to hide white background.
	$('.facebook-panel').show();
	
	
	// Initilaizes Generic Copia.Tabs
	$("ul[role=tablist]").tabs();
	
	if(!$.support.placeholderAttr){
		$('[placeholder]').placeholderText();
	}
	
	// Initializes General Copia.Menu
	$('menu:not(.menu2)').menu();
	
	//initializes searchbar in header
	Copia.GlobalSearch();
	
	$('.flyoutBtn').click(function(){
		if($('.flyout').width() == 0){ $('.flyout').animate({"width": "102px"}, "normal"); }
		else { $('.flyout').animate({"width": "0px"}, "normal"); }
	});
	
	//Hide Welcome Content for the Profile/Dashboard 
	$('#closeWelcome').live('click', function(e) {
		e.preventDefault();
		$('#welcomePanel').slideUp("slow");
	});
	
	//Clears out text from saved searches text box when you create new saved search
	$('#nameYourSearch').focus(function(){
		$('#savedSearchName').val("");
	});
	
	$("#search input[type=text]").bind({
		'focus': function(){ $(this).addClass('active'); },
		'blur' : function(){ $(this).removeClass('active'); }
	});
	
	$(".beginBox input").focus(function() {
		if( this.value == this.defaultValue ) {
			this.value = "";
		}
	}).blur(function() {
		if( !this.value.length ) {
			this.value = this.defaultValue;
		}
	});
	
	$('.starRating:not(.forReview) .userRate').live('click', function(e){
		var $target = $(e.currentTarget);
		var x = e.clientX + $(window).scrollLeft() - $target.offset().left;
		var rating = Math.floor(x / (($target.parent('.starRating').is('.large')) ? 24 : 18)) + 1
	
		var data = {
			'catalogId' : $target.attr('data-catalog-id'),
			'rating' : rating
		};
		$.getJSON('/library/rate.json', data);
		
		$target.attr('class', 'userRate userRate' + rating + 'star');
	});
	
	$(".addToCart").live("click", function(e) {
		var $target = $(e.currentTarget);
		var params = {};
		params.id = $target.attr("data-cart-id");
		var formatId = $target.attr("data-format-id");
		if(formatId) params.formatId = formatId;
		// FIXME This will need to be adjusted for different types
		var $cartSize = $("#cartSize");
		$.getJSON("/catalog/cart/add.json", params, function(data) {
			if(data.success) {
				/*var matcher = /(.*?)\((\d+)\)(.*)/.exec($cartSize.html());
				var count = Math.max(0, parseInt(matcher[2])+1);
				$cartSize.html(matcher[1] + "(" + count + ")" + matcher[3]);
				$cartSize.show();*/
				// redirect to the cart.
				$(window.location).attr('href', '/catalog/cart.html');

			}
		});
		$cartSize.show();
	});
		
	$('.starRating.forReview .userRate').live('click', function(e){
		var $target = $(e.currentTarget);
		var x = e.clientX + $(window).scrollLeft() - $target.offset().left;
		var rating = Math.floor(x / 24) + 1
		
		$target.attr('class', 'userRate userRate' + rating + 'star');
		
		$target.parents('form').eq(0).find('[name=rating]').val(rating);
	});
	
	$(".ajaxLink").live('click', function(event){
		event.preventDefault();
		var dataFeedbackTo = this.getAttribute("data-feedback-to");
		var dataSeccessMessage = this.getAttribute("data-success-message");
		var dataFailMessage = this.getAttribute("data-fail-message");
		var dataFeedbackMs = this.getAttribute("data-feedback-ms");
		var dataNewFlyoutMessage = this.getAttribute("data-flyout-message");
		
		if(!dataSeccessMessage) dataSeccessMessage = "Success";
		if(!dataFailMessage) dataFailMessage = "Failure";
		if(!dataFeedbackTo) dataFeedbackTo = this.id+"Feedback";
		if(!dataFeedbackMs) dataFeedbackMs = 5000;
		me = this;
		$.getJSON(this.href,function(data){
			var dataFeedBackToJQ = $("#"+dataFeedbackTo);
			if(data.message) dataFeedBackToJQ.html(data.message);
			else dataFeedBackToJQ.html((data.success)?dataSeccessMessage:dataFailMessage);
			
			if (dataNewFlyoutMessage) {
				$(me).parents().find('.flyoutBtn').click().replaceWith('<div>'+dataNewFlyoutMessage+'</div>');
			}
			
			if(/Follow/.test($(me).text())){
				C.Stats.action('add-friend', 'Follower')
			} else if (/Follow Back/.test($(me).text())){
				C.Stats.action('add-friend', 'Friend')
			}
			
			dataFeedBackToJQ.fadeIn();
			$.timeout(dataFeedbackTo,function(){
				dataFeedBackToJQ.fadeOut();
			},Number(dataFeedbackMs));
		});
	});
	
	//Collapse and Expand (also known as toggle anchor) JQuery 
	$('.catalogList li a.toggle').live("click", function(e) {	
		e.preventDefault();
		var $parent = $(e.currentTarget).parents('li').eq(0).toggleClass('collapsedList');
		if(_C.page == "catalog" || _C.page == "library"){$parent.find('.cover').toggleClass('small').toggleClass('large')};	
	});
	
	$("#quickToggle").click(function () {
		//$.lbox("/people/quickswitch.html", { height:487,width:703,type:"ajax" });
		//$(this).toggleClass('on');
		if(!$("#MyPeople").attr("data-loaded")) {
			$("#MyPeople .userGrid").load("/people/quickswitch.html");
			$("#MyPeople").attr("data-loaded", true);
		}
      	$("#quickSwitch").slideToggle("slow");
    });
	$("#MyGroupsTab").click(function() {
		if(!$("#MyGroups").attr("data-loaded")) {
			$("#MyGroups .groupGrid").load("/groups/quickswitch.html");
			$("#MyGroups").attr("data-loaded", true);
		}
	});
	$(".dashButtons > button.btnFollow").click(function () {
		var id = $(this).parents("[data-inbox-id]").eq(0).attr("data-inbox-id");
		$("[data-inbox-id="+id+"]").remove();
	});
	
	
	$('#searchBar .advancedToggle').click(function(e){
		e.preventDefault();
		$('#searchBar').toggleClass('advanced');
	});
	
	$('.backToTop').live('click', function(e){
		e.preventDefault();
		window.scrollTo(0, 0);
	});
	
	var hdrSearch = function() {
		var srch = $("#hdrSearchType option:selected").eq(0);
		if (!srch.attr("value"))
			return;
		$("#hdrSearchForm").attr("action", srch.attr("value"));
		$("#hdrSearchForm #hdrSearchKey").attr("placeholder", srch.attr("data-placeholder"));
	}
	
	$("#hdrSearchForm #hdrSearchType").change(hdrSearch);
	hdrSearch();
});

Copia.Facebook = {
	interval: "Copia.Facebook.Window",
	post: function(link, callback) {
		Copia.Facebook.link = link;
		if(!_C.hasFacebook) {
			if(/\?/.test(link.href)) link.href += "&";
			else link.href += "?";
			link.href += $.param({"url":location.href});
			return true;
		} else {
			var iframe = $("#facebookFrame");
			if(iframe.length > 0) return false;
			
			Copia.Facebook.callback = callback;
			
			var iframe = $('<iframe id="facebookFrame" scrolling="auto" frameborder="0" style="width:99%; height:99%;">');
			iframe.attr("src", link.href);
			$("body").append(iframe);
			
			$.timeout(Copia.Facebook.interval, function() {
				$.lbox(iframe, {"height":548,"width":673,"type":"html"});
			}, 5000);
			return false;
		}
	},
	success: function() {
		if(Copia.Facebook.link) {
			$(Copia.Facebook.link).replaceWith("<span>Posted!</span>");
		}
		Copia.Facebook.close();
	},
	fail: function() {
		Copia.Facebook.close();
	},
	close: function(callback) {
		$.timeout(Copia.Facebook.interval);
		Copia.LBox.close();
		$("#facebookFrame").remove();
		var cb = (callback) ? callback : Copia.Facebook.callback;
		if(cb) cb.apply(this, []);
		Copia.Facebook.callback = null;
		Copia.Facebook.link = null;
	}
};

$('form.ajaxForm').live('submit', function(e){
	e.preventDefault();

	var $form = $(e.currentTarget);
	ajaxSettings = {
		url : $form.attr('action'),
		type : $form.attr('method'),
		data : $form.serializeArray(),
		dataType : 'json',
		success : function(data){
			if(data.success == true){
				if($form.parents('.lboxContent').length){ Copia.LBox.close(); }
				eval($form.attr('data-on-submit'));
			}
		}
	}
	$.ajax(ajaxSettings);
	return false;
});

function bookImg(img){
	var $img = $(img);
	var $defaultImg = $('<div class="' +  $img.attr('class') + '"><div class="gcBanner"><div><p>' + C.shorten($img.attr('title'), 40) + '</p></div></div></div>');
	$img.replaceWith($defaultImg);
}


//
// TODO: consolidate social and group connection js functionality
//
function joinPublicGroup(groupId,elem,fadeTimeOut) {
	var url="/groups/joinpublic.json?groupid="+groupId;
	
	$.getJSON(url,function(data){
		var fadeElem = $(elem).parent();
		var div = $(elem).parent().addClass("joinGroup").html('<a role="button" class="action plus" style="margin-left:0; width:115px;"><b style="float:left;padding-top:3px;">Welcome!</b></a>');
		if (fadeTimeOut > 0) {
			$.timeout("publicGroupJoin"+groupId,function(){
				fadeElem.fadeOut();
			},fadeTimeOut);
		}
		C.Stats.action('join-group');
	});
}

function requestGroupMembership(groupId,elem,fadeTimeOut) {
	var url="/groups/requestmembership.json?groupid="+groupId;
	
	$.getJSON(url,function(data){
		var fadeElem = $(elem).parent();
		var div = $(elem).parent().html('<a role="button" class="action" style="margin-left:10px; width:140px;"><b style="float:left;padding-top:3px;">Request sent!</b></a>');
		if (fadeTimeOut > 0) {
			$.timeout("requestGroupJoin"+groupId,function(){
				fadeElem.fadeOut();
			},fadeTimeOut);
		}
		C.Stats.action('join-group');
	});
}

/* console.log Preventative Measures */
if(!console){
	var console = {};
	console.log = function(){}
}


// To Standards Compliant links for New Windows
function externalLinks () {
	if (!document.getElementsByTagName)  return;
	var anchors = document.getElementsByTagName("a");
	for (var i=0; i < anchors.length; i++) {
		var anchor = anchors[i];
		if (anchor.getAttribute("href") && anchor.getAttribute("rel") == "external")
		anchor.target= "_blank";
	}
}
window.onload = externalLinks;



/** swobject.jsp **/



/*	SWFObject v2.2 <http://code.google.com/p/swfobject/> 
	is released under the MIT License <http://www.opensource.org/licenses/mit-license.php> 
*/
var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O.ActiveXObject!=D){try{var ad=new ActiveXObject(W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y<X;Y++){U[Y]()}}function K(X){if(J){X()}else{U[U.length]=X}}function s(Y){if(typeof O.addEventListener!=D){O.addEventListener("load",Y,false)}else{if(typeof j.addEventListener!=D){j.addEventListener("load",Y,false)}else{if(typeof O.attachEvent!=D){i(O,"onload",Y)}else{if(typeof O.onload=="function"){var X=O.onload;O.onload=function(){X();Y()}}else{O.onload=Y}}}}}function h(){if(T){V()}else{H()}}function V(){var X=j.getElementsByTagName("body")[0];var aa=C(r);aa.setAttribute("type",q);var Z=X.appendChild(aa);if(Z){var Y=0;(function(){if(typeof Z.GetVariable!=D){var ab=Z.GetVariable("$version");if(ab){ab=ab.split(" ")[1].split(",");M.pv=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}else{if(Y<10){Y++;setTimeout(arguments.callee,10);return}}X.removeChild(aa);Z=null;H()})()}else{H()}}function H(){var ag=o.length;if(ag>0){for(var af=0;af<ag;af++){var Y=o[af].id;var ab=o[af].callbackFn;var aa={success:false,id:Y};if(M.pv[0]>0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad<ac;ad++){if(X[ad].getAttribute("name").toLowerCase()!="movie"){ah[X[ad].getAttribute("name")]=X[ad].getAttribute("value")}}P(ai,ah,Y,ab)}else{p(ae);if(ab){ab(aa)}}}}}else{w(Y,true);if(ab){var Z=z(Y);if(Z&&typeof Z.SetVariable!=D){aa.success=true;aa.ref=Z}ab(aa)}}}}}function z(aa){var X=null;var Y=c(aa);if(Y&&Y.nodeName=="OBJECT"){if(typeof Y.SetVariable!=D){X=Y}else{var Z=Y.getElementsByTagName(r)[0];if(Z){X=Z}}}return X}function A(){return !a&&F("6.0.65")&&(M.win||M.mac)&&!(M.wk&&M.wk<312)}function P(aa,ab,X,Z){a=true;E=Z||null;B={success:false,id:X};var ae=c(X);if(ae){if(ae.nodeName=="OBJECT"){l=g(ae);Q=null}else{l=ae;Q=X}aa.id=R;if(typeof aa.width==D||(!/%$/.test(aa.width)&&parseInt(aa.width,10)<310)){aa.width="310"}if(typeof aa.height==D||(!/%$/.test(aa.height)&&parseInt(aa.height,10)<137)){aa.height="137"}j.title=j.title.slice(0,47)+" - Flash Player Installation";var ad=M.ie&&M.win?"ActiveX":"PlugIn",ac="MMredirectURL="+encodeURI(O.location).toString().replace(/&/g,"%26")+"&MMplayerType="+ad+"&MMdoctitle="+j.title;if(typeof ab.flashvars!=D){ab.flashvars+="&"+ac}else{ab.flashvars=ac}if(M.ie&&M.win&&ae.readyState!=4){var Y=C("div");X+="SWFObjectNew";Y.setAttribute("id",X);ae.parentNode.insertBefore(Y,ae);ae.style.display="none";(function(){if(ae.readyState==4){ae.parentNode.removeChild(ae)}else{setTimeout(arguments.callee,10)}})()}u(aa,ab,X)}}function p(Y){if(M.ie&&M.win&&Y.readyState!=4){var X=C("div");Y.parentNode.insertBefore(X,Y);X.parentNode.replaceChild(g(Y),X);Y.style.display="none";(function(){if(Y.readyState==4){Y.parentNode.removeChild(Y)}else{setTimeout(arguments.callee,10)}})()}else{Y.parentNode.replaceChild(g(Y),Y)}}function g(ab){var aa=C("div");if(M.win&&M.ie){aa.innerHTML=ab.innerHTML}else{var Y=ab.getElementsByTagName(r)[0];if(Y){var ad=Y.childNodes;if(ad){var X=ad.length;for(var Z=0;Z<X;Z++){if(!(ad[Z].nodeType==1&&ad[Z].nodeName=="PARAM")&&!(ad[Z].nodeType==8)){aa.appendChild(ad[Z].cloneNode(true))}}}}}return aa}function u(ai,ag,Y){var X,aa=c(Y);if(M.wk&&M.wk<312){return X}if(aa){if(typeof ai.id==D){ai.id=Y}if(M.ie&&M.win){var ah="";for(var ae in ai){if(ai[ae]!=Object.prototype[ae]){if(ae.toLowerCase()=="data"){ag.movie=ai[ae]}else{if(ae.toLowerCase()=="styleclass"){ah+=' class="'+ai[ae]+'"'}else{if(ae.toLowerCase()!="classid"){ah+=" "+ae+'="'+ai[ae]+'"'}}}}}var af="";for(var ad in ag){if(ag[ad]!=Object.prototype[ad]){af+='<param name="'+ad+'" value="'+ag[ad]+'" />'}}aa.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+ah+">"+af+"</object>";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab<ac;ab++){I[ab][0].detachEvent(I[ab][1],I[ab][2])}var Z=N.length;for(var aa=0;aa<Z;aa++){y(N[aa])}for(var Y in M){M[Y]=null}M=null;for(var X in swfobject){swfobject[X]=null}swfobject=null})}}();return{registerObject:function(ab,X,aa,Z){if(M.w3&&ab&&X){var Y={};Y.id=ab;Y.swfVersion=X;Y.expressInstall=aa;Y.callbackFn=Z;o[o.length]=Y;w(ab,false)}else{if(Z){Z({success:false,id:ab})}}},getObjectById:function(X){if(M.w3){return z(X)}},embedSWF:function(ab,ah,ae,ag,Y,aa,Z,ad,af,ac){var X={success:false,id:ah};if(M.w3&&!(M.wk&&M.wk<312)&&ab&&ah&&ae&&ag&&Y){w(ah,false);K(function(){ae+="";ag+="";var aj={};if(af&&typeof af===r){for(var al in af){aj[al]=af[al]}}aj.data=ab;aj.width=ae;aj.height=ag;var am={};if(ad&&typeof ad===r){for(var ak in ad){am[ak]=ad[ak]}}if(Z&&typeof Z===r){for(var ai in Z){if(typeof am.flashvars!=D){am.flashvars+="&"+ai+"="+Z[ai]}else{am.flashvars=ai+"="+Z[ai]}}}if(F(Y)){var an=u(aj,am,ah);if(aj.id==ah){w(ah,true)}X.success=true;X.ref=an}else{if(aa&&A()){aj.data=aa;P(aj,am,ah,ac);return}else{w(ah,true)}}if(ac){ac(X)}})}else{if(ac){ac(X)}}},switchOffAutoHideShow:function(){m=false},ua:M,getFlashPlayerVersion:function(){return{major:M.pv[0],minor:M.pv[1],release:M.pv[2]}},hasFlashPlayerVersion:F,createSWF:function(Z,Y,X){if(M.w3){return u(Z,Y,X)}else{return undefined}},showExpressInstall:function(Z,aa,X,Y){if(M.w3&&A()){P(Z,aa,X,Y)}},removeSWF:function(X){if(M.w3){y(X)}},createCSS:function(aa,Z,Y,X){if(M.w3){v(aa,Z,Y,X)}},addDomLoadEvent:K,addLoadEvent:s,getQueryParamValue:function(aa){var Z=j.location.search||j.location.hash;if(Z){if(/\?/.test(Z)){Z=Z.split("?")[1]}if(aa==null){return L(Z)}var Y=Z.split("&");for(var X=0;X<Y.length;X++){if(Y[X].substring(0,Y[X].indexOf("="))==aa){return L(Y[X].substring((Y[X].indexOf("=")+1)))}}}return""},expressInstallCallback:function(){if(a){var X=c(R);if(X&&l){X.parentNode.replaceChild(l,X);if(Q){w(Q,true);if(M.ie&&M.win){l.style.display="block"}}if(E){E(B)}}a=false}}}}();
/** passwordStrengthMeter.jsp **/



// Password strength meter
// This jQuery plugin is written by firas kassem [2007.04.05]
// Firas Kassem  phiras.wordpress.com || phiras at gmail {dot} com
// for more information : http://phiras.wordpress.com/2007/04/08/password-strength-meter-a-jquery-plugin/

var badPass = 'Weak';
var goodPass = 'Medium';
var strongPass = 'Strong';



function passwordStrength(password,username)
{
    score = 0 
    
    //password < 4
    if (password.length < 4 ) { return badPass }
    
    //password == username
    if (password.toLowerCase()==username.toLowerCase()) return badPass
    
    //password length
    score += password.length * 4
    score += ( checkRepetition(1,password).length - password.length ) * 1
    score += ( checkRepetition(2,password).length - password.length ) * 1
    score += ( checkRepetition(3,password).length - password.length ) * 1
    score += ( checkRepetition(4,password).length - password.length ) * 1

    //password has 3 numbers
    if (password.match(/(.*[0-9].*[0-9].*[0-9])/))  score += 5 
    
    //password has 2 sybols
    if (password.match(/(.*[!,@,#,$,%,^,&,*,?,_,~].*[!,@,#,$,%,^,&,*,?,_,~])/)) score += 5 
    
    //password has Upper and Lower chars
    if (password.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/))  score += 10 
    
    //password has number and chars
    if (password.match(/([a-zA-Z])/) && password.match(/([0-9])/))  score += 15 
    //
    //password has number and symbol
    if (password.match(/([!,@,#,$,%,^,&,*,?,_,~])/) && password.match(/([0-9])/))  score += 15 
    
    //password has char and symbol
    if (password.match(/([!,@,#,$,%,^,&,*,?,_,~])/) && password.match(/([a-zA-Z])/))  score += 15 
    
    //password is just a nubers or chars
    if (password.match(/^\w+$/) || password.match(/^\d+$/) )  score -= 10 
    
    //verifing 0 < score < 100
    if ( score < 0 )  score = 0 
    if ( score > 100 )  score = 100 
    
    if (score < 34 )  return badPass 
    if (score < 68 )  return goodPass
    return strongPass
}


// checkRepetition(1,'aaaaaaabcbc')   = 'abcbc'
// checkRepetition(2,'aaaaaaabcbc')   = 'aabc'
// checkRepetition(2,'aaaaaaabcdbcd') = 'aabcd'

function checkRepetition(pLen,str) {
    res = ""
    for ( i=0; i<str.length ; i++ ) {
        repeated=true
        for (j=0;j < pLen && (j+i+pLen) < str.length;j++)
            repeated=repeated && (str.charAt(j+i)==str.charAt(j+i+pLen))
        if (j<pLen) repeated=false
        if (repeated) {
            i+=pLen-1
            repeated=false
        }
        else {
            res+=str.charAt(i)
        }
    }
    return res
}

