/**
* Destroy all Popper widgets on the page. Most often used
* when switching to another page of thumbs. This saves resources, and
* also gives dojo a clean slate when coming back to this page of results.
*/
function destroy_poppers(){
    var poppers = getPopperWidgets();
    for (i in poppers){
        var popper = poppers[i];
        //parents cause problems for destroying things ~aoliver
        popper.parent = null;
        popper.destroy();
    }
}

/*
* get all popper widget instances on the page
*/
function getPopperWidgets(){
    which_popper = getPopper();
    return dojo.widget.byType(which_popper);
}

function init_mom_poppers(){
	var which_popper = getPopper();
	var foo = "ag.widget."+which_popper;
	//dojo.debug('requiring: ' + foo);
	dojo.require(foo);
        for (i in products){
            productNumber = products[i];
            productNode = dojo.byId(productNumber+'');
            smallThumbNode = dojo.byId('small-thumb-' + productNumber);
            dojo.event.connect(smallThumbNode, 'onmouseover', ThumbManager, 'popThumb');
        }
    }

var ThumbManager = {
    popThumb: function(e){
    	//dojo.debug(e.target.id);
        createPopper(e.target.id, which_popper);
        }
};

function createPopper(smallThumbId, which_popper){
        productNumber = smallThumbId.split('-')[2];
        //dojo.debug('productNumber: ' + productNumber);
        
        if( dojo.widget.byId("productw-" + productNumber) != null){
            w = dojo.widget.byId("productw-" + productNumber);
            return;
        }
        else{
            //dojo.debug('creating widget: '+which_popper);
            w = dojo.widget.createWidget(which_popper, {
                                                    id:"productw-" + productNumber,
                                                    productNumber:productNumber,
                                                    connectId:smallThumbId, 
                                                    dataId:'fid-li-' + productNumber,
                                                    fromNode:true,
                                                    imghost:imghost,
                                                    toggle:"fade"
                                                    });
        }
        w._onHover(); //Fire the hover event so the popup appears
    }
    
function getPopper()
{
    //popper can be something like "printables" or "downloads"
    //the outcome will be "PrintablesPopper" or "DownloadsPopper";
    try
    {
        //capitalize first character
        which_popper = popper.charAt(0).toUpperCase();
        //tack on rest of string
        which_popper += popper.substring(1).toLowerCase();
    }
    catch(e){ which_popper = ''; }
    //make it official
    which_popper += "Popper";
    //dojo.debug('return from getPopper(): ' + which_popper);
    return which_popper;
}

function moms_success(req)
{
	uncover_moms();
	products = new Array();
	var mom_list = document.getElementById('product_list');
	var next_arrow = document.getElementById('agi-next-arrow');
	var prev_arrow = document.getElementById('agi-prev-arrow');
	
	eval("var mom_results = " + req.responseText);
	
	products = mom_results.mom_ids;
	
	mom_list.innerHTML = mom_results.moms_html;
	
	destroy_poppers();
	init_mom_poppers();
			
	if (mom_page > 1)
		prev_arrow.style.visibility="visible";
	else
		prev_arrow.style.visibility="hidden";

	if (mom_results.has_more == 1)
		next_arrow.style.visibility="visible";
	else
		next_arrow.style.visibility="hidden";
}

function share_page(fid, type)
{
	if (!fid)
		fid = ""
	if (!type)
		type= ""
		
	lightbox(ahost + '/mothersday2007/share.pd?fid=' + fid + '&t=' + type,{width:440});
}


function report_page(fid)
{
	if (!fid)
		fid = ""
		
	lightbox(ahost + '/mothersday2007/report.pd?fid=' + fid,{width:440});
}

function search_enter(element)
{
	if (element.value.toLowerCase() == "search by city" 
		|| element.value.toLowerCase() == "first name" 
		|| element.value.toLowerCase() == "last name"
		|| element.value.toLowerCase() == "state"
		|| element.value.toLowerCase() == "province"
		|| element.value.toLowerCase() == "county")
		element.value = "";
}

