/**
 * @author ajm
 * 
 * General utilities for Path101.
 */

/***
 * Shortcut for YUI selector utility
 */
function yuiQuery(query){
    return YAHOO.util.Selector.query(query);
}

/***
 * Matches the heights of two given elements. Useful for matching column heights.
 */
function matchHeights(){
    var nodes = YAHOO.util.Selector.query('dl.twoCol');
    var ht = 0;
    for(var i = 0; i < nodes.length; i++){
        if(nodes[i].offsetHeight > ht){
            ht = nodes[i].offsetHeight - YAHOO.util.Dom.getStyle(nodes[i],'padding-top') - YAHOO.util.Dom.getStyle(nodes[i],'padding-bottom'); 
        }
    }
    
    for(var i = 0; i < nodes.length; i++){
        nodes[i].style.height = ht + 'px';
    }        
}

/***
 * Clears an input of its default value
 * @param {HTMLElement} el The element we're testing
 * @param {String} txt The default text.
 */
function clearInput(el,txt){
    if(el.value == txt) el.value = '';
    el.style.color = '#000';
}

/***
 * Toggles on the edit mode of a form
 * @param {String} frm The name of the display/edit group to toggle
 */
function toggleFormEditOn(frm){
    document.getElementById('display_' + frm).style.display = 'none';
    document.getElementById('form_' + frm).style.display = 'block';
}

/***
 * Toggles on the display mode of a form
 * @param {String} frm The name of the display/edit group to toggle
 */
function toggleFormEditOff(frm,cls){
    var formNode = document.getElementById('form_' + frm);
    
    var inpts = YAHOO.util.Dom.getElementsByClassName(cls,null,formNode);

    for(var i = 0; i < inpts.length; i++){
        var val;
        var el = inpts[i];
        var idStr = 'display_' + el.id.substr(el.id.indexOf('_')+1);

        if(el.tagName.toLowerCase() == 'select'){
            val = el.options[el.selectedIndex].innerHTML;
        }
        else if(el.value.indexOf(',') > 0){
            var vals = el.value.split(', ');
            val = '';
            for(var j = 0; j < vals.length; j++){
                val += '<a href="#">' + vals[j] + '</a>';
                if(j != vals.length - 1){
                    val += ', '
                }
            }
        }
        else{
            val = el.value;
        }
        document.getElementById(idStr).innerHTML = val;
    }
    
    document.getElementById('display_' + frm).style.display = 'block';
    formNode.style.display = 'none';    
}

/***
 * Removes a selected element from a list and associated form input. 
 * @param {HTMLELement} el The element to remove
 */
function removeSelectionForm(el){
    var displayEl = document.getElementById('display_' + el.id.substr(el.id.indexOf('_')+1));
    var formEl = document.getElementById('form_' + el.id.substr(el.id.indexOf('_')+1));
    
    formEl.value = '';
    formEl.parentNode.removeChild(formEl);
    
    displayEl.parentNode.removeChild(displayEl);
}

/***
 * Advances dashboard edit/verify modal 
 */
function advanceModal(){
    document.getElementById('modal_step1').style.display = 'none';
    document.getElementById('modal_step2').style.display = 'block';
    document.getElementById('label_modalStep1').className = 'inactive';
    document.getElementById('label_modalStep2').className = '';
}

/***
 * Switches the right-hand content when a tab changes on the search results page
 * @param {Event} e Tab switch event that triggered this function call
 */
function tabSwitchContent(e){
    YAHOO.util.Dom.addClass(e.prevValue.get('labelEl').className,'noD');
    YAHOO.util.Dom.removeClass(e.newValue.get('labelEl').className,'noD');
}

/***
 * Loads a URL based on a select box's selected option
 * @param {HTMLElement} el Reference to select box
 */
function loadUrlSelect(el){
    var opt = el.options[el.selectedIndex].value;
    var param = window.location.href.match(/.*(yrs=)([0-9 a-z]?[0-9 a-z]?)(&.*=)?/);

    if(param){
        var h = window.location.href;
        var uPrefix = h.substr(0,h.indexOf(param[1])+param[1].length);
        var uSuffix = h.substr(h.indexOf(param[1])+(param[1].length+param[2].length));
        window.location.href = uPrefix + opt + uSuffix;
    }
    else{
        if(window.location.href.indexOf('?') > 0){
            window.location.href = window.location.href + '&yrs=' + opt;
        }   
        else{
            window.location.href = window.location.href + '?yrs=' + opt;
        }    
    }    
}

/***
 * Asynchronusly posts a form
 * @param {HTMLElement} frm Form to post
 */
