var proxy_url = "http://disney.go.com/disneyinsider/print/proxy.jsp?url=";

function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}
$(document).ready(function() {
	$("#printer-friendly a").click(function(e) {
		var link = $(this).attr("href");
		
		window.open(link, 'Print','width=638,height=400, scrollbars=1, resizable=0');
		
		e.stopPropagation();
		return false;
	});
	
	$("div.staf-button").click(onStafClick);
	$("button.staf_close").click(function(e) {
		$(this).parent().fadeOut('fast');
	});
	$("form.staf-form").submit(onStafSend);
	$("button.staf_sendanother").click(onStafClick);
	
	$("div.staf-thanks").click(preventDefaultClick);
	$("div.staf-form-div").click(preventDefaultClick);
	
	$("ul.rss-links").each(setupRSSModule);
	
	$("div.poll form").submit(function(e) {
		e.stopPropagation();
		e.preventDefault();
		return false;
	});
	
	$("div.poll").each(setupPoll);
});

function setupPoll(index, elem) {
	var action = $(this).find("form").attr("action");
	var name = $(this).find("form").attr("name");
	
	if(readCookie(name) == null) {	
		$.ajax({
			url: proxy_url + encodeURIComponent(action) + "&mime=text/xml",
			context: this,
			dataType: 'xml',
			success: onPollLoaded,
			error: onPollFailed
		});
	} else {
		$.ajax({
			url: proxy_url + encodeURIComponent(action) + "&mime=text/xml",
			context: this,
			dataType: 'xml',
			success: onPollResults,
			error: onPollFailed
		});
	}
}

function onPollLoaded(data, textStatus, jqXHR) {
	var q = $(data).find("question > text").text();
	var name = $(this).find("form").attr("name");
	
	$(this).find("h5").text(q);
	
	var qdiv = $(this).find("div.poll-questions");

	$(data).find("question choice text").each(function(index, elem) {
		var answer = $(this).text();
		var nm = name + "_q";
		var id = name + "_q_" + (index + 1);
		
		var html = '<div class="fieldset">';		
		html += '<input type="radio" name="'+nm+'" id="'+id+'" value="'+(index+1)+'">';
		html += '<label for="'+id+'">'+answer+'</label>';
		html += '</div>';

		$(qdiv).append(html);
	});
	
	$(this).show();
	$(this).find("form button").css("display", "block");
	$(this).find("div.poll-footer button").click(onPollSubmit);
}

function onPollSubmit(e) {
	var form = $(this).parent().parent();
	var div = $(form).parent();
	var action = $(form).attr("action");
	var selection = $(form).find("input[type=radio]:checked").val();
	
	var url;

	if(selection != null) {
		url = proxy_url + encodeURIComponent(action + "&Q1=" + selection);
	} else {
		return;
	}
	
	$.ajax({
		url: proxy_url + encodeURIComponent(action + "&Q1=" + selection) + "&mime=text/xml",
		success: onPollResults,
		context: $(div),
		dataType: 'xml',
		error: onPollFailed
	});
	
	$(this).hide();		
	
	e.stopPropagation();
	e.preventDefault();
	return false;
}

function onPollResults(data, textStatus, jqXHR) {
	var qdiv = $(this).find("div.poll-results");
	var name = $(this).find("form").attr("name");
	var q = $(data).find("question > text").text();
	
	$(this).find("h5").text(q);
	
	createCookie(name, "true", 1);
	
	$(data).find("question choice").each(function(index, elem) {
		var answer = $(this).find("text").text();
		var per = $(this).find("percent").text();
		
		var html = '<div class="fieldset">';		
		html += '<span class="score">'+per+'%</span>';
		html += '<span class="choice">'+answer+'</span>';
		html += '</div>';

		$(qdiv).append(html);
	});
		
	$(this).show();
	$(this).find("div.poll-questions").hide();
	$(this).find("div.poll-results").show();
}

function onPollFailed(jqXHR, textStatus, errorThrown) {
	$(this).hide();
}

function preventDefaultClick(e) {
	e.stopPropagation();
}

$('html').click(function(e) {
	$("div.staf-form-div").fadeOut('fast');
	$("div.staf-thanks").fadeOut('fast');
});