function select_state()
{
	state_select = document.getElementById('state');

	options = state_select.childNodes

	for (var i = 0; i < options.length; i++)
	{
		if (options[i].tagName == "OPTION" && options[i].value.toLowerCase() == initial_state.toLowerCase())
			options[i].selected = true;
	}
}

function select_country(initial_country)
{
	country_select = document.getElementById('country');

	options = country_select.childNodes

	for (var i = 0; i < options.length; i++)
	{
		if (options[i].tagName == "OPTION" && options[i].value.toLowerCase() == initial_country.toLowerCase())
			options[i].selected = true;
	}
}

function fix_share_values()
{
    var wdl = new WombatDataLoader();
    wdl.load_address_data();

	var share_toemail = document.getElementById('toemail');
    var toemail = new TextAreaComplete('toemail');
	
	share_toemail.onfocus = function(e){
		var widget = get_event_source(e)
		if (widget.value == "Enter email addresses separated by commas here...")
			widget.value = "";
	}
	try {
		share_fromemail = document.getElementById('share_email');
		share_fromemail.onfocus = function(e){
			var widget = get_event_source(e)
			if (widget.value == "your email address")
				widget.value = "";
		}
	} catch (e) {}
	
}

function ShareForm()
{
	var f_share = this;
	
	this.form = document.getElementById('send-share-form');
	this.request = new Requester('', 'POST', true, true);
	this.errors = new Errors('lightbox_message_area');
	this.submitting = false;
	
    this.submit = function() {
    	this.email_valid = true;
    	f_share.errors = new Errors('lightbox_message_area');
    	if (document.getElementById('share_email'))
    	{
    		if (document.getElementById('share_email').value == "your email address")
	    		document.getElementById('share_email').value = "";
	    		
			email_value = document.getElementById('share_email').value;
			try {
				email_valid = validate_email(email_value, 255, true);
			} catch (e) {
				email_valid = false;
			}
			
			if (!email_valid)
			{
	        	f_share.submitting = false;
   	    		f_share.disable(false);
       			f_share.errors.add(new Error("", "Please enter a valid email address."));
				f_share.errors.display(true);
				return false;
			}
		} 
    		
    	var toemailform = document.getElementById('toemail')
    	if (toemailform.value == "Enter email addresses separated by commas here...")
    		toemailform.value = "";
    	
        if (!this.form) return false;
		f_share.errors.display(false);
		f_share.errors = new Errors('lightbox_message_area');
        this.disable(true);
        var strQuery = new Requester().formToQuery(this.form);
        if (this.submitting) return;
        this.submitting = true;
        this.request.url = ahost+'/mothersday2007/send_share.pd';
        this.request.onsuccess = this.onsuccess;
        this.request.onerror = this.onerror;
        this.request.sendRequest(strQuery);
    }
    
    this.onerror = function(req) {
        f_share.submitting = false;
        f_share.disable(false);
       	f_share.errors.add(new Error("", "There was an error sending your message.<br>Please try again in a few minutes."));
		f_share.errors.display(true);
    }

	this.show_success = function()
	{
		var buttons = document.getElementById('agi-share-buttons');
		var header = document.getElementById('share-header');
		var copy = document.getElementById('share-copy');
		var close_button = document.getElementById('agi-close-button');
		var to_email = document.getElementById('to-email-row');
		var message = document.getElementById('message-row');

		buttons.style.display = "none";
		header.style.display = "none";
		copy.style.display = "none";
		try {
			var from_email = document.getElementById('from-email-row');
			from_email.style.display = "none";
		} catch (e){}
		to_email.style.display = "none";
		message.style.display = "none";

		close_button.style.display = "block";
		f_share.errors.add(new Error("", "Thank you. Your email has been sent."));
		f_share.errors.display(true);
		
	}
	
    this.onsuccess = function(req) {
        eval('var results = '+req.responseText);
        f_share.submitting = false;
        if (results.status == 1) {
        	f_share.show_success();
            //hideLightbox();
        } else {
            f_share.disable(false);
            for (var i = 0; i < results.errors.length; i++)
            {
            	results.errors[i] = results.errors[i].replace("your card", "your message");
	       		f_share.errors.add(new Error("", results.errors[i]));
	       	}
			f_share.errors.display(true);
        }
    }

    this.disable = function(disabled) {
        if (!this.form) return false;
        for (var i=0; i<this.form.elements.length; i++) {
            if (this.form.elements[i].type != 'hidden') {
                this.form.elements[i].disabled = disabled;
                if (this.form.elements[i].type != 'button')
                    this.form.elements[i].style.background = '#FFFFFF';
            }
        }
    }

	this.submit_button = document.getElementById('submit_share');
	this.submit_button.onclick = function() { f_share.submit(); }
}