function postForm(frm){
    YAHOO.util.Connect.setForm(frm);
    var callback = {
        success : function(o){ alert('Success!') },
        failure : function(o){ alert("We encountered an error saving your data. Please try again.")},
        error : function(o){ alert("We encountered an error saving your data. Please try again.")}
    }
    
    // Set connection, send data...
    // YAHOO.util.Connect.asyncRequest('POST',url,callback);
    alert('connecting to send data ... ')
}

/***
 * General utility for removing a path. Sends a request to appropriate URL, then removes path from DOM.
 * @param {HTMLElement} el Link we've clicked to remove path
 */
function removePath(el){
    var obj = el;
    var bgColor = YAHOO.util.Dom.getStyle(el,'backgroundColor');
    var n = obj;
    
    while(bgColor == 'transparent'){
        n = n.parentNode;
        bgColor = YAHOO.util.Dom.getStyle(n,'backgroundColor');
    }
    
    // Load up connection, etc.
    var callback = {
        success : function(o){
            var pn = obj.parentNode.parentNode;
            var anim = new YAHOO.util.ColorAnim(pn,{
                backgroundColor : { to : '#DEFF3F' }
            },
            0.35);
            var f = function(){
                new YAHOO.util.ColorAnim(pn, {
                    backgroundColor : { to : bgColor }
                },
                0.15).animate();
                pn.style.display = 'none';
            }
            anim.onComplete.subscribe(f);
            anim.animate();
        },
        failure : function(o){
            alert("We've encountered while adding your path. Please try again.")
        },
        error : function(o){
            alert("We've encountered while adding your path. Please try again.")
        }
    }  
    
    // YAHOO.util.Connect.asyncRequest('GET',pathurl + el.id,callback,null);
    callback.success();    
}

/***
 * Creates a "trash" message and removes a message from the inbox
 * @param {HTMLElement} msg Container of message
 */
function trashMessage(msg){
    var el = document.getElementById(msg.substr(msg.indexOf('_')+1));
    highlightAndRemove(el);
    addToTrash(el);
}

/***
 * Moves a message from the trash to the inbox
 * @param {HTMLElement} msg Container of message
 */
function inboxMessage(msg){
    var el = document.getElementById(msg.substr(msg.indexOf('_')+1));
    highlightAndRemove(el);
    addToInbox(el);
}

/***
 * Highlights message, removes its HTML from parent
 * @param {HTMLElement} msg Container of message
 */
function highlightAndRemove(msg){
    var bgColor = YAHOO.util.Dom.getStyle(msg,'backgroundColor');
    var n = msg;    
    
    while(bgColor == 'transparent'){
        n = n.parentNode;
        bgColor = YAHOO.util.Dom.getStyle(n,'backgroundColor');
    }
    
    var pn = msg.parentNode;
    var anim = new YAHOO.util.ColorAnim(pn,{
        backgroundColor : { to : '#DEFF3F' }
    },
    0.35);
    
    var f = function(){
        new YAHOO.util.ColorAnim(pn, {
            backgroundColor : { to : bgColor }
        },
        0.15).animate();
        pn.removeChild(msg);
    }
    anim.onComplete.subscribe(f);
    anim.animate();        
}

/***
 * Templates a message and adds it to "trash" box container
 * @param {HTMLElement} msg Message to add
 */
function addToTrash(msg){
/*
    msg looks like:
    <li>
        <div class="left">
            Mar 10, 2007
        </div>
        <div class="right">
            <strong>Path101 Alert</strong><br>
            <h4 class="sans"><a href="#">This week's blog topic is: <strong>What's the secret to becoming a fire eater?</strong></a></h4>
            <div class="links"><a href="#">Blog now</a> | <a href="javascript:void(0)" onclick="trashMessage(this.parentNode.parentNode);">Delete</a></div>
        </div>
        <div class="clear">&nbsp;</div>
    </li>
   trash looks like:
   <li>
     <div class="left">
         Dec 10, 2007
     </div>
     <div class="right">
         <strong><a href="#">Alvaro</a></strong> answered your question<br>
         <h4 class="sans"><a href="#"><strong>What's the secret to becoming a fire eater?</strong></a></h4>
         <div class="links"><a href="javascript:void(0)" onclick="inboxMessage(this.parentNode.parentNode);">Move to Inbox</a> | <a href="javascript:void(0)" onclick="permDelete(this.parentNode.parentNode.id);">Delete Now</a></div>
     </div>
     <div class="clear">&nbsp;</div> 
   </li>  
*/    
//k = msg.innerHTML;
//k = k.replace(/<a href=".*">[Blog now|Read response]<\/a>/i,'<a href="javascript:void(0)" onclick="inboxMessage(this.parentNode.parentNode);">Move to Inbox</a>');
    var links = YAHOO.util.Selector.query('div.right div.links',msg);
    var nd = links[0];
    var totalLis = YAHOO.util.Selector.query('ul#trashBin li').length;
    
    nd.innerHTML = '<a href="javascript:void(0)" id="toInbox_'+totalLis+'" onclick="inboxMessage(this.id);">Move to Inbox</a> | <a href="javascript:void(0)" id="permDelete_'+totalLis+'" onclick="permDelete(this.id);">Delete Now</a>';

    msg.id = 'trash' + totalLis;
    
    sortAndAppendLi(document.getElementById('trashBin'),msg);
}