function onStafClick(e) {
	$("form.staf-form")[0].reset();
	$("div.staf-form-div").fadeIn('fast');
	$("div.staf-thanks").fadeOut('fast');
	$("div.staf-error").fadeOut('fast');
		
	e.stopPropagation();
	e.preventDefault();
	return false;
}

function onStafSend(e) {
	var friend_email = $("#staf_friendemail").val();
	var your_name = $("#staf_yourname").val();
	var friend_name = $("#staf_friendname").val();
	var error = false;
	
	$("#staf_friendemail").parent().removeClass("error");
	$("#staf_yourname").parent().removeClass("error");
	$("#staf_friendname").parent().removeClass("error");
	
	if(friend_email == "") {
		$("#staf_friendemail").parent().addClass("error");
		error = true;
	} 
	
	if(your_name == "") {
		$("#staf_yourname").parent().addClass("error");
		error = true;
	} 
	
	if(friend_name == "") {
		$("#staf_friendname").parent().addClass("error");
		error = true;
	} 
	
	if(!error) {
		var bu_listid = '17655';
		var suppression_url = "http://dolutils.disney.go.com/dolutils/disneychannel/email/api" +
							  "?requestorID=friendlytemplate&format=flash&api=testSuppression" +
							  "&emails=" + friend_email +
							  "&list=" + bu_listid;
		$.ajax({
			url: proxy_url + encodeURIComponent(suppression_url),
			success: onSuppressionLoad,
			dataType: 'text',
			error: onGenericMailFail
		});	
	}
	
	e.stopPropagation();
	e.preventDefault();
	return false;
}

function onSuppressionLoad(data, textStatus, jqXHR) {
	if(data.match(/EmailAddressesOkay: (.+)\n/)) {
		var friend_email = $("#staf_friendemail").val();
		var your_name = $("#staf_yourname").val();
		var friend_name = $("#staf_friendname").val();
		var email_subject = $("#staf_subject").val();
		var url = $("#page_url").val();		
		var bu_listid = '17655';
		var page_title = $("#page_title").val();
		
		var opt_out = "&br=20019&ba=" + friend_email;
		
		var params = "" +
		"format=flash&"+
		"requestorID=friendlytemplate&"+
		"api=testSuppression&"+
		"emails="+encodeURIComponent(friend_email)+"&"+
		//"optout_url1="+encodeURIComponent('http://ts.go.com/bk?bs=7&' + base64_encode(opt_out))+"&"+
		"list="+bu_listid+"&"+
		"subject="+encodeURIComponent(email_subject)+"&"+
		"site=DisneyInsider&"+
		//"error="+encodeURIComponent('disney/disneyinsider/errorformat.tpl')+"&"+
		"error="+encodeURIComponent('disneyinsider/error.tpl')+"&"+
		"redirect="+encodeURIComponent('http://disney.go.com/disneyinsider/')+"&"+
		//"mail_format_template="+encodeURIComponent('disney/disneyinsider/email_sendtofriend_20111003.tpl')+"&"+
		"mail_format_template="+encodeURIComponent('disneyinsider/email_sendtofriend_20111003.tpl')+"&"+
		"pass=1&"+
		"EMail="+encodeURIComponent('DisneyInsider@disneyonline.go.com')+"&"+
		"Name="+encodeURIComponent(your_name)+"&"+
		"toname="+encodeURIComponent(friend_name)+"&"+
		"email1="+encodeURIComponent(friend_email)+"&"+
		"page_url="+encodeURIComponent(url)+"&"+
		"checkdw=toname,Name&"+
		"content_type="+encodeURIComponent('text/html')+"&"+
		"page_title="+encodeURIComponent(page_title)+"&"+
		"debug=1";
		
		var generic_mail_url = "http://studio.disney.go.com/cgi-bin/gmail/generic_mail.cgi?" + params;
		
		$.ajax({
			url: proxy_url + encodeURIComponent(generic_mail_url),
			success: onGenericMailResponse,
			error: onGenericMailFail
		});
	} else {
		$("div.staf-form-div").fadeOut('fast');
		$("div.staf-error").fadeIn('fast');
	}
}