function ReportForm()
{
	var f_report = this;
	
	this.form = document.getElementById('send-report-form');
	this.request = new Requester('', 'POST', true, true);
	this.errors = new Errors('lightbox_message_area');
	this.submitting = false;
	
    this.submit = function() {
        if (!this.form) return false;
		f_report.errors = new Errors('lightbox_message_area');
    	this.email_valid = true;
    	if (document.getElementById('report_email'))
    	{
			email_value = document.getElementById('report_email').value;
			try {
				email_valid = validate_email(email_value, 255, true);
			} catch(e) {
				email_valid = false;
			}
			if (!email_valid)
			{
	        	f_report.submitting = false;
   	    		f_report.disable(false);
       			f_report.errors.add(new Error("", "Please enter a valid email address."));
				f_report.errors.display(true);
				return false;
			}
		} 

		f_report.errors.display(false);
        this.disable(true);
        var strQuery = new Requester().formToQuery(this.form);
        if (this.submitting) return;
        this.submitting = true;
        this.request.url = ahost+'/mothersday2007/send_report.pd';
        this.request.onsuccess = this.onsuccess;
        this.request.onerror = this.onerror;
        this.request.sendRequest(strQuery);
    }
    
    this.onerror = function(req) {
        f_report.submitting = false;
        f_report.disable(false);
       	f_report.errors.add(new Error("", "There was an error sending your message.<br>Please try again in a few minutes."));
		f_report.errors.display(true);
    }

    this.onsuccess = function(req) {
        eval('var results = '+req.responseText);
        f_report.submitting = false;
        if (results.status == 1) {
            hideLightbox();
            try
            {
            	document.getElementById('agi-content').innerHTML = '<div style="color: #9D0017; text-align: center; font-size: 20px; line-height: 1.1em;">Thank You.  Your Report has been received.<br>Click <a href="' + ahost + '/mothersday2007/">here</a> to return to The Many Faces of Moms.</div>';
            } catch (e){}
        } else {
            f_report.disable(false);
            for (var i = 0; i < results.errors.length; i++)
            {
            	results.errors[i] = results.errors[i].replace("your card", "your message");
	       		f_report.errors.add(new Error("", results.errors[i]));
	       	}
			f_report.errors.display(true);
        }
    }

    this.disable = function(disabled) {
        if (!this.form) return false;
        for (var i=0; i<this.form.elements.length; i++) {
            if (this.form.elements[i].type != 'hidden') {
                this.form.elements[i].disabled = disabled;
                if (this.form.elements[i].type != 'button')
                    this.form.elements[i].style.background = '#FFFFFF';
            }
        }
    }

	this.submit_button = document.getElementById('submit_report');
	this.submit_button.onclick = function() { f_report.submit(); }
	try {
		share_fromemail = document.getElementById('report_email');
		share_fromemail.onfocus = function(e){
			var widget = get_event_source(e)
			if (widget.value == "your email address")
				widget.value = "";
		}
	} catch (e) {}
	
}


function hide_card_print()
{
	hrefs = document.getElementsByTagName('a')

	for (var i = 0; i < hrefs.length; i++)
	{
    	if (hrefs[i].href.indexOf("javascript:OpenNewWindow") == 0)
        	hrefs[i].style.display = "none";
	}
}


function center_printable()
{
	try {
		do_center_printable();
	} catch(e) {}
}