/***
 * Templates a message and adds it to inbox container
 * @param {HTMLElement} msg Message to add
 */
function addToInbox(msg){
/*
    msg looks like:
    <li>
        <div class="left">
            Mar 10, 2007
        </div>
        <div class="right">
            <strong>Path101 Alert</strong><br>
            <h4 class="sans"><a href="#">This week's blog topic is: <strong>What's the secret to becoming a fire eater?</strong></a></h4>
            <div class="links"><a href="#">Blog now</a> | <a href="javascript:void(0)" onclick="trashMessage(this.parentNode.parentNode);">Delete</a></div>
        </div>
        <div class="clear">&nbsp;</div>
    </li>
   trash looks like:
   <li>
     <div class="left">
         Dec 10, 2007
     </div>
     <div class="right">
         <strong><a href="#">Alvaro</a></strong> answered your question<br>
         <h4 class="sans"><a href="#"><strong>What's the secret to becoming a fire eater?</strong></a></h4>
         <div class="links"><a href="javascript:void(0)" onclick="inboxMessage(this.parentNode.parentNode);">Move to Inbox</a> | <a href="javascript:void(0)" onclick="permDelete(this.parentNode.parentNode.id);">Delete Now</a></div>
     </div>
     <div class="clear">&nbsp;</div> 
   </li>  
*/    
    var links = YAHOO.util.Selector.query('div.right div.links',msg);
    var nd = links[0].innerHTML;
    var totalLis = YAHOO.util.Selector.query('ul#inbox li').length;
    
    nd.innerHTML = '<div class="links"><a href="#">Blog now</a> | <a href="javascript:void(0)" id="link_trash'+totalLis+'" onclick="trashMessage(this.id);">Delete</a></div>';
    msg.id = 'trash' + totalLis;
    
    sortAndAppendLi(document.getElementById('inbox'),msg);
}

/***
 * Sorts an item by date and adds it to proper location in inbox/trash page
 * @param {HTMLElement} par Parent element we'll be adding to
 * @param {HTMLElement} el Element to add
 */
function sortAndAppendLi(par,el){
    var els = par.getElementsByTagName('li');
    lis = YAHOO.util.Selector.filter(els,'[id]');
    
    var elDate = YAHOO.util.Selector.query('div.left',el)[0].innerHTML;
    var elDates = elDate.match(/(\w\w\w)\s(\w\w?),\s?(\w\w\w\w)/);

    for(var i = 0; i < lis.length; i++){
        var dt = YAHOO.util.Selector.query('div.left',lis[i])[0].innerHTML;
        var dtDates = dt.match(/(\w\w\w)\s(\w\w?),\s?(\w\w\w\w)/);

        if(parseInt(elDates[3]) > parseInt(dtDates[3])){
            console.log('year')
            continue;
        }
        else{
            if(dates[elDates[1]] > dates[dtDates[1]] && parseInt(elDates[3]) > parseInt(dtDates[3])) {
                console.log('month')
                continue;
            }
            else if(parseInt(elDates[2]) > parseInt(dtDates[2])){
                //par.insertBefore(el,lis[i+1]);
                console.log('day')
                continue;
            }
            else{
                console.log('insert')
                par.insertBefore(el,lis[i]);
                return;
            }
        }
    }
}

/***
 * Swaps example image, highlights appropriate user on registration page
 * @param {Event} e (Optional) Event that triggered this action 
 * @param {HTMLElement} o Element that triggered this action
 */