function onGenericMailFail(jqXHR, textStatus, errorThrown) {
	$("div.staf-form-div").fadeOut('fast');
	$("div.staf-thanks").fadeIn('fast');
}

function onGenericMailResponse(data, textStatus, jqXHR) { 
	if(data.search("oopspage=true") == -1) {
		$("div.staf-form-div").fadeOut('fast');
		$("div.staf-thanks").fadeIn('fast');
	} else {
		$("#staf_friendname").parent().addClass("error");
		$("#staf_yourname").parent().addClass("error");
	}
}

function AnalyticsTrackLink(lid,lpos,obj) {
   try{
     cto.linkObj=obj;
     cto.linkId=lid;
     cto.linkPosition=lpos;
     cto.linkType='o';
     cto.trackLink();
     //clear link tracking variables
     cto.linkObj="";
     cto.linkId="";
     cto.linkPosition="";
     cto.linkType="";
   }catch(e){}
 }


function setupRSSModule() {
	
	var api = $("div.scroll").jScrollPane({ showArrows: true }).data('jsp');
	
	var modrss = api.getContentPane();
	var loading = $('<div class="loading" style="height:'+$(this).height()+'px">Loading...</div>').appendTo(modrss);
	var parentModule = $(modrss).parents("div.rss");
	var trackingCounter = 1;
	
	$(this).find("li a").each(function() {	
		var href = $(this).attr("href");
		var id = $(this).attr("class");
		var feedTitle = $(this).text();
		var num = id.substring(9);
		var tgt = $(this).attr("target");
		var gateway = $(this).attr("rel");
		var trackingFmt = $(this).attr("name");
				
		$.ajax({
			async: false,
			success: function(xml) {
				if($(xml).find("channel item").length == 0) return;
				
				parentModule.show();
				
				var h4 = $('<h4>' + feedTitle + '</h4>').appendTo($(modrss));
				var newList = $('<ul class="rss"></ul>').appendTo($(modrss));	
				
				$(xml).find("channel item").each(function(index) {
					
					loading.hide();
					var title = $(this).find("title").text();
					//var desc = $(this).find("description").text();
					var link = gateway + $(this).find("link").text();
									
					//desc = desc.replace(/<img[^>]+>/g, '');
					var tracking = trackingFmt.replace(new RegExp(_OTWC, 'g'), trackingCounter);
					trackingCounter++;
					
					var li = $('<li>').appendTo(newList);
					var div = $('<div class="item-info"></div>').appendTo(li);
					var h5 = $('<h5><a href="' + link + '" target="' + tgt + '" name="' + tracking + '">' + title + '</a></h5>').appendTo(div);
					
					/*if(title != desc) {
						var desc = $('<p>' + desc + '</p>').appendTo(div);
					}*/
					
					api.reinitialise();
					
					if(index == num - 1) {
						return false;
					}
				});
			},
			error: function(request, textStatus, errorThrown) {
				//$(modrss).remove(h4);
				//$(modrss).remove(newList);
			},
			url: href
		});		
	});	
}

function onRSSFail(request, textStatus, errorThrown) {

}

$(window).load(function() {
	/* fancy select */
	$("select.dd-nav").change(function() {
		window.location = $(this).val();
	});
	
	$("a").focus(function(){
		 $(this).attr("hideFocus", "hidefocus");
	});

	function closeAllFancySelects() {
		$('div.fancy-select.opened').removeClass('opened');
	}
	
	$(window).resize(function() {
		$("div.fancy-select").each(function() {
			var id = $(this).attr("id");
						
			var os = $("select." + id).offset();

			$(this).css('left', os.left);
		});
	});

	var ret = "";
	
	var firstContainer = null;
	
	$("select.fancy-select").each(function(index, elem) {
		var width = $(this).outerWidth(); //Safari seems to require outerWidth
		var height = $(this).height();
		var os = $(this).offset();
		var select = $(this);		
		var container = $('<div class="fancy-select" id="fs-' + index + '"></div>').appendTo('body');
		select.addClass("replaced fs-" + index);
		
		container.css('width', width);	
		container.offset(os);
		
		var list = $('<ul></ul>').appendTo(container);
		
		$(this).find('option').each(function(idx, el) {
			var val = $(this).val();
			var txt = $(this).text();
			
			var li = $('<li><a href="' + val + '">' + txt + '</a></li>').appendTo(list);
			$(this).addClass('opt-' + idx);
			$(li).addClass('opt-' + idx);
			
			li.find('a').click(function(e) {
				var ref = $(this).attr('href');
								
				if(ref == "") {
					closeAllFancySelects();
					container.addClass("opened");
				} else {			
					select.find('option.opt-' + idx).attr('selected', 'selected');
					select.find('option.opt-' + idx).trigger('click');
					select.trigger('change');
					
					container.removeClass("opened");
				}
				
				e.stopPropagation();
				return false;
			});
		});
				
		var btn = $('<button></button>').appendTo(container);
		
		btn.click(function(e) {
			if(container.hasClass("opened")) {
				container.removeClass("opened");
			} else {
				closeAllFancySelects();
				container.addClass("opened");
			}
			e.stopPropagation();
			return false;
		});		
	});		
		
	$(document).click(closeAllFancySelects);
});