function do_center_printable(start_x, start_y)
{
	var photolink = document.getElementById('photofocus_id');
	var printable = document.getElementById('printable_image');
	
	var totalwidth = 550;
	var totalheight = 320;
		
	var maxwidth = 250;
	var maxheight = 250;
	
	var kids = photolink.childNodes;
	for (var i = 0; i < kids.length; i++)
	{
		if (kids[i].tagName == "IMG")
			var photo = kids[i];	
	}
	
	var width = photo.scrollWidth;
	var height = photo.scrollHeight;
	
	if (width > maxwidth)
	{
		ratio = maxwidth / width;
		width = maxwidth;
		height = Math.floor(height * ratio);
	}

	if (height > maxheight)
	{
		ratio = maxheight / height;
		height = maxheight;
		width = Math.floor(width * ratio);
	}

	var left = Math.floor((totalwidth - start_x) - (maxwidth - width)/2);
	//var top = Math.floor((totalheight - start_y - maxheight) - (maxheight - height)/2);
	var top = Math.floor((totalheight - height)  - start_y - (maxheight - height)/2);
	
	printable.style.width = width + "px";
	printable.style.height = height + "px";
	printable.style.left = "-" + left + "px";
	printable.style.top = "-" + top + "px";
}


function populate_state(mom_country, mom_state)
{
	var country = document.getElementById('country');
	var state = document.getElementById('state');
	var freeform = document.getElementById('state-text');
	
	if (!mom_country)
		var mom_country = country.value;
	var state_array = arrCtry[mom_country];
	select_country(mom_country);
	
		
	var type = state_array[0];
	var values = state_array[1];
	
	if (!mom_state)
		var mom_state = (type == "") ? "state" : type;

	type = (type == "") ? "state" : type;
	
	try
	{
		var state_label = document.getElementById('state-label');
		state_label.innerHTML = type + ":";
	} catch(e) {}
	if (values.length == 0)
	{
		freeform.value = mom_state;
		state.style.display = "none";
		freeform.style.display = "inline";
		state.options[0].selected = true;
	} else if (values.length > 0) {
		fill_select(state, type.toLowerCase(), values, mom_state, true);
		state.style.display = "inline";
		freeform.style.display = "none";
		freeform.value = "";
	}
}

function fill_select(select_field, title, opts, selected, clear)
{
	for (var j = select_field.options.length - 1; j > -1; j--)
				select_field.remove(j);

	select_field.appendChild(make_option("", title));		

	if (opts)
		for (var i=0; i < opts.length; i++)
		{
			if (opts[i][1] == selected)
				var isSelect = true;
			else
				var isSelect = false;
				
			select_field.appendChild(make_option(opts[i][1], opts[i][0], isSelect));
			try {
				select_field.options[i + 1].selected = isSelect;
			} catch(e) {}
		}
}

function make_option(strValue, strDisplay)
{
	if (!strDisplay) {strDisplay = strValue;}

	var objOption = document.createElement("option");
	objOption.setAttribute("value", strValue);
	objOption.appendChild(document.createTextNode(strDisplay));
	
	return objOption;
}

function do_print(fid, source)
{
	var request = new Requester(ahost+'/mothersday2007/track_print.pd', 'POST', true, false);
    var strQuery = "fid=" + fid + "&s=" + source
    
    request.sendRequest(strQuery);
	window.print();	
}

function cover_moms()
{
	var box = document.getElementById("agi_mdgridmain");
	var offset = moms_position(box);
        
	var dimmer = document.getElementById("agi_mdloading");
	var message = document.getElementById("agi_mdloadmessage");

	dimmer.style.width = (box.clientWidth - 1) + "px";
	dimmer.style.height = box.clientHeight + "px";
	dimmer.style.top = offset.top + "px";
	dimmer.style.left = (offset.left + 1) + "px";
	message.style.paddingTop = (box.clientHeight/2 - 25) + "px";
	message.style.width = (box.clientWidth - 1) + "px";
	dimmer.style.display = "block";
}