function swapBg(e,o){
    if(! o) o = this;
    
    var newSrc = MEDIA_URL + '/media/images/fpo/rollover' + o.src.substr(o.src.indexOf('_'));
    if(document.getElementById('swapImg').src.indexOf(newSrc) > -1){
        return true;
    }
    
    // Swap big background image. Use a loading icon as a placeholder so we
    // make sure image is loaded before showing it.
    var anim = new YAHOO.util.Anim('swapImg',{
       opacity : { to : 0 } 
    },
    0.15,
    YAHOO.util.Easing.easeIn);
    
    var f = function(){
        var i = new Image();

        i.onload = function(){
            document.getElementById('swapImg').src = i.src;
            new YAHOO.util.Anim('swapImg',{
                opacity : { to : 1 }
            },
            0.15,
            YAHOO.util.Easing.easeOut).animate();
        }                    

        i.src = newSrc;
    }
    
    anim.onComplete.subscribe(f);  
    anim.animate();              
    
    // Make sure there aren't any other background highlights on, as can happen with the pre-loaded first one
    var bgs = yuiQuery('div#reg_images div img.bg_hilite');
    for(var b = 0; b < bgs.length; b++){
        bgs[b].style.display = 'none';
    }

    // Highlight appropriate image
    o.parentNode.getElementsByTagName('img')[1].style.display = 'block';
    
}

function checkAll(field)
{
for (i = 0; i < field.length; i++)
	field[i].checked = true ;
}

function uncheckAll(field)
{
for (i = 0; i < field.length; i++)
	field[i].checked = false ;
}

function ajaxRequest(url, el, err_el, message) {

	var callback = {
		success: function(o) {
			//document.getElementById('account').action = url;
			document.getElementById(el).innerHTML = message
		},
		failure: function(o) {
			document.getElementById(err_el).innerHTML = ("Oops. Please try again later."+o.responseText); 
		}
	}
	var transaction = YAHOO.util.Connect.asyncRequest("GET", url, callback, null);

}

function ajaxGet(url, el, err_el) {

	var callback = {
		success: function(o) {
			//document.getElementById('account').action = url;
			document.getElementById(el).innerHTML = results = _getData(o.responseText)
		},
		failure: function(o) {
			document.getElementById(err_el).innerHTML = ("Oops. Please try again later."+o.responseText); 
		}
	}
	var transaction = YAHOO.util.Connect.asyncRequest("GET", url, callback, null);

}

function toggle(el){
     var obj = YAHOO.util.Dom.get(el);
     if(YAHOO.util.Dom.getStyle(obj,'display') == 'block'){
         YAHOO.util.Dom.setStyle(obj,'display','none');
     }
     else{
         YAHOO.util.Dom.setStyle(obj,'display','block');    
     }                 
}

function updateIndustryDropDowns() {
	$(document).ready(function () {

	$("#id_industry").change( function(){
		url = "/advice/api/industries/get_subindustries/" + $(this).val() + "/"
		$.getJSON(url,
		        function(data){
				   //alert(data.length);
				   var options = '';
				   for (var i = 0; i < data.length; i++) {
					 //alert(data[i].fields.subindustry)
				     options += '<option value="' + data[i].pk + '">' + data[i].fields.subindustry + '</option>';
				   }
				   $("select#id_subindustry").html(options);
		        });
		});

	});
}

function get_loading_image(type) {
	if (type == 'large') {
		img = '/icons/loading_med.gif';
	}
	else {
		img = '/icons/loading.gif';
	}
	return "<img src='"+window.MEDIA_URL+"/media/images"+img+"'/>";
}

function set_loading_image(type, alt_div) {
	if (alt_div) {
		document.getElementById(alt_div).innerHTML  = get_loading_image(type)
	}
	else {
		document.getElementById('loading').innerHTML  = get_loading_image(type)
	}
	
}

function unset_loading_image(alt_div) {
	if (alt_div) {
		document.getElementById(alt_div).innerHTML  = ""
	}
	else {
		document.getElementById('loading').innerHTML  = ""
	}
}


//function clickBg(e, o) {
//	if(! o) o = this;
//	var start = o.src.indexOf('_')+1
//    var go = o.src.substr(start);
//	var end = go.length-4
//	var url = go.substr(0, end)
//	document.location.href = "/"+url+"/";
//}

// Date sorting and manipulation
var dates = {};
dates.Jan = 1;
dates.Feb = 2;
dates.Mar = 3;
dates.Apr = 4;
dates.May = 5;
dates.Jun = 6;
dates.Jul = 7;
dates.Aug = 8;
dates.Sep = 9;
dates.Oct = 10;
dates.Nov = 11;
dates.Dec = 12;
    
// fix for indexOf in ie
//if(!Array.indexOf){
//	    Array.prototype.indexOf = function(obj){
//	        for(var i=0; i<this.length; i++){
//	            if(this[i]==obj){
//	                return i;
//	            }
//	        }
//	        return -1;
//	    }
//}