function utf8_encode (argString) {
    // http://kevin.vanzonneveld.net
    // +   original by: Webtoolkit.info (http://www.webtoolkit.info/)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: sowberry
    // +    tweaked by: Jack
    // +   bugfixed by: Onno Marsman
    // +   improved by: Yves Sucaet
    // +   bugfixed by: Onno Marsman
    // +   bugfixed by: Ulrich
    // +   bugfixed by: Rafal Kukawski
    // *     example 1: utf8_encode('Kevin van Zonneveld');
    // *     returns 1: 'Kevin van Zonneveld'

    if (argString === null || typeof argString === "undefined") {
        return "";
    }

    var string = (argString + ''); // .replace(/\r\n/g, "\n").replace(/\r/g, "\n");
    var utftext = "",
        start, end, stringl = 0;

    start = end = 0;
    stringl = string.length;
    for (var n = 0; n < stringl; n++) {
        var c1 = string.charCodeAt(n);
        var enc = null;

        if (c1 < 128) {
            end++;
        } else if (c1 > 127 && c1 < 2048) {
            enc = String.fromCharCode((c1 >> 6) | 192) + String.fromCharCode((c1 & 63) | 128);
        } else {
            enc = String.fromCharCode((c1 >> 12) | 224) + String.fromCharCode(((c1 >> 6) & 63) | 128) + String.fromCharCode((c1 & 63) | 128);
        }
        if (enc !== null) {
            if (end > start) {
                utftext += string.slice(start, end);
            }
            utftext += enc;
            start = end = n + 1;
        }
    }

    if (end > start) {
        utftext += string.slice(start, stringl);
    }

    return utftext;
}


function base64_encode (data) {
    // http://kevin.vanzonneveld.net
    // +   original by: Tyler Akins (http://rumkin.com)
    // +   improved by: Bayron Guevara
    // +   improved by: Thunder.m
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Pellentesque Malesuada
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Rafal Kukawski (http://kukawski.pl)
    // -    depends on: utf8_encode
    // *     example 1: base64_encode('Kevin van Zonneveld');
    // *     returns 1: 'S2V2aW4gdmFuIFpvbm5ldmVsZA=='
    // mozilla has this native
    // - but breaks in 2.0.0.12!
    //if (typeof this.window['atob'] == 'function') {
    //    return atob(data);
    //}
    var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,
        ac = 0,
        enc = "",
        tmp_arr = [];

    if (!data) {
        return data;
    }

    data = this.utf8_encode(data + '');

    do { // pack three octets into four hexets
        o1 = data.charCodeAt(i++);
        o2 = data.charCodeAt(i++);
        o3 = data.charCodeAt(i++);

        bits = o1 << 16 | o2 << 8 | o3;

        h1 = bits >> 18 & 0x3f;
        h2 = bits >> 12 & 0x3f;
        h3 = bits >> 6 & 0x3f;
        h4 = bits & 0x3f;

        // use hexets to index into b64, and append result to encoded string
        tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
    } while (i < data.length);

    enc = tmp_arr.join('');
    
    var r = data.length % 3;
    
    return (r ? enc.slice(0, r - 3) : enc) + '==='.slice(r || 3);

}