function uncover_moms()
{
	var dimmer = document.getElementById("agi_mdloading");
	dimmer.style.display = "none";
	// just in case this is the initial load and we need to show the grid
	dojo.byId('agi_mdgrid').style.visibility = "visible";
	
}

function moms_position(box)
{
	var elem = box;
	var result = new Object();
	result.left = 0;
	result.top = 0;

	//Walk up the DOM and add up all of the offset positions.
	while (elem.offsetParent && elem.tagName.toUpperCase() != 'BODY')
	{
		if (elem.id != "lightbox")
		{
			result.left += elem.offsetLeft;
			result.top += elem.offsetTop;
		}
		elem = elem.offsetParent;
	}

	result.left += elem.offsetLeft;
	result.top += elem.offsetTop;
	return result;
}

function highlight_mom()
{
	var thumbNode = dojo.byId('fid-li-' + fid);
	
	var thumb = (dojo.html.getElementsByClass("thumb_url", thumbNode, "dd" )[0]).firstChild.nodeValue
	var first_name = (dojo.html.getElementsByClass("first_name", thumbNode, "dd" )[0]).firstChild.nodeValue
	var last_name = (dojo.html.getElementsByClass("last_name", thumbNode, "dd" )[0]).firstChild.nodeValue
	var location = (dojo.html.getElementsByClass("location", thumbNode, "dd" )[0]).firstChild.nodeValue
	var country = (dojo.html.getElementsByClass("country", thumbNode, "dd" )[0]).firstChild.nodeValue
	thumb = imghost + thumb;

	document.getElementById("large-thumb-" + fid + "-2").src = thumb;
	
	dojo.byId('agi-mdhighname').innerHTML = first_name + " " + last_name;
	dojo.byId('agi-mdhighlocation').innerHTML = location + "<br/>" + country;
}

/*
*   initialize browser history behavior
*/
initBackButton = function(){
    dojo.require("dojo.undo.browser");
    dojo.require("dojo.io.*");
    var bookmarkId = location.hash;
    if (bookmarkId && bookmarkId.length >1)
    {   	
        bookmarkId = 1 * bookmarkId.substring(1,bookmarkId.length); //get rid of the #     
		if (mom_page != bookmarkId)
		{	
			dojo.byId('agi_mdgrid').style.visibility = "hidden";
        	setPage(bookmarkId);
        	mom_page = bookmarkId;
        }
    }
    else{
        bookmarkId = mom_page;
    }
    dojo.undo.browser.setInitialState( new ApplicationState(bookmarkId));
};


/**
* ApplicationState is used for managing the browser history,
* so that as the user pages through ajax-y content, the browser
* "back" button goes back through various pages of results, rather
* than to the page prior to the category page
* see http://manual.dojotoolkit.org/WikiHome/DojoDotBook/Book0
*/
ApplicationState=function(pageNumber){
    if( !pageNumber){
        pageNumber = 1;
    }
    this.pageNumber = pageNumber;
    this.changeUrl = pageNumber;
}

ApplicationState.prototype.back = function(){
    setPage(this.pageNumber); 
    //nasty little hack to make IE happy about backing into the initial page
    if(dojo.undo.browser.historyStack.length == 0 && dojo.render.html.ie){
       location.hash='';
    }
}

ApplicationState.prototype.forward = function(){
        setPage(this.pageNumber);
}

/*
* Back-button compatible way to record app state, then
* change the page.
*/
function goPage(pagenumber){
    var appState = new ApplicationState(pagenumber);
    dojo.undo.browser.addToHistory(appState);
    setPage(pagenumber);
}

function setPage(pageNumber)
{
	cover_moms()
	mom_page = pageNumber;
	next_page = pageNumber + 1;
	prev_page = pageNumber - 1;
	var req = new Requester(ahost + "/mothersday2007/getmoms.pd", "POST", true, true);
	req.sendRequest("io=" + pageNumber + "&fid=" + fid);	
	req.onsuccess = moms_success;
	req.onerror = uncover_moms;
}

function init_highlight_mom()
{
	highlight_mom();
	init_mom();
}

function init_mom()
{
	initBackButton();
	init_mom_poppers();
	populate_state('USA');
}
